Skip to content
All articlesShopify

How a Shopify store doubled revenue on the same ad budget in 90 days

Umar Farooq26 October 202610 min read

A homeware brand came to us in the spring, spending about $14,000 a month on Meta and Google and turning it into roughly $42,000 in revenue. They had been at that number for five months. Every agency conversation they had been having was about adding TikTok, adding influencers, adding budget.

Ninety days later the same $14,000 was producing a little over $86,000. No new channel. No budget increase. No rebrand.

This is what actually happened, including the part where the numbers got worse before they got better, because leaving that out would make this a sales page rather than a case study.

What the audit found

Four problems, none of them in the campaign settings everyone had been adjusting.

Purchases were being counted twice. The theme had a purchase event in the Shopify checkout settings and a second one hard-coded into the thank-you page from an old setup. Meta was reporting roughly double the real orders. Every optimisation decision for five months had been made against a number that was wrong by a factor of two.

Fifteen ad sets were sharing the prospecting budget. Each one was getting a few hundred dollars a month, none of them were accumulating enough conversions to exit learning, and performance had been getting worse every time a new audience idea was added.

The product pages answered no objections. Delivery timing was in the footer. Returns were on a separate page. The two questions that stop a furniture purchase were the two the page did not address.

The 20% welcome discount was uncosted. Nobody had worked out what it did to contribution margin on the entry-price products, which turned out to be most of the volume.

The four changes, in this order

Order mattered more than any individual fix. Doing them in a different sequence would have meant measuring each one against a broken baseline.

Weeks 1–2: make the numbers true

Removed the duplicate event, moved purchase tracking server-side through the Conversions API, and reconciled fourteen days of platform-reported purchases against Shopify orders until the two agreed within a range we could explain.

This is the step that produced the uncomfortable part. Reported ROAS fell from 3.0x to about 1.6x in week three. Nothing had got worse — we had stopped counting every order twice. The owner had to sit through a board conversation explaining why the number halving was good news, which is not a fun meeting and is the reason a lot of agencies never fix this.

Three platforms will give you three different numbers and the server-side half of the fix is covered in its own piece.

Weeks 2–3: work out what a sale was actually worth

With real order counts, we built the unit economics properly: cost of goods, shipping, payment fees, the discount, and the return rate on the two bulkiest products.

Break-even ROAS came out at 2.4x. Against the honest 1.6x, the account was losing money on every order — and had been for five months while reporting 3.0x. That single number reframed the entire engagement. The brief stopped being "scale this" and became "make this profitable, then scale it".

Weeks 3–5: consolidate and fix the page

Fifteen ad sets became four. One broad prospecting campaign, one small retargeting campaign segmented by behaviour, one testing lane. Conversion data concentrated, and ad sets started exiting the learning phase within days instead of never — the architecture is written up here.

In parallel the two highest-traffic product pages were rebuilt around the objections: delivery window stated above the fold with a real date, returns policy in one plain sentence beside the buy button, assembly time and dimensions answered where people were asking rather than three clicks away.

The discount dropped from 20% to free shipping over a threshold set just above the average order value. Cheaper for the business, and it moved average order value up rather than down.

Weeks 5–12: creative, properly

Here is where most of the gain came from. We wrote down every reason someone buys homeware and every reason they hesitate — fifteen angles — and built ads for them, three to five new concepts a week, tagged by angle so we could tell a tired message from a tired execution. The framework is here.

Four angles beat everything the account had been running. Two of them were objections rather than benefits: one about delivery damage, one about whether the colour matches the photos. Nobody had thought to advertise the answer to a worry.

The numbers at day 90

Start Day 90
Monthly ad spend $14,000 $14,000
Monthly revenue $42,000 $86,400
Reported ROAS 3.0x (overstated) 6.2x (true)
True ROAS at start ~1.6x 6.2x
Break-even ROAS 2.4x 2.1x
Average order value $78 $94
Active ad sets 15 4

Two things worth saying plainly about this table.

The 3.0x at the start was not real, so the honest comparison is 1.6x against 6.2x. And break-even fell from 2.4x to 2.1x because the offer changed, not because anything got cheaper to buy — which is a reminder that the target moves when the business does.

What would have happened without the first step

If we had gone straight to creative and structure — the work that produced most of the revenue — we would have been optimising toward a number that was double the truth. The account would have looked like it was improving while losing money faster, which is precisely the state it arrived in.

That is the argument for doing measurement first even though it is the least satisfying fortnight of the engagement and the one where the reported numbers go backwards.

What this does not prove

This was one store, in one category, with a product that photographs well and an owner who shipped page changes the same week we asked. A store with thin margins, a long consideration cycle or no capacity to change the site would have produced a different result, and we have had engagements that did.

What transfers is the order: make the numbers true, work out break-even, concentrate the structure, then spend your effort on the message. That sequence has not let us down. The specific multiple is not a promise, which is why we publish a disclaimer rather than a guarantee.

If your account has been flat for months while the reported return looks fine, the first thing worth checking is whether that number is real. The free growth audit does exactly that and tells you in writing, and our Shopify development and Meta Ads work is where the rest of this sits.

Want this done on your account?

The free growth audit applies everything above to your own campaigns, and you get the findings in writing.