Google Maps routes by car, public transit, on foot and by bike, N×M distance matrices and traffic profiles by departure time, as JSON or CSV and with no Google API key. For teams that make logistics, site selection and mobility decisions with measured travel times, not guesses.
Quick answer: Google Maps routes, travel times and distance by car, public transit, walking and cycling, with N-origin by M-destination matrices and traffic profiles by departure time, with no Google API key. There is a public 100-row sample in CSV and JSON. Run the actor on Apify with pay per result or receive a recurring dataset of your corridors.
Seven cases where a measured travel time replaces an estimate, with the fields each one uses.
distanceMeters, durationSeconds, durationInTrafficSeconds, typicalRangeText, trafficLeveltravelMode, durationSeconds, walkingDistanceMeters, numTransfers, resolvedOriginNamerequestedTime, durationInTrafficSeconds, trafficDelaySeconds, trafficLevel, avgSpeedKmhorigin (area), destination (site), travelMode, durationSeconds, numTransfersdepartureTime, arrivalTime, transitLines, fareAmount, fareCurrency, numTransfersdistanceMeters, durationSeconds, hasTolls, viastatus, durationText, trafficLevel, resolvedDestinationName, googleMapsUrlWhat is measured. Each result is a route between two places, with its distance and duration. With live traffic if you ask to leave "now", and with Google's traffic prediction if you give a future date and time. For a profile, the same route is repeated every N minutes over one or several days.
How to ask. It takes lists of routes, matrices of N origins by M destinations and Google Maps links, with up to 8 waypoints and the option to avoid tolls, highways or ferries. Output is available in more than 40 languages.
Three extracts from real runs of the actor. The 100-row public sample downloads without signing up.
| Origin | Destination | Distance | Duration | Duration in traffic | Traffic level | Via |
|---|---|---|---|---|---|---|
| Madrid | Valencia | 361.7 km | 3 h 43 min | 3 h 42 min | light | A-3 |
| Madrid | Sevilla | 534.1 km | 5 h 5 min | 5 h 14 min | light | A-5 and A-66 |
| Madrid | Bilbao | 404.3 km | 4 h 8 min | 4 h 10 min | light | A-1 |
| Barcelona | Valencia | 350.5 km | 3 h 40 min | 3 h 40 min | light | AP-7 |
| Bilbao | Madrid | 403.2 km | 4 h 6 min | 4 h 9 min | light | A-1 |
| Sevilla | Málaga | 210.6 km | 2 h 15 min | 2 h 11 min | light | A-92 |
| Valencia | Zaragoza | 314.8 km | 3 h 13 min | 3 h 11 min | light | A-23 |
| Getafe | Toledo | 59.8 km | 43 min | 41 min | light | A-42 |
Real rows from a road-route matrix between Spanish cities (car mode, departure "now"). Distance and durations are formatted from the fields in metres and seconds. Values change with the traffic at the time.
| Route | Requested departure | Duration in traffic | Typical range | Traffic level |
|---|---|---|---|---|
| Madrid → Bilbao | 2026-10-16 07:00 | 4 h 10 min | 3 h 40 min – 5 h 10 min | light |
| Madrid → Bilbao | 2026-10-16 11:00 | 4 h 10 min | 3 h 40 min – 5 h 10 min | light |
| Madrid → Bilbao | 2026-10-16 15:00 | 4 h 20 min | 3 h 50 min – 5 h 30 min | light |
| Madrid → Bilbao | 2026-10-16 19:00 | 4 h 10 min | 3 h 40 min – 5 h 10 min | light |
| Madrid → Barcelona | 2026-10-16 07:00 | 6 h 20 min | 5 h 30 min – 8 h 0 min | light |
| Madrid → Barcelona | 2026-10-16 11:00 | 6 h 20 min | 5 h 30 min – 8 h 0 min | light |
| Madrid → Barcelona | 2026-10-16 15:00 | 6 h 20 min | 5 h 40 min – 7 h 50 min | light |
| Madrid → Barcelona | 2026-10-16 19:00 | 6 h 10 min | 5 h 30 min – 7 h 50 min | light |
Real rows from a traffic profile: the same route queried with four departure times on the same future day (Google traffic prediction). Duration and typical range change with the departure time. Rows only, no aggregates.
| Origin | Destination | Departure | Arrival | Lines (transitLines) | Transfers | Walking distance |
|---|---|---|---|---|---|---|
| Atocha, Madrid | Plaza de Castilla, Madrid | 2026-10-14 10:00 | 2026-10-14 10:42 | Subterráneo 1 Atocha→Plaza de Castilla (15 paradas) | 0 | 1026 m |
| Madrid | Toledo | 2026-10-14 07:45 | 2026-10-14 08:41 | Tren Avant Estación de Madrid Puerta de Atocha - Almudena Grandes→Toledo (1 paradas) | 0 | 1518 m |
| Paris Gare de Lyon | Lyon Part-Dieu | 2026-10-15 10:00 | 2026-10-15 11:56 | Tren de alta velocidad TGV INOUI Gare de Lyon→Lyon Part Dieu (1 paradas) | 0 | 0 m |
| Bilbao | San Sebastián | 2026-10-09 04:20 | 2026-10-09 05:35 | Autobús FlixBus Bilbao→Estación de Autobuses de San Sebastian (1 paradas) | 0 | 0 m |
| Berlin Hauptbahnhof | München Hbf | 2026-10-08 23:29 | 2026-10-09 06:47 | — | 1 | — |
Real public transit rows (metro, high-speed train, bus). Local times of the route; the field keeps the time zone. A "—" means Google did not return that value for the route. Line names arrive in the requested language.
Data quality. The status field is OK, NO_ROUTE or ERROR. A pair with no possible route is marked NO_ROUTE and delivered in the dataset: it is not filtered out. Every result carries the place Google resolved (resolvedOriginName, resolvedDestinationName and their placeId) so you can verify the right place was used.
One stable schema for all modes, with type and description for every field.
| Field | Type | Description |
|---|---|---|
| origin | string | Origin as you requested it |
| destination | string | Destination as you requested it |
| travelMode | string | Mode: driving, transit, walking or cycling |
| timeMode | string | "now", depart at a time or arrive by a time |
| requestedTime | string | Requested departure or arrival time |
| status | string | OK, NO_ROUTE or ERROR |
| distanceMeters | integer | Route distance in metres |
| durationSeconds | integer | Route duration in seconds |
| durationInTrafficSeconds | integer | Duration with traffic in seconds |
| typicalMinSeconds | integer | Lower end of Google's typical range |
| typicalMaxSeconds | integer | Upper end of Google's typical range |
| typicalRangeText | string | Typical range as text |
| trafficLevel | string | Traffic level of the route |
| trafficDelaySeconds | integer | Traffic delay in seconds |
| via | string | Main road of the route |
| hasTolls | boolean | The route includes tolls |
| departureTime | string | Departure (public transit), with time zone |
| arrivalTime | string | Arrival (public transit), with time zone |
| transitLines | string | Lines and stops of the trip |
| numTransfers | integer | Number of transfers |
| walkingDistanceMeters | integer | Walking metres of the trip |
| fareAmount | number | Trip fare |
| fareCurrency | string | Fare currency |
| resolvedOriginName | string | Origin place resolved by Google |
| resolvedOriginPlaceId | string | Origin placeId |
| resolvedDestinationName | string | Destination place resolved by Google |
| resolvedDestinationPlaceId | string | Destination placeId |
| matrixOriginIndex | integer | Origin position in the matrix |
| matrixDestinationIndex | integer | Destination position in the matrix |
| googleMapsUrl | string | Link to the route on Google Maps |
| scrapedAt | string | Capture date and time |
Real fields from the public sample. Public transit and fare fields are only filled for routes of that mode; other routes leave them empty.
The actor works wherever Google Maps offers routes for the requested mode. Availability of public transit, schedules and fares depends on what Google publishes in each city.
Choose between running the actor yourself, receiving a recurring dataset or commissioning a custom project.
No. The actor works without a Google API key: you provide the routes and get the result in the Apify dataset.
It depends on the time you ask for. With "now" it returns live traffic; with a future date and time it uses Google's traffic prediction. The timeMode field tells you which was requested.
That Google found no possible route between that origin and destination for the requested mode. The row is delivered with status = NO_ROUTE and is not filtered out, so you know which pairs failed. With pay per result, only OK results count.
Google picks a place and the actor tells you which: every result carries the name, placeId and coordinates of the resolved origin and destination. If it is not the one you meant, repeat with a more precise address, coordinates or a Google Maps link.
JSON and CSV from Apify or by API, with the matrix in seconds and metres. It can also be delivered on a recurring basis into your own S3 bucket. Output supports more than 40 languages.
It does not need to be. Origins and destinations are places, areas or postcodes, and results are times and distances. For HR cases, areas are used, never employee addresses.
Tell us which origins, destinations and modes you need and we will send a sample in the schema you would receive.
We combine routes with your network of stores, warehouses or offices as a custom project.