Daily aggregator
Every field we actually have.
Fantastic.jobs names every ATS, every job field, the hourly SLA, and the enrichment. This is that desk for nights: named calendars, a versioned JSON contract, fill rates, conflicts when sources disagree. Scrapers stay in patvanh/Yoocal. 2026 consumes published JSON.
2,837
Upcoming listings
49
Source names in the live JSON
37
Named origin scrapers
3:37 AM America/Denver
Cron 37 9 * * * UTC · JSON v2
Live desks
- Park City, UT1,435
- Heber Valley, UT674
- Jackson Hole, WY566
- Elkhart Lake, WI97
- Green Lake, WI65
- Midway, UT0
Pipeline
Mine
Named calendars, sitemaps, iCal, tribe-events, schema.org, Firecrawl+Claude on JS walls.
Scrub
Private/junk dropped. Dates standardized. Title+date / fuzzy / link merge. Aggregator dupes suppressed.
Enhance
Geo-tag, filter_categories, images when sourced, LLM resolve on ambiguous fields.
Review
Quality audit C1–C8, overrides JSON, human inbox for user submits.
Publish
version:2 JSON on yoocal.com. 2026 reads it hourly, caches 15 minutes.
Field schema
Contract: docs/data-contract.md. Zod in src/lib/schema.ts.
Listing
idStable hash from build_master_and_views.pytitleAs publisheddateYYYY-MM-DD America/Denverstart_time / end_timeFrom source. timeUncertain if sources disagreedescriptionOrganizer / source copylinkOrganizer URL. Never a Yoocal checkoutimage_urlOnly if the source had onerecurrence / series_end / end_dateOne card, many dates
Place
venue_nameRoom the source namedaddress / locationStreet when the source had itlat / lngGeo-tag. Dump coords exist — we pin by name when they liedistance_miMiles from the city pincity / citySlugStamped by 2026, not the raw JSON city
Money
is_freeTrue only if the source said freeprice / price_rangeString from the source. Never invented
Provenance
sourceWinning attribution after mergesources (_all_sources)Every calendar that saw this nightsource_linksURL per contributing sourceconflictsField + value + source when they disagreescraped_atWhen that row was last fetchedrepaired_fromAuto-repair trail
Fill rates (live JSON)
start_time93%end_time84%venue_name94%address87%lat100%description94%image_url79%price0%is_free11%sources35%conflicts9%scraped_at33%source_links2%
Named sources
Like listing Greenhouse and Workday. Green Lake generic extract uses the hostname until we give it a proper name.
Visit Park City
cvb · park-city · Simpleview calendar + sitemap
Visit Park City (sitemap)
cvb · park-city · visitparkcity.com sitemap.xml
The Park Record
newspaper · park-city, heber · CitySpark-powered calendar (Playwright)
KPCW Community Calendar
radio · park-city · kpcw.org community calendar
Egyptian Theatre
venue · park-city · egyptian_scraper.py
Park City Film
venue · park-city · Primary source beats aggregators on time
Mountain Town Music
venue · park-city · mountain_town_music_scraper.py
Deer Valley Resort
venue · park-city · deer_valley_scraper.py
Park City Institute
venue · park-city · park_city_institute_scraper.py
Park City Farmers Market
venue · park-city · Primary URL parkcityfarmersmarket.com
Park City Annual Events
cvb · park-city · Hardcoded annual recurrings
Park City Gallery Association
venue · park-city · Gallery nights
Park Silly Sunday Market
venue · park-city · park_silly_scraper.py
RunSignup
race · park-city, heber · RunSignup zip radius
Running in the USA
Live source counts
- Visit Park City (sitemap)706
- Heber Valley Life472
- The Park Record463
- Visit Park City384
- Jackson Hole Chamber of Commerce383
- Heber Valley Tourism305
- Mountain Town Music105
- Egyptian Theatre77
- The Osthoff Resort60
- The Cloudveil51
- Elkhart Lake Tourism47
- Million Dollar Cowboy Bar47
- KPCW Community Calendar41
- National Museum of Wildlife Art40
- thrasheroperahouse.com33
- Center for the Arts Jackson Hole31
- TownLift26
- Snow King Mountain25
- Park City Film17
- nortonsgreenlake.com16
- Wasatch County Parks & Rec
Sync
- JSON ·
/api/eventsand/api/aggregator - RSS / ICS / CSV / XML / print · /feeds
- Origin · https://www.yoocal.com · cache 15m · revalidate 60m
We never invent a ticket price. Empty money fields stay empty. Listings feed.