# AllTrails Trail Scraper (`parseforge/alltrails-scraper`) Actor

Scrapes AllTrails trail listings by national park, US state, city, or custom coordinates. Returns each trail as a flat row with difficulty, length, elevation, rating, reviews, and activity tags.

- **URL**: https://apify.com/parseforge/alltrails-scraper.md
- **Developed by:** [ParseForge](https://apify.com/parseforge) (community)
- **Categories:** Travel, E-commerce, Lead generation
- **Stats:** 127 total users, 10 monthly users, 98.5% runs succeeded, 5 bookmarks
- **User rating**: 3.98 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?

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

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

### AllTrails Trail Scraper

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

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 AllTrails scrapers may offer additional data types like weather or reviews.

| Feature | ParseForge | AllTrails Trail Scraper | AllTrails Scraper | AllTrails Scraper |
|---|---|---|---|---|
| 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 |

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 [AllTrails Trail 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 unofficial and is not affiliated with, endorsed by, or sponsored by AllTrails, LLC. 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.

## 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"
}
```

# 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/9P8mwfXeLJrVuVy9F/openapi.json
