May 30, 2026 · 3 min
Scrape pipelines should fail loud
Vegas Kiddos taught us that a quiet empty scrape is worse than a red build.
Vegas Kiddos runs on scraped listings poured into Airtable. Parents see the approved slice. The cron is the heartbeat.
For a while, a bad day looked like success.
The failure mode
A source changes its HTML. Or an RSS feed dies and nobody notices because the UI still renders. The job finishes. Zero new rows. The site shows last week’s events. No alert. No Slack ping. Just a slow drift toward stale.
We had a specific wound: Nevada Moms was wired to a feed that stopped updating. The scraper returned nothing. Events already on the calendar stayed approved — good — but nothing fresh arrived and nothing screamed.
What we changed
Fail the run if a core source returns zero. Not “log a warning and continue.” Fail. Someone has to look.
Never un-approve on a bad scrape. If today’s job is broken, yesterday’s approved events stay approved. Parents shouldn’t lose a pool day because our parser hiccuped.
Fix the source, not the symptom. Nevada Moms now pulls from the MEC list API — the thing that actually has listings — instead of pretending RSS still exists.
I’m still not in love with scraping as a lifestyle. For a city-scale kid events board with no editorial staff, it’s the honest tool. The bar is: when it breaks, we know the same hour.
The image
~296 approved events. Full art coverage. Map pins that geocode from venue addresses, not guesswork from titles. WCAG AA contrast pass so the sunny palette doesn’t wash out button labels.
Small site. High trust bar. The pipeline has to act like it.