AdGuard put four platform rulebooks where a distributed team could reach them
I rewrote Meta, Google, LinkedIn and Bing ad policy as schema, so the tool audits ad copy automatically. Built for regional specialists working half a day ahead of me, in a category the platforms treat as high risk.
A distributed team, a high-risk category, and half a day of time difference
I was running marketing specialists across Vietnam, Thailand, India and the wider region. Some were early in their careers, and nobody arrives already knowing platform advertising policy: it runs long and differs per platform, and it keeps shifting.
Financial services is a high-risk category, so the platforms read our ads harder than most. A phrasing that passes for a SaaS product gets an account flagged for a cross-border payments brand. A mistake cost us a disapproval mid-flight and a live campaign going dark.
The time difference made the obvious fix impossible. Reviewing every draft myself meant every specialist waited most of a day to learn that a headline was three characters too long.
In Vietnam, Thailand, India or elsewhere in the region, working a full day inside the platform's ad manager.
their morningHalf a day of time difference between the person who wrote the ad and the person allowed to approve it.
+half a dayTheir day is over by then, so the fix lands the following morning at the earliest.
+1 dayA headline three characters too long, or a claim its policy reads as a guarantee. The loop restarts with nobody having learned the rule.
most of a day lostTurn four rulebooks into schema, so the review happens where the work happens
Meta, Google, LinkedIn and Bing each publish their advertising policy as long prose. I rewrote it as schema, so the tool checks copy against every rule automatically: creative specifications act as hard limits, and policy guidelines carry a severity.
That single change moves the feedback from me to the tool. A specialist in Hanoi audits a draft and sees which rule it trips in seconds.
Company rules sit alongside the platform rulebooks as toggles, each one on or off, some pointing at the brand or legal page that defines them. When policy changes, I flip a switch instead of sending a message asking everyone to remember something new.
The team was already using three other options, each of them short of what a specialist needed. Submitting and waiting for platform review gives the only authoritative verdict, and it arrives after the campaign is live, after budget has moved, and after the account has taken the quality hit. The four published rulebooks hold the real rules, and they revise on four different schedules. A chatbot with the policy pasted in answers at any hour, and the same ad came back with different verdicts on different days.
The rulebooks were right and unusable. Making them machine-readable turned four documents into one consistent answer a specialist could get at midnight.
A specialist in Hanoi can read the rule that failed them, at midnight
One ad, one verdict: headline, body, landing page and image checked against the selected platform rulebooks with each risk explained.
A whole campaign at once, which is how the work arrives before a launch.
You can browse every platform rule, so a specialist reads the rule behind a verdict.
Our own overlays as toggles: brand voice, competitor mentions, disclaimers, discount limits, inclusive imagery.
The Policy Center matters more than it looks. A tool that only returns a score teaches nobody anything, and the gap I was managing was knowledge. Showing the rule beside the finding is meant to make the team need the tool less.
A rejection costs more than the ad it stopped
Three separate costs sit behind every disapproval, and only the first one is visible on the day it happens.
Each rejection counts against account quality. A run of them narrows delivery on everything else you are running, and a bad enough run ends the account.
Waiting on legal or platform review pushes the launch date, and the creative team spends the gap in a revision loop instead of on the next test.
Meta, Google, LinkedIn and Bing each maintain their own policy and each revises it on its own schedule. Tracking four moving rulebooks by hand is work nobody finishes.
I solved a management problem with tooling instead of meetings
It is a small product, and I would describe it that way in an interview. It removed me from the middle of a loop I was slowing down, and gave a distributed team one place to check their own work before it reached spend.
That is the pattern I keep finding worth building for: a specific operational failure where the team cannot easily ask for help, and a rulebook that only lived in someone's head.
A specialist half a day ahead needs the violation type as much as the score
"Switch to SmartYield and earn 8% APY immediately. Risk-free returns guaranteed for all new accounts." goes in once and is checked against every selected platform at the same time, with the firm's own brand and legal overlays applied on top.
It comes back with the violation named: misleading guarantee.
The same submission carries a safety score of 12 out of 100.
Naming the type tells a specialist which rule in the Policy Center to read and what to change, without a call.
Not claimed
This page claims no adoption count after launch, no new round-trip time and no change in the rejection rate. The tool is a pre-flight check that runs before the spend, and a clear verdict from it carries no promise that a platform will agree. The public demo runs the same code as the internal build, with the nine company rules swapped for sample ones.
The platform rulebook, next to the regulator's
Two different authorities can reject the same sentence. FinGuard reads the regulator: FINRA, SEC, MiCA and the local equivalents. AdGuard reads the platform: what Meta, Google, LinkedIn and Bing will accept into an auction.
Both started as checks that ran after the copy existed. CreativeOS is where they were folded into the generation step instead, so the constraints apply while the draft is being written. AdRadar looks outward on three of those platforms, collecting one competitor's ads from the public transparency libraries.
The rulebook runs before the model does
The character counts, aspect ratios and banned-term checks are plain code that runs before any model call, which is why the same ad gets the same verdict twice. Only the judgment calls reach a model, and all three run because their agreement is the test: two agreeing is a verdict, three splitting is a flag for a human. I never counted how often they split.
Application
ReactSingle audit, bulk upload, policy center and company policy.
TypeScriptThe policy schema is typed, so a malformed rule cannot ship.
ViteBuild tooling.
TailwindThe design layer.
Rules
Platform policy schemaEach platform's rules sit in records that carry creative specs, severity and violation type. Company policy togglesNine brand and legal rules. One person owns each and can switch it off.Models
DeepSeekThe bulk pass. Cheap enough to run across a whole campaign upload rather than one ad at a time.
GeminiReads the copy against the rules the deterministic pass could not settle, and names the violation type.
GPT-4oThe tie-break. Where the other two disagree on a judgment call, the third read decides whether it escalates to a human.
Delivery
Vercel FunctionsOne call audits one submission.Want this kind of guardrail in your ad workflow?
I turned four platform rulebooks into schema, so a specialist can check an ad at their own hour, before any money moves.


