# OSM Overpass Hiking Trail Route Scraper (`jungle_synthesizer/osm-overpass-hiking-route-relation-scraper`) Actor

Query the Overpass API for OpenStreetMap hiking route relations by bounding box or region. Returns ODbL-licensed trail geometry: route names, distance, network level, way coordinates, and full OSM tags. The only license-clean trail corpus on Apify — safe for AI training and GIS use.

- **URL**: https://apify.com/jungle\_synthesizer/osm-overpass-hiking-route-relation-scraper.md
- **Developed by:** [BowTiedRaccoon](https://apify.com/jungle_synthesizer) (community)
- **Categories:** AI, Developer tools
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, NaN bookmarks
- **User rating**: No ratings yet

## Pricing

Pay per event

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/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
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.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).

If your project is in a different language, use 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

## OSM Overpass Hiking Trail Route Scraper

Query the **Overpass API** for OpenStreetMap hiking route relations by bounding box or region name. Returns ODbL-licensed trail geometry, route metadata, and full OSM tags — the only license-clean trail corpus on Apify, safe for AI training and GIS use.

---

### What it does

The actor sends Overpass QL queries against the public `overpass-api.de` endpoint (or a mirror of your choice) to retrieve `relation` elements with `route=hiking` or `route=foot` tags within the specified geographic area. For each relation it returns:

- Route name, type, and network level (international / national / regional / local)
- Operator and start/end node names
- Distance in kilometres (from OSM `distance` or `length` tags)
- OSMC waymark symbol
- Bounding box coordinates
- Pipe-separated member way IDs as a geometry proxy
- Full OSM tag map as a JSON string
- Wikidata / Wikipedia cross-references

All data is released by OpenStreetMap contributors under the **Open Database Licence (ODbL)**. You are free to use it for AI training, GIS pipelines, or commercial products — attribution required.

---

### Input

| Field | Type | Default | Description |
|-------|------|---------|-------------|
| **Max Items** | integer | 100 | Maximum route relations to return across all queries |
| **Bounding Boxes** | array | `["35.5,136.5,36.2,137.5"]` | One or more `south,west,north,east` decimal-degree strings |
| **Region Names** | array | `[]` | Place names resolved to bounding boxes via Nominatim. Used when Bounding Boxes is empty. Example: `"Tyrol, Austria"` |
| **Route Types** | array | `["hiking","foot"]` | OSM `route` tag values to include |
| **Network Filter** | array | `[]` | Restrict to specific network levels: `iwn` (international), `nwn` (national), `rwn` (regional), `lwn` (local). Empty = all levels |
| **Mirror Endpoint** | string | — | Alternative Overpass API URL, e.g. `https://overpass.kumi.systems/api/interpreter` |

#### Example inputs

