Interactive demoMeta and TikTokSynthetic data for a fictional brand

Buildcheck

Every ad checked against the plan, with evidence, before it spends.

Buildcheck expands the media plan into the full build, then checks the platform's own export against it and flags what doesn't match: a wrong budget, a wrong link, a missing headline. Each finding shows the plan value, the export value and the rule that decided it. It ran in production on Meta, where a media team used it on live batches, and it turned a four-day, four-person review into one 20-minute run.

20 min
what a four-day, four-person review of 2,000 ads became
974 rows
in the largest live account export reconciled end to end
0 errors
across 310,000+ formulas, recalculated on every release

Try it

A working version of the engine's logic, running in your browser on a synthetic account.

How the demo works

  1. Step 1The media planWhat was bought: budget, dates, audience and objective for every buy.
  2. Step 2Auto-built from the planIn the workbook, one click expands the plan into every campaign, ad set and ad, names and settings included. Nobody retypes the plan.
  3. Step 3The platform's exportThe team builds the ads in Ads Manager and exports them: the platform's own record of what will run.
  4. Step 4Checked field by fieldBuildcheck matches each planned item to the export by ID and checks every field: 649 checks in the first Meta run.

Where the AI fits. In production, step 4 runs as a Claude skill. It works from a written rulebook, cites the plan value, the export value and the rule for every finding, and sends anything it can't prove to a person. This demo runs the same rules as code in your browser, on a fictional coffee brand, so every run is instant and repeatable.

Try this

  1. Run the QA.The gate reads NO: 12 failures and a missing ad, caught before a dollar is spent. One is a campaign budget entered as $18,000 instead of $180,000.
  2. Fix everything, then run it again.The gate turns to YES, and the report lists exactly what changed.
  3. Switch to TikTok and run it again.Same engine, TikTok's export and vocabulary. It catches a $180,000 lifetime budget entered as daily.

Eight problems are planted in the inputs: seven in the Ads Manager export and one in a plan cell. One of them is repeated across every ad in an ad set. Fixes change the inputs (the export or the plan cell, whichever was wrong), just as they would in a real loop. The demo runs a subset of the production rulebook. When you're done, read how I keep the AI honest. That's the part worth asking me about.

Step 2 · auto-built from the plan

What was planned

The plan feeds from the workbook: every campaign, ad set and ad as it should be built.

Step 3 · the platform's export

What was built in Ads Manager

A synthetic bulk export: every campaign, ad set and ad as it was built.

Step 4 · every planned item checked against the export
Waiting to run.

Run register

One row per run, the way the workbook's run register logs it.

run_idrun_datemodeplatformscopeplannedpassfailmissingneeds_reviewn_aextrareadytop_failing_checkproposals
No runs yet.

How it works

Five steps, from the media plan to the QA report. Each has fixed inputs and a fixed output, so a batch can be run again until it's clean.

A paid social build is a tree of settings: a few campaigns, a dozen ad sets, dozens of ads, each with 30 to 100 fields. Before Buildcheck, the plan was typed by hand and a senior person re-checked every row against Ads Manager. Errors that slipped through spent money.

  1. Paste the media planOne row per buy, every platform: budget, flight, market, objective, optimization, funnel, suppression. This is the record of what was bought.MEDIA_PLAN
  2. Expand it into the buildName the ad sets on the build grid, and one menu click generates the campaign, ad sets and ads with derived values filled in. Running it again adds nothing twice.BUILD_ADSETSone click
  3. Clear the gateNine checks per line (market, buy type, flight start and end, budget within tolerance, objective, optimization, funnel, suppression) before anyone opens Ads Manager.PLAN_CHECK
  4. Build and exportBuild in Ads Manager, paste the campaign, ad set and ad IDs back, and pull the bulk export. The workbook's feeds resolve inheritance and translate labels into the platform's vocabulary.QA_EXPORT feedsAds Manager
  5. Run the engineThe feeds and the export go to the AI engine. It returns a QA report with a gate, failures with evidence, reviews, human checks and proposed rule changes, plus a findings block to paste back into the workbook.QA reportRUN_REGISTER

New to paid social?

A build is a tree. Each level has its own settings and its own export columns, so the engine runs a different set of checks at each level. At the ad level the checks also depend on the ad type: an uploaded video, a boosted post from the brand's own page, or a creator's partnership post.

