Comparison
A Google Distance Matrix alternative for teams that don't need live traffic
Most products that call a distance matrix API aren’t tracking a driver in real time. They’re scoring options: which technician is closest, which warehouse should serve this order, which listings are within a thirty-minute commute. That work doesn’t need traffic, and it’s where the per-element price hurts most.
Every figure below was checked against the vendor’s own published pages, not someone else’s comparison, including where we’re the wrong choice.
| Feature | WayMatrix | Google Routes | GraphHopper | Openrouteservice |
|---|---|---|---|---|
| Matrix price 1 | $0.029 / 1k elements | $5.00 / 1k elements | No per-call price | No paid tier |
| Free allowance 2 | 50,000 elements / month | 10,000 elements / month | 500 credits / day | 500 matrix requests / day |
| Matrix size per call 3 | 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 |
| Rate limit 4 | 5 to 120 requests / minute, by plan | 3,000 elements / minute | 1 to 10 requests / second, by plan | 40 matrix requests / minute |
| Storing results 5 | Keep them | Not permitted | Client-side, temporarily | Yes |
| Drop-in for ORS clients | Yes — same request shapes | No | No | It is the reference |
| Road data | OpenStreetMap | Proprietary, continuously updated | OpenStreetMap | OpenStreetMap |
| Coverage | North America | Global, varying by country | Global | Global |
| Geocoding included 6 | Coming soon | Yes, billed separately | Yes | Yes |
| Live traffic 7 | No | Yes — the reason to pay | No | No |
-
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 with a daily credit cap instead of charging per call, and a matrix costs origins × destinations ÷ 2 credits, or the longer side × 10 — whichever is cheaper. Openrouteservice has no paid plan. Our plans stop at their allowance; upgrade your plan for more.
Back to Matrix price -
Google's figure is for the Essentials tier only. Openrouteservice's free quota is per endpoint: 500 a day is the matrix quota.
Back to Free allowance -
Ours is the only limit here that depends on your plan: the free plan caps at 50 by 50, and the larger limit is for paid plans. Google's 625 elements drops to 100 with its most accurate traffic mode. GraphHopper's location limit rises with the plan. Openrouteservice's drops to 25 elements with dynamic arguments.
Back to Matrix size per call -
The units differ, and that is the comparison. Google counts its matrix cap in elements a minute rather than requests, so against its own 625-element ceiling it allows fewer than five full-size matrix calls a minute. GraphHopper's per-second rate comes with a credit ceiling per minute as well — 100 on Basic, 400 on Standard, 1,000 on Premium — and because a matrix costs credits rather than elements, that ceiling usually binds first. Openrouteservice publishes a per-minute request count for the matrix endpoint. Ours is a request count too, by plan: tighter than Openrouteservice on the free plan and looser on every paid one, and below GraphHopper's raw per-second rate throughout.
Back to Rate limit -
Google's terms allow caching latitude and longitude for 30 days, but not storing the durations or distances themselves. Openrouteservice licenses its results under a share-alike licence, which covers anything you build from them. Ours has one caveat: storing and using results internally is always fine, but a database you build from them and publish may carry the share-alike obligation of the ODbL, the Open Database Licence that covers OpenStreetMap data.
Back to Storing results -
WayMatrix: Geocoding is in our development plan. Until then, send coordinates.
Back to Geocoding included -
GraphHopper: GraphHopper offers historic traffic through a paid TomTom add-on, not live conditions.
Back to Live traffic
Figures checked against each vendor's own published pages on 2 September 2026. Google's and GraphHopper's published rates and limits were re-read on 24 September 2026 and had not changed; Openrouteservice's quota page renders in the browser and could not be re-read, so the date above has not moved. Every vendor here changes its pricing, so check theirs before you commit.
Checked against 12 published sources on
- Google Maps Platform pricing The Compute Route Matrix Essentials SKU bills at the rate in this entry's benchmark and the Pro (traffic-aware) SKU at twice it. Essentials carries a free monthly threshold.
- Google Routes API usage and billing Compute Route Matrix is billed per element, origins multiplied by destinations, which is the unit this table compares. It carries no PRICES of its own, but it is the source of the rate limit in this table: read on 2026-10-02, it states that the Compute Route Matrix rate limit is 3,000 elements per minute, calculated by origins times destinations.
- Google computeRouteMatrix reference (request limits) The product of origins and destinations may not exceed the cap in the table above, and falls to 100 when the traffic-aware routing preference is used.
- Google Maps Platform terms of service (caching) Section 19.3 lets a customer temporarily cache Routes API latitude and longitude values for up to 30 consecutive calendar days, and grants nothing for the durations and distances themselves. That silence is why this table says storing results is not permitted.
- GraphHopper pricing Source of the free plan's daily credit allowance, and of one plan-level cap on locations per request that runs from 5 on the free plan through 30 and 80 to 200 on Premium. The larger per-plan numbers further down their table belong to Map Matching, not to the matrix.
- GraphHopper — what is one credit? Their page gives two formulas and charges whichever is cheaper, and states a minimum charge of one credit per request.
- Openrouteservice plans Re-checked on 24 September 2026 and could not be read: the page renders its tables in the browser and returns nothing to a plain fetch, so their daily matrix quota in this table is still the figure read on 2 September. That is why the date above has not moved — a figure nobody re-read does not get a new date.
- Openrouteservice request restrictions Undated page, re-read on 24 September 2026 and unchanged. We still 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, re-read on 1 October 2026: it sets the 10% quota on the deprecated host. It also named 28 September 2026 as a shutdown date; that did not happen, and the host was still serving on 1 October 2026. Their separate web-client announcement, re-read on 19 October 2026, puts the final shutdown after 2 November 2026.
- GraphHopper — what is a credit limit per minute? Confirms the Premium ceiling of 1,000 credits a minute and that breaching it answers 429 with 'Minutely API limit heavily violated'. The per-plan figures for Basic and Standard are not in this article; they were read from the pricing page cited above, whose fine print gives 1 request per second with up to 100 c/min, 2 with up to 400, and 10 with up to 1,000.
- GraphHopper — do you also provide traffic data? Read on 24 September 2026, and the source for the traffic row: a TomTom add-on built on historic traffic for time-dependent routing, not live conditions. Their pricing page does not mention traffic at all, which is why this is cited separately.
Which of us you should buy
Come to us if…
- Your matrix bill is the line item you keep flinching at. 170× cheaper per element than Google's entry tier, and 340× 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. You won't need the retry-and-stitch code you wrote to work around it.
- You need to keep what you computed. Cache the durations, build your own tables, and keep them. Google's terms don't allow that, and Openrouteservice attaches share-alike to its results.
- You have outgrown Openrouteservice's free tier. Five hundred matrix requests a day is fine for a prototype, but you can't launch on it, and there's no paid plan above it. This API uses the same protocol, with much higher limits.
Stay with Google if…
- A driver is moving right now. For example, live ETAs on a delivery in progress, or arrival countdowns shown to a customer. There, traffic is the product, and we don't have it.
- You need one vendor for everything. Autocomplete, places, geocoding, Street View and routing on one bill and one contract is useful for an organisation.
- You route outside North America today. We cover North America only, and we can't route you outside it.
- Procurement needs a name they know. That is a fair reason, and we won't argue with it.
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 50,000 pairs before you decide.
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, not just a different hostname. The Google migration guide above maps every field, and two of its seven steps are code you delete.