# All Trails Hiking Trail Data Scraper (`parseforge/alltrails-scraper`) Actor

Scrape hiking trail data (difficulty, length, elevation, ratings, reviews) by park, state, city or coordinates. Independent tool, not affiliated with or endorsed by AllTrails.

- **URL**: https://apify.com/parseforge/alltrails-scraper.md
- **Developed by:** [ParseForge](https://apify.com/parseforge) (community)
- **Categories:** Travel, E-commerce, Lead generation
- **Features:** Limited permissions
- **Stats:** 141 total users, 11 monthly users, 100.0% runs succeeded, 5 bookmarks
- **User rating**: 4.11 out of 5 stars

## Pricing

from $11.99 / 1,000 result items

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

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

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
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.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## 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.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

[![ParseForge](https://raw.githubusercontent.com/ParseForge/apify-assets/main/banner-v4.webp)](https://apify.com/parseforge?fpr=vmoqkp)

### All Trails Hiking Trail Data Scraper

> **Disclaimer:** This Actor is an independent tool and is not affiliated with, endorsed by, or sponsored by AllTrails, LLC or any of its subsidiaries. All trademarks mentioned are the property of their respective owners.

**Scrape hiking trail data from any AllTrails park, city, or custom coordinate area, up to a million trails per run.** Each trail comes with its difficulty, length, elevation gain, rating, reviews, and activity tags. No login or API key. Export to CSV, JSON, Excel, or XML.

**Low minimum charge:** $0.02 to start a run, then you only pay for the results you get.

AllTrails does not offer a public API for bulk trail data, and manual collection is slow when you need to compare hundreds of trails across regions. This Actor reads the public trail listings directly, filtered by difficulty, rating, length, elevation, route type, or features like waterfalls and dog access, and returns each match in one fixed schema.

| Who uses it | What they scrape AllTrails for |
|---|---|
| Outdoor gear brands | Find the most-reviewed trails in a region to plan product seeding campaigns. |
| Travel bloggers | Gather trail stats and descriptions for a roundup post on the best hikes in a national park. |
| App developers | Build a hiking recommendation engine with structured trail difficulty, length, and feature data. |
| Trip planners | Filter dog-friendly, kid-friendly trails under five miles near a vacation rental. |

### What it does

This Actor collects AllTrails trail listings by national park, US state, city name, or custom GPS coordinates, and returns each one as a flat row.

- 📍 **Location search:** pick a national park, US state, city, or draw a custom coordinate box.
- ⛰️ **Trail filters:** difficulty, minimum rating, minimum reviews, activity type, route type, length, and elevation gain.
- ✨ **Feature filters:** dog access, kid-friendly, waterfalls, lakes, views, forest, paved, and more.
- 👥 **Visitor traffic filter:** light, moderate, or heavy usage to match your crowd preference.
- 🌍 **Description language:** request trail descriptions in English, Spanish, French, or other supported languages.

Results export to CSV, JSON, Excel, or XML, or straight from the API.

### What you can do with AllTrails data

**📋 Build a regional trail database.**

A hiking app startup scrapes every trail in Colorado with a minimum 4-star rating and 50 reviews to seed their recommendation engine.

**🐕 Find dog-friendly weekend hikes.**

A pet brand pulls all dog-friendly trails under eight miles near Denver with light visitor traffic for a blog post on off-leash adventures.

**🏞️ Compare national park trail offerings.**

A travel writer scrapes Yosemite, Zion, and Yellowstone trails filtered by waterfalls and views to decide which park to feature in a guidebook chapter.

**🚵 Audit mountain biking routes by difficulty.**

A cycling club extracts all mountain biking trails in Utah with hard or expert difficulty and elevation gain over 1,000 meters to plan a race series.

### Why choose this scraper

|  | What you get |
|---|---|
| **Structured trail data** | Flat rows with difficulty, length, elevation, rating, review count, route type, and activity tags. |
| **Flexible location input** | Search by curated national park list, US state, city name, or a custom latitude/longitude bounding box. |
| **Deep filtering** | Narrow results by difficulty, rating, reviews, length, elevation, features, and visitor traffic before data is written. |
| **Multi-language support** | Request trail descriptions in English, Spanish, French, or other languages AllTrails supports. |

### How it compares

This Actor focuses on flexible location search and deep trail filtering, while other trail scrapers may offer additional data types like weather or reviews.

| Feature | ParseForge | Competitor A | Competitor B | Competitor C |
|---|---|---|---|---|
| Search by national park dropdown | Yes, 30+ parks and regions | Not listed | Not listed | Not listed |
| Search by custom GPS bounding box | Yes | Yes | Not listed | Not listed |
| Filter by trail features (waterfalls, dogs, etc.) | Yes, 19 features | Not listed | Not listed | Not listed |
| Filter by visitor traffic | Yes | Not listed | Not listed | Not listed |
| Multi-language description support | Yes | Not listed | Not listed | Not listed |
| Full trail descriptions | Yes | Yes | Yes | Yes |
| Individual review text | Not listed | Yes | Not listed | Yes |

### Configure the run

Drive the Actor from a park, state, city, or custom coordinates, and filters run as each trail is read so only matches reach your dataset. The Input tab lists every parameter.

A first run with the defaults:

```json
{
  "maxItems": 10,
  "region": "denver",
  "state": "colorado",
  "city": "Denver, CO"
}
```

A larger pull:

```json
{
  "maxItems": 200,
  "region": "denver",
  "state": "colorado",
  "city": "Denver, CO"
}
```

### Pricing

Pay-per-result: **$0.01599 per result** collected. You pay only for the results written to your dataset.

| Results collected | Approximate cost |
|---|---|
| 100 results | $1.60 |
| 1,000 results | $15.99 |
| 10,000 results | $159.90 |

#### Optional extras (from 2026-10-03)

Turn on `includePhotos` to get each trail's photo gallery: direct image URLs, the GPS position of every shot, like counts, captions and dates (up to 120 photos per trail). A trail whose gallery does not come back is never charged.

| Event | Price | Charged when |
|---|---|---|
| `apify-actor-start` | $0.005 per GB of run memory | the run starts |
| `trail-photos` | $0.005 per trail | `includePhotos` is on and at least one photo came back for the trail |

New Apify accounts start with $5 in free credit.

### Free users

Free-plan runs return up to 10 results as a preview. [Upgrade your Apify plan](https://console.apify.com/sign-up?fpr=vmoqkp) to collect up to 1,000,000 results per run.

### Run it

1. [Create a free Apify account with $5 in credit](https://console.apify.com/sign-up?fpr=vmoqkp).
2. Open the [Hiking Trail Data Scraper](https://apify.com/parseforge/alltrails-scraper?fpr=vmoqkp).
3. Set your inputs and any filters, then click **Start**.
4. Export the results as CSV, Excel, JSON, or XML from the **Dataset** tab.

Run it programmatically through the [Apify API](https://docs.apify.com/api/v2) (`run-sync-get-dataset-items`) or the [ApifyClient](https://docs.apify.com/api/client/js) for JavaScript and Python.

### Use with AI agents (MCP)

Give an AI agent live access to AllTrails through the Model Context Protocol. Add the Actor to Claude, Cursor, or any MCP client:

```bash
claude mcp add --transport http apify "https://mcp.apify.com?tools=parseforge/alltrails-scraper"
```

Then prompt it in plain language to run the scraper and read back the results.

### Troubleshooting

**Why am I getting no results?**

Check that your filters are not too restrictive. Try removing the minimum rating, minimum reviews, or feature filters and run again. Also confirm your location search type matches the input you provided.

**The Actor is only returning 10 trails.**

Free Apify accounts are limited to 10 items per run. Upgrade to a paid plan and increase the 'Maximum trails' setting to return more results.

**My custom coordinate search returns trails outside my box.**

Double-check your latitude and longitude values. North latitude must be greater than south latitude, and east longitude must be greater than west longitude (remember that western hemisphere longitudes are negative).

**The run fails with a timeout error.**

Large areas with many trails can take time. Try reducing the search radius for city searches, or use a smaller bounding box for custom coordinates. You can also increase the run timeout in the Actor's advanced settings.

**Trail descriptions are in the wrong language.**

Verify the 'Description Language' field is set to the correct two-letter code. If AllTrails does not have a description in that language, it may fall back to English.

### FAQ

| Question | Answer |
|---|---|
| Can I scrape trails from a specific national park? | Yes. Select 'National Park / Region' as the search type and pick from the dropdown, which includes Yosemite, Yellowstone, Zion, and over 30 other parks and popular areas. |
| How do I search by a custom area on the map? | Choose 'Custom Coordinates' as the search type and enter the north, south, east, and west boundaries of your bounding box. The Actor will scrape all trails within that rectangle. |
| Does this Actor get past AllTrails bot protection? | The Actor runs on the Apify platform with residential proxies and browser fingerprinting, which handles standard anti-bot measures. No additional setup is required from you. |
| Can I filter trails by whether dogs are allowed? | Yes. Use the Features filter and select 'Dogs Allowed (On Leash)' or 'Dogs Allowed (Off Leash)' to return only trails that match. |
| What trail details are included in the output? | Each row includes the trail name, difficulty, length, elevation gain, route type, rating, review count, activity tags, features, visitor traffic, and a description in your chosen language. |
| Can I scrape trails outside the United States? | Yes. The region dropdown includes Banff, Jasper, the Swiss Alps, and the Dolomites. You can also use the city search or custom coordinates for any location AllTrails covers. |
| How many trails can I scrape in one run? | Free Apify users are limited to 10 trails. Paid users can set the maximum up to 1,000,000 trails per run. |
| Can I get trail descriptions in Spanish or French? | Yes. Set the 'Description Language' field to 'es' for Spanish, 'fr' for French, or any other language code AllTrails supports. Leave it on 'en' for English. |
| Does this Actor scrape trail reviews? | The Actor collects the review count and rating for each trail. Individual review text is not included in the standard output. |
| Can I run this on a schedule to track new trails? | Yes. Once you configure the Actor, you can set it as an Apify task with a recurring schedule to capture newly added trails in your target area. |

### Related actors

Browse the full [ParseForge collection](https://apify.com/parseforge?fpr=vmoqkp) for more scrapers.

🆘 **Need help?** Email parseforge@protonmail.com with your run ID, your input, and what you expected.

⚠️ **Disclaimer.** This Actor is an independent tool and is not affiliated with, endorsed by, or sponsored by AllTrails, LLC or any of its subsidiaries. All trademarks mentioned are the property of their respective owners. It collects only publicly available data. You are responsible for using the collected data in compliance with the source's terms of service and applicable data-protection laws, including GDPR, CCPA, and PIPL. Do not use it to collect personal data unlawfully.

# Actor input Schema

## `startUrl` (type: `string`):

AllTrails URL to scrape. Supports: trail pages, park/area pages, city pages, or explore URLs with coordinates.

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

Maximum number of trails to extract. 🆓 Free users: Limited to 10. ✅ Paid users: Optional, max 1,000,000

## `searchType` (type: `string`):

How do you want to find trails? (Ignored if Start URLs provided)

## `region` (type: `string`):

Select a national park or predefined region

## `state` (type: `string`):

Search all trails in a US state

## `city` (type: `string`):

Enter a city name (e.g., Denver, CO or Seattle, WA)

## `searchRadius` (type: `integer`):

How far from the city center to search (in miles)

## `difficultyFilter` (type: `array`):

Only include trails with these difficulty levels

## `minRating` (type: `number`):

Only trails rated this high or better (0-5)

## `minReviews` (type: `integer`):

Only trails with at least this many reviews

## `activityFilter` (type: `array`):

Filter by activity type

## `routeTypeFilter` (type: `array`):

Filter by route type

## `lengthMin` (type: `integer`):

Minimum trail length in meters

## `lengthMax` (type: `integer`):

Maximum trail length in meters

## `elevationGainMin` (type: `integer`):

Minimum elevation gain in meters

## `elevationGainMax` (type: `integer`):

Maximum elevation gain in meters

## `featuresFilter` (type: `array`):

Filter by trail features

## `visitorUsageFilter` (type: `array`):

Filter by how busy the trail typically is

## `descriptionLanguage` (type: `string`):

Language code for trail descriptions (e.g., 'en' for English, 'es' for Spanish, 'fr' for French). Leave empty for English.

## `customTopLat` (type: `number`):

Northern boundary (e.g., 38.2)

## `customTopLng` (type: `number`):

Western boundary (e.g., -119.9). Negative for Western Hemisphere.

## `customBottomLat` (type: `number`):

Southern boundary (e.g., 37.5)

## `customBottomLng` (type: `number`):

Eastern boundary (e.g., -119.2). Negative for Western Hemisphere.

## `includePhotos` (type: `boolean`):

Adds a photos array to each trail: direct image URL, GPS position of the shot, like count, caption and date for the trail's user photos. One extra request per trail. Charged only for a row that receives it.

## `maxPhotosPerTrail` (type: `integer`):

How many photos to return per trail when Include photo gallery is on (1 to 120). Does not change the price.

## Actor input object example

```json
{
  "maxItems": 10,
  "searchType": "region",
  "region": "denver",
  "state": "colorado",
  "city": "Denver, CO",
  "searchRadius": 50,
  "difficultyFilter": [],
  "minRating": 0,
  "minReviews": 0,
  "activityFilter": [],
  "routeTypeFilter": [],
  "featuresFilter": [],
  "visitorUsageFilter": [],
  "descriptionLanguage": "en",
  "includePhotos": false,
  "maxPhotosPerTrail": 30
}
```

# Actor output Schema

## `defaultDataset` (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 = {
    "maxItems": 10,
    "region": "denver",
    "state": "colorado",
    "city": "Denver, CO"
};

// Run the Actor and wait for it to finish
const run = await client.actor("parseforge/alltrails-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 = {
    "maxItems": 10,
    "region": "denver",
    "state": "colorado",
    "city": "Denver, CO",
}

# Run the Actor and wait for it to finish
run = client.actor("parseforge/alltrails-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 '{
  "maxItems": 10,
  "region": "denver",
  "state": "colorado",
  "city": "Denver, CO"
}' |
apify call parseforge/alltrails-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,parseforge/alltrails-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/MMQdritoUWpzUVbah/builds/x6EN3zxamTdBBclgz/openapi.json
