Skip to main content

Google Maps Platform

The question

You can be geocodinggeocodingThe process of converting an address into geographic coordinates (latitude and longitude). Mailwoman geocodes in a multi-tier cascade: exact address-point match → street interpolation → locality centroid. Each tier is progressively coarser but more widely available. this afternoon with an API key and a fetch call, or you can install a package, download a gazetteergazetteerA geographical index that maps place names and postcodes to real-world coordinates. Mailwoman uses a custom-built Who's On First (WOF) SQLite database as its gazetteer — the 'atlas' half of the grammar/atlas architecture., and geocode in a process you already run. Both work. They are built for different situations, and the difference is not quality — it is where the data lives and who operates it.

What Google Maps Platform is

The Geocoding API is a hosted HTTP service. Its own documentation, read on 2026-08-04, defines it as:

"The Geocoding API is a service that accepts a place as an address, latitude and longitude coordinates, or Place ID. It converts the address into latitude and longitude coordinates and a Place ID, or converts latitude and longitude coordinates or a Place ID into an address."

Geocoding API overview

The same page describes forward geocodinggeocodingThe process of converting an address into geographic coordinates (latitude and longitude). Mailwoman geocodes in a multi-tier cascade: exact address-point match → street interpolation → locality centroid. Each tier is progressively coarser but more widely available., reverse geocodinggeocodingThe process of converting an address into geographic coordinates (latitude and longitude). Mailwoman geocodes in a multi-tier cascade: exact address-point match → street interpolation → locality centroid. Each tier is progressively coarser but more widely available., and geocodinggeocodingThe process of converting an address into geographic coordinates (latitude and longitude). Mailwoman geocodes in a multi-tier cascade: exact address-point match → street interpolation → locality centroid. Each tier is progressively coarser but more widely available. by Place ID, plus an Address Descriptors featurefeatureAn input signal a model conditions on. Beyond the raw tokens, Mailwoman feeds soft features — gazetteer-membership channels and the postcode anchor — that inform predictions without overriding them.. It notes that developers in the European Economic Area are covered by different terms with effect from 8 July 2025.

The Place ID is worth understanding before you compare anything else, because it is the design center. A Place ID is a stable identifier into Google's own place graph, and once your records carry one you are holding a key that resolves in one system. That is a real capability — it is what makes the geocoder, the Places data, and the map rendering line up — and it is also the thing that does not travel.

For what the service costs and what the terms permit, read Google's pricing and terms. Those are the pages that change, they are specific to your usage, and quoting them in someone else's documentation is how a reader ends up planning against a stale number.

What each one is built to do

Google Maps PlatformMailwoman
ShapeHosted HTTP servicenpm package, in-process; HTTP servers optional
Where the query goesGoogle's infrastructureYour process
CoveragecoverageThe fraction of a population or region for which a data source has real, non-placeholder entries — e.g. 47% rooftop coverage on Texas addresses. Distinct from accuracy on the rows that are present.Global, uniform, no setupPer-localelocaleThe combination of language and country an address comes from. en-US and fr-FR are the locales Mailwoman ships weights for., measured where claimed; a download per countrycountryThe top-level address component (an ISO country). Closed-vocabulary, so it is best handled by a deterministic matcher feeding a proposal rather than a retrained model head.
Reference dataGoogle's, maintained by GooglePublic registersinput modeThe Decision-A register switch: 'fragmented' (human-typed fragments — feeds the evidence channels) vs 'formatted' (complete records — runs the trained absence identity). Explicit on CLI/API; per-endpoint defaults (batch→formatted, autocomplete→fragmented); kind-derived otherwise. on your disk, refreshed by you
IdentifierPlace ID into Google's place graphA component decomposition, plus an address key you compute
Non-address queriesLandmarks, business names, partialsNot the design; the parser needs an address
What arrivesA matched placeLabeled spansspanA contiguous range of characters or tokens in the input string, tagged with an address component type (street, locality, postcode, etc.). Parsed addresses are represented as collections of spans, possibly nested in a tree. with offsets, plus a coordinate and a tier
Operating costPer requestInfrastructure and disk

Two rows carry most of the decision.

"Where the query goes" is the one that ends evaluationsevalRunning the model against a held-out golden dataset and computing per-component F1, exact-match, calibration, and resolved-coordinate error. early in either direction. If your addresses are patient records, employee home addresses, or anything your compliance function has an opinion about, an in-process library removes the conversation rather than winning it. If they are public business addresses, the conversation never starts and this row is not interesting.

"What arrives" decides how much of your own code you write. A hosted geocoder returns a matched place, and if you needed to know which characters of your input were the streetstreetThe named linear feature along which house numbers are ordered. Decomposes into a name plus street affixes; one of the Tier 2 fine labels., you get to work that out downstream. A labelcomponent tagOne of the 25 labels in Mailwoman's address schema — street, locality, region, postcode, house_number, unit, po_box, country, venue, intersection, and others. Each parsed span carries exactly one component tag.-then-look-up parser returns the decomposition as the primary product, which is what deduplicationrecord matchingThe process of determining whether two database records refer to the same real-world entity. Mailwoman's matcher uses a geocode-first approach (match the resolved place, not the address string) with Fellegi-Sunter probabilistic scoring., validation, formatting and record matchingrecord matchingThe process of determining whether two database records refer to the same real-world entity. Mailwoman's matcher uses a geocode-first approach (match the resolved place, not the address string) with Fellegi-Sunter probabilistic scoring. all need. If a coordinate is the whole requirement, this row costs you nothing either way.