Campaign     objective · budget · flight
 └ Ad set    audience · placements · goal
    └ Ad     creative · copy · link · CTA · tracking

Inside the workbook

Where the demo's plan feeds come from.

A synthetic account, filled in the way a real one is: two campaigns, six ad sets, fifty ads. Row 2 is the human header. Row 3 is the machine name, the contract every formula, feed and finding refers to, so columns can move without anything breaking. Switch to TikTok to see the same design on another platform. The grids scroll both ways.

Keeping the AI honest

The prompt was the easy part. The hard part was deciding what the model may call a failure, what it has to show for it, and what a person still signs off on.

How I work with AI

Write the rules before the prompt

I didn't ask an AI to “check the campaign”. I wrote the rulebook first: what counts as proven, what a blank means, what it must never invent, which ad type gets which checks. The AI gets those rules as versioned reference files, not chat instructions.

Make it show its evidence

Each finding has to cite the plan value, the export value and the rule that decided it, down to the plan row and the export cell, or it doesn't go in the report. Anything the engine can't verify is filed as a review rather than a failure, and anything new it comes across goes in as a proposal for a person to accept.

Who did what

Claude wrote the build and test scripts to my spec. I owned the architecture, the rules, the test plan, the rollout and every changelog row. When a run got something wrong, the fix went into the rules and the test fixtures, not into memory.

Ship it to real people

The skill was shared across the organization and used by a media team on live batches. That feedback loop produced eleven releases in twelve days. A manager's “this doesn't read as auto-fill” became the gray-cell design two versions later.

Six rules, each added after a run got something wrong

An AI that reads a 100-column export and writes a confident report is dangerous unless it's boxed in. Each of these was written after a real run got something wrong.

  1. Proven or unproven.Every mapping from a planner's label to a platform value carries a proof status, earned from a real export. A mismatch on a proven rule is a FAIL. On an unproven rule it can only be NEEDS REVIEW, so the engine can't fail a build on a rule nobody has verified.
  2. A blank is never compared.Blank means inherit or not specified, never “should be empty”. The feed resolves inheritance before the run, so the engine compares values, not intentions.
  3. Never invent.If the export preset leaves out a column, the checks that need it read “column absent”, and the report says so once, at the top. No value is inferred from a neighboring column, and no ID, file name or handle is ever guessed.
  4. Evidence by machine name.Every finding names the plan field, the export column, the plan value and the export value, word for word. Never a column letter or a cell color, so a report stays true after columns move.
  5. Proposals, never silent changes.Anything new the run sees, like a vocabulary value or a mapping now proven, becomes a changelog proposal for a human to accept. The rules of record live in the workbook and the skill files, never in the model's memory.
  6. One finding, not a thousand.An error repeated across every ad in an ad set is one finding with a count, one card and one fix. The report stays readable and the fix stays obvious.

What it changes for a media team

The same work, before and with Buildcheck.

On live batches, it caught French copy mismatches, unintended Advantage+ settings and missing Stories headlines before launch. That's the kind of error a reviewer sees on ad 1,900 and misses on ad 1,901.

20 min
what a four-day, four-person review of 2,000 ads became
974 rows
in the largest live account export reconciled end to end, across 473 ad sets
500+
columns in the widest Ads Manager export, handled without a hand-typed column map
11 releases
in twelve days, each recalculated to 0 errors and regression-tested before it shipped
StepBeforeWith Buildcheck
Filling the planDays of rows typed by hand from the media plan and briefMinutes. The grid expands into the build, with derived values filled in.
Batch QAFour people, four days for a 2,000-ad batchOne 20-minute run, with every finding cited
Review before buildEvery row checked by handA nine-check gate per line. Senior reviewers read the grid and the exceptions.
QA after buildField-by-field comparison by eye, across an export of 100+ columnsRules run in code, and every finding cites the plan value, export value and rule
TrustDepends on who checkedA proof register: the list of mappings a person has verified against a real export. A FAIL can only rest on one of those.
Audit trailChat messages and memoryA register row per run, a changelog row per rule change, and findings pasted back into the workbook

Platforms

One media plan holds every platform's lines, and each line is checked in the workbook for its platform. The tabs, feeds and engine stay the same. Each platform brings its own export contract, vocabulary and naming profile.