**Fetch all hiking routes in a Japanese alpine area:**
```json
{
  "maxItems": 50,
  "bboxList": ["35.5,136.5,36.2,137.5"],
  "routeTypes": ["hiking", "foot"]
}
````

**Fetch only international and national routes in the Swiss Alps:**

```json
{
  "maxItems": 20,
  "bboxList": ["46.0,7.0,47.0,8.5"],
  "routeTypes": ["hiking"],
  "networkFilter": ["iwn", "nwn"]
}
```

**Resolve a region by name:**

```json
{
  "maxItems": 30,
  "regionNames": ["Tyrol, Austria"],
  "routeTypes": ["hiking"]
}
```

***

### Output

Each result is a flat object. Numeric fields (`distance_km`, `bbox_*`) are numbers; all others are strings. Missing fields are omitted.

| Field | Description |
|-------|-------------|
| `osm_id` | OSM relation numeric ID |
| `osm_type` | `relation` or `way` |
| `route_name` | Human-readable name from the `name` tag |
| `route_type` | `hiking` or `foot` |
| `network` | Network level: `iwn`, `nwn`, `rwn`, `lwn`, or empty |
| `operator` | Operator/maintainer of the route |
| `distance_km` | Route distance in kilometres |
| `osmc_symbol` | OSMC waymark symbol string |
| `from_node` | Start location name |
| `to_node` | End location name |
| `geometry` | Pipe-separated member way OSM IDs |
| `bbox_south` / `bbox_west` / `bbox_north` / `bbox_east` | Element bounding box |
| `tags` | Full OSM tag map as a JSON string |
| `wikidata` | Wikidata entity QID |
| `wikipedia` | Wikipedia article reference |
| `source_bbox` | The query bbox that returned this element |

#### Example result

```json
{
  "osm_id": 12345678,
  "osm_type": "relation",
  "route_name": "Nakasendo Trail",
  "route_type": "hiking",
  "network": "nwn",
  "distance_km": 42.5,
  "from_node": "Magome",
  "to_node": "Narai",
  "bbox_south": 35.57,
  "bbox_west": 137.49,
  "bbox_north": 35.98,
  "bbox_east": 137.88,
  "tags": "{\"route\":\"hiking\",\"network\":\"nwn\",\"name\":\"Nakasendo Trail\"}",
  "source_bbox": "35.5,136.5,36.2,137.5"
}
```

***

### Rate limits and mirrors

The public `overpass-api.de` server enforces a concurrent-query limit. For bulk collection across many bounding boxes, use the **Mirror Endpoint** input to point at a less-loaded server:

- `https://overpass.kumi.systems/api/interpreter`
- `https://maps.mail.ru/osm/tools/overpass/api/interpreter`
- `https://overpass.openstreetmap.ru/api/interpreter`

The actor inserts an 800 ms delay between successive bbox queries to respect server etiquette.

***

### License

Route data is copyright OpenStreetMap contributors, available under the [Open Database Licence](https://www.openstreetmap.org/copyright). Attribution is required for any derived work.

# Actor input Schema

## `sp_intended_usage` (type: `string`):

Please describe how you plan to use the data extracted by this crawler.

## `sp_improvement_suggestions` (type: `string`):

Provide any feedback or suggestions for improvements.

## `sp_contact` (type: `string`):

Provide your email address so we can get in touch with you.

## `maxItems` (type: `integer`):

Maximum number of hiking route relations to return (across all queries).

## `bboxList` (type: `array`):

List of bounding boxes to query, each as south,west,north,east decimal degrees. Example 35.5,136.5,36.2,137.5 for a region in Japan. Leave empty to use regionNames.

## `regionNames` (type: `array`):

List of place names to resolve to bounding boxes via Nominatim. Used when bboxList is empty. Example Switzerland or Tyrol, Austria.

## `routeTypes` (type: `array`):

OSM route tag values to include. Supported values are hiking and foot. Defaults to both when empty.

## `networkFilter` (type: `array`):

Filter by OSM network tag. Values are iwn international, nwn national, rwn regional, lwn local. Leave empty to include all levels.

## `mirrorEndpoint` (type: `string`):

Alternative Overpass API endpoint URL. Useful when the primary overpass-api.de is overloaded. Example https://overpass.kumi.systems/api/interpreter.

## Actor input object example

```json
{
  "sp_intended_usage": "Describe your intended use...",
  "sp_improvement_suggestions": "Share your suggestions here...",
  "sp_contact": "Share your email here...",
  "maxItems": 10,
  "bboxList": [
    "35.5,136.5,36.2,137.5"
  ],
  "regionNames": [],
  "routeTypes": [
    "hiking",
    "foot"
  ],
  "networkFilter": []
}
```

# Actor output Schema

## `results` (type: `string`):

No description

# 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 = {
    "sp_intended_usage": "Describe your intended use...",
    "sp_improvement_suggestions": "Share your suggestions here...",
    "sp_contact": "Share your email here...",
    "maxItems": 10,
    "bboxList": [
        "35.5,136.5,36.2,137.5"
    ],
    "regionNames": [],
    "routeTypes": [
        "hiking",
        "foot"
    ],
    "networkFilter": [],
    "mirrorEndpoint": ""
};

