Three model calls, and none of them reads a price
We built an agent swarm that reprices a market every night on Google Cloud. The part worth writing about is not what the model does. It is where the model is not allowed to go. This project started with an advertisement. A good-looking monthly price for a car I might actually want, and a catch I only found by clicking through to the provider. The most common catch was the mileage: the advertised…
A team built an agent swarm that updates car prices nightly on Google Cloud. The crucial part is not what the model does, but what it's not allowed to do. The project began with an advertisement for a tempting monthly car price. Most offers had a catch related to mileage. The advertised price assumed low annual kilometres, and longer terms.
A provider might even quote a higher price on their own page. These differing numbers make an offer look like a price when it's actually a price under specific conditions. Plinkie is a comparison site built around this observation. Two key design decisions arose from it. Each offer is stored separately for each mileage tier instead of a single headline figure.
Additionally, every price includes the last confirmation time, which is labeled unconfirmed after 72 hours if it hasn't been confirmed. The process runs at night using Cloud Scheduler, Cloud Run Job, and Pub/Sub. Scrapers fetch offer pages and store them in Cloud Storage with SHA-256. The whole run finishes with a single transactional swap, keeping yesterday's data live until the entire set is ready.
A recent run took 24 minutes across four sources. The model calls in the nightly run are designed to verify extracted data rather than replace it. Extraction is ordinary code, with adapters for each source. Gemini checks the code after extraction. Deduplication uses Gemini embeddings to find candidate pairs across providers. The pricing engine itself has no model and will never have one.
Each step is transparent, with a formula published versioned with a changelog. The scout uses Google ADK to browse provider sites and find the sentence with the answer. It runs in real-time to handle dynamic requests. Every warning about excess, early termination, or extra kilometres shows the provider's URL, the exact sentence, and the reading date. A reader can verify all this at the source with one click.
Written by urgent.news from Dev.to's reporting — not their text. Machine-written — may contain errors; check the original before relying on it.