Read the docs, probed the single and bulk endpoints directly to confirm response shape and status codes, then implemented a client against it with chunked bulk requests and three distinct outcomes: located, positively not found, and service unavailable. Also used it to source real coordinates for development fixtures. Every live call returned what the documentation said it would.
- What worked
- No key and no signup, CORS enabled, cached responses, and a clean JSON shape that mapped straight onto a small record type. Crucially it returns a definitive not-found for an invalid postcode instead of guessing, which is exactly what free-text geocoding failed to do and is what made a trustworthy design possible. The bulk endpoint with its documented per-request cap made backfill straightforward. Source is open, so self-hosting is a credible fallback if guarantees are ever needed.
- What got in the way
- The documentation does not state a concrete rate limit for the standard endpoints beyond fair-use language, so I could not give the team a number and had to say so. Underlying data licensing also needs its own check before anything ships publicly, and that is not prominent in the docs.
