Selling an Indian brand overseas. The budget stayed fixed. The ROAS did not.
That was the business problem, and it was never going to be solved inside Ads Manager alone. We worked on what Vilvah sold abroad, how it was bundled, how it was proven to a stranger, and how the media was structured behind all of it. Seven months later the account returns 2.94x instead of 1.89x, on 10% less spend.
01 · The problem
Why an Indian brand is hard to sell abroad
In India, Vilvah is a name people grew up with: born in a Coimbatore kitchen in 2017, the country's first milk-based skincare brand, ten lakh customers deep. Cross a border and none of that travels with you. Four constraints defined the job.
No brand memory outside the diaspora
Indians abroad know Vilvah. Everyone else is being asked to buy unfamiliar skincare from an unfamiliar country. That is a proof problem before it is a targeting problem.
A $65 basket, plus shipping and duty
Shipping and duty do not care what you paid for the click. At a $65 average order and $34.54 to acquire it, international acquisition was marginal at best.
One hero SKU doing all the work
Milk Drops sells, and it sells alone. A single-item basket pulls volume and thins margin, which is exactly the wrong shape for a market you have to ship to.
A capped budget, not a scalable one
The monthly ceiling was fixed. Any growth had to come out of efficiency, so "spend more into what is working" was never available to us.
The account as we inherited it, January 2026. A quarter of the month sat behind a single campaign returning 1.89x, and nothing in the top eight campaigns cleared 2.2x.
02 · The solution
A business problem, not a platform problem
Return on ad spend is not one number you optimise. It is three, multiplied together: how many clicks a dollar buys, how many of those become orders, and how much each order is worth. One belongs to the media team. The other two are business decisions about what you sell and how you prove it. We ran all three, and said plainly which one had the room.
+55.9% vs baseline
Switch any discipline off to see what the return would have been without it. The three factors reconstruct July exactly: 1.021 × 1.295 × 1.179 × 1.89 = 2.94.
Structure, so the business work could be seen
In a saturated auction there is little room in the click price, and we did not pretend otherwise. What media work did do was make the account readable and safe: one campaign holding a quarter of the budget became a bench of eight, none above 12%, every one clearing 2.6x by July. Without that, none of the product and creative decisions would have shown up as signal.
Proof, for a customer who cannot touch the product
The biggest single gain in the account. Conversion rose 29.5% because the work moved from product shots to demonstration: challenge formats, before and afters, and creator proof aimed at a buyer who has never seen the brand on a shelf. This is covered in full in the creative review.
A bigger basket, so shipping stops eating the margin
We pushed budget behind kits, combos and higher-ticket lines instead of the hero SKU alone. Kits returned 2.45x and Better Ageing Serum 2.96x against Milk Drops at 2.25x, and the average basket moved from $65.19 to $76.84. A commercial decision, executed through media.
Same money, same platform, same five markets. Almost identical traffic. Ninety-three more orders.
03 · How we did it
Six decisions, and one month we got wrong
None of this was planned up front. Each month responded to what the previous month exposed. Open any decision below for the detail.
01
Jan to Feb
We did not restructure anything for two months
Establish a clean baseline before touching a 1.89x account.
1.95x
The instinct with a 1.89x account is to rebuild it on day one. We spent the first two months making it readable instead: a naming convention carrying product and geography, one measurement window, and enough spend held steady to separate signal from noise. February moved a rounding error, which was the point. By the end of it we knew clicks were cheap, conversion was thin at 2.49%, and the basket was small at $65. The leak had an address, and it was not the auction.
02
March
We overspent on purpose to find the ceiling
Answer the most expensive open question in the account.
2.24x
March ran the highest spend of the window, roughly 24% above January, and the return went up rather than down. That settled whether efficiency was a small-budget illusion. It was not. March also separated out the products that would carry the second half, Mud Mask, Milk Powder, SPF 50 and the anniversary offer, as readable campaigns rather than buried inside a catch-all, which is what made the later merchandising decisions possible.
03
April
Cut spend 37% and let the winners breathe
Accept expensive clicks, because the funnel could now afford them.
2.36x
Spend came down 37% and concentrated on what March had proven. Conversion hit 3.07% and the average basket peaked at $79.92, the highest of the seven months. Worth stating plainly: cost per click rose to $1.04 in April, the most expensive traffic we bought all year. We bought it anyway, because the funnel was now converting well enough that expensive clicks still paid. That trade is the whole engagement in one sentence.
04
May
May went backwards, and the export says exactly why
A launch wave, not a collapse. We read it rather than panicking.
2.13x
Three campaigns launched that month took 31.6% of the budget and returned 2.02x, while the campaigns carried over from April held 2.19x. So May was the visible cost of a launch wave running into a normal seasonal softening, not a performance failure. We did not restructure in response. The launches got a fixed read window and a floor, and by June the two that had not earned their place were off the account.
05
Jun to Jul
Eight campaigns, none dominant, every one above 2.6x
The bench replaces the single point of failure.
2.94x
June and July ran the tightest structure of the window: eight campaigns between roughly $2,000 and $4,300 each, none dominant, all proven. Face Brightening Kit and All Kit joined at 2.88x and 2.87x. July closed at 2.94x and produced $110,648, the highest revenue month of the seven, on 28% less spend than March. Cost per purchase finished at $26.12 against January's $34.54.
06
Channels
Only then did we add a second channel
Meta was the engine. TikTok was a layer built on top of it.
Layer
A second channel does not fix a first channel, it multiplies whatever the first one is already doing. So Meta had to be compounding before anything else got a dollar, and we took it from 1.89x to 2.50x first. Only once the funnel behind the ad was converting above 3% did TikTok make sense, because by then anything we pointed at the site converted better than it would have in January.
We built the TikTok account from zero: structure, campaign architecture, creative format, market prioritisation and offer logic. Creator-led video at the top to reach diaspora audiences Meta was saturating, with catalogue and remarketing underneath for efficient conversion while the top of funnel learned. In our hands it ran roughly $12.7K and 138 orders at a $92 blended cost per order, with ROAS climbing from about 0.5x to 0.8x. Singapore produced the efficient orders. The US audience converted at zero and was cut rather than nursed. Once the account was built, structured and growing, we handed day-to-day running to Vilvah's internal team; the channel now sits in-house by design.
04 · The proof
Do not take our word for it. Here are the exports.
Unedited screenshots from the client's own Meta Ads Manager, redacted only over campaign names and spend. Read the Purchase ROAS column from the bottom row upward: 1.89 climbing to 2.93.
Click any export to open it at full resolution
Meta Ads Manager · campaigns · breakdown by month. This export was pulled on 27 July, so its July row is a partial month. The full-month July export in the tabs below closes at 2.94x on $110,648.32.
The campaigns behind each month
February campaign detail is not in the client's export set. February appears in the roll-up above.
Test 01
The like-for-like test: the same campaigns got better
Rules out seasonality, luck and creative refresh as the explanation.
A rising account number can always be explained away. The strongest test is to take campaigns that ran unchanged across several months and see whether they improved. AMPM Combo, Top 4 Country Milkdrop and Mudmask ran continuously from April to July. Combined, they returned 2.38x in April and 3.07x in July on higher spend, with nothing about the campaigns themselves changed. A 29% improvement with the media held constant is not an auction effect.
Three campaigns, unchanged, April to July
Test 02
January's best campaign would have been July's worst
The two months do not overlap anywhere on the ROAS scale.
Every dot below is one of the eight highest-spend campaigns in that month, placed by its Purchase ROAS. January's ran between 1.60x and 2.16x. July's ran between 2.63x and 3.74x. The gap between January's best campaign and July's worst is 0.47x of return.
Top eight campaigns by ROAS
Scope
What we are not claiming
The limits of this data, stated up front.
Market-level performance is not shown. The account is structured around Top 4 and Top 5 country consolidations, so per-country ROAS is not derivable from these exports.
Spend is redacted in the screenshots but quoted in the text. Campaign-level economics are the commercially sensitive part. Account-level monthly spend appears in the analysis because the argument cannot be checked without it.
Attribution is platform-reported. Purchase conversion value as reported by Meta, not backend or bank-settled revenue.
TikTok figures sit outside these exports. They come from the TikTok account we built and ran during the launch window. Every screenshot here is Meta.
February campaign detail is unavailable and appears in the roll-up only. Product family figures are a sample covering the eight highest-spend campaigns in six of seven months, 79.8% of spend, returning 2.28x against the account's 2.28x.
05 · Creative · Companion case study
Creative hooks did the heavy lifting on conversion →
Conversion rate was the single biggest contributor to the return, and creative is what moved it. Selling to someone who cannot touch the product means the ad has to do the proving. We ran a separate diagnostic across every video asset in the account, tracked at four points: served, hooked at three seconds, held to halfway, watched to the end.
with $100+ spend
against an 18% benchmark
clears all three gates
January to July
The hook was never the problem
227 of 290 creatives clear the 18% thumb-stop target. Only 118 clear the 40% completion target. Vilvah's constraint sits at the end of the video, not the start, which is where the edit briefs were pointed.
Two in-house formats became templates
The challenge-led format returned 2.45x and 2.54x across separate flights, and the five-day challenge hit 3.36x with 71.2% completion, the highest in the account. Both were reverse-engineered into the next creative batch.
Influencer hooks, in-house bodies
Influencer creative hooks harder, 30.0% against 26.0%. In-house holds the middle far better, 38.9% against 28.3%. ROAS lands within 0.03x of each other, so the winning brief is an influencer opening cut onto an in-house edit.
Full asset-by-asset diagnostic: thumb-stop, hold rate and completion for every video in the account, benchmarked and turned into an edit brief.
06 · Results
Every number that moved, January against July
Seven months apart. Same account, same five markets, less money.
| Metric | January 2026 | July 2026 | Change |
|---|---|---|---|
| Purchase ROAS | 1.89x | 2.94x | +55.9% |
| Amount spent | $41,898 | $37,613 | -10.2% |
| Purchase conversion value | $79,079 | $110,648 | +39.9% |
| Website purchases | 1,213 | 1,440 | +18.7% |
| Cost per purchase | $34.54 | $26.12 | -24.4% |
| Average order value | $65.19 | $76.84 | +17.9% |
| Click to purchase rate | 2.49% | 3.23% | +29.5% |
| Largest campaign's share of budget | 25.8% | 11.5% | Halved |
| Top eight campaigns clearing 2.5x | 0 of 8 | 8 of 8 | Bench built |
Spend held. Return climbed.
Bars are monthly spend, the line is Purchase ROAS. Hover any month for the full read.
$603,290 returned on $264,952
2.28x blended across the full seven months, 8,166 purchases delivered into five international markets.
$8.42 saved on every order
Cost per purchase fell from $34.54 to $26.12. At July's volume that is roughly $12,100 of margin a month that used to go to Meta.
A structure that survives a bad month
One campaign carrying a quarter of the budget became eight, none above 12%, all clearing 2.6x. The account can lose any single campaign without losing the month.
Detail
Where the return came from, by product line
The hero SKU brings the orders. Kits and serum bring the money.
Reading campaign names back into product families shows the account's real economics. Milk Drops is the engine and always will be, but it is not the most profitable dollar in the account, and the two best-returning lines hold only 6.3% of budget between them.
| Product line | Share of spend | Revenue | Avg basket | Cost per purchase | ROAS |
|---|---|---|---|---|---|
| Better Ageing Serum | 3.9% | $21,486 | $80.17 | $27.12 | 2.96x |
| Hair Growth Oil | 2.4% | $11,377 | $75.85 | $29.89 | 2.54x |
| Kits, combos and bundles | 29.4% | $132,521 | $75.51 | $30.86 | 2.45x |
| Milk Drops (hero line) | 25.1% | $103,888 | $70.53 | $31.35 | 2.25x |
| Milk Mud Mask | 10.8% | $43,791 | $83.73 | $38.04 | 2.20x |
| Milk Powder | 7.4% | $29,657 | $76.24 | $35.18 | 2.17x |
| Sunscreen (SPF 50) | 6.3% | $22,588 | $75.55 | $38.61 | 1.96x |
| Face care | 4.2% | $13,236 | $57.05 | $33.02 | 1.73x |
Face care has the lowest basket in the account at $57 and the lowest return at 1.73x. It does not need better targeting. It needs to stop being sold as a single item.
07 · What's next
The next 0.6x is already in the account
2.94x is a new baseline, not a finish line. Four places the account's own data says return is still on the table, in the order we would go after them.
Reweight the mix
Sunscreen, face care and milk powder hold $32,888 of sample spend at a blended 1.99x. Rebasing that to the account average is worth roughly $9,500 of revenue on identical spend.
Bundle the weak baskets
Kits return 2.45x at a $75.51 basket against face care's 1.73x at $57.05. The gap is merchandising, not media. Face care goes back to market as a kit.
Split the geographies
Top 4 and Top 5 country consolidations are efficient for learning and blind for optimisation. Splitting the highest-spend markets is the biggest unread signal in the account.
Build the layer that is missing
Every campaign across seven months is prefixed Vilvah_ACQ_. This account is pure prospecting. Nothing is buying back the 8,166 people who already ordered.