Coverage that states its vintage

17regions
1,634cities & municipalities
42,046barangays
43,660verified centroids

Philippines

85 provinces · Makati marked

The Philippines: 85 province outlines dissolved from 42,027 barangay polygons, with Makati marked. Drawn from FMIS boundary data — no map tiles.

Makati

33 barangays · the level FMIS resolves to

Makati City: all 33 barangay boundaries at full detail, drawn from the same polygons that answer a geocode call.
Both panels are drawn from the same PSA/NAMRIA polygons that answer a /v1/geocode call — generated by scripts/build_landing_map.py, not traced. Still no map tiles and no third-party requests. The national panel is simplified to the pixel and omits islands smaller than one pixel, including the 0.3 km² Kalayaan group at 114.3°E — the API resolves them; this picture cannot draw them. The Makati panel drops nothing: all 33 barangays are there.

PSGC-aligned administrative data with PSA/NAMRIA boundary geometry. Every data artifact ships with its lineage — the git SHA and checksums of what produced it — because "which vintage answered this?" should never be a mystery.

Philippine-first geocoding & routing API

Addresses, resolved honestly.

FMIS resolves free-text Philippine addresses to PSGC codes — region, province, city, barangay — with calibrated confidence, an execution trace, and a typed outcome for every request. When six municipalities share a name, it doesn't gamble. It refuses, and tells you what would settle it.

Accuracy counts every address — including the ones we refuse rather than guess — as a miss. When we do answer, city precision is 99.82%. Measured on a 45,695-address benchmark with synthetic address text; real-world messy input is not yet measured. We publish the method with the number — how we measure.

96.08%
city identity accuracy, over all addresses
89.20%
barangay identity accuracy, right barangay by code
42,046
barangays under coverage
POST /v1/geocode
"admin_areas": [
  { "code": "034903002", "name": "Aduas Centro" },
  { "code": "034903000", "name": "Cabanatuan City" }
],
"outcome": "resolved",
"confidence": 0.95,
"claim_level": { "level": 4, "label": "barangay" },
"boundary_risk": {
  "distance_to_edge_m": 165.0, "at_risk": false
},
"escalation": "none",
"trace": [ 4 stages · 3.4 µs ]

Codes, never names

Every answer is a PSGC code, not a string match. Names repeat by the hundreds across the archipelago; codes don't. That single rule removes the failure class that breaks PH geocoding.

Refuses to guess

An ambiguous address returns the candidate list and what would disambiguate it — never a confident coin-flip. A wrong answer costs a failed delivery; a refusal costs one clarifying question.

Every claim is audited

Each response carries its execution trace and a geometry check: how far the point sits from the edge of the area it claims. Claims near a boundary say so before dispatch, not after a dispute.

Built for the last kilometer

Motorcycle-profile routing tuned for Philippine streets — tollways excluded for <400cc, alley-aware — with ETAs that state their assumptions instead of hiding them.

One request, one typed answer

No nulls to interpret, no guessing what a 200 means. Every response lands in the same envelope with five questions answered:

outcome

resolved · partially_resolved · unresolved — an unresolved answer is a valid answer, returned as one, not disguised as an error.

confidence × claim_level

Two separate axes: how likely the claim is right, and how specific it dares to be. Dispatch can demand both; analytics can accept less.

escalation

Who can unstick this — none, ask the user for a pin, or an operator data gap. Your app always knows the next move.

What "resolved" actually looks like

One real address, resolved by FMIS: Argos Street, Valle Cruz, Cabanatuan City. Everything drawn here is FMIS's own data — the barangay boundary, the named street, and the two points.

  • The area centroid — where geocoders put you when all they know is the barangay. Here it lands in a field.
  • The street-matched pin — where FMIS puts you, because the address named a street and FMIS knows where that street is.

The gap is 913 metres. That is the difference between a rider arriving and a rider calling.

area centroid a rice field on Argos Street 913 m apart
Barangay Valle Cruz · boundary, street and pins rendered from FMIS data. No map tiles, no third-party requests.

Why refusal is a feature

There are six municipalities named Burgos in the Philippines. A geocoder that returns one of them with 95% confidence is right one time in six — and your rider finds out which time, at the gate, with the customer on the phone.

FMIS returns the six candidates, each with its province, and asks for the one fact that settles it. In benchmark, that honesty converts over a thousand confidently-wrong answers into precise questions.

