AllTrails Scraper — Hiking Trail Data API avatar

AllTrails Scraper — Hiking Trail Data API

Pricing

from $11.00 / 1,000 trail items

Go to Apify Store
AllTrails Scraper — Hiking Trail Data API

AllTrails Scraper — Hiking Trail Data API

Scrape AllTrails hiking trail data by keyword, park, city or URL: name, link, length, elevation, rating and location as JSON. USD 15 per 1,000 trails.

Pricing

from $11.00 / 1,000 trail items

Rating

0.0

(0)

Developer

Muhammad Afzal

Muhammad Afzal

Maintained by Community

Actor stats

0

Bookmarked

13

Total users

3

Monthly active users

15 hours ago

Last modified

Features

Limited permissions

Share

AllTrails Scraper exports AllTrails hiking trail data as JSON: search by keyword, national park, city, state or country, or paste AllTrails URLs, and get each trail's name, link, length, elevation gain, difficulty, estimated time, star rating, review count and location. It is built for travel apps, outdoor brands, tourism researchers and data teams, and it costs USD 15 per 1,000 trails on the FREE tier (USD 11 per 1,000 on GOLD).

How it works (since 2026-10-31): the Actor reads the trail summaries AllTrails publishes in public search results, the same text and star line people see when they search for a trail. It never opens AllTrails pages and needs no login. Each result is matched to its exact AllTrails trail URL.

What AllTrails data does the scraper return?

Each trail is one dataset row:

FieldWhat it containsFilled when
trailId, name, slug, urlTrail path, name and AllTrails linkAlways
avgRating, numReviewsAverage star rating and review countAlmost always
difficultyeasy, moderate, hard or strenuousThe summary states it (most trails)
lengthMiles, lengthKmTrail lengthThe summary states it (most trails)
elevationGainFt, elevationGainMetersElevation gainThe summary states it (most trails)
estimatedDuration, estimatedDurationMinutesAllTrails' estimated time, as written and in minutes (null minutes for an open-ended time such as 24 hr+)The summary states it
routeTypeloop, out-and-back or point-to-pointThe summary states it (a minority of trails)
state, countryRegion and countryAlways
areaName, cityPark or area, and the place named in "near ..."When shown
descriptionAllTrails' short summary text, cut to whole sentencesWhen the result shows the summary
isClosedtrue when AllTrails marks the trail [CLOSED]Always
searchRank, source, scrapedAtPosition in its search, the input that found it, collection timeAlways

A field is null when the summary shown for that trail does not state it. Values come from AllTrails' published summaries, which can lag the live trail page by a few days. The Actor does not return coordinates, GPX tracks, photos, activity tags or review text.

How do I scrape AllTrails trails by keyword, park or URL?

Choose a Search Mode (or paste URLs), set Max Items, and run.

  1. Keyword Search (mode: search): trails matching your words anywhere on AllTrails, up to about 100 per keyword. Add a state (and a country other than us) to stay inside one region.
  2. By National Park (mode: byPark): trails whose AllTrails page names the park, for example zion-national-park with state utah.
  3. By City or State (mode: byCity): trails that mention a city in a state, or the top trails of a whole state when City is empty.
  4. By Country (mode: byCountry): the top trails in one country, for example new-zealand.
  5. By Trail Slug (mode: byTrail): one trail, for example angels-landing-trail with state utah.
  6. Start URLs: AllTrails trail, park, city, state and country URLs, up to 100 per run. Trail URLs give one row each. Explore, list and home pages are rejected with a reason.

Filters keep only trails whose value is known and matches: difficulty, minimum rating, minimum and maximum length in km, and route type. The route type is stated for only a minority of trails, so that filter returns far fewer rows. The activity option adds the activity as a search keyword; trails are not checked one by one.

Keyword search with filters:

{
"mode": "search",
"searchQuery": "yosemite",
"difficulty": "hard",
"minRating": 4.5,
"maxItems": 30
}

One trail by URL:

{
"startUrls": [{ "url": "https://www.alltrails.com/trail/us/california/upper-yosemite-falls-trail" }],
"maxItems": 1
}

