AllTrails Hiking Scraper - Trails, Stats & Reviews
Pricing
from $1.20 / 1,000 trail records
AllTrails Hiking Scraper - Trails, Stats & Reviews
Scrape AllTrails, the world's largest hiking platform: trails with difficulty, length, elevation gain, route type, ratings, review counts, dog and kid friendly attributes, trail conditions and hiker reviews. Browse any region or paste links, with recurring change monitoring.
Pricing
from $1.20 / 1,000 trail records
Rating
0.0
(0)
Developer
Abot API
Maintained by CommunityActor stats
0
Bookmarked
3
Total users
2
Monthly active users
3 days ago
Last modified
Categories
Share
AllTrails Hiking Scraper
Collect public AllTrails trail records from regional grids, tag grids, or trail links. Listing mode returns core trail identity, location, ratings, difficulty, distance, elevation, and route information when the site serves it. Detail mode adds descriptions, conditions, attributes, rating breakdowns, counts, and recent reviews. The actor also supports photos, readable GPS-track files, resume, incremental monitoring, and optional connector delivery.
Why This Scraper?
- Collects trail identity, location, difficulty, ratings, distance, elevation, route type, activities, and features in one dataset row.
- Supports regional browsing, tag-specific grids, pasted grid links, and pasted trail links.
- Reads the site's served GPS track as an encoded polyline with a point count when detail mode provides it.
- Adds descriptions, alerts, highlights, review samples, weather, popularity, and community photos when enabled.
- Applies difficulty, rating, review-count, activity, route-type, length, elevation, and feature filters consistently in both collection modes.
- Supports resume for interrupted runs and incremental labels for recurring monitoring.
- Keeps the complete dataset in Apify and can optionally export a concise summary through an authorized connector.
Data You Get
Sample shape: values are illustrative placeholders, not from a live trail.
| Field | Example |
|---|---|
recordType | trail |
id | 00000001 |
name | Sample Lake Loop Trail |
url | https://www.alltrails.com/explore/trail/sample-lake-loop-trail |
slug | trail/us/colorado/sample-lake-loop-trail |
difficulty / difficultyGrade | moderate / 3 |
rating / ratingCount | 4.8 / 1200 |
lengthMeters / lengthMiles | 8500 / 5.3 |
elevationGainMeters / elevationMaxMeters | 420 / 3120 |
durationMinutes / routeType | 180 / Loop |
activities / features | ["hiking"] / ["lake"] |
areaName / stateName | Sample National Park / Colorado |
cityName / countryName | Sample Valley / United States |
lat / lng | 39.0000 / -106.7000 |
routeGeometry / routePoints | encoded-polyline-placeholder / 000 |
overview / description | Sample overview / Sample description text |
alerts / highlights | [] / [] |
reviews / photos | [] / [] |
surfaceTypes / weather | ["dirt"] / {"summary":"Sample forecast"} |
sourceUrl / scrapedAt | https://www.alltrails.com/us/colorado / 2026-01-01T00:00:00.000Z |
Listing fields are populated whenever the source supplies them. Detail fields depend on fetchDetails. The detail page serves the five most recent reviews, five per trail, in the reviews field. routeGeometry and routePoints are present only when the site serves a GPS track. photos depends on fetchPhotos and the photo service response.
How to Use
Browse one geographic region with the default listing fields. Type a place or
region keyword such as California, Yosemite, or British Columbia into
regionPath. The actor resolves the best geographic match on AllTrails, then
builds the region and tag-grid URLs. By contrast, My own links mode accepts
a list of separate grid or trail links.
{"mode": "search","regionPath": "Colorado","maxItems": 20}
Browse with tags, filters, and detail enrichment:
{"mode": "search","regionPath": "Colorado","tags": ["backpacking", "waterfall"],"difficulty": ["moderate", "hard"],"minRating": 4.5,"fetchDetails": true,"maxItems": 50}
Read pasted grid and trail links:
{"mode": "urls","urls": ["https://www.alltrails.com/us/california","https://www.alltrails.com/explore/trail/us/colorado/sample-lake-loop-trail"],"fetchDetails": true,"maxItems": 10}
A pasted trail link still produces a URL-backed row if the detail page is temporarily refused; detail-only fields remain empty and no detail surcharge is charged. A genuine missing trail page is omitted.
Run recurring monitoring with readable track files:
{"mode": "urls","urls": ["https://www.alltrails.com/us/colorado"],"fetchDetails": true,"storeTracksInKV": true,"incrementalMode": true,"stateKey": "sample-colorado-monitor"}
Use fetchDetails: true when you need descriptions, reviews, detail attributes, or GPS tracks. The dataset row is always the primary output. storeTracksInKV adds a readable key such as track__us-california__vernal-falls.json for systems that prefer one track object per trail.
Send results into your apps (MCP connectors)
Add authorized connector IDs to mcpConnectors to send concise summaries after the scrape. Set notionParentPageUrl when using Notion. Connector delivery is optional and never changes the complete Apify dataset.
Input Parameters
| Parameter | Type | Default | Description |
|---|---|---|---|
mode | string | search | Choose search to browse a region or urls to read the links in urls. |
regionPath | string | California | Place or region keyword resolved to a geographic AllTrails scope in search mode. Existing paths and full AllTrails URLs remain accepted for compatibility. |
tags | string[] | ["backpacking"] | Optional tag grids to add after the region grid. An unavailable tag produces a clear validation failure. |
urls | string[] | sample region URL | Grid or trail links used by urls mode. Trail links produce one enriched trail record. |
followSubGrids | boolean | false | In urls mode, follow additional grid links discovered from pasted grid pages, which is read in that mode only. |
fetchDetails | boolean | false | Open each trail detail page for descriptions, exact attributes, conditions, reviews, and any GPS track served by the page. A detail charge applies to successfully saved detail rows. |
fetchPhotos | boolean | true | Fetch community photos from the separate photo service. A failure keeps the trail row and does not fail the run. |
maxPhotos | integer | 10 | Maximum photos per trail when enabled. Range: 1 to 50. |
storeTracksInKV | boolean | false | Save each served GPS track as a readable per-trail KV record in addition to the dataset row. A storage charge applies only after the KV write succeeds. |
difficulty | string[] | empty | Keep only trails labelled easy, moderate, hard, or strenuous. Applied to records collected in either mode. |
minRating | number | 0 | Keep trails whose rating is at least this value. Range: 0 to 5. |
minReviews | integer | 0 | Keep trails with at least this many reviews. |
activityFilter | string[] | empty | Keep trails tagged with at least one activity such as hiking, backpacking, or mountain-biking. |
routeTypeFilter | string[] | empty | Keep loop, out-and-back, or point-to-point routes. |
lengthMin | number | empty | Keep trails at least this long, in metres. |
lengthMax | number | empty | Keep trails no longer than this, in metres. |
elevationGainMin | number | empty | Keep trails with at least this elevation gain, in metres. |
elevationGainMax | number | empty | Keep trails with no more than this elevation gain, in metres. |
featuresFilter | string[] | empty | Keep trails containing every selected feature label, such as waterfall, views, forest, or dogs-leash. |
maxItems | integer | 20 | Maximum trail rows across the run. 0 means no item cap. |
maxPages | integer | 0 | Maximum grid pages as a runaway guard. 0 reads until the configured scope ends. |
resumeFromRunId | string | empty | Continue one interrupted run or dataset. Previously returned trail IDs are skipped. Do not combine this with incremental monitoring. |
incrementalMode | boolean | false | Remember the same scope for recurring runs. The first run returns NEW; later runs return changes by default. |
stateKey | string | empty | Optional name for the incremental campaign. Empty derives a stable key from the collection scope. |
emitUnchanged | boolean | false | In incremental mode, also return unchanged trails labelled UNCHANGED. These rows are returned and billed. |
emitExpired | boolean | false | In incremental mode, return trails absent from a complete scan as EXPIRED. Capped or interrupted scans do not infer expiration. |
mcpConnectors | string[] | empty | Optional authorized connector IDs for concise result summaries after the scrape. |
notionParentPageUrl | string | empty | Notion destination page when a Notion connector is selected. Ignored by other connectors. |
maxNotifyListings | integer | 50 | Maximum rows sent to each connector. Does not change the dataset. |
proxyConfiguration | object | Apify connection | Connection settings for source requests. Keep the prefilled setting unless you have an authorized alternative. |
Resume and incremental monitoring are separate features. Resume continues one interrupted collection. Incremental mode compares recurring runs of the same scope and adds changeType, changedFields, firstSeenAt, and lastSeenAt to returned rows.
Output Example
Sample shape: values are illustrative placeholders, not from a live trail.
{"recordType": "trail","id": "00000001","name": "Sample Lake Loop Trail","url": "https://www.alltrails.com/explore/trail/sample-lake-loop-trail","slug": "trail/us/colorado/sample-lake-loop-trail","difficulty": "moderate","difficultyGrade": 3,"rating": 4.8,"ratingCount": 1200,"reviewTextCount": 300,"lengthMeters": 8500,"lengthMiles": 5.3,"elevationGainMeters": 420,"elevationMaxMeters": 3120,"durationMinutes": 180,"routeType": "Loop","activities": ["hiking"],"features": ["lake", "views"],"areaName": "Sample National Park","areaSlug": "parks/us/colorado/sample-national-park","cityName": "Sample Valley","stateName": "Colorado","countryName": "United States","lat": 39.0000,"lng": -106.7000,"routeGeometry": "encoded-polyline-placeholder","routePoints": 0,"imageUrl": "https://images.alltrails.com/000000000-placeholder","overview": "Sample trail overview.","description": "Sample detail description text appears when fetchDetails is enabled.","alerts": [],"highlights": [],"ratingsBreakdown": {"1": 10, "2": 20, "3": 80, "4": 300, "5": 790},"reviewCount": 300,"photoCount": 40,"completedCount": 8000,"seasonStart": "2026-05-01","seasonEnd": "2026-10-01","reviews": [],"photos": [],"surfaceTypes": ["dirt"],"weather": {"summary": "Sample forecast"},"popularity": 0.75,"reviewsFetched": 5,"sourceType": "grid","sourceUrl": "https://www.alltrails.com/us/colorado","position": 1,"scrapedAt": "2026-01-01T00:00:00.000Z","changeType": "NEW","changedFields": [],"firstSeenAt": "2026-01-01T00:00:00.000Z","lastSeenAt": "2026-01-01T00:00:00.000Z"}
Plan Requirement
An Apify account and a connection configuration that can access the selected public source are required. The actor uses the connection settings supplied in the input and returns source-derived rows only when the source serves the requested data.