Recreation.gov Campground Scraper (Campsites & Amenities) avatar

Recreation.gov Campground Scraper (Campsites & Amenities)

Pricing

from $4.00 / 1,000 result delivereds

Go to Apify Store
Recreation.gov Campground Scraper (Campsites & Amenities)

Recreation.gov Campground Scraper (Campsites & Amenities)

Extract public Recreation.gov campground records: name, geo, address, amenities, aggregate rating, published offer and campsite inventory. For camping market research, site databases and travel planning tools. HTML scraping only - no /api calls, Crawl-delay 10 respected.

Pricing

from $4.00 / 1,000 result delivereds

Rating

0.0

(0)

Developer

Steadfetch

Steadfetch

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

5 hours ago

Last modified

Share

steadfetch/recreation-gov-campground-extractor

Extract public campground records from Recreation.gov HTML pages with Apify pay-per-event pricing and schema-validated output.

Data Source: Recreation.gov

What it does

The Actor accepts numeric campground ids from Recreation.gov and reads each public /camping/campgrounds/{id} HTML page. It parses the page's schema.org Campground JSON-LD block plus the campsite inventory linked in the HTML, and saves one validated dataset item per campground:

  • name, page title, description and canonical URL;
  • aggregate rating and review count (no review text, no reviewer data);
  • postal address, coordinates and parent gateway/forest;
  • published amenities, offer price/currency/availability and time zone;
  • campsite ids, labels and URLs.

