
The problem
“We'd already automated the check against Google. But every mismatch it found still landed on a person to sort out.”
Automatically syncing updates from an API is easy, but when they are prone to errors it can lead to a lot of problems down the line. With the inclusion of AI, I could finally build the judgment needed to fully automate this process: reading and comparing business websites to find out whether Google is actually right.

The before
At Offline we work with 500+ active restaurant partners, and partner hours and closures change constantly. A weekly job already compared each partner's listed hours against Google Places and raised a content alert on any discrepancy. Resolving those alerts was the manual part.
About ten alerts a week, two to three minutes each to investigate properly. A genuine conflict meant an email — another ten minutes to find the contact, compose it, and gather the links. More than an hour a week, all told, and its real cost was never the time: it had to be remembered.

Why it wasn't already solved
The checking was never the hard part. The judgment was. Google returns two different kinds of hours — this week, and in general — and holidays land in the wrong one, which manufactures false flags. Confirming a real conflict means reading the partner's own website, where the hours are never in the same place twice, and where a multi-location partner needs the right location identified first. That is unstructured reading across 500+ different sites, ten times a week, and until recently the only place to get it was a person.
The solution
An agent works the alert queue: classifies each alert, verifies it against both Google and the partner's own website, applies the right change, closes the alert — and drafts a contextualized email whenever a person needs to be in the loop.
The weekly check runs itself and most alerts resolve silently. What reaches a person is a short queue of draft emails, with the contact already looked up in HubSpot and links to the content, the partner's Google review page, and their website already gathered. Edit, approve, send.
Human in the loop
Marking something as closed wrongly is reversible and costs a partner a day of visibility. Sending someone to a restaurant that actually is closed breaks all trust. So the agent marks the restaurant unavailable immediately and the email is drafted waiting for a human to send. This allows mistakes to be reviewed and corrected before needless communication is sent out.
What makes it trustworthy
I made every write run as a dry run first. The agent reads back exactly what would change — including how many members would be notified — before it commits to anything. The change and the alert's resolution then land together, in one transaction, producing one audit entry.
Built with
A weekly cron raises the alerts each Sunday. The agent works the queue from there, one alert at a time.
The checking was always easy. The judgment is what just became possible.
My hand-drawn map was incomplete, and the agent is what found the gap. After it had been running a while, it diagnosed the cause of its own false positives: those addresses were linked to a physical address rather than a Google Place, so no place data came back at all. Three hand-mapped branches became four. More usefully, the tool stopped being only an hours-checker and became a data-validation instrument — surfacing bad address links nobody knew were there.
This started as a process somebody was already doing by hand. If you have one of those, I'd like to hear about it.