OrbTop

Recreation.gov Campsite Availability Scraper

TRAVEL

Recreation.gov Campsite Availability Scraper

Scrape live campsite availability from Recreation.gov's public month-availability API for any federal campground. Supply campground IDs and date ranges to get a per-day open/reserved/closed status for every campsite — ideal for cancellation sniping, trip-planning feeds, and recurring monitoring workflows.

What This Actor Does

Recreation.gov powers reservations for nearly 4,000 federal campgrounds managed by the USFS, NPS, BLM, and Army Corps of Engineers. The site exposes a public, no-authentication endpoint that returns every campsite's daily availability for a given campground and calendar month. This actor queries that endpoint, flattens the response into flat per-(campsite x date) records, and enriches them with the campground's display name.

Each output record answers: "Is site X available on date Y?" — the exact question cancellation-snipers, trip planners, and monitoring tools need.

Input

Field Type Required Description
campgroundIds string[] Yes Recreation.gov campground IDs to check. Find the ID in the URL: recreation.gov/camping/campgrounds/232450232450.
startDate string No First month to check (ISO 8601, e.g. "2026-06-01"). Defaults to the current month.
endDate string No Last month to check (ISO 8601, e.g. "2026-08-01"). Leave blank for a single month.
filterStatus string[] No Only return records with these availability statuses. Leave empty for all. Valid values: Available, Reserved, Closed, Not Reservable, Not Available By Day, Open, Walkup.
fetchCampsiteDetails boolean No When true, fetch ADA accessibility flags from the campsite-details endpoint (one extra API call per campground, cached). Default false.
maxItems integer Yes Maximum number of records to return (0 = unlimited).

Finding Campground IDs

Navigate to any campground on recreation.gov and copy the number at the end of the URL:

https://www.recreation.gov/camping/campgrounds/232450
                                                ^^^^^^
                                           campground ID

Popular examples:

  • 232450 — Lower Pines, Yosemite
  • 232447 — Upper Pines, Yosemite
  • 251869 — Wawona, Yosemite
  • 271019 — Kalalau, Napali Coast, Kauai

Example Input

{
    "campgroundIds": ["232450", "232447"],
    "startDate": "2026-07-01",
    "endDate": "2026-08-01",
    "filterStatus": ["Available"],
    "maxItems": 1000
}

Output

Each record represents one campsite on one date:

Field Type Description
campground_id string Recreation.gov campground (facility) ID
campground_name string Campground display name (e.g. "Lower Pines Campground")
campsite_id string Unique campsite ID
site_label string Human-readable site number (e.g. "003", "A12")
loop string Loop name within the campground (e.g. "Lower Pines")
campsite_type string Site type (e.g. STANDARD NONELECTRIC, GROUP STANDARD ELECTRIC)
reserve_type string Reservation type (Site-Specific, First Come First Serve)
date string Date being reported (ISO 8601, e.g. "2026-07-04")
availability_status string Status on this date: Available, Reserved, Closed, etc.
max_num_people integer Maximum party size
min_num_people integer Minimum party size
type_of_use string Use type (Overnight, Day)
capacity_rating string Capacity tier (Single, Double, Triple, Group)
is_ada boolean or null ADA-accessible flag (set when fetchCampsiteDetails: true; null otherwise)
checked_at string ISO 8601 timestamp when this record was scraped

Example Output Record

{
    "campground_id": "232450",
    "campground_name": "Lower Pines Campground",
    "campsite_id": "906",
    "site_label": "003",
    "loop": "Lower Pines",
    "campsite_type": "STANDARD NONELECTRIC",
    "reserve_type": "Site-Specific",
    "date": "2026-07-04",
    "availability_status": "Available",
    "max_num_people": 6,
    "min_num_people": 0,
    "type_of_use": "Overnight",
    "capacity_rating": "Single",
    "is_ada": null,
    "checked_at": "2026-05-23T03:01:30.000Z"
}

Use Cases

Cancellation sniping — Schedule the actor to run every hour on peak campgrounds. Filter to filterStatus: ["Available"] and alert when a site opens.

Trip planning feeds — Pull a multi-month availability matrix for a set of campgrounds and visualize open windows.

Monitoring dashboards — Track availability patterns over time; detect mass cancellations before others do.

Performance and Cost

  • No authentication required. The Recreation.gov availability endpoint is fully public.
  • Rate limit: ~1 request per second (built-in). For large sweeps (many campgrounds x many months), budget ~1 second per (campground, month) pair.
  • Scale: ~4,000 federal campgrounds are searchable on Recreation.gov. Each campground has 10-200 campsites; each month yields ~30 dates per site. A 10-campground x 3-month sweep produces ~10,000-60,000 records.
  • Pricing: Pay-per-event — $0.10/start + $0.001/record.

Notes

  • Availability is volatile. Recreation.gov sites open and close within seconds. The checked_at field is included on every record so you know exactly when each status was observed.
  • is_ada requires fetchCampsiteDetails: true. ADA flags are not included in the availability API response; enabling this option adds one extra API call per campground (cached for the run).
  • Date range expansion: The API returns one full calendar month per request. If you specify startDate: "2026-06-15", the actor fetches the entire June 2026 month.