open-distance
Free · Open source · Continental US

Distances, without the per-call bill.

A wire-compatible distance-matrix API on the edge. Distances within ~1% of the panel median on most route categories (up to ~5% off on toll-routed and dense urban); durations are free-flow — no live traffic (see how we measure). $0 per call, no key, no analytics. Type an origin and a destination, or copy the curl.

↓ 1 origin → 1 destination  ·  switch to Matrix for up to 25 pairs in one call
Distance
Drive time
bash
No API key No analytics No ads Apache-2.0 ~1% distance vs major providers Up to 25 elements / call
No surprises

One honest job, done cheaply.

It returns a number, not a map. Knowing exactly what you trade is the whole pitch.

What you get

The useful 90%, for free.

  • Driving distance + duration between any two US points
    Addresses or raw lat,lng — lower 48 + DC, including cross-country.
  • A 25-pair matrix in one call
    Up to 25 origin × destination elements.
  • Wire-compatible JSON response
    Same shape as the legacy Distance Matrix API; clients keep parsing.
  • Self-host the whole thing
    Fork it, deploy to your own edge, set your own limits.

What you give up

If you need these, use a routing engine.

  • Route geometry / a polyline
    No line is drawn — just the scalar numbers.
  • Turn-by-turn directions
    It isn’t a navigation product.
  • Live / predicted traffic
    Numbers come from a static routed graph.
  • Walking, transit, or non-US
    Driving only, continental US only — today.
It’s a distance API, not a mapping product. That’s a feature, not a limitation.
Quickstart

From nothing to first call in a minute.

One endpoint. No key, no SDK, no signup. Swap your base URL and go. Read the full docs →

1

Point at the endpoint

GET /maps/api/distancematrix/json — the only route you need.

2

Single pair, or a matrix

Pipe-separate origins and destinations to score up to 25 elements (N origins × M destinations) in one call. Single pair is just N=M=1.

3

Read the standard JSON

Same shape you already parse — rows[i].elements[j] = origin i to destination j. Plus additive *_matches confidence fields.

4

Self-throttle on headers

Every response carries X-RateLimit-Remaining-* so you can back off cleanly.


        
Education, by topic

The questions, sorted by what you’re asking.

No marketing answers. If something’s a bad fit, this page will tell you.