Directions, distance matrices and route optimization on open-source engines, at a flat monthly price.
No per-element billing, no usage-based invoice to forecast. Built on OSRM, Valhalla and VROOM with OpenStreetMap data.
✅ 100 requests/day free, no card 🇪🇺 Hosted in the EU
Get Free API KeyGoogle's Routes API is billed per request (Compute Routes) or per element (Compute Route Matrix), on a sliding scale. Simple Routing is a flat monthly plan with a daily request allowance.
| Requests per day | Google Compute Routes (Essentials) | Simple Routing |
|---|---|---|
| 1,000 | $100/mo | $10/mo |
| 10,000 | $1,250/mo | $10/mo |
| 100,000 | $6,550/mo | $100/mo |
| Requests per day | Google Compute Route Matrix (Essentials) | Simple Routing |
|---|---|---|
| 1,000 | $2,800/mo | $10/mo |
| 10,000 | $10,500/mo | $10/mo |
| 100,000 | $36,150/mo | $100/mo |
Google list prices as of October 9, 2026 — source.
This is where the bills diverge fastest. Google's billing docs put it this way: "Compute Route Matrix requests are billed per ELEMENT returned from the request", where elements are origins multiplied by destinations.
1 request against your daily allowance. Same as a single route.
2,500 elements billed. Four of those a day uses up a 10,000-element monthly free cap in one day.
Google Maps Platform does things this service doesn't. If any of these matter to you, stay where you are.
The request is a different shape, but it's still one GET. The two things that trip people up: coordinates are longitude,latitude (Google is latitude,longitude), and the key goes in a header.
# Before: Google Directions API curl "https://maps.googleapis.com/maps/api/directions/json?origin=40.7506,-73.9935&destination=40.6413,-73.7781&key=GOOGLE_API_KEY" # After: Simple Routing (standard OSRM route service) curl "https://api.simplerouting.io/osrm/route/v1/driving/-73.9935,40.7506;-73.7781,40.6413?overview=full&steps=true" \ -H "Authorization: Bearer YOUR_API_KEY"
The response geometry is an encoded polyline at precision 5, the same format Google uses for overview_polyline.points, so your existing decoder keeps working. Drawing it on a Leaflet map and linking out to Google Maps for navigation:
// npm install @mapbox/polyline const res = await fetch( "https://api.simplerouting.io/osrm/route/v1/driving/-73.9935,40.7506;-73.7781,40.6413?overview=full", { headers: { Authorization: "Bearer YOUR_API_KEY" } } ); const route = (await res.json()).routes[0]; // route.duration is seconds, route.distance is meters const latLngs = polyline.decode(route.geometry); // [[lat, lng], ...] const line = L.polyline(latLngs).addTo(map); map.fitBounds(line.getBounds()); // "Open in Google Maps" deep link for turn-by-turn on the driver's phone const link = "https://www.google.com/maps/dir/?api=1" + "&origin=40.7506,-73.9935&destination=40.6413,-73.7781&travelmode=driving";
On MapLibre, pass polyline.toGeoJSON(route.geometry) to a GeoJSON source instead. Full request and response reference is in the API docs.
# Get directions from Penn Station to JFK Airport
curl "https://api.simplerouting.io/osrm/route/v1/driving/-73.9935,40.7506;-73.7781,40.6413?overview=full" \
-H "Authorization: Bearer 988b35cc-6183-4922-bbc0-857e1a1d318d"
This is a live demo with a real API key (feel free to steal it).
The endpoints are the stock OSRM, Valhalla and VROOM HTTP APIs. Nothing proprietary to rewrite if you leave.
The engines and the map data are open. Point your base URL at your own OSRM server and your code keeps running.
No overages — your plan is your bill.
Hitting the limits, want more countries, or need a bespoke solution? Email [email protected] — we'll figure it out.
100 requests a day, free, no credit card required.
Get Free API Key