Missing values are returned as null or []. Nothing is inferred: if Recreation.gov does not publish a value, the field is empty. The Actor does not promise a date-by-date availability calendar; that data lives behind /api/*, which this Actor never calls.

Input

{
"campgroundIds": ["233462"],
"maxResults": 500,
"includeCampsites": true
}
  • campgroundIds (required): numeric ids from sitemap URLs of the form https://www.recreation.gov/camping/campgrounds/{id}. Duplicate ids are fetched once and never billed twice.
  • maxResults: 1 to 5000 campgrounds saved to the dataset (default 500).
  • includeCampsites: include the campsite inventory published on the page (default true).

Example output

Real output for campground 233462 (campsites and amenities shortened for readability):

{
"url": "https://www.recreation.gov/camping/campgrounds/233462",
"title": "Coeur D'ALENE, Melvern Lake - Recreation.gov",
"scrapedAt": "2026-10-20T16:05:00.000Z",
"campground_id": "233462",
"name": "Coeur D'ALENE",
"source_url": "https://www.recreation.gov/camping/campgrounds/233462",
"description": "Coeur d'Alene Campground is situated on Melvern Lake on the eastern edge of the Flint Hills of Kansas.",
"rating": 4.4653463,
"review_count": 101,
"timezone": "America/Chicago",
"address": {
"street": "31408 Coeur dAlene Parkway",
"city": "Melvern",
"region": "Kansas",
"postal": "66510",
"country": "United States"
},
"geo": { "latitude": 38.4976028, "longitude": -95.7179111 },
"parent_place": { "name": "Melvern Lake", "url": "https://www.recreation.gov/gateways/269" },
"amenities": ["Beach Access", "Boat Ramp", "Dump Station", "Marina", "Picnic Tables"],
"offer": {
"price": 16,
"currency": "USD",
"availability": "https://schema.org/InStock",
"sku": "233462"
},
"campsites": [
{
"campsite_id": "12686",
"label": "Site 43, Loop CDEA, Type Standard Electric",
"url": "https://www.recreation.gov/camping/campsites/12686"
},
{
"campsite_id": "13695",
"label": "Site 38, Loop CDEA, Type Standard Electric",
"url": "https://www.recreation.gov/camping/campsites/13695"
}
]
}

Every item is validated against .actor/dataset_schema.json before it reaches the dataset. If an item does not validate, the run fails instead of delivering malformed data.

Pricing

Pay-per-event, with the two synthetic Apify events declared in .actor/pay_per_event.json:

EventCharged whenPrice
apify-actor-startonce per run start (synthetic, charged automatically)0.00005 USD per run (Apify-recommended default)
apify-default-dataset-itemonce per campground saved to the dataset (synthetic, charged automatically)0.004 USD per campground = 4 USD per 1,000 results

There is no custom per-item event and no Actor.charge() call: the platform charge apify-default-dataset-item already bills each result, so adding another event would bill users twice. A run that delivers no campground is only charged the start event.

Cost per 1,000 results

Measured locally on 2026-10-20 with the committed fixtures and Node 24:

  • Extraction CPU: 8.4 ms per campground (1000 extractions in 8.40 s), about 0.00012 USD per 1,000 campgrounds at 0.20 USD/GB-hour and 256 MB.
  • Wall time dominates: robots.txt requires Crawl-delay: 10, so 1,000 campgrounds take at least 2.78 hours of wall time. At 256 MB that is 0.694 GB-hour = 0.139 USD per 1,000 results.
  • Expected infrastructure cost: about 0.14 USD per 1,000 campgrounds. Gross margin at 4.00 USD per 1,000 is about 96.5 percent.

The platform cost of a run that fetches fewer pages and emits fewer items is proportionally lower. Local measurement spends no Apify credit.

robots.txt (checked 2026-10-20) applies User-agent: *, disallows /api, /api/*, /account/* and /cart*, and declares Crawl-delay: 10. This Actor:

  • fetches only /camping/campgrounds/{id} HTML pages and never /api/*;
  • runs one request at a time and waits at least 10 seconds after each response, including retries;
  • sends an honest
    User-Agent: steadfetch-recreation-gov-campground-extractor/0.1 (+https://apify.com/steadfetch; contact: https://apify.com/steadfetch)
    ;
  • collects no personal data: aggregate ratings and facility/campsite metadata only. Review text, reviewer identities and the facility telephone number published in JSON-LD are deliberately not collected.

Recreation.gov's Use and Share Our Data page states: "The federal recreation data, and derivative information, used on Recreation.gov is available for free to anyone who envisions a variety of uses." Attribution is included in the README and in this Actor's Store listing as "Data Source: Recreation.gov". The full evidence, including literal quotes and saved responses, is in docs/legal-gate.md in the repository.

FAQ

Does the Actor need a login or paid subscription to Recreation.gov? No. It reads public HTML pages only and never bypasses logins, paywalls or CAPTCHAs.

Does it return availability for specific dates? No. Date-by-date availability on Recreation.gov is served from /api/*, which robots.txt disallows. This Actor returns the offer and campsite inventory published in the HTML, and does not claim to be an availability calendar.

Why is it so slow compared with other Actors? robots.txt requires a 10 second crawl delay. Reliability and compliance take priority over speed; 1,000 campgrounds need at least 2.78 hours.

What happens if a page has no JSON-LD or no campground id? The page is skipped and logged. The Actor never invents a record from partial data.

Is the output schema stable? Yes. New fields are added additively and required fields never change. Every item keeps the common Steadfetch envelope (url, scrapedAt) plus campground_id and source_url.

Can I request another source? Yes. Open an issue in the Steadfetch Actors repository describing the public page you want extracted.

Maintenance

This Actor is tested daily: automated runs keep the source reachable and the output schema valid. Every push runs lint, typecheck, offline fixture tests, the Steadfetch publish gate and apify-cli validate-schema in CI. Schema changes are announced through repository releases.

Development

npm install
npm test # lint + typecheck + offline fixture tests
npm run publish:check # Steadfetch publish gate
npm run build # tsc build to dist/

Fixtures are real pages saved from Recreation.gov on 2026-10-20. Refetch them (with the same 10 s delay, no Apify credit, no token) with docs/evidence/fixtures/fetch-fixtures.sh.