An LLM's function call is not an authorization boundary. That sentence, from a practitioner security write-up published in September 2026, should be taped above every monitor in your paid media team. It means the model proposing a bid change and the system executing it share credentials by default. Unless your application layer enforces separation, a bad prompt or a hallucination can become a real API change with real spend behind it.

Most teams adopting AI for Google Ads or Meta Ads have some version of "we review the change history afterward." That's not a control. That's an autopsy. Here are three layers that actually work, each useful on its own, each compounding with the others.

Layer 1: Ground the agent so it stops guessing

Grounding is a safety feature, not a convenience feature. Every gap in what an agent can see is a place where it will fabricate an answer in the same confident tone it uses for everything else. There's no tonal tell. Ask an agent connected to a thin data layer why CPA rose last month and it will answer fluently, based on whatever slice of your account it could actually reach.

A production-grade data layer for paid media needs the full query surface (real GAQL, not a curated summary), post-click analytics alongside ad data, complete change history across every actor (UI edits, scripts, third-party tools), and negative keywords consolidated across all four levels: account, shared lists, campaign, ad group. Add competitive context (Auction Insights with drill-down) and vertical benchmarks (your CTR and CPC as a percentile against your industry, not a blog post average from 2023). Competitive questions are the ones where hallucinations are hardest to catch because you have no independent read on the answer.

Layer 2: Enforce policies outside the model

A rule that lives in the prompt is a rule the model can be talked out of: by a clever user, by an injected instruction in a document it was asked to read, or by its own drift over a long session. Policy enforcement belongs on the account, not in the context window.

The principle is automation layering. One system does the work (the AI proposes changes), a second system validates that what the first system proposed makes sense for your business before anything sticks. No bid increase above a set percentage in a single move. No budget change beyond a defined threshold. Certain campaigns never get touched. Whatever your version of "absolutely not" happens to be.

The policy doesn't care who's asking. An agent proposing a 20% bid increase gets blocked. A hallucination gets blocked. You, at 11pm on a Friday on your phone, get blocked. Same rule, same verdict. Want it through anyway? Override deliberately. It goes on the record with your name attached.

For tool-enabled LLMs specifically, split read versus write capabilities at the API level. Validate tool arguments in application code. Keep credentials out of model context. Meta's Marketing API already distinguishes read-oriented from campaign-modifying permissions; if your reporting-only workflow has write access, you've handed the model a loaded weapon it doesn't need.

Layer 3: Put a human in the loop (structurally, not culturally)

Everyone says they're in the loop. Few people can tell you which screen, which person, or which queue enforces it.

The pattern that works is borrowed from engineering: nobody pushes code to production without a change request that another person reviews. The ad account where you spend six figures a month deserves at least as much process as a CSS tweak. The agent proposes (every write becomes a draft change request, nothing reaches the ad platform yet). Policies evaluate each row and carry their verdict. A human opens the review: the rows, the stated reasoning, the policy warnings, the timeline, and the list of people eligible to approve. You preview the exact deterministic changes ("target ROAS for Brand Campaign will move from 200% to 220%"), not a natural-language paraphrase. You confirm. Only then does anything change.

Google Ads' native Experiments capability fits here too. AI-recommended changes can be tested in a controlled split before rolling out account-wide, reducing blast radius while still iterating.

The audit trail you didn't plan to build

The change-request queue turns out to be more valuable than the safety it was built for. When a client asks in November why target CPA was moved in March, you have the proposal, the rationale, the policy verdicts, who approved it, and when. Marketing ops governance guidance increasingly recommends logging proposed actions, inputs and outputs, before-and-after values, approver identity, timestamps, and workflow/model versioning. Try assembling that from change history, which tells you what changed but never why.

A tiered approval matrix (low-risk drafts auto-approved within policy limits, high-impact changes requiring a named human) preserves speed where it matters. Too much approval friction kills the value of automation. Too little, and you're back to the autopsy model.

Each layer pays for itself independently. Grounding reduces confidently wrong answers whether or not you ever let the agent write anything. Policies filter non-starters before a human sees them, keeping the review queue short enough that people actually open it. The review step turns proposals into decisions with a paper trail. Together, they compound: grounding makes proposals worth reviewing, policies keep the queue manageable, and the queue turns ad-hoc AI usage into something a team can govern.

The question was never "do you trust the AI." It was always "what have you built around it so trust isn't required."