Comparison
A Google Distance Matrix alternative for teams that don't need live traffic
Most products that call a distance matrix API are not tracking a driver in real time. They are scoring options: which technician is closest, which warehouse should serve this order, which listings are inside a thirty-minute commute. That work does not need traffic, and it is where the per-element price is doing all the damage.
Every figure below was checked against the vendor’s own published pages rather than against a comparison someone else wrote — including the cases where we are the wrong choice.
| Feature | WayMatrix | Google Routes | GraphHopper | openrouteservice |
|---|---|---|---|---|
| Matrix price | ~$0.50 / 1k elements | $5.00 / 1k elements | No per-call price | No paid tier |
| Google's figure is the Essentials tier for the first 100,000 elements a month; a traffic-aware request bills at the Pro tier, $10.00 per 1,000. GraphHopper sells monthly plans capped in daily credits rather than metering calls, and a matrix costs origins × destinations ÷ 2 credits. openrouteservice publishes no paid plan at all. | ||||
| Live traffic | No | Yes — the reason to pay | No | No |
| GraphHopper offers historic traffic through a paid TomTom add-on, not live conditions. | ||||
| Matrix size per call | 2,500 on the free tier, up to 90,000 on paid | 625 elements, or 100 with traffic | Up to 200 locations | 3,500 elements |
| Ours is the only figure here that is per tier rather than per API, so the free tier caps at 50 by 50 and the large number is a paid one. Google's 625-element ceiling drops to 100 when you ask for its most accurate traffic mode. GraphHopper's location limit rises with the plan. openrouteservice's ceiling falls to 25 elements when dynamic arguments are used. | ||||
| Free allowance | 250,000 elements / month | 10,000 elements / month | 500 credits / day | 500 matrix requests / day |
| Google replaced its $200 monthly credit with a free threshold per product in March 2025; the 10,000 applies to the Essentials tier alone. openrouteservice's free quota is per endpoint, and 500 a day is the matrix bucket specifically. | ||||
| Storing results | Keep them, indefinitely | Not permitted | Client-side, temporarily | Permitted under CC BY-SA 4.0 |
| Google's terms permit caching latitude and longitude values for 30 days; they do not permit storing the durations or distances themselves. openrouteservice licenses its results under a share-alike licence, which reaches anything you build from them. Ours has one caveat we would rather state here than in a footnote: internal storage and use are unconditionally fine, but a database you assemble from these results and then publicly redistribute may itself carry the ODbL's share-alike obligation. | ||||
| Road data | OpenStreetMap, build date in every response | Proprietary, continuously updated | OpenStreetMap | OpenStreetMap |
| Coverage | North America | Global, varying by country | Global | Global |
| Geocoding included | No — bring coordinates | Yes, billed separately | Yes | Yes |
| Drop-in for ORS clients | Yes — same request shapes | No | No | It is the reference |
| openrouteservice retires its api.openrouteservice.org host on 28 September 2026, and requests sent there already get 10% of plan quota. Its replacement changes the host and inserts a path segment, so its own users have a base URL to edit too. | ||||
Figures checked against each vendor's own published pages on 2 September 2026. Everyone here changes their pricing; check theirs before you commit to anything.
Checked against 10 published sources on · re-check before
- Google Maps Platform pricing
- Google Routes API usage and billing
- Google computeRouteMatrix reference (request limits)
- Google Maps Platform terms of service (caching)
- GraphHopper pricing
- GraphHopper — what is one credit?
- openrouteservice plans
- openrouteservice request restrictions Undated page; consistent with current plan naming but we could not establish when it was last revised.
- openrouteservice — deprecating api.openrouteservice.org in favour of api.heigit.org Their own announcement of 28 April 2026, and the source of the before-and-after URLs quoted here.
- openrouteservice — reducing the quota of the deprecated API Their announcement of 27 August 2026, which gives the 28 September discontinuation date and the 10% quota.
Which of us you should buy
Stay with Google if…
- A driver is moving right now. Live ETAs on an in-progress delivery, arrival countdowns shown to a customer — traffic is the product, and we do not have it.
- You need one vendor for everything. Autocomplete, places, geocoding, Street View, and routing on one bill and one contract has real organisational value.
- You route outside North America today. We are one continent. That is not a soft limit we can wave you through.
- Procurement needs a name they know. A fair reason, and not one we will argue you out of.
Come to us if…
- Your matrix bill is the line item you keep flinching at. Ten times cheaper per element than Google's entry tier, and twenty times cheaper than the traffic-aware tier, on the call that generates almost all of it.
- You are chunking matrices to fit a cap. Six hundred and twenty-five elements is a 25 × 25 matrix. The retry-and-stitch code you wrote to work around that stops being necessary.
- You need to keep what you computed. Cache the durations, build your own tables, store them for as long as you like. Google's terms do not allow it and openrouteservice attaches share-alike to its results.
- You have outgrown the openrouteservice free tier. Five hundred matrix requests a day is a fine place to prototype and nowhere to launch, and there is no paid plan above it to move to. Same protocol, a much higher ceiling.
Try it against your real numbers.
Take one matrix you already send somewhere else, point it here, and compare the durations yourself. The free tier is enough to check a quarter of a million pairs before you decide anything.
migrate.diff
Removed: - POST https://api.openrouteservice.org/v2/matrix/driving-car
Added: + POST https://api.waymatrix.io/v2/matrix/driving-carAuthorization: $API_KEY
{"locations": [...], "metrics": ["duration","distance"]}
Coming from Google instead? That is a different API rather than a different hostname — the Google migration guide above maps every field, and three of its seven steps are code you delete.