Our methodology
Everything you need to evaluate, cite, or replicate our data. Open-book.
Data sources
- Public park databases β US National Park Service, state park departments, municipal parks-and-rec sites, and county metropark systems.
- Google Maps via Outscraper β used to seed names, addresses, hours, and visitor star ratings. Aggregate ratings only; no scraping of individual reviews.
- OpenStreetMap β coordinates, polygon footprints, named amenities (where tagged).
- Wikimedia Commons β park photos under CC-BY-SA / CC0 / public-domain licenses with proper attribution per the about page.
- Editorial review β every park is reviewed by a human (one of our editors) before publication.
Amenity-flag enrichment
Each park is scored against 11 amenity flags: shade, water on-site, fenced, off-leash zone, small-dog area, benches, restrooms, parking, waste bags, indoor, trash cans.
Enrichment is a 4-step pipeline:
- Pull the park's first-party description (official site / parks-and-rec page) and any aggregate review summaries from Google Maps.
- Run a Claude (Anthropic) prompt that extracts evidence for each flag from the prose. The model returns
true/false/unknownfor each flag. - Verify against OpenStreetMap tags (e.g.
shelter=yes,drinking_water=yes,barrier=fence) and the park's own facility list when published. - Editor review: a human signs off before the record goes live. Flags marked
unknownstayunknownβ they're never inferred to "no" silently. Stats counts only confirmed yes/no.
Vibe Scoreβ’ formula
Per-park 0-10 score, deterministic from the public dataset. Open formula:
VibeScore =
rating // 0..5
+ min(2.5, features_yes_count / 11 Γ 2.5) // 0..2.5
+ min(1.5, [log10(1 + acres/5) + log10(1 + trail_miles)] Γ 0.5)
+ min(0.7, 0.5*off_leash + 0.3*(fenced && kindβ{dog-park,metropark}))
+ 0.5 Γ kind_bonus
where kind_bonus is 1.2 (NP), 1.0 (state-park / beach), 0.9 (metropark),
0.8 (preserve), 0.7 (trail, dog-park), 0.5 (campground / training / daycare),
0.0 for vet / hotel / restaurant / pet-store / groomer / rescue.
Final clamped to [0, 10] and rounded to 1 decimal.Source code: /src/lib/vibe.ts. The formula is open and stable β anyone can re-derive scores from the public dataset.
Update cadence
- Continuous β new parks added as we discover them; bug-fix updates roll out via CI.
- Quarterly β full re-enrichment of all amenity flags against the latest park descriptions. Ratings refreshed.
- Photo refresh β Wikimedia Commons checked for newer/higher-quality photos twice a year.
What we don't do
- We don't infer "yes" or "no" amenity flags without first-party evidence.
- We don't accept paid placements in rankings (Vibe Score is purely formula-driven).
- We don't track individual users or sell data.
- We don't republish copyrighted reviews β only aggregate star ratings and review counts (which are themselves factual data points, not creative expression).
Use the data
Everything is free under CC-BY-4.0 β pull /api/parks.json or /api/parks.csv. Cite "Dog Parks Hub 2026" with a link back. Read the full dataset page.
Questions?
Methodology questions, bug reports, partnership inquiries: see /about.