Ask a chat model whether an ad will pass and it answers from memory. Sometimes it names a policy that does not exist. SERP-to-Spend gives the model the actual rules, each one cited, and makes it name the authority behind every finding. When it writes ads, it also works from live Google results.
The model, the ad and the question are the same in both rows. Checking an ad adds two things: cited rules in the system prompt and a fixed schema on the way out. Together they turn a confident guess into a verdict that names a real authority. Generating ads adds a third: live market context (below).
Inside the pipeline
Checking an ad uses the rules only: your ad is the input, judged against cited policy. When you generate ads, the model also gets market context from one source, chosen by what you enter: a competitor URL is fetched, and a keyword uses live Google results through Gemini (or SerpApi where Gemini isn’t set up). With search turned off, the run is labelled as not grounded instead of passing as researched. If the chosen source fails, the run stops with an error.
The rules come from a curated set of FTC, FDA, Meta, Google and TikTok modules. Every rule cites a statute, a CFR section, or the platform’s published policy, checked against the primary source. The model must answer in fixed fields, so the authority it names is always visible and checkable.
The Generate ads pipeline
This is the Generate ads flow. Pick a source to see the path a run takes; hover any part for detail. Each run uses one market source, chosen by what you enter and how the site is set up; if it fails, the run stops with an error rather than quietly continuing without it. Checking an ad uses the compliance lane only: your ad is the input.