$1M+/year mapping bill cut ~90%: an in-house OpenStreetMap geocoding service that replaced Google Maps
Lytx · Senior Product Manager · 2025
Problem
Fleet vehicles turn location data into addresses millions of times a day, and we were entirely dependent on Google Maps to do it — a dependency grown into a $1M+/year bill just to tell our trucks where they are, capping flexibility as much as budget. The obvious fix — a cheaper vendor — doesn't touch the real problem: you still pay per call for millions of commodity lookups, still locked to someone else's platform. This was a workload we should own, not a price to renegotiate.
Research
Validating against 100K production coordinates surfaced the reframe: most spend was commodity coordinate→address and timezone lookups on vehicle pings that never needed a premium provider's precision. OpenStreetMap, preloaded and queried locally, resolved the majority alone — the vendor needed only for the tail. The real enemy wasn't the price; it was renting commodity lookups on freely available data.
Solution
- Owned the stack — built our own mapping infrastructure on open data, deployable anywhere and refreshed on our own cadence, instead of renting every lookup.
- Served from memory — an in-memory geospatial index turned each lookup into a fast nearest-neighbour search, holding <150ms at P95.
- Decomposed the dependency — split it into separable services (reverse geocoding, timezone lookup) migrated independently, so savings landed in stages.
- Kept a circuit-breaker fallback — took majority coverage from open data and fell back to the vendor on the tail, so accuracy held at the system level.
Impact
Three wins the exec review promised: $1M+ in annual savings (~90% of mapping spend, a 10:1 return); 100% control of a stack we own and deploy anywhere; and — most durably — costs that no longer scale with the fleet. Where the old bill grew with every vehicle, the platform is a fixed, near-zero marginal cost and a foundation for mapping beyond geocoding.
Reflection
The bill looked like a vendor problem and was really a workload problem: the spend was commodity lookups that never needed premium precision, so the fix wasn't "a cheaper vendor" but "own the data and serve it yourself." Accepting majority coverage with a fallback beat chasing 100% — and the real prize wasn't the one-time saving but decoupling cost from growth.
Stack