Nebo · tutorial 05 · win customers

Buy attention without lighting money on fire

A daily reallocation recommendation with the numbers behind it, and every budget left exactly where you put it.

TimeAbout 45 minutes
Rolesclient-finder, campaign-manager
Triggerschedule

Paid acquisition punishes inattention. Campaigns drift, a winning ad fatigues, and the money keeps going out at the same rate. An employee that reads the numbers every morning catches drift days earlier than a weekly review, without ever being trusted to spend.

Steps

1

Give it the target before the data

A recommendation is meaningless without a target to recommend against. Put your monthly budget and your target cost per acquisition in the persona as numbers, and update them when they change.

Monthly paid budget: £8,000. Target cost per acquisition: £110. A campaign is underperforming above £140 CPA sustained over seven days. A campaign is a candidate for more budget below £85 CPA with volume still climbing.

Specific thresholds turn a vague "this looks bad" into a consistent judgement you can compare week to week.

2

Connect the platforms, read-only

Ad accounts, analytics, and wherever conversions actually land. In Controls, set every budget and campaign write to blocked. Not gated — blocked. This role recommends; a human spends.

3

Pull the numbers deterministically

Spend figures are data, and data must not pass through a model on its way to your screen. Pull the report with a command node and let the model reason over the file it produced.

The failure this prevents

A model summarising a spend report will occasionally transpose a figure or attribute one campaign's conversions to another. You will act on that number. Fetching deterministically means the numbers in the recommendation are the numbers in the account, and only the interpretation is generated.

4

Ask for the recommendation and the draft

Pull spend and performance by campaign for the last 7 and 30 days. Compare against the monthly budget and target CPA in my persona. Recommend reallocations with the supporting numbers for each: current spend, CPA, trend, and what you would move. Draft the update for the growth channel. Do not change any budget, pause anything, or send the update.
5

Schedule by campaign phase

Daily during a launch, weekly once things are stable. Two triggers on the same employee is fine; turn off the one you are not using rather than editing cron expressions back and forth.

"trigger": { "type": "schedule", "cron": "30 8 * * 1-5" }
6

Set the gate

Stays human

Every budget change, every pause, and every new campaign, permanently. Ad spend is money, so it inherits the money gate and it is marked critical: no global convenience setting can loosen it, and that is deliberate. The recommendation is the product here. Acting on it is your job, and it takes ninety seconds.

Verify

  • Cross-check every figure in the first report against the ad platform by hand
  • Confirm the CPA calculation matches how you calculate it, including whether it counts trials
  • Confirm no budget changed after a run
  • Check it flags a fatiguing ad before you would have noticed

When it goes wrong

The numbers do not match the platform

Attribution window, almost always. The platform's default window differs from your analytics. State the window explicitly in the persona and have it report which one it used.

It recommends the same reallocation every day

You are not acting on it, or it is not seeing that you did. If you make changes manually, it needs to read current budgets each run rather than remembering yesterday's.

It panics about normal daily variance

Your thresholds are missing a duration. "Above target" should be "above target sustained over seven days" or you will get a fire alarm every Monday.