What is live, and what the last check found
| What | Count | Where it comes from |
|---|---|---|
| Campsites with a page and a pin | 19,179 | map-stats.json (build_map.py) |
| Free · fee · unpriced | 14,068 · 4,396 · 715 | the cost verdict on each published row (fee_verdict.py) |
| Field-verified by Dave | 248 | leads.field_verified |
| Camps with an agency season window | 1,073 (10 closed on 2026-09-18) | camp_conditions (conditions.py) |
| Free camps with a DC fast charger within 25 straight-line mi | 8,125 | camp_ev_meta, US DOE AFDC snapshot 2026-09-16 |
| Nearest town known for | 86% of camps | find-data.json |
| Dump station on file for | 58% of camps | find-data.json |
| Camp pages still missing a resupply block | 35 of 19,191 | counted off site/camps/found/*.html just now; the page-build loop repairs these from local POI data |
| Pages in the sitemap (index,follow) | 13,754 | sitemap-found.xml, written from each page's own robots tag |
| Restrooms mapped | 21,390 | toilets table |
| Forests and grasslands | 130 | forests table |
| API corpus | 19,179 camps, built 2026-09-19T01:08:36Z | /api/ data_built_at |
Last audit — Site audit — Friday 18 September 2026, 8:11 PM
0 urgent, 3 worth a look, 1 note.
1 campgrounds are pinned twice by two different sources
Two ingests found the same place. Keep the agency row, archive the OSM one -- the agency named it and placed it.
1127 live fee camps carry no nightly rate
The agency record has a fee flag but no amount. The number is published on the forest's own recreation page or on recreation.gov -- this is the night lane's gen_price_backfill workload.
map-data.json is 8.0 MB
Every visitor to /map downloads this. Past ~8 MB it is worth trimming fields or splitting by region before it becomes the reason the map feels slow.
16934 of 19180 published camps say nothing about water (88%)
Not wrong, but it is the question campers ask first. Silence is honest; a sourced answer is better.
What the audit checks
- check_live_pages — Every page linked from the site must answer 200.
- check_fee_blurbs — A fee pin must never be captioned free camping.
- check_fee_verdict — Every published camp carries a cost verdict, and the flags agree with it.
- check_coords_in_state — A coordinate outside its own state is a data fault, not a rounding error.
- check_coords_on_land — A camp with no state must still be somewhere in the United States.
- check_orphan_pins — Pins with no profile page fall back to a Google satellite link.
- check_duplicate_pins — Two INGESTS landing on one campground -- the real double-pin case.
- check_missing_price — A fee pin with no amount is the least useful true thing we can say.
- check_pending_backlog — Leads found and never reviewed are camps nobody can see.
- check_water_coverage — Water is the field campers ask about most and the one most often blank.
- check_map_payload — The map JSON is downloaded by every visitor who opens /map.
- check_ev_snapshot — The EV charging layer is present, fresh, and the same snapshot everywhere.
- check_conditions — The season / closure layer ("Can I go now?") is present, current and consistent.
The audit is tools/site_auditor.py; it runs after every build cycle and writes research/SITE_AUDIT.md, which this page renders. Counts above are read from the same files the map, the homepage and the API read. A dash means the source was not available when this page was built.