Recreation.gov Campsite Availability Scraper
Pricing
Pay per event
Recreation.gov Campsite Availability Scraper
Scrape live campsite availability from Recreation.gov's public API for any federal campground. Supply campground IDs and date ranges to get per-day open/reserved/closed status for every campsite — ideal for cancellation sniping, trip-planning feeds, and monitoring workflows.
Pricing
Pay per event
Rating
0.0
(0)
Developer
BowTiedRaccoon
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
9 days ago
Last modified
Categories
Share
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/232450 → 232450. |
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, Yosemite232447— Upper Pines, Yosemite251869— Wawona, Yosemite271019— 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_atfield is included on every record so you know exactly when each status was observed. is_adarequiresfetchCampsiteDetails: 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.