AllTrails Scraper — Hiking Trail Data API
Pricing
from $11.00 / 1,000 trail items
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
Maintained by CommunityActor stats
0
Bookmarked
13
Total users
3
Monthly active users
15 hours ago
Last modified
Categories
Features
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:
| Field | What it contains | Filled when |
|---|---|---|
trailId, name, slug, url | Trail path, name and AllTrails link | Always |
avgRating, numReviews | Average star rating and review count | Almost always |
difficulty | easy, moderate, hard or strenuous | The summary states it (most trails) |
lengthMiles, lengthKm | Trail length | The summary states it (most trails) |
elevationGainFt, elevationGainMeters | Elevation gain | The summary states it (most trails) |
estimatedDuration, estimatedDurationMinutes | AllTrails' estimated time, as written and in minutes (null minutes for an open-ended time such as 24 hr+) | The summary states it |
routeType | loop, out-and-back or point-to-point | The summary states it (a minority of trails) |
state, country | Region and country | Always |
areaName, city | Park or area, and the place named in "near ..." | When shown |
description | AllTrails' short summary text, cut to whole sentences | When the result shows the summary |
isClosed | true when AllTrails marks the trail [CLOSED] | Always |
searchRank, source, scrapedAt | Position in its search, the input that found it, collection time | Always |
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.
- Keyword Search (
mode: search): trails matching your words anywhere on AllTrails, up to about 100 per keyword. Add astate(and acountryother thanus) to stay inside one region. - By National Park (
mode: byPark): trails whose AllTrails page names the park, for examplezion-national-parkwith stateutah. - 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. - By Country (
mode: byCountry): the top trails in one country, for examplenew-zealand. - By Trail Slug (
mode: byTrail): one trail, for exampleangels-landing-trailwith stateutah. - 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 osfrom apify_client import ApifyClientclient = 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.
| Event | FREE | BRONZE | SILVER | GOLD | PLATINUM / DIAMOND |
|---|---|---|---|---|---|
| Trail record (one dataset row) | USD 0.015 | USD 0.015 | USD 0.015 | USD 0.011 | USD 0.011 |
| Actor start (per started GB of allocated memory) | USD 0.005 | USD 0.005 | USD 0.005 | USD 0.005 | USD 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-foundfor 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.
Related Actors
Other travel and local-place data tools from the same developer:
- Kakao Map Scraper for Korean businesses and visit reviews
- UK Food Hygiene Ratings Scraper for official ratings of UK food businesses
- Momondo Flight Prices Scraper for flight fares on a route
- Weedmaps Dispensary Scraper for US cannabis dispensary lists
- Google Maps Scraper for businesses in any category
Legal and compliance
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