Ambiguity is resolved by information — a province, a landmark, a confirmed pin — never by a model's opinion.

the refusal envelope
"outcome": "unresolved",
"reason": "ambiguous_admin_area",
"escalation": "user_input",
"ambiguous": {
  "name": "Burgos", "candidates": 6,
  "options": [
    { "name": "Burgos", "parent": "Ilocos Norte" },
    { "name": "Burgos", "parent": "Ilocos Sur" },
    { "name": "Burgos", "parent": "La Union" },
    … 3 more
  ]
}

How we measure — accuracy, not just precision

Two questions have two different answers, and most geocoders quote you the flattering one. We report both, side by side.

City identity — accuracy
96.08% right city over all 45,695 addresses, counting every refusal as a miss.
City identity — precision
99.82% right city over the addresses we actually answered. The gap between the two is the refusals — the guesses we chose not to make.
Barangay identity — accuracy
89.20% right barangay by PSGC code, over all addresses. A name that matches while the code points elsewhere scores as wrong.

All figures are on a frozen 45,695-address benchmark whose address text is synthetic — generated from the same PSGC data the resolver reads, so it flatters us. Real-world messy input (landmark-only, misspelled, informal) is not yet measured; a field benchmark against independently-verified addresses is in progress. We would rather show you the honest denominator than a number measured on our home turf.

Running in one request

No SDK, no client library, no map tiles to load. One POST, one typed envelope back.

1

Send structure, not a sentence

If your form already separates city and barangay, keep them separate. Structured input scores 100%; the same fields joined into one string score 6.6%.

2

Read outcome first

Three values, not an exception. unresolved is a 200 — a valid answer that names what would settle it.

3

Dispatch on the verdict

Send the customer pin too and FMIS cross-examines it against the address. match means dispatch on the pin.

curl
curl -X POST https://api.fmis.world/v1/geocode \
  -H "Authorization: Bearer $FMIS_KEY" \
  -H "content-type: application/json" \
  -d '{
    "components": {
      "admin_codes": { "city": "034903000", "barangay": "034903083" },
      "line1": "123 Argos Street"
    },
    "customer_pin": { "lat": 15.4724, "lng": 120.98729 }
  }'

13 endpoints, all documented. Geocode, reverse, route, ETA, dispatch, batch, telemetry, and the administrative hierarchy — request a key for the full integration guide.

Where FMIS wins, and where it doesn't

A comparison that names its own losses is the only kind worth reading.

FMIS compared with global geocoding providers
CapabilityFMIS GoogleMapboxNominatim
PSGC codes returned every responsenonono
Refuses when ambiguous typed unresolvedbest guess ranked guessranked guess
Execution trace per call every responsenonono
Boundary-risk geometry distance to edgenonono
Barangay-level coverage 42,046partialpartialpartial
Motorcycle profile, <400cc rules yes, tollway-awarenonon/a
Global coverage Philippines onlyworldwideworldwideworldwide
House-number precision street levelrooftoprooftopvaries
Autocomplete-as-you-type not yetyesyesno

Two honest losses. FMIS is Philippines-only, and no PH dataset maps house numbers to coordinates — best case is the correct street. If you need rooftop precision worldwide, buy Google. If you need a Philippine address resolved to a code you can price and dispatch on, that is what this is for.

Priced per request, not per seat

Global providers charge for worldwide coverage you will not use. Google is the accuracy benchmark at $5 per 1,000 requests; FMIS is one country, resolved properly, for less.

Free

$0

1,000 requests / day

  • Full envelope, no feature gating
  • Geocode, reverse, route, ETA
  • Community support

Growth

$199/mo

5,000 req / min ceiling

  • Everything in Starter
  • Higher rate ceiling
  • Coverage requests prioritised

Enterprise

Talk

negotiated

  • Volume pricing
  • Private deployment
  • Named support contact

What we will not promise yet. There is no uptime SLA while this is a one-person operation — design partners get best-effort terms, stated plainly, rather than a number we cannot honour. Prices are indicative and being validated with the first cohort; if you are in it, they will not move under you.

Private beta

FMIS is in production for its first logistics customer. A small number of additional PH logistics teams will be onboarded while the public tier is built.

questara.support@gmail.com

API-first · keyed access · no consumer app — FMIS powers yours.