// Run the Actor and wait for it to finish
const run = await client.actor("jungle_synthesizer/osm-overpass-hiking-route-relation-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 = {
    "sp_intended_usage": "Describe your intended use...",
    "sp_improvement_suggestions": "Share your suggestions here...",
    "sp_contact": "Share your email here...",
    "maxItems": 10,
    "bboxList": ["35.5,136.5,36.2,137.5"],
    "regionNames": [],
    "routeTypes": [
        "hiking",
        "foot",
    ],
    "networkFilter": [],
    "mirrorEndpoint": "",
}

# Run the Actor and wait for it to finish
run = client.actor("jungle_synthesizer/osm-overpass-hiking-route-relation-scraper").call(run_input=run_input)

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

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

```

## CLI example

```bash
echo '{
  "sp_intended_usage": "Describe your intended use...",
  "sp_improvement_suggestions": "Share your suggestions here...",
  "sp_contact": "Share your email here...",
  "maxItems": 10,
  "bboxList": [
    "35.5,136.5,36.2,137.5"
  ],
  "regionNames": [],
  "routeTypes": [
    "hiking",
    "foot"
  ],
  "networkFilter": [],
  "mirrorEndpoint": ""
}' |
apify call jungle_synthesizer/osm-overpass-hiking-route-relation-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=jungle_synthesizer/osm-overpass-hiking-route-relation-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "OSM Overpass Hiking Trail Route Scraper",
        "description": "Query the Overpass API for OpenStreetMap hiking route relations by bounding box or region. Returns ODbL-licensed trail geometry: route names, distance, network level, way coordinates, and full OSM tags. The only license-clean trail corpus on Apify — safe for AI training and GIS use.",
        "version": "0.1",
        "x-build-id": "P92UNNaeEpTI2Kh8x"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/jungle_synthesizer~osm-overpass-hiking-route-relation-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-jungle_synthesizer-osm-overpass-hiking-route-relation-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/jungle_synthesizer~osm-overpass-hiking-route-relation-scraper/runs": {
            "post": {
                "operationId": "runs-sync-jungle_synthesizer-osm-overpass-hiking-route-relation-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/jungle_synthesizer~osm-overpass-hiking-route-relation-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-jungle_synthesizer-osm-overpass-hiking-route-relation-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "required": [
                    "maxItems"
                ],
                "properties": {
                    "sp_intended_usage": {
                        "title": "What is the intended usage of this data?",
                        "minLength": 1,
                        "type": "string",
                        "description": "Please describe how you plan to use the data extracted by this crawler."
                    },
                    "sp_improvement_suggestions": {
                        "title": "How can we improve this crawler for you?",
                        "minLength": 1,
                        "type": "string",
                        "description": "Provide any feedback or suggestions for improvements."
                    },
                    "sp_contact": {
                        "title": "Contact Email",
                        "minLength": 1,
                        "type": "string",
                        "description": "Provide your email address so we can get in touch with you."
                    },
                    "maxItems": {
                        "title": "Max Items",
                        "type": "integer",
                        "description": "Maximum number of hiking route relations to return (across all queries).",
                        "default": 100
                    },
                    "bboxList": {
                        "title": "Bounding Boxes",
                        "type": "array",
                        "description": "List of bounding boxes to query, each as south,west,north,east decimal degrees. Example 35.5,136.5,36.2,137.5 for a region in Japan. Leave empty to use regionNames.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "regionNames": {
                        "title": "Region Names (Nominatim lookup)",
                        "type": "array",
                        "description": "List of place names to resolve to bounding boxes via Nominatim. Used when bboxList is empty. Example Switzerland or Tyrol, Austria.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "routeTypes": {
                        "title": "Route Types",
                        "type": "array",
                        "description": "OSM route tag values to include. Supported values are hiking and foot. Defaults to both when empty.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "networkFilter": {
                        "title": "Network Filter",
                        "type": "array",
                        "description": "Filter by OSM network tag. Values are iwn international, nwn national, rwn regional, lwn local. Leave empty to include all levels.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "mirrorEndpoint": {
                        "title": "Mirror Endpoint URL",
                        "type": "string",
                        "description": "Alternative Overpass API endpoint URL. Useful when the primary overpass-api.de is overloaded. Example https://overpass.kumi.systems/api/interpreter."
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
