Meta, Google, LinkedIn and Bing advertising policy, structured as schema so ad copy can be audited automatically. Built for regional specialists working eleven hours away from me in a category the platforms scrutinise hardest.
I was running marketing specialists across Vietnam, India and the wider region. Some were early in their careers, and nobody arrives already knowing platform advertising policy: it runs long, it differs per platform, and it shifts.
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. The cost of a mistake was not a rewrite, it was 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, India or elsewhere in Southeast Asia, working a full day inside the platform's ad manager.
their morningEleven hours of time difference between the person who wrote the ad and the person allowed to approve it.
+11hTheir 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 lostThree options, each of which the team was already using in some form.
The only genuinely authoritative verdict, straight from the platform that will serve the ad.
It arrives after the campaign is live, after budget has moved, and after the account has taken the quality hit.
RejectedThe real rules, published, free, and more detailed than any summary of them.
There are four, they revise on four different schedules, and expecting a junior specialist to hold all of them is setting the person up to fail.
Became the schemaA fast opinion at any hour, which mattered with eleven hours between us.
The same ad came back with different verdicts on different days. For somebody learning the rules, an inconsistent teacher is worse than none.
RejectedThe rulebooks were right and unusable. Making them machine-readable is what turned four documents into one consistent answer a specialist could get at midnight.
Meta, Google, LinkedIn and Bing each publish their advertising policy as long prose. Structured as schema, the same rules become something copy can be checked against automatically: the creative specifications as hard limits, the policy guidelines as conditions with a severity.
That single change moves the feedback from me to the tool. A specialist in Hanoi drafts, audits, sees which rule the copy trips and why, fixes it, and ships. The correction arrives in seconds instead of waiting for my morning.
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. Policy that changes is a switch rather than a message asking everyone to remember something new.
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 actually arrives before a launch.
Each platform's requirements as a browsable database, so a specialist can read the rule rather than only its 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 meant the team needed the tool slightly less each month.
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 outright.
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.
A worked example from the demo. Submit "Switch to SmartYield and earn 8% APY immediately. Risk-free returns guaranteed for all new accounts." and it comes back with a safety score of 12 out of 100 and the violation named: misleading guarantee.
Naming the violation type rather than reporting a number is what a specialist eleven hours away actually needs. It tells them which class of problem they have, which rule in the Policy Center to read, and what to change, all without a call. The same submission is checked against every selected platform at once, with the firm's own brand and legal overlays applied on top.
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.
It is a small product, and I would describe it that way in an interview. What it did was remove me from the middle of a loop I was slowing down, and give 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, a team that cannot easily ask for help, and a rulebook that only lived in someone's head.
Every ad a specialist in Hanoi or Bangalore wrote had to wait for one person in San Francisco to wake up and read it. Nobody in that loop lacked skill. The rulebook simply lived in my head, which made me the slowest component in a team of eight time zones. Turning the four platform rulebooks into schema is what let the people doing the work check it themselves, at their own hour, before any money moved.
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.
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 judgement call, the third read decides whether it escalates to a human.
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 judgement calls reach a model, and there the three disagree often enough to be worth running all of them: two agreeing is a verdict, three splitting is a flag for a human.
Nine systems shipped, compliance, reporting, intelligence, content.