When a Florida political consulting firm first showed us how they tracked school board races, it was a single Google Sheet. One tab per district. Their team manually visited each county's board of elections website, copied candidate data into the spreadsheet, and pasted Google Drive links to filings. It was inconsistent and hard to read.
We cleaned up the spreadsheet that same day. Just made it easier to use manually. That was the entry point, and a chance to learn the process.
While reformatting it, we noticed something. Every county's board of elections site ran on the same backend, with identical page structure. We built a scraper that pulled candidate data across every Florida district automatically and dropped it into a new tab of their existing Google Sheet. Their team didn't have to context switch anymore. The data just started showing up.
As the dataset grew, the sheet got cumbersome. So we spun up a basic web app to host both the scraped data and the team's manual additions, with simple auth and permissions.
Once it was a web app, we could build things that weren't possible in a spreadsheet. Scoped permissions allowed the team to share access with clients. Favorited candidates and districts. A changelog so users could see updates as they happened. Filters to hide races they didn't care about.
Now we're adding additional fields and creating dashboards and alerts.
A Google Sheet became a real-time monitoring platform that they now share with their own clients. We never did a "big launch." Each step was small enough to ship in days. Each one set up the next.