· 14 min read
Mountain Project Scraper: Up to 1,000 Free Results a Month (2026)
Each route record carries up to 32 fields including GPS coordinates, descriptions, and star ratings. You can search the database for 500K+ routes and areas or lookup specific climbs by ID using the public API. A thousand results cost $5.00 on the free-plan price, and the output includes specific grade systems like YDS, French, and V-scale. This collector is built for developers populating outdoor maps and guidebook apps. It is not for users who need the full community photo pool for an area, which is only reachable via the photo search index.
Try it: open Mountain Project Scraper on Apify, sign in on the free plan and run the prefilled example.
Can you try Mountain Project Scraper before paying?
Yes. Apify's free plan includes $5.00 of prepaid usage every month and asks for no credit card. At $0.005 per result, that covers up to 1,000 results of Mountain Project Scraper a month, before run-start charges and platform usage.
The example request further down caps maxItems at 5, so a first run returns at most 5 results and costs at most $0.025 in result charges. That is enough to see the real shape of the data before deciding anything.
Mountain Project Scraper was last updated on 2026-08-14. It is one of 1,725 Actors CrawlerBros publishes on Apify, which together have 686,270 lifetime public runs and an average rating of 4.63 out of 5 across 416 reviews.
What does it cost to run Mountain Project Scraper?
Each result costs $0.005 on Apify's free plan, which is $5.00 per 1,000 results. Starting a run is charged separately at $0.005 per GB of Actor memory. Apify also bills the platform usage each run consumes, at the rates of your Apify plan, on top of these charges.
| Apify plan | Per result | Per 1,000 results |
|---|---|---|
| FREE | $0.005 | $5.00 |
| BRONZE | $0.00433 | $4.33 |
| SILVER | $0.00367 | $3.67 |
| GOLD | $0.003 | $3.00 |
| PLATINUM | $0.003 | $3.00 |
| DIAMOND | $0.003 | $3.00 |
The number of results written to the dataset determines the cost, so the maxItems and areaIds controls have the most impact on your bill. To see the data structure without spending more than $0.025 in result charges, run the Actor with the example input which caps maxItems at 5.
How do you run Mountain Project Scraper from the API?
The schema marks 1 of its 17 controls as required: mode. Every value in the payload below comes from the published schema's own prefills, which means you can paste it, swap the token, and get a real result.
Call the synchronous endpoint to start a run and receive dataset items in one request:
curl -X POST "https://api.apify.com/v2/acts/crawlerbros~mountainproject-scraper/run-sync-get-dataset-items?token=$APIFY_TOKEN" \
-H "Content-Type: application/json" \
-d '{"mode":"search","maxItems":5,"proxyConfiguration":{"useApifyProxy":false}}'
The same run from Python, using the official client:
from apify_client import ApifyClient
client = ApifyClient("<YOUR_APIFY_TOKEN>")
run_input = {
"mode": "search",
"maxItems": 5,
"proxyConfiguration": {
"useApifyProxy": False
}
}
run = client.actor("crawlerbros~mountainproject-scraper").call(run_input=run_input)
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
print(item)
And from Node.js:
import { ApifyClient } from 'apify-client'
const client = new ApifyClient({ token: '<YOUR_APIFY_TOKEN>' })
const input = {
"mode": "search",
"maxItems": 5,
"proxyConfiguration": {
"useApifyProxy": false
}
}
const run = await client.actor('crawlerbros~mountainproject-scraper').call(input)
const { items } = await client.dataset(run.defaultDatasetId).listItems()
console.log(items)
That endpoint blocks until the run completes. Fine while you are testing a handful of records, risky once a run takes minutes: a dropped connection loses the response even though the run itself finished. Switch to an asynchronous start with polling or a webhook before you schedule anything.
Which Mountain Project Scraper inputs matter, and which can you skip?
The mode control is the only required field and determines if the Actor searches keywords, browses areas, or looks up IDs. You should typically start with a low maxItems value and leave proxyConfiguration off unless you encounter 403 or 429 status codes.
mode(string): What to fetch. Default:"search".maxItems(integer): Hard cap on emitted records. Default:50.proxyConfiguration(object): Optional proxy. Only engaged automatically if the site starts returning 403/429.searchQuery(string): Free-text query (mode=search), e.g.el capitan,red river gorge,boulder problem. Default:"el capitan".searchType(string): Search routes or areas/crags (mode=search). Default:"routes".areaIds(array): Mountain Project area IDs or URLs, e.g.105708959orhttps://www.mountainproject.com/area/105708959/california. Routes are collected from the area and its sub-areas. Default:[].routeIds(array): Mountain Project route IDs or URLs, e.g.105924807orhttps://www.mountainproject.com/route/105924807/the-nose. Default:[].sortBy(string): Order of search results (mode=search). Default:"relevance".routeType(string): Only keep routes of this type (mode=search; searchType=routes).gradeMin(string): Lowest grade to keep, e.g.5.9,5.10d,V4,WI4,A2,M6(YDS, V-scale, aid, ice, mixed).gradeMax(string): Highest grade to keep, e.g.5.12,V10,WI5,A4,M8.minRating(number): Only keep routes rated at least this (0-5 stars).
The other 5 controls, with their defaults, are listed in the input schema on Mountain Project Scraper on Apify.
Fixed-choice controls: mode accepts search (Search routes), browseByArea (Browse routes by area / crag), byRouteIds (Lookup routes by route ID), popularRoutes (Popular classic routes); searchType accepts routes, areas (Areas / crags); sortBy accepts relevance, rating (Star rating (high to low)), longest (Longest first), shortest (Shortest first), popularity (Most popular); routeType accepts Trad, Sport, Toprope, Boulder, Ice, Aid, Mixed, Alpine.
What does Mountain Project Scraper return?
The output provides structured climbing beta like approach notes and protection details which are useful for navigation apps. It does not include user contact information or private access data not listed on the public route pages.
Output per route
routeId- Mountain Project route ID (e.g.105924807)name- route name (e.g. "The Nose")difficulty- combined grade string (e.g.5.9 C2,V2,WI4)gradeYds,gradeFrench,gradeEwbanks,gradeUiaa,gradeZa,gradeBritish- per-system grades (when available)routeTypes[]- e.g.["Trad", "Aid"](Trad / Sport / Toprope / Boulder / Ice / Aid / Mixed / Alpine)pitches,lengthFeet,lengthMetersrating- average star rating (0-5),voteCount,pageViewsdescription,approach,protection,descent,accessNotes[]firstAscent,submittedByareaId,parentAreaId,parentAreaName,breadcrumbs- location path (e.g.California > Yosemite National Park > ...)location-{latitude, longitude}GPS coordinatesthumbnailUrl,photoUrls[]sourceUrl,mountainProjectUrl,recordType: "route",scrapedAt
Output per area (mode = browseByArea)
areaId,name,breadcrumbs,isLeaf,depthsummary,overview,approachrouteTypeCounts- routes per type (sport,trad,boulder,ice, ...)location(GPS),radius,rating,popularity,childAreaCountthumbnailUrl,sourceUrl,recordType: "area",scrapedAt
These are the documented fields. Optional ones can be empty on a given record, so measure how often each field your deliverable depends on is populated across a real sample before automating the handoff.
How do you build the workflow end to end?
Open Mountain Project Scraper and work through these in order. Each step ends with something to check, so a bad configuration surfaces on a small run rather than a scheduled one.
- Set mode to search and searchQuery to el capitan to inspect the 32 potential route fields in the dataset.
- Check that the returned record contains non-null values for routeId and name before attempting larger runs.
- Switch searchType to areas to verify coordinates and childAreaCount when mapping crag locations.
- Toggle includeDetails to true to populate description and protection, then confirm these fields are present in the output.
- Enable includePhotos if you require voteCount and pageViews, which are extracted from the route HTML page.
- Use browseByArea with a specific areaIds entry like 105708959 to collect the sub-area tree.
- Limit the recursion by setting maxAreaDepth between 1 and 10 to control how many levels of the crag hierarchy are traversed.
- Set maxItems to 50 or less for initial testing to keep the per-result charges minimal before full collection.
How do you apply it? Three worked playbooks
These are Mountain Project Scraper's own documented use cases, each worked through as an operating pattern rather than a description.
Use case 1: Climbing guidebook data
Outcome: Build route databases for guidebook apps and training platforms
Configure: Set mode to browseByArea, includeDetails to true, and maxAreaDepth to 3.
Working method: Provide a list of areaIds or URLs to the browseByArea mode to descend through the crag tree. Verify that the output includes pitch counts and protection details for the first few items. Increase maxItems once the structure of the description and approach fields meets your application requirements.
Deliverable: A JSON dataset containing route descriptions, first ascent data, and grade strings for every climb in the specified area tree.
Stop condition: The run emits records where description and approach fields are consistently omitted.
Use case 2: Market research
Outcome: Climb-quality signals (ratings, votes, page views) across crags
Configure: Set mode to search, searchType to routes, sortBy to popularity, and includePhotos to true.
Working method: Execute a search with includePhotos enabled to capture data from the route HTML pages. Compare the rating and pageViews fields across different queries to identify high-traffic climbs. Check that the voteCount is populated to weight the average star rating correctly.
Deliverable: A CSV file of routes sorted by popularity, including star ratings, total votes, and lifetime page views.
Stop condition: The pageViews field is null across all records in the dataset.
Use case 3: Route discovery
Outcome: Pull the most popular classic routes in an area with photos and beta
Configure: Set mode to popularRoutes, minRating to 4, and includePhotos to true.
Working method: Run the popularRoutes mode to pull site-wide classics. Review the photoUrls array for high-quality images and check the breadcrumbs field to identify the specific crag location. Adjust minRating to filter for only the most highly regarded routes in the database.
Deliverable: A list of top-rated routes including photo carousel URLs and location paths for guidebook discovery.
Stop condition: The photoUrls array is empty for more than half of the emitted classic routes.
What breaks, and how do you design around it?
browseByAreacollects routes from an area's children tree; very large areas (e.g. whole states) have up to 20 direct children and the recursion is bounded bymaxAreaDepthandmaxItems.- Vote counts, page views and the per-system grade breakdown come from the route HTML page and are only populated when
includePhotosis enabled (the JSON API exposes the combined grade string and average rating without them). - Route-grade filtering supports YDS, V-scale, aid (A/C), ice (WI/AI) and mixed (M) grades; grades in other systems or unparseable strings are passed through, not dropped.
- Photo carousels show the photos Mountain Project attaches to a route; the full community photo pool for an area is only reachable through the photo search index.
- The API serves at most 25 results per search page; the actor pages through until
maxItemsor the result set ends.
When browsing very large areas like whole states, you must use maxAreaDepth to bound the recursion. If you need vote counts or page views, ensure includePhotos is enabled to trigger the necessary HTML parsing.
When should you not use Mountain Project Scraper?
Do not use this Actor if you require comprehensive access to the entire community photo gallery for a specific region, as it only extracts photos directly attached to route records. For projects requiring broader outdoor trail data that includes hiking or mountain biking rather than just technical rock climbing, AllTrails Scraper is a more suitable choice. If your objective is strictly weather forecasting for peaks to identify climbing windows, use the Mountain Forecast Scraper instead. This scraper focuses on the route database and does not provide historical weather data or real-time trail conditions from non-climbing sources.
What should you check before trusting the output?
- Verify that routeId is a valid string, such as 105924807, for every record.
- Confirm difficulty is not null and contains expected grade strings like 5.9 C2 or V2.
- Check that location contains both latitude and longitude GPS coordinates for area mapping.
- Ensure description and approach are populated when includeDetails is enabled.
- Monitor that recordType correctly distinguishes between route and area objects in the dataset.
- Verify thumbnailUrl is a valid URL pointing to the mountainproject.com CDN.
None of this proves a record is correct. It gives a scheduled Mountain Project Scraper run defined points where it should stop instead of quietly passing bad data downstream.
Frequently asked questions
What is the price per result on the free plan?
The free-plan price is $0.005 per result, which is $5.00 per 1,000 results. Apify's free plan includes $5.00 of monthly usage without a credit card, which covers up to 1,000 results of this Actor. Note that these event prices do not include platform usage, which is billed separately based on the resources your run consumes.
How do I get the full route description and protection info?
To get full details like protection, approach, and first ascent, you must set the includeDetails control to true. This adds one request per route to the run. If this is disabled, the Actor will only return the basic summary information available from the search results or area lists.
Can I filter results by climbing grade?
Yes, you can use the gradeMin and gradeMax controls to filter routes. The scraper supports YDS, V-scale, aid, ice, and mixed grades. If a grade is in a different system or is an unparseable string, it is passed through to the dataset rather than being dropped by the filter.
Why are some vote counts and page views missing?
These specific metrics are only populated when the includePhotos toggle is enabled. This is because vote counts and page views are scraped from the route's HTML page rather than the public JSON API. Enabling this feature adds one HTML request per route to the run.
Is there a limit to how deep the area browsing goes?
The browseByArea mode uses the maxAreaDepth control to determine how many levels of sub-areas to descend. This is an integer between 1 and 10, with a default of 3. For very large areas like states, this helps prevent the run from timing out by limiting the recursion tree.
Where to go next
When you are ready to run it, open Mountain Project Scraper on Apify; the free plan covers up to 1,000 results a month.
Start with the Mountain Project Scraper Actor page for the current input schema, pricing tier, and run history.
Other Actors we maintain for related data:
- Mountain Forecast Scraper: Scrape mountain weather forecasts from Mountain-Forecast.com for 100,000+ peaks worldwide.
- SquareYards Scraper: Scrape SquareYards (squareyards.com) - India property listings.
- Kickstarter Project Scraper: Extract crowdfunding project data from Kickstarter like name, blurb, goal, pledged amount, backers, deadline, creator, category, country, and more.
- Great Schools Scraper: Scrape 100,000+ US public schools from the NCES (National Center for Education Statistics) dataset.
- AllTrails Scraper: Scrape AllTrails, the world's largest hiking, biking, and running trail database.
- Fuel Prices Scraper: Daily US fuel prices (regular, mid-grade, premium, diesel) at national, state, and metro level.
- KOA Campgrounds Scraper: Scrape the KOA campground directory (koa.com) - 500+ Kampgrounds of America parks across the USA and Canada.
- Greek Real Estate Scraper (realestate.gr): Scrape Greek real estate listings (Crete-focused), price, surface, rooms, images, category, area, descriptions.
Related guides:
- Kickstarter Project Scraper: Up to 1,000 Free Results a Month (2026)
- Fuel Prices Scraper: 16 Data Fields, Up to 2,500 Free Results/Month
Resources
Actor documentation, input schema, and pricing: verified against the published Actor on 2026-09-28.
Actor last updated by its maintainers on 2026-08-14.
Run outcome figures cover the 30 day public window ending 2026-09-28.
Featured actors
Mountain Project Scraper
Scrape Mountain Project, the largest US rock-climbing route database. Search routes, browse by area or crag, fetch by route ID, or get popular classics: route details with grades, ratings, pitches, length, descriptions, photos, and GPS coordinates. HTTP-only via the public API; no auth required.
Run on Apify ↗