{
 "generated": "2026-11-11",
 "about": "One set of counts for davelalande.com. Each says what it counts, where it came from and its date. Several look alike but count different things on purpose.",
 "counts": [
  {
   "key": "camps_total",
   "value": 19286,
   "what_it_counts": "Campsites with a public page on the site (the home page, /find and the map count these).",
   "source": "camp_leads.sqlite: leads where status='published'",
   "as_of": "2026-10-25"
  },
  {
   "key": "camps_free",
   "value": 12848,
   "what_it_counts": "Camps whose record says no fee and no license is needed. This is the home page's 'places to camp free' number.",
   "source": "camp_leads.sqlite: leads where status='published' and fee_verdict='free'",
   "as_of": "2026-10-25"
  },
  {
   "key": "camps_fee",
   "value": 4597,
   "what_it_counts": "Camps that charge a camping fee.",
   "source": "camp_leads.sqlite: fee_verdict='fee'",
   "as_of": "2026-10-25"
  },
  {
   "key": "camps_unpriced",
   "value": 1329,
   "what_it_counts": "Camps where no source says whether there is a fee. Unknown, not free.",
   "source": "camp_leads.sqlite: fee_verdict='unpriced' (or none)",
   "as_of": "2026-10-25"
  },
  {
   "key": "camps_license_required",
   "value": 512,
   "what_it_counts": "Camps with no camping fee but a hunting or fishing license is required (state wildlife areas).",
   "source": "camp_leads.sqlite: fee_verdict='license'",
   "as_of": "2026-10-25"
  },
  {
   "key": "camps_field_verified",
   "value": 248,
   "what_it_counts": "Camps Dave has stood on himself.",
   "source": "camp_leads.sqlite: field_verified=1",
   "as_of": "2026-10-25"
  },
  {
   "key": "states",
   "value": 44,
   "what_it_counts": "States with at least one published camp.",
   "source": "camp_leads.sqlite: distinct non-empty state of published camps",
   "as_of": "2026-10-25"
  },
  {
   "key": "toilets",
   "value": 21390,
   "what_it_counts": "Recorded toilets, restrooms and rest areas from public land records.",
   "source": "camp_leads.sqlite: toilets",
   "as_of": "2026-10-25"
  },
  {
   "key": "forests_and_grasslands",
   "value": 130,
   "what_it_counts": "National forests and national grasslands with a page.",
   "source": "camp_leads.sqlite: forests",
   "as_of": "2026-10-25"
  },
  {
   "key": "camps_with_season_row",
   "value": 1108,
   "what_it_counts": "Rows in the season table in the site's database: camps with an agency season window OR a recorded fire ban (a few have only the ban).",
   "source": "camp_leads.sqlite: camp_conditions",
   "as_of": "2026-09-27"
  },
  {
   "key": "camps_with_season_window",
   "value": 1103,
   "what_it_counts": "Camps with an agency season window the map and season.js can evaluate on any date. This is the home page's 'Can I go now?' number once the latest build is shipped.",
   "source": "camp_leads.sqlite: camp_conditions where open_state != 'none'",
   "as_of": "2026-09-27"
  },
  {
   "key": "season_windows_in_shipped_file",
   "value": 1103,
   "what_it_counts": "Windows in the season-windows.json file the home page counts in the browser. Equal to the live file; can trail the database until the next build is shipped.",
   "source": "site/season-windows.json (same as https://davelalande.com/season-windows.json)",
   "as_of": "2026-11-06"
  },
  {
   "key": "camps_in_api",
   "value": 19179,
   "what_it_counts": "Campsites in the open API's snapshot. Older than camps_total until the API is rebuilt.",
   "source": "aa_api.sqlite: camps (and https://davelalande.com/api/ root)",
   "as_of": "2026-09-24"
  },
  {
   "key": "camps_with_any_rules",
   "value": 5067,
   "what_it_counts": "API camps whose record carries any recorded rule. The other camps have nothing recorded, which means unknown, not open.",
   "source": "aa_api.sqlite: camps.rules_json, counting camps (not fields)",
   "as_of": "2026-09-24"
  },
  {
   "key": "rules_permit",
   "value": 2690,
   "what_it_counts": "Camps whose record carries permit text (a permit, pass or license requirement in the agency's words). Includes permits needed only for long stays.",
   "source": "aa_api.sqlite: camps.rules_json, counting camps (not fields): key 'permit'",
   "as_of": "2026-09-24"
  },
  {
   "key": "rules_permit_with_price",
   "value": 304,
   "what_it_counts": "Of the camps with permit text, those whose rules also quote a dollar amount. Permit prices are mostly absent.",
   "source": "aa_api.sqlite: camps.rules_json, counting camps (not fields): 'permit' present and a $ amount in the rules",
   "as_of": "2026-09-24"
  },
  {
   "key": "rules_stay_limit",
   "value": 2254,
   "what_it_counts": "Camps with a recorded stay limit in days.",
   "source": "aa_api.sqlite: camps.rules_json, counting camps (not fields): key 'stay_limit_days'",
   "as_of": "2026-09-24"
  },
  {
   "key": "rules_season_or_closure",
   "value": 1054,
   "what_it_counts": "Camps with a recorded open season, a seasonal closure or a closure status in the rules text. The /ai page's 'season or closure window' number.",
   "source": "aa_api.sqlite: camps.rules_json, counting camps (not fields): keys open_season, seasonal_closure, closure_status",
   "as_of": "2026-09-24"
  },
  {
   "key": "rules_open_season_field",
   "value": 877,
   "what_it_counts": "Camps carrying the single field 'open_season' (a subset of the season-or-closure number). llms.txt prints this one.",
   "source": "aa_api.sqlite: camps.rules_json, counting camps (not fields): key 'open_season'",
   "as_of": "2026-09-24"
  },
  {
   "key": "rules_closure_status",
   "value": 261,
   "what_it_counts": "Camps carrying the field 'closure_status'.",
   "source": "aa_api.sqlite: camps.rules_json, counting camps (not fields): key 'closure_status'",
   "as_of": "2026-09-24"
  },
  {
   "key": "rules_fire",
   "value": 916,
   "what_it_counts": "Camps with a recorded fire rule or fire ban.",
   "source": "aa_api.sqlite: camps.rules_json, counting camps (not fields): keys fire_rules, fire_ban",
   "as_of": "2026-09-24"
  },
  {
   "key": "rules_fire_checked_date",
   "value": 78,
   "what_it_counts": "Camps that carry a date the closure or ban was last checked.",
   "source": "aa_api.sqlite: camps.rules_json, counting camps (not fields): key 'closure_checked'",
   "as_of": "2026-09-24"
  },
  {
   "key": "rules_fee_note",
   "value": 715,
   "what_it_counts": "Camps carrying a fee note from the agency.",
   "source": "aa_api.sqlite: camps.rules_json, counting camps (not fields): key 'fee_note'",
   "as_of": "2026-09-24"
  },
  {
   "key": "rules_reserve_url",
   "value": 204,
   "what_it_counts": "Camps carrying a booking link.",
   "source": "aa_api.sqlite: camps.rules_json, counting camps (not fields): key 'reserve_url'",
   "as_of": "2026-09-24"
  },
  {
   "key": "camps_water_on_record",
   "value": 10522,
   "what_it_counts": "Camps with OpenStreetMap water on record near the site (the /ai page's 'with water on record', rounded there).",
   "source": "aa_api.sqlite: camps.water not empty",
   "as_of": "2026-09-24"
  },
  {
   "key": "camps_with_named_water_nearby",
   "value": 17921,
   "what_it_counts": "Camps with a named stream, river or lake in USGS's hydrography file within the search radius. A map feature, not a flow reading.",
   "source": "aa_api.sqlite: meta nhd_named (USGS NHDPlus HR, vintage Oct 2022)",
   "as_of": "2026-09-24"
  },
  {
   "key": "camps_with_town",
   "value": 16553,
   "what_it_counts": "Camps with a nearest town on record.",
   "source": "aa_api.sqlite: camps.town_name",
   "as_of": "2026-09-24"
  },
  {
   "key": "camps_with_land_manager",
   "value": 18767,
   "what_it_counts": "Camps with a land manager named (USFS, BLM, a state agency).",
   "source": "aa_api.sqlite: camps.land_manager",
   "as_of": "2026-09-24"
  },
  {
   "key": "camps_in_a_named_land",
   "value": 2783,
   "what_it_counts": "Camps inside one of the named state or other public lands in /lands.",
   "source": "aa_api.sqlite: meta camps_in_a_named_land",
   "as_of": "2026-09-24"
  },
  {
   "key": "lands",
   "value": 139,
   "what_it_counts": "Named state and other public lands with a page.",
   "source": "aa_api.sqlite: lands",
   "as_of": "2026-09-24"
  },
  {
   "key": "camps_with_services_search",
   "value": 18658,
   "what_it_counts": "Camps with a resupply search done (water, fuel, propane, dump, grocery, pharmacy, hospital, hardware). A null inside means searched, nothing mapped.",
   "source": "aa_api.sqlite: camps.services_json",
   "as_of": "2026-09-24"
  },
  {
   "key": "poi_rows",
   "value": 418815,
   "what_it_counts": "OpenStreetMap resupply points of every kind. A floor, never a survey.",
   "source": "aa_api.sqlite: poi",
   "as_of": "2026-08-14"
  },
  {
   "key": "poi_fuel",
   "value": 108665,
   "what_it_counts": "Fuel stations mapped in OpenStreetMap. A floor: unmapped places are not counted.",
   "source": "aa_api.sqlite: poi where category='fuel'",
   "as_of": "2026-08-14"
  },
  {
   "key": "poi_potable_water",
   "value": 24981,
   "what_it_counts": "Drinking-water points mapped in OpenStreetMap. A floor: unmapped places are not counted.",
   "source": "aa_api.sqlite: poi where category='potable_water'",
   "as_of": "2026-08-14"
  },
  {
   "key": "poi_dump_station",
   "value": 1633,
   "what_it_counts": "RV dump stations mapped in OpenStreetMap. A floor: unmapped places are not counted.",
   "source": "aa_api.sqlite: poi where category='dump_station'",
   "as_of": "2026-08-14"
  },
  {
   "key": "poi_propane",
   "value": 3106,
   "what_it_counts": "Propane sellers mapped in OpenStreetMap. A floor: unmapped places are not counted.",
   "source": "aa_api.sqlite: poi where category='propane'",
   "as_of": "2026-08-14"
  },
  {
   "key": "poi_grocery",
   "value": 124430,
   "what_it_counts": "Groceries mapped in OpenStreetMap. A floor: unmapped places are not counted.",
   "source": "aa_api.sqlite: poi where category='grocery'",
   "as_of": "2026-08-14"
  },
  {
   "key": "poi_shower",
   "value": 4209,
   "what_it_counts": "Public showers mapped in OpenStreetMap. A floor: unmapped places are not counted.",
   "source": "aa_api.sqlite: poi where category='shower'",
   "as_of": "2026-08-14"
  },
  {
   "key": "camps_with_ev_search",
   "value": 19179,
   "what_it_counts": "Camps with a nearest public DC fast charger worked out (straight-line miles).",
   "source": "aa_api.sqlite: meta ev_camps (US DOE AFDC snapshot)",
   "as_of": "2026-09-16"
  },
  {
   "key": "ev_chargers_rows",
   "value": 89386,
   "what_it_counts": "Charging stations in the DOE snapshot, every level and status.",
   "source": "aa_api.sqlite: chargers",
   "as_of": "2026-09-16"
  },
  {
   "key": "camps_with_forest_road_match",
   "value": 9400,
   "what_it_counts": "Camps matched to a Forest Service motor-vehicle-use-map road (surface, upkeep level, seasonal dates). Held in the site's database; not yet in the open API or the MCP tools.",
   "source": "camp_leads.sqlite: camp_mvum_road where road_id is not null",
   "as_of": "2026-10-25"
  },
  {
   "key": "camps_paired_with_stream_gauge",
   "value": 1462,
   "what_it_counts": "Camps paired with a USGS stream gauge on their own named stream (same name, within 15 miles).",
   "source": "site/flow.json: camps",
   "as_of": "2026-09-23"
  },
  {
   "key": "stream_gauges",
   "value": 598,
   "what_it_counts": "USGS gauges in the pairing file.",
   "source": "site/flow.json: gauges",
   "as_of": "2026-09-23"
  },
  {
   "key": "game_worlds",
   "value": 4,
   "what_it_counts": "Places the Dispersed 3D game can drive in (the only places with a road model today).",
   "source": "site/game-camps.json: worlds",
   "as_of": "2026-11-06"
  }
 ]
}
