Ad Creative
Turns one product page and the brain into a batch of finished static ads with a claims ledger and a QA sheet, then uploads them paused. It never unpauses and never sets a budget.
Who it is for
The owner still running the same three ads from launch, and the performance marketer who wants twenty distinct angles on Monday without a design queue.
What it reads from the brain
Before every run. Sections are addressed as layer.section.
What it does, step by step
- Read
Fetches the product page. Extracts facts, price, images and on page reviews. Cross checks every fact against claims_allowed.
- Angles
From the angle ladder (problem, mechanism, proof, offer, identity, comparison, honest urgency) and your customers' objections, produces the batch of distinct concepts. No two share an angle plus visual system pair. Each has a hook under 8 words, body under 20, a cited proof line, a CTA, a visual system, and the objection it answers.
- Claims ledger
Every hook and body line is checked against claims_allowed and your category's claim restrictions. Anything failing is rewritten or dropped. The ledger is delivered with the batch.
- Compose
Background generated from the visual system. The real product image is placed on it, never a generated product. Text set from a layout template. Exported per format (1:1 and 4:5 by default, 9:16 on request). Cost recorded per image.
- QA
A second model pass scores each creative on nine dimensions, with your brand name injected so your own logo is not flagged as third party. Under 7 of 9 is regenerated once, then dropped. The QA sheet is delivered.
- Copy options
Per creative: 4 headlines, 4 primary texts, 4 descriptions, so you can mix. Desire and offer framing first. A curiosity hook is never in slot one.
- Deliver
Contact sheet, individual files, copy sheet, claims ledger, QA sheet.
- Upload (Act)
Creates each ad into a paused ad set in a paused campaign named StoreCrew plus the date. Reads back effective_status and fails the upload if anything is not PAUSED. Then one approval: Uploaded n paused ads to Meta. Nothing is running. Activate at this budget? Activation and budget are separate approval gated tools; this agent requests, never executes without the approval.
Tools it uses
storefront.pageProduct facts, price, images, on page reviewsimage.generateBackground per visual system, hosted endpoints onlyimage.composePlaces the real product image on the backgroundmeta_ads.campaign.create, adset.create, ad.createAct: paused objects in a campaign named StoreCrew plus the datemeta_ads.campaign.activateApproval gated. Requested, never executed without your tapmeta_ads.budget.setApproval gated. Requested, never executed without your tap
The three modes for this agent
Steps 1 to 7. Files delivered: contact sheet, creatives per format, copy sheet, claims ledger, QA sheet. Nothing uploaded. Product URL only.
Steps 1 to 8. Uploaded paused to your Meta account, then one approval to activate with a stated budget.
Every 1st and 15th at 05:00: ten fresh creatives against learnings.what_worked, uploaded paused. Activation always pauses for approval. That gate never relaxes.
Guardrails and approvals
Enforced in code. Items with a filled circle wait for your tap in Telegram.
- Never unpauses. Never sets a budget except through the approval gated tool. Never edits a campaign it did not create.
- Read only on your ad account except creating paused objects in its own campaign.
- 40 creatives a month, checked before generation starts. The summary states usage.
- Spend per run capped at $0.30 of generation cost; generation stops when reached.
- The product image is always the real product image. Generated product renders are rejected.
- No claim in any creative that is not in claims_allowed with a source. The ledger proves it.
- No two creatives share angle plus visual system.
- Under 7 of 9 QA after one regeneration is dropped, not shipped.
- Image models through hosted endpoints only. Video through templates only, never customer uploaded code.
What it writes back to the brain
Dated and sourced. Learnings and performance sections are append only.
Example output
Example output. Structure only. No performance figures.
Ad Creative, your store, batch of 20
- Creatives delivered: 20 (2 dropped after QA under 7 of 9)
- Angles covered: problem 4, mechanism 4, proof 3, offer 3, identity 2, comparison 2, honest urgency 2
- Formats: 1:1 and 4:5
- QA pass rate: 20 of 22 generated
- Generation cost this run: recorded per image in qa.csv
- Monthly volume used: 20 of 40
- Upload status: 20 ads created PAUSED in campaign StoreCrew YYYY-MM-DD. effective_status read back: PAUSED. Nothing is running.
Waiting for your approval: Activate the campaign at the budget you set? (Budget and activation are two gated tools. I request. You tap.)
claims-ledger.md (excerpt)
| Line | Claim | Source | Status |
|---|---|---|---|
| Hook 03 | The phrase your reviews use most | your store, product page reviews | allowed |
| Body 07 | A benefit stated on your product page | your store, product page, paragraph 2 | allowed |
| Hook 11 | A comparative claim not found on your storefront | none | rewritten |
| Body 14 | A regulated claim for your category | module:category.claim_restrictions | dropped |
Also delivered: contact-sheet.png, creatives/{n}-{format}.png, copy.csv (4 headlines, 4 primary texts, 4 descriptions per creative), qa.csv (nine scores per creative).