Operated by Sourcelane✓ verified
Calculate travel time, distance, and traffic-aware ETAs between any list of origins and destinations using the official Google Distance Matrix API.
Bulk-calculates travel time and distance for every origin–destination pair using the Google Distance Matrix API. Produces one result row per origin×destination pair with travel distance (meters and human-readable text), travel duration (seconds and human-readable text), traffic-aware driving ETAs and duration-in-traffic when a departure time is provided, transit fare values and currency for transit mode, and travel-mode identification for driving, walking, bicycling, and transit. Implements automatic batching (splitting large matrices into 10×10 requests to respect the 100-element-per-request limit) and merges batches back into a single matrix; includes per-pair status and error reporting so unreachable or invalid pairs yield a row with a status code and error message. Suitable for bulk origin–destination matrix generation, comparative mode analysis, and traffic- and fare-aware travel-time results.
Verified Sep 28, 3:55 AM
$0.012
per route pair
Up to 83 per call. Only pay for results returned; failed calls are refunded.
Delivery & logistics routing
Pre-calculate drive times from warehouses to every customer, traffic included
Site selection
Find the candidate location with the shortest average drive time to a list of points of interest
Field service dispatch
Match technicians to jobs by drive time
Real estate commute analysis
Calculate transit/drive time from listings to a list of workplaces, gyms, schools
Bulk ETA APIs
Feed a CRM or other systems with up-to-date drive times to many accounts
Travel research
Compare driving vs transit vs cycling time for a list of trips
Origin addresses or 'lat,lng' pairs.
Destination addresses or 'lat,lng' pairs.
Features to avoid: tolls, highways, ferries, indoor.
Departure time for traffic-aware ETAs.
Arrival time as a Unix-epoch timestamp in seconds.
Transit modes to consider: bus, subway, train, tram, rail.
Optional settings
| Window | Uptime | Success rate | p50 | p95 | Calls |
|---|---|---|---|---|---|
| 24h | — | — | — | — | 0 |
| 7d | — | — | — | — | 0 |
| 30d | — | — | — | — | 0 |
Call it through Sourcelane's gateway or MCP server. We run the connector, apply your agent's spend guardrails, and bill only the results returned.
Call it via Sourcelane
curl -X POST https://api.usesourcelane.com/v1/call \
-H "Authorization: Bearer sl_live_your_agent_key" \
-H "Content-Type: application/json" \
-d '{"listing":"google-distance-matrix-scraper","params":{"origins":["1600 Amphitheatre Pkwy, Mountain View, CA","1 Apple Park Way, Cupertino, CA"],"destinations":["SFO Airport, San Francisco, CA","Stanford University, CA"]},"maxResults":10}'Request params
| Field | Type | Required | Description |
|---|---|---|---|
origins | array | required | Origin addresses or 'lat,lng' pairs. The connector auto-chunks large lists into 10x10 batches to respect the API's 100-element-per-request limit. |
destinations | array | required | Destination addresses or 'lat,lng' pairs. Every origin is paired with every destination, producing one results row per pair. |
mode | string | optional | How the route between each origin and destination is calculated. Use Transit for public-transport ETAs and fares. |
units | string | optional | Units used for the human-readable distance and duration text. Numeric meters and seconds are always returned alongside. |
avoid | array | optional | Features to avoid: tolls, highways, ferries, indoor. Driving/walking/bicycling modes only. |
departureTime | string | optional | Departure time for traffic-aware ETAs. Use 'now' or a Unix-epoch timestamp in seconds. Required for transit and for traffic-aware driving. |
arrivalTime | string | optional | Arrival time as a Unix-epoch timestamp in seconds. Transit mode only. Mutually exclusive with departure time. |
trafficModel | string | optional | Traffic prediction model. Only applied when Departure time is set and mode is driving. |
transitMode | array | optional | Transit modes to consider: bus, subway, train, tram, rail. Transit mode only. |
language | string | optional | BCP-47 language code for distance/duration text (e.g. en, es, fr). |
region | string | optional | Two-letter region code to bias address resolution (e.g. us, gb, de). |
Each result contains
| Field | Type | Description |
|---|---|---|
origin | string | Origin |
destination | string | Destination |
originResolved | string | Origin Resolved |
destinationResolved | string | Destination Resolved |
mode | string | Mode |
status | string | Status |
distanceMeters | integer | Distance Meters |
distanceText | string | Distance Text |
durationSeconds | integer | Duration Seconds |
durationText | string | Duration Text |
durationInTrafficSeconds | null | Duration In Traffic Seconds |
durationInTrafficText | null | Duration In Traffic Text |
fareValue | null | — |
fareCurrency | null | — |
fareText | null | — |
error | null | — |
Pick your tool and connect in under a minute. Then just ask — for example: “List 40 dentists in Austin TX with phone, website and rating above 4.5.”
Connect Claude
Web, desktop and mobile. One click, then confirm.
Adds the Sourcelane MCP server with your key as a header.
claude mcp add --transport http sourcelane https://api.usesourcelane.com/mcp \
--header "Authorization: Bearer sl_live_your_agent_key"Alternative to the connector URL: add to claude_desktop_config.json, then restart Claude.
{
"mcpServers": {
"sourcelane": {
"command": "npx",
"args": [
"-y",
"mcp-remote",
"https://api.usesourcelane.com/mcp",
"--header",
"Authorization:${AUTH_HEADER}"
],
"env": {
"AUTH_HEADER": "Bearer sl_live_your_agent_key"
}
}
}
}Add to ~/.cursor/mcp.json (or Windsurf's mcp_config.json).
{
"mcpServers": {
"sourcelane": {
"url": "https://api.usesourcelane.com/mcp",
"headers": {
"Authorization": "Bearer sl_live_your_agent_key"
}
}
}
}Save as .vscode/mcp.json. VS Code prompts for your key once.
{
"servers": {
"sourcelane": {
"type": "http",
"url": "https://api.usesourcelane.com/mcp",
"headers": {
"Authorization": "Bearer ${input:sourcelane-key}"
}
}
},
"inputs": [
{
"type": "promptString",
"id": "sourcelane-key",
"description": "Sourcelane agent key",
"password": true
}
]
}Create a GPT → Actions → Import from URL, then Authentication: API Key, Bearer.
https://usesourcelane.com/openapi.jsonOne POST. Pass maxResults to cap cost.
curl -X POST https://api.usesourcelane.com/v1/call \
-H "Authorization: Bearer sl_live_your_agent_key" \
-H "Content-Type: application/json" \
-d '{"listing":"google-distance-matrix-scraper","params":{"origins":["1600 Amphitheatre Pkwy, Mountain View, CA","1 Apple Park Way, Cupertino, CA"],"destinations":["SFO Airport, San Francisco, CA","Stanford University, CA"]},"maxResults":10}'Wrap the REST call as a tool, or point an MCP client at the endpoint.
import requests
res = requests.post(
"https://api.usesourcelane.com/v1/call",
headers={"Authorization": "Bearer sl_live_your_agent_key"},
json={
"listing": "google-distance-matrix-scraper",
"params": {"origins":["1600 Amphitheatre Pkwy, Mountain View, CA","1 Apple Park Way, Cupertino, CA"],"destinations":["SFO Airport, San Francisco, CA","Stanford University, CA"]},
"maxResults": 10,
},
timeout=300,
)
body = res.json()
print(body["receipt"]["chargedMicros"], "micro-USD for", body["receipt"]["results"], "results")
print(body["data"])—
0 reviews
Leave a review
Loading reviews…