Trails in a national park:

{
"mode": "byPark",
"park": "zion-national-park",
"state": "utah",
"maxItems": 50
}

When should I use AllTrails Scraper, and when not?

Use it when you need a list of trails for a destination or theme with length, elevation gain, difficulty, time and rating, for trip-planning features, regional trail inventories, content research or outdoor marketing.

Use another tool when:

  • You need GPX tracks, route lines or coordinates. This Actor returns none.
  • You need review text or photos. It returns the review count and average rating only.
  • You need every trail in a large region. Each keyword, park, city, state or country gives at most about 100 trails; split the job into narrower searches.
  • You need businesses near a trailhead, such as outfitters or lodging: Google Maps Scraper.
  • You need outdoor gear prices: Academy Sports + Outdoors Scraper.

How do I get AllTrails data through an API?

Run the Actor through the Apify API and read the dataset. This is not an official AllTrails API.

JavaScript with apify-client:

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('muhammadafzal/alltrails-scraper').call({
mode: 'search',
searchQuery: 'zion',
maxItems: 20,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items.map((t) => [t.name, t.lengthKm, t.elevationGainMeters, t.avgRating]));

Python with apify-client:

import os
from apify_client import ApifyClient
client = ApifyClient(os.environ["APIFY_TOKEN"])
run = client.actor("muhammadafzal/alltrails-scraper").call(run_input={
"mode": "byPark",
"park": "olympic-national-park",
"state": "washington",
"minRating": 4.5,
"maxItems": 25,
})
for trail in client.dataset(run.default_dataset_id).iterate_items():
print(trail["name"], trail.get("lengthKm"), trail.get("difficulty"))

Datasets export as JSON, CSV or Excel, and runs can be scheduled or connected to webhooks, Make, Zapier or Google Sheets.

Use it from an AI assistant

AllTrails Scraper works from Claude, ChatGPT, Cursor or any MCP client through Apify's MCP server. Add the single-tool URL https://mcp.apify.com/?tools=muhammadafzal/alltrails-scraper to your client, then ask in plain language, for example: "Use AllTrails Scraper to search 'zion' and give me 20 trails as a table with length in km, elevation gain, difficulty and rating." Each trail is charged at the prices below, so include a trail limit in the prompt.

What does the output look like?

Rows 1 and 10 of the default keyword search for yosemite (a real cloud run, 2026-10-31):

[
{
"trailId": "us/california/el-capitan-from-yosemite-valley",
"name": "El Capitan from Yosemite Valley",
"slug": "el-capitan-from-yosemite-valley",
"url": "https://www.alltrails.com/trail/us/california/el-capitan-from-yosemite-valley",
"description": "El Capitan from Yosemite Valley is considered a hard hike that covers 14.8 mi, with an elevation gain of 4,609 ft. It takes about 9.5–10.5 hr to complete.",
"difficulty": "hard",
"routeType": null,
"lengthMiles": 14.8,
"lengthKm": 23.8,
"elevationGainFt": 4609,
"elevationGainMeters": 1405,
"estimatedDuration": "9.5–10.5 hr",
"estimatedDurationMinutes": 600,
"avgRating": 4.8,
"numReviews": 2091,
"city": null,
"state": "California",
"country": "United States",
"areaName": "Yosemite National Park",
"isClosed": false,
"searchRank": 1,
"source": "yosemite",
"scrapedAt": "2026-10-31T12:52:23.313Z"
},
{
"trailId": "us/california/taft-point-and-the-fissures",
"name": "Taft Point and The Fissures",
"slug": "taft-point-and-the-fissures",
"url": "https://www.alltrails.com/trail/us/california/taft-point-and-the-fissures",
"description": "Taft Point and The Fissures is considered an easy hike that covers 2.5 mi, with an elevation gain of 328 ft. It takes about 1–1.5 hr to complete.",
"difficulty": "easy",
"routeType": null,
"lengthMiles": 2.5,
"lengthKm": 4,
"elevationGainFt": 328,
"elevationGainMeters": 100,
"estimatedDuration": "1–1.5 hr",
"estimatedDurationMinutes": 75,
"avgRating": 4.9,
"numReviews": 3875,
"city": null,
"state": "California",
"country": "United States",
"areaName": "Yosemite National Park",
"isClosed": false,
"searchRank": 10,
"source": "yosemite",
"scrapedAt": "2026-10-31T12:52:23.313Z"
}
]

Most rows from a keyword, park or place search look like these. routeType and city are filled only for the minority of trails whose summary states them, and estimatedDurationMinutes is null for an open-ended time such as 24 hr+.

The run also writes an OUTPUT record with the status (DATA, EMPTY, BLOCKED, REJECTED or FAILED), counts, charged events, stop reason, warnings and a result line per source.

How much does AllTrails Scraper cost?

AllTrails Scraper uses pay-per-event pricing. Platform usage is included in the event prices.

EventFREEBRONZESILVERGOLDPLATINUM / DIAMOND
Trail record (one dataset row)USD 0.015USD 0.015USD 0.015USD 0.011USD 0.011
Actor start (per started GB of allocated memory)USD 0.005USD 0.005USD 0.005USD 0.005USD 0.005

The default memory is 256 MB, which is one start event. Worked totals on the FREE tier:

  • Default input (keyword search yosemite, 10 trails): 10 × USD 0.015 + USD 0.005 = USD 0.155
  • One keyword search with 100 trails: 100 × USD 0.015 + USD 0.005 = USD 1.505 (USD 1.105 on GOLD)

A row is charged when it has at least one trail metric (rating, length, elevation gain or difficulty); a row with only a name and link would be saved free. A run that returns no trails, is rejected or cannot read any source charges only the start fee. If the run's maximum cost is reached, the Actor stops and says so in its status message; a maximum cost too small for one trail record is rejected before any paid request. Set a maximum cost per run in Apify Console to cap spending.

What are the limits?

  • About 100 trails per source. Each keyword, park, city, state or country reads up to 10 results pages. Run several narrower searches for more coverage.
  • Summary-based fields. Length, elevation gain, difficulty and time are filled when the trail's published summary states them; rating and review count come with almost every trail. Values can lag the live AllTrails page by a few days.
  • Trail lookups. A trail URL or slug that is not in the public search index ends as not-found for that source, without a charge.
  • Input needs a source. A run with no URLs, search query, park, city, state or trail slug is rejected before any request. The Console default is keyword search for yosemite.
  • Speed. The default input usually finishes in about one minute: each results page needs about half a minute before every result can be matched to its trail URL. It can take about two minutes when some result links take longer to resolve or filters drop rows. Runs with a timeout under about two minutes may stop before the first page can be matched.
  • Data access is handled by the Actor, so you do not need your own proxy.

FAQ

Is AllTrails Scraper an official AllTrails API?

No. It is an independent tool that reads the trail summaries AllTrails publishes in public search results, and you access the results through Apify's API, MCP server or dataset exports.

How many trails can I get per run?

Up to about 100 per keyword, park, city, state or country, and one per trail URL. Set maxItems to cap the run; 0 means every trail found.

Does it return trail reviews or photos?

No. Each trail has its average star rating and review count, not review text or photos.

Does it export GPX files or coordinates?

No. Use the trail URL to open the map on AllTrails.

Can I filter by difficulty, length or rating?

Yes. Filters keep only trails whose value is known and matches, so a filtered run can return fewer rows than Max Items.

Is there a free AllTrails scraper?

You can run AllTrails Scraper on Apify's free plan. Each trail record is charged at the FREE-tier price above, and there is no subscription.

Other travel and local-place data tools from the same developer:

AllTrails Scraper collects trail facts that AllTrails publishes publicly in search results. It does not log in, does not open AllTrails pages, and does not bypass CAPTCHAs or other access controls. You are responsible for following AllTrails' terms and the laws that apply to your use. This is not legal advice, and the Actor is not affiliated with AllTrails.

Last verified: 2026-10-31