AllTrails Hiking Scraper - Trails, Stats & Reviews avatar

AllTrails Hiking Scraper - Trails, Stats & Reviews

Pricing

from $1.20 / 1,000 trail records

Go to Apify Store
AllTrails Hiking Scraper - Trails, Stats & Reviews

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

Abot API

Maintained by Community

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

FieldExample
recordTypetrail
id00000001
nameSample Lake Loop Trail
urlhttps://www.alltrails.com/explore/trail/sample-lake-loop-trail
slugtrail/us/colorado/sample-lake-loop-trail
difficulty / difficultyGrademoderate / 3
rating / ratingCount4.8 / 1200
lengthMeters / lengthMiles8500 / 5.3
elevationGainMeters / elevationMaxMeters420 / 3120
durationMinutes / routeType180 / Loop
activities / features["hiking"] / ["lake"]
areaName / stateNameSample National Park / Colorado
cityName / countryNameSample Valley / United States
lat / lng39.0000 / -106.7000
routeGeometry / routePointsencoded-polyline-placeholder / 000
overview / descriptionSample overview / Sample description text
alerts / highlights[] / []
reviews / photos[] / []
surfaceTypes / weather["dirt"] / {"summary":"Sample forecast"}
sourceUrl / scrapedAthttps://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

ParameterTypeDefaultDescription
modestringsearchChoose search to browse a region or urls to read the links in urls.
regionPathstringCaliforniaPlace or region keyword resolved to a geographic AllTrails scope in search mode. Existing paths and full AllTrails URLs remain accepted for compatibility.
tagsstring[]["backpacking"]Optional tag grids to add after the region grid. An unavailable tag produces a clear validation failure.
urlsstring[]sample region URLGrid or trail links used by urls mode. Trail links produce one enriched trail record.
followSubGridsbooleanfalseIn urls mode, follow additional grid links discovered from pasted grid pages, which is read in that mode only.
fetchDetailsbooleanfalseOpen 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.
fetchPhotosbooleantrueFetch community photos from the separate photo service. A failure keeps the trail row and does not fail the run.
maxPhotosinteger10Maximum photos per trail when enabled. Range: 1 to 50.
storeTracksInKVbooleanfalseSave 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.
difficultystring[]emptyKeep only trails labelled easy, moderate, hard, or strenuous. Applied to records collected in either mode.
minRatingnumber0Keep trails whose rating is at least this value. Range: 0 to 5.
minReviewsinteger0Keep trails with at least this many reviews.
activityFilterstring[]emptyKeep trails tagged with at least one activity such as hiking, backpacking, or mountain-biking.
routeTypeFilterstring[]emptyKeep loop, out-and-back, or point-to-point routes.
lengthMinnumberemptyKeep trails at least this long, in metres.
lengthMaxnumberemptyKeep trails no longer than this, in metres.
elevationGainMinnumberemptyKeep trails with at least this elevation gain, in metres.
elevationGainMaxnumberemptyKeep trails with no more than this elevation gain, in metres.
featuresFilterstring[]emptyKeep trails containing every selected feature label, such as waterfall, views, forest, or dogs-leash.
maxItemsinteger20Maximum trail rows across the run. 0 means no item cap.
maxPagesinteger0Maximum grid pages as a runaway guard. 0 reads until the configured scope ends.
resumeFromRunIdstringemptyContinue one interrupted run or dataset. Previously returned trail IDs are skipped. Do not combine this with incremental monitoring.
incrementalModebooleanfalseRemember the same scope for recurring runs. The first run returns NEW; later runs return changes by default.
stateKeystringemptyOptional name for the incremental campaign. Empty derives a stable key from the collection scope.
emitUnchangedbooleanfalseIn incremental mode, also return unchanged trails labelled UNCHANGED. These rows are returned and billed.
emitExpiredbooleanfalseIn incremental mode, return trails absent from a complete scan as EXPIRED. Capped or interrupted scans do not infer expiration.
mcpConnectorsstring[]emptyOptional authorized connector IDs for concise result summaries after the scrape.
notionParentPageUrlstringemptyNotion destination page when a Notion connector is selected. Ignored by other connectors.
maxNotifyListingsinteger50Maximum rows sent to each connector. Does not change the dataset.
proxyConfigurationobjectApify connectionConnection 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.