When to choose Google Maps Platform

Take this section at face value. There are situations where a hosted geocoder is the correct engineering decision and installing ours would be a mistake.

  • Your queries are not addresses. "Starbucks near Union Station", a business name with no streetstreetThe named linear feature along which house numbers are ordered. Decomposes into a name plus street affixes; one of the Tier 2 fine labels., a half-typed landmark. That is a place-search problem over a business graph, and a parser has nothing to labelcomponent tagOne of the 25 labels in Mailwoman's address schema — street, locality, region, postcode, house_number, unit, po_box, country, venue, intersection, and others. Each parsed span carries exactly one component tag.. Mailwoman will parseaddress parsingThe process of decomposing a free-text postal address string into structured components — house number, street name, locality, region, postcode, and country — so a geocoder can resolve them to coordinates. it into something and the something will be wrong.
  • You need global coveragecoverageThe fraction of a population or region for which a data source has real, non-placeholder entries — e.g. 47% rooftop coverage on Texas addresses. Distinct from accuracy on the rows that are present. today, uniformly. A hosted API covers every countrycountryThe top-level address component (an ISO country). Closed-vocabulary, so it is best handled by a deterministic matcher feeding a proposal rather than a retrained model head. the day you sign up. Ours covers the localeslocaleThe combination of language and country an address comes from. en-US and fr-FR are the locales Mailwoman ships weights for. where a coordinate-graded evaluationevalRunning the model against a held-out golden dataset and computing per-component F1, exact-match, calibration, and resolved-coordinate error. exists, and the rest is unverified rather than merely thin — see Locales and tiers. If your file spansspanA contiguous range of characters or tokens in the input string, tagged with an address component type (street, locality, postcode, etc.). Parsed addresses are represented as collections of spans, possibly nested in a tree. 40 countries and you cannot wait for tiers, this is decisive.
  • You are already inside the ecosystem. If you render Google maps, use Places, and store Place IDs, a second geocoder means two place graphs to reconcile. Consistency within one system is worth more than the marginal properties of another one.
  • Volume is low and engineering time is the scarce resource. Below the volume where per-request pricing becomes material, sourcing and refreshing reference data is a standing job you would be taking on for no return.
  • You have no place to put 1.65 GB. The gazetteergazetteerA geographical index that maps place names and postcodes to real-world coordinates. Mailwoman uses a custom-built Who's On First (WOF) SQLite database as its gazetteer — the 'atlas' half of the grammar/atlas architecture. has to live somewhere with a disk. A serverless function with a small bundleevidence bundleThe pair of retrieval-augmented input channels (street-type + locality-surface) that feed lexicon membership as soft per-token evidence alongside the text. Shipped in 6.7.0; trained natively from step 0 in the from-scratch base line. limit and no attached volume is a poor host for this design, and Deploy serverless is upfront about the shapes that work.

When to choose Mailwoman

  • The addresses cannot leave. No egress is the property; everything else follows from it.
  • You need fields, not only a point. SpansspanA contiguous range of characters or tokens in the input string, tagged with an address component type (street, locality, postcode, etc.). Parsed addresses are represented as collections of spans, possibly nested in a tree. with offsets into your original string, so deduplicationrecord matchingThe process of determining whether two database records refer to the same real-world entity. Mailwoman's matcher uses a geocode-first approach (match the resolved place, not the address string) with Fellegi-Sunter probabilistic scoring. and validation have something to work with.
  • The volume makes per-request pricing the largest line item. The trade is infrastructure and disk, which have different curves.
  • You want to store the results indefinitely. Reference data on your disk carries whatever the source license permits, and you are reading that license rather than a service agreement.
  • You need to inspect or override a wrong answer. Every resolved spanspanA contiguous range of characters or tokens in the input string, tagged with an address component type (street, locality, postcode, etc.). Parsed addresses are represented as collections of spans, possibly nested in a tree. names the gazetteergazetteerA geographical index that maps place names and postcodes to real-world coordinates. Mailwoman uses a custom-built Who's On First (WOF) SQLite database as its gazetteer — the 'atlas' half of the grammar/atlas architecture. record it landed on, so a bad result has a stagestageOne of the dataflow stages in the runtime pipeline (normalize, locale gate, kind classify, phrase group, token classify, sequence correct, reconcile, resolve). Distinct from tier (model vocabulary) and phase (plan milestone). to examine.

Run it yourself

Both claims above are checkable on your own file rather than on ours. Our published numbers are two panels with their scripts:

curl -fsSLO https://mailwoman.sister.software/benchmarks/be-panel.mjs
curl -fsSLO https://mailwoman.sister.software/benchmarks/be-panel.json
mailwoman data pull candidate
node be-panel.mjs --data-root <DATA_ROOT>

Benchmarks carries the results and the method. The panel to run against your addresses is the one you write from be-panel.mjs — swap the panel file for your own rows and the same script grades them.

  • The landscape — hosted, self-hosted and in-process, with the bounded case where none of them is needed.
  • Cut the per-request bill — the volume argument, worked.
  • Keep addresses inside — the residency argument, worked.
  • Locales and tiers — the coveragecoverageThe fraction of a population or region for which a data source has real, non-placeholder entries — e.g. 47% rooftop coverage on Texas addresses. Distinct from accuracy on the rows that are present. boundary.