Disclosure: some links on this page are affiliate links. If you buy through one, ROAScal may earn a commission at no extra cost to you. It never decides what we recommend or what we say about it. How this works.
What problem does this workflow solve?
Creative testing fails for a boring reason. Nobody looks at the results on the same day each week, in the same way, and writes down what to make next. The ads run, the winners are obvious in hindsight, and the next batch is briefed from memory.
This loop fixes the boring part. It does not find you a better offer and it does not replace judgement. It makes sure the judgement happens every week, on clean data, and ends in a brief.
What do you need before you start?
- A Meta ad account you have access to, and a system user or long-lived token with
ads_readpermission. - n8n, either Cloud or the free self-hosted Community Edition.
- Claude on a paid plan, or API access if you want the analysis step automated too.
- Somewhere to keep rows: a Google Sheet works, and Airtable is tidier once there are several accounts.
Step 1: how should you name ads so a machine can read them?
Everything downstream depends on this. Put the variables you are testing into the ad name, in a fixed order, separated by underscores:
2026-10-01_HOOK-priceanchor_FMT-ugcvideo_ANGLE-timesaving_V2Hook, format and angle are the three that matter most. If the name carries them, any tool can group results by them. If it does not, no amount of AI will recover what you were testing.
Step 2: how does n8n pull the data?
Build a workflow with three nodes: a schedule trigger set to run nightly, a Facebook Graph API node, and a node that appends rows to your sheet or table.
Point the Graph API node at the Insights edge for your account:
GET /act_<AD_ACCOUNT_ID>/insights
?level=ad
&date_preset=last_7d
&fields=ad_name,spend,impressions,inline_link_clicks,actions,video_thruplay_watched_actionsactions contains purchases and three-second video plays among other things, so add a small step that picks out the action types you care about. Store one row per ad per day with the date of the pull.
Step 3: what do you ask Claude?
The same thing every week. A fixed prompt is the point: it makes this week's read comparable with last week's.
You are reviewing Meta ad creative tests. Target CPA: £<X>.
Data: one row per ad for the last 7 days (below).
Ad names encode HOOK, FMT and ANGLE.
For each ad return: decision (KILL / KEEP / ITERATE / NOT ENOUGH DATA),
the single metric that drove the decision, and one sentence of reasoning.
Rules:
- NOT ENOUGH DATA if spend is under 2x target CPA.
- KILL if spend is over 2x target CPA with no purchase.
- ITERATE if hook rate is strong but hold rate or CPA is weak. Say what to change.
- Never invent a number that is not in the data.
Then: which HOOK, FMT and ANGLE values are winning across ads,
and three briefs for next week's tests, each changing one variable only.The thresholds are starting points. Set them from your own account's economics, and change them in the prompt, not in your head.
Step 4: who approves the changes?
You do. Read the table, disagree where you know something the data does not (stock is low, the offer ends Friday), and then pause and brief by hand. This step takes ten minutes and is the reason the loop is safe to run.
Step 5: how do the new briefs become ads?
Each brief changes one variable from a winner: same angle with a new hook, or the same hook in a new format. Pull references from a swipe file such as Foreplay, produce the variants, name them properly, and launch them paused for a final check.
What does a week look like once it is running?
| Day | What happens | Who |
|---|---|---|
| Nightly | n8n appends yesterday's ad rows | Automated |
| Monday | Claude returns decisions and three briefs | Automated, 2 minutes |
| Monday | Approve, pause, send briefs | You, 10 minutes |
| Tuesday to Thursday | Produce and launch variants | You or your editor |
| Friday | Nothing. Let the tests run | Nobody |
Questions people ask
- Can Claude pause or launch the ads itself?
- It can be wired to, and in this workflow it deliberately is not. The model produces a recommendation and a reason. A person approves the pause or the launch. Automated rules scale mistakes as readily as wins, so keep the approval step until the recommendations have been right for several weeks.
- How much data does an ad need before a decision?
- Enough spend to have had a fair chance at your target cost per result. A common starting rule is to judge an ad once it has spent about twice your target cost per acquisition. Below that, the answer is 'not enough data', and the prompt should be allowed to say so.
- Do I need n8n, or will a spreadsheet export do?
- A weekly CSV export from Ads Manager works for one account. Automate the pull when you manage several accounts or when the export keeps getting skipped, which is the usual way this process dies.