Meta

In production on Facebook and Instagram

  • Uploaded creative, boosted posts and creator partnership ads, each with its own checks and identity model.
  • Placement buckets (feed, story, reels, explore), so one 9:16 file across three placements is expected, not flagged.
  • Budget type verified by which export column is filled. Delivery intent mapped to status. Times compared in the account's time zone.

TikTok

Built on the same architecture

  • Campaign, ad group and ad, with Business Center identities and Spark Ads (creator and brand posts) as the existing-post case.
  • TikTok's own formats handled in the feed: toggles that export blank when off, dates as yyyy/m/d HH:mm, amounts with cents, pixel labels resolved to website-event codes.
  • Reservation buys never appear in an export, so their rows show as N/A instead of MISSING. 306,000+ formulas, 0 errors.
  • Switch the demo to TikTok

Next

Three more platforms, on paper

  • Pinterest, Google and Snap each need three things the design already keeps separate: an export contract (which columns come back and how they're written), a vocabulary map from planner labels to platform values, and a name-part profile.
  • Everything else stays as it is: the plan tabs, the plan-check gate, the feeds, the report and the register.

Under the hood

Every release is generated by script, recalculated to zero errors, regression-tested and logged.

Read the engineering notes

The workbook

Google Sheets first, with Excel and LibreOffice compatibility checked on every release: 310,000+ formulas recalculated headless to 0 errors. Built for 1,000 ads, 500 ad sets and 300 campaigns per account.

Build and test tooling

Python build scripts regenerate every version from a registry, so nothing is edited by hand twice. A fixture suite of executable rule cases, plus structural checks for row alignment, stale references and changelog conformance, runs before a release ships.

Auto-fill layer

A Google Apps Script menu expands a media-grid line into the build, fills derived values in gray and applies the account profile. Running it again is safe: a second click adds nothing.

Change control

A changelog with the before, after, reason, downstream impact, regression test and the run that validated each change: 180+ entries, and a conformance check that must read YES. Rule changes ship as versioned files, never as edits in chat.

The AI layer

A Claude skill: a skill page, reference files for the run rules, the report spec and known failure modes, an HTML report template and a standing run message. It was first deployed as a shared, org-wide skill and now runs with the workbook uploaded directly.

Proven against live exports

Every mapping was proven against live Ads Manager exports up to 500+ columns wide. The largest end-to-end test reconciled a plan against a 974-row live account export.

Release history

  1. v9 · lockedThree workbook variants (filled, blank, account template), the five-step run process, and the TikTok version on the same architecture.
  2. v10 · team trialUsed live by the media team on its first batch: multi-select placements, proven mappings, a clean report on the first run.
  3. v11 · media-plan layerThe media plan inside the workbook, the plan-check gate, the plan feed, the run register and build-zone guards.
  4. v11.3 to v11.5 · builderDerived values, build recipes, the build grid and the one-click expander. Typed wins, gray inherits, amber differs.
  5. v11.6 · accountsMulti-account setup, identity columns derived per row, thousands of feed formulas re-pointed, fixture suite green.

About this project

I designed, specified and shipped Buildcheck end to end while working in media operations at a paid social agency.

It started as a fix for a real problem, a senior team spending days on checks that were mostly mechanical. The fix grew into a workbook that describes itself, an engine that has to show its evidence, and a record of every decision.

Where it fits is in-house social media marketing and strategy. A brand's social team owns organic and paid together, and the paid side is only as good as its operations: how campaigns get planned, built, checked and launched. This project is that discipline, plus the AI and systems fluency to make a small team run like a large one.

Internally, the workbook is known as the Gem Arch Doc, after the agency's term for a campaign architecture document.

What it shows

  • Meta and TikTok Ads Manager
  • Paid social operations
  • QA system design
  • AI product design with guardrails
  • Prompt and skill writing for Claude
  • Spreadsheet engineering at scale
  • Google Apps Script
  • Python tooling and tests
  • Change control and documentation
  • Media-plan reconciliation
  • Rollout to a working team

About the data

The demo and the workbook run on synthetic data. Halcyon Coffee Roasters, Maya Brews, and every ID and number in them are invented to show the mechanics. No client data was used.