# Google Maps Directions Scraper (`thescrappa/google-maps-directions-scraper`) Actor

Compare driving, walking, cycling, and transit routes between locations through Scrappa. Process up to 10 route requests in one run and receive one dataset row per returned route alternative.

- **URL**: https://apify.com/thescrappa/google-maps-directions-scraper.md
- **Developed by:** [Scrappa](https://apify.com/thescrappa) (community)
- **Categories:** Automation, Developer tools, Lead generation
- **Stats:** 2 total users, 0 monthly users, 90.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

$0.50 / 1,000 route results

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

## Google Maps Directions Scraper

Compare Google Maps route alternatives through Scrappa. Use driving, walking, cycling, or transit directions for travel planning, delivery estimates, commute comparisons, and logistics workflows.

This is a thin, paid Apify wrapper around Scrappa's Maps Directions endpoint (`/api/maps/directions`). Scraping runs on Scrappa infrastructure; one Apify run can process a batch of route requests.

### Features

- Process up to 10 unique origin/destination requests in one run
- Compare driving, walking, bicycling/cycling, and transit routes
- Receive one dataset row per returned route alternative
- Preserve distance, duration, formatted values, via labels, trips, step coordinates, travel mode, and source request metadata when available
- Continue after an individual route failure and report requested, succeeded, failed, saved, and charged counts in the run log
- Charge **$0.0005 per successfully stored route alternative** through the `route-result` event
- Keep failed requests and empty or malformed responses uncharged

### Input

Use the preferred `routes` array for batches:

```json
{
  "routes": [
    {
      "origin": "Berlin Hauptbahnhof",
      "destination": "Brandenburg Gate",
      "mode": "walking",
      "hl": "en",
      "gl": "de"
    },
    {
      "origin": "Alexanderplatz, Berlin",
      "destination": "Berlin Airport",
      "mode": "transit"
    }
  ]
}
```

`origin` and `destination` are also accepted as singular compatibility fields, together with singular `mode`, `hl`, and `gl`. Locations are trimmed, equivalent requests are deduplicated in first-seen order, and a run accepts at most 10 unique routes. `mode` defaults to `driving`, `hl` defaults to `en`, and `cycling` is sent to Scrappa as `bicycling`.

### Output

Each returned alternative is one dataset item. The row retains the Scrappa alternative payload and includes stable metadata:

```json
{
  "alternative_index": 0,
  "request_index": 0,
  "request_origin": "Berlin Hauptbahnhof",
  "request_destination": "Brandenburg Gate",
  "request_mode": "walking",
  "request_hl": "en",
  "request_gl": "de",
  "travel_mode": "Walking",
  "via": "B2/B5",
  "distance": 1821,
  "duration": 1501,
  "formatted_distance": "1.8 km",
  "formatted_duration": "25 min",
  "step_coordinates": [{ "latitude": 52.52104335, "longitude": 13.37325815 }],
  "trips": []
}
```

Optional response fields are preserved when Scrappa returns them; missing mode-specific details are not fabricated. Failed routes appear in the run summary and do not create charged route rows. Dataset output is the primary result channel and the actor does not write per-item key-value-store records.

### Direct API

For higher-volume routing, recurring logistics workflows, and direct API access, upgrade to Scrappa at https://scrappa.co. The underlying endpoint is `/api/maps/directions`.

# Actor input Schema

## `routes` (type: `array`):

Preferred batch input. One request is created for each route object; duplicate requests are processed once. Maximum 10 route requests per run.

## `origin` (type: `string`):

Singular compatibility input. Use routes for batches.

## `destination` (type: `string`):

Singular compatibility input. Use routes for batches.

## `mode` (type: `string`):

Travel mode: driving, walking, bicycling/cycling, or transit.

## `hl` (type: `string`):

Language code for route labels, such as en or de-DE.

## `gl` (type: `string`):

Two-letter country or region code for geo-filtering.

## Actor input object example

```json
{
  "origin": "Times Square, New York, NY",
  "destination": "Central Park, New York, NY",
  "mode": "driving",
  "hl": "en"
}
```

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "origin": "Times Square, New York, NY",
    "destination": "Central Park, New York, NY"
};

// Run the Actor and wait for it to finish
const run = await client.actor("thescrappa/google-maps-directions-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "origin": "Times Square, New York, NY",
    "destination": "Central Park, New York, NY",
}

# Run the Actor and wait for it to finish
run = client.actor("thescrappa/google-maps-directions-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "origin": "Times Square, New York, NY",
  "destination": "Central Park, New York, NY"
}' |
apify call thescrappa/google-maps-directions-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,thescrappa/google-maps-directions-scraper"
        }
    }
}

```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/ZF8jFdzF15k49AZQh/builds/V8RvkolpoBumvavCu/openapi.json
