Start from cost per purchase, not from what you can spare
The usual approach is to pick a comfortable daily number and see what happens. That gets the arithmetic the wrong way round, because the budget you need is decided by what an order costs, and you do not control that.
Estimate your likely cost per purchase from what you already know. If you run Google Ads, look at what an order costs there and expect the social equivalent to differ, often costing more for a cold audience. If you have no data at all, take your average order value and your gross margin, and work out the most you could pay for an order and still be ahead. That upper limit is a planning figure, not a prediction.
Then decide how many orders a week you need to see before you can make decisions. A handful of purchases spread across several ad sets tells you nothing, because normal variation is bigger than the differences you are trying to detect.
Multiply expected cost per purchase by the weekly orders you need, and you have a weekly budget. Divide by seven for the daily figure. If the answer is uncomfortable, the honest response is to narrow what you are testing rather than to spend a smaller amount across the same plan.
Concentrate the budget so the delivery system has something to learn from
Meta's delivery optimisation improves as it collects conversion events, and its own guidance describes an ad set leaving the learning phase after roughly fifty optimisation events in a week. That is a target to design around, not a rule to obsess over, but it explains why splitting a small budget across many ad sets performs so badly.
So run fewer things. One campaign, one or two ad sets, several pieces of creative inside them. Every extra ad set divides the same money and the same events, and four half starved ad sets learn less than one properly fed one.
If you cannot afford fifty purchase events a week, optimise for an event that happens more often while you build data, such as add to cart, and accept that it is a compromise. Then move to purchase optimisation once volume allows.
Also avoid restarting the learning process without reason. Editing budgets, audiences or optimisation settings resets it, and a store that fiddles daily keeps the account permanently in its least efficient state. Set it, leave it, and make changes on a weekly rhythm rather than a daily one.
Budget for a month, not for a test
A first budget has to survive long enough to produce an answer. The first week is delivery settling down, the second is the first honest read, and the third and fourth are where you start to see whether the creative and the audience actually work. Stopping after ten days because the early numbers looked poor is the most common way stores conclude that social advertising does not work for them.
So commit to four weeks before you decide anything, and only commit an amount you can lose entirely without it hurting. Treat the first month as the cost of finding out, because that is what it is.
Plan the creative alongside the budget. Three or four genuinely different pieces of creative, not four crops of the same photograph. The differences that matter early are the message and the format, not the colour of a button.
And get the measurement working before the first day of spend. The pixel firing correctly, purchase events sending order value and currency, server side sending set up if you can, and a way to see orders by first time versus returning customer. Spending a month with broken tracking means paying for data you cannot read.
What to fix before you increase the number
More budget into a store that cannot convert cold traffic is the most expensive mistake available here, so check the destination first.
The landing page has to match the ad. Sending everyone to the homepage wastes the intent the ad created. Send them to the product or the collection the ad was about.
The page has to load quickly on a phone over mobile data, because almost all of this traffic is mobile and much of it arrives inside an in-app browser.
The buying facts have to be visible without scrolling past three screens: price, delivery cost, delivery time, returns.
And there has to be something to catch the people who do not buy today. Cold social traffic rarely converts on the first visit, so an email capture, a working abandoned cart flow and a modest retargeting audience turn a first visit into a second one. Without those, you are paying full price for every visitor twice.
If all four are in place, then increase spend in steps of a modest size, wait for delivery to settle, and watch whether gross profit after ad spend rises. If it does not, the ceiling is the audience or the offer, not the budget.
Set the split between prospecting and retargeting deliberately
At the start, most of the money should go to reaching people who have never heard of you, because there is almost nobody to retarget. A store with little traffic that puts half its budget into retargeting will show a lovely reported return on a tiny number of orders, and grow not at all.
A sensible first split is the large majority into one prospecting effort and a small remainder into a simple retargeting audience covering recent site visitors and add to carts. Do not build eight audience segments on day one. There are not enough people in them.
As the site audience grows, the retargeting share can grow with it, but it should always be capped by audience size rather than by ambition. Retargeting is limited by how many people visited, which is decided by prospecting.
Exclude recent purchasers from prospecting so you are not paying to reach customers you already have, and keep a separate view of new customer orders so you can see what the money is buying.
Report weekly on spend, orders, new customers and gross profit after ad spend. Four numbers, one page, every week.
Worked example, not a result
Sizing a first month from expected cost per purchase
- Average order value
- 60
- Gross margin per order
- 24
- Most you would pay for an order
- 18
- Weekly purchases needed to read results
- 50
- Weekly budget
- 900
- Daily budget
- 130
- Four week commitment
- 3,600
Worked example, not a result