TikTok Ads E-Commerce Sneakers Ukraine 1 Month

ROAS 5.65 → 8.20 in One Month.
Cost Per Purchase Down 35%.

An online store selling branded sneakers — Nike, New Balance, ON Cloud, ASICS, Salomon, Adidas, Jordan, Premiata — with an average order value around ₴3,200. Comparing two consecutive one-month periods in the same TikTok Ads account, sales grew 79% and cost per purchase fell 35%, clearing the client's own ROAS-8 target. Both account screenshots are published further down this page.

+45%
ROAS
↓35%
Cost per Purchase
+79%
Website Purchases
+70%
Revenue
Sneaker e-commerce storefront — TikTok Ads case study

Revenue Was There. The Target Wasn't.

In the baseline month (6 July – 6 August 2026) the account spent ₴39,625 and produced 67 purchases at ₴591 each, for a ROAS of 5.65. The client's ask was specific: more orders without a proportional budget increase, ROAS of 8 or higher, and cost per purchase in the ₴300–350 range.

Traffic itself wasn't cheap to begin with — ₴2.64 per click at a 1.87% click-through rate — and the algorithm was collecting a lot of low-intent clicks relative to the buyers it produced.

Before — Jul 6 – Aug 6
₴39.6K
Ad Spend
₴591
Cost / Purchase
67
Purchases
5.65×
ROAS
After — Aug 6 – Sep 6
₴46.3K
Ad Spend
₴386
Cost / Purchase
120
Purchases
8.20×
ROAS

Running catalog ads that treat every product the same?

A free audit shows exactly where cheap traffic is masking a purchase problem.

No Pauses. No Budget Swings. One New Group.

The foundation ran unchanged across both periods. The lift came from targeted moves during August — the account was never paused and budgets never moved more than 20% at once.

1

Catalog Ads Split by Brand, Not One Feed

The account runs a 1,295-item product catalog synced automatically from the Horoshop feed. Instead of one shared pool, each ad group was assigned its own product set — Nike only, New Balance only, ON Cloud only — so the algorithm learns on a homogeneous signal and that brand's own audience rather than the full range at once. Size variants stay linked through item_group_id so one shoe never splits into a card per size.

Per-brand product sets1,295-item catalog
2

Clean Purchase Data, Not Just Clicks or Views

Groups optimise for the Purchase event, delivered through both the on-site pixel and the Horoshop Events API server-side, deduplicated by event_id. Pangle and the Global App Bundle were excluded from placements — costing more on CPM but removing junk traffic from third-party apps. Without a reliable order value behind it, the later move to value-based optimisation would not have been possible.

Pixel + server-side, deduplicatedTikTok-only placements
3

Discipline Over Intervention

From August 6–16, nothing was paused and no budget moved by more than 20% in one step — every pause or sharp jump pushes a group back into learning, costing 3–7 days of degraded performance. Edits went into existing ad groups rather than duplicates, to keep their learning history intact. On August 17 new sneaker models were added to the product sets and part of the budget was reallocated to the strongest-ROAS groups.

No pausesBudget steps ≤20%
4

Value-Based Optimisation — the Main Driver

On August 24, Group_NB_Conversion_Value_24.08.26 launched, optimising for purchase value instead of treating a ₴2,000 pair and a ₴6,000 pair as the same event. In its first week it ran on 25% less budget than the older New Balance group and delivered 33% more purchase value — ROAS 7.61 against 4.28. Week two confirmed it, and this group became the main driver of the account-level ROAS increase.

Optimises for order value7.61× vs 4.28× ROAS in week 1

Running throughout: remarketing split by brand (New Balance browsers, Nike browsers, and a broad 180-day group for the rest), with anyone who purchased in the last 30 days excluded — and continuous A/B testing of short Ukrainian-language ad copy across urgency, social proof, size scarcity, and objection handling (try before you pay, delivery across Ukraine). Weak lines were cut; strong ones stayed in rotation.

79% More Orders. 35% Cheaper Each.

Across the second month the account spent ₴46,317, produced 120 purchases at ₴386 each on ₴379,585 of purchase value, at a ROAS of 8.20 — clearing the client's target of 8+, though cost per purchase landed just above the ₴300–350 goal rather than inside it.

Metric Before After Change
Ad spend₴39.6K₴46.3K↑ +16.9%
Website purchases67120↑ +79.1%
Purchase value (revenue)₴223.8K₴379.6K↑ +69.6%
ROAS5.65×8.20×↑ +45.1%
Cost per purchase₴591₴386↓ −34.7%
CTR1.87%2.36%↑ +26.2%
Average order value₴3,340₴3,163↓ −5.3%

All figures are read directly off the two TikTok Ads Manager exports published below.

Core Insight

At July's cost per purchase, the second month's ₴46,317 budget would have bought roughly 78 orders. The account delivered 120 — the 42-order gap came from cutting cost per purchase, not from a bigger budget. That works out to ₴23.3 of extra revenue per additional hryvnia spent, and ₴24,653 saved acquiring the same 120 purchases at July's rate. Blended across both months: ₴603,383 of revenue on ₴85,942 of spend, a 7.02× ROAS.

The Screenshots Behind Every Number

Both panels below are unedited exports from the client's own TikTok Ads Manager account, for the two periods compared above.

Jul 6 – Aug 6, 2026 — baseline TikTok Ads Manager · campaign metrics
TikTok Ads Manager panel for July 6 to August 6, 2026 showing ₴39,624.84 spend, 67 conversions and ₴591.42 cost per conversion
Spend ₴39,624.84Conversions 67Cost / conv. ₴591.42Impressions 803,830
Aug 6 – Sep 6, 2026 — result TikTok Ads Manager · campaign metrics
TikTok Ads Manager panel for August 6 to September 6, 2026 showing ₴46,317.32 spend, 120 conversions and ₴385.98 cost per conversion
Spend ₴46,317.32Conversions 120Cost / conv. ₴385.98Impressions 1,060,341
Being Honest About the Causes

We don't claim credit for all of it. The move to value-based optimisation is confirmed over two consecutive weeks against a direct control, and it couldn't have launched at all without per-brand product sets and clean, deduplicated purchase data underneath it — those parts we stand behind. Two things also played a part that we can't take credit for: late August and early September traditionally bring a seasonal lift in footwear demand, and no new video creatives were added during this period, so we don't attribute any of the growth to fresh creative — that's untapped headroom for the next stage, not something we already banked.

Free Download

Get This Case Study as a PDF

The exact 8-page breakdown — every screenshot, the full results table, and the value-based optimisation setup — saved for whenever you need it.

All 8 pages, unedited account screenshots included
Plus occasional emails on new case studies and marketing tips — no spam
✅

Your download is starting. We've also sent a confirmation link to your inbox — click it to keep getting new case studies. Didn't start? Click here.

🔒 No spam. Case studies and marketing tips only. Unsubscribe anytime.

Is This Your Account?

This case study is relevant if any of the following sounds familiar:

Your catalog ads run on one shared product feed instead of per-brand or per-category sets
Purchase optimisation treats a cheap item and an expensive one as the same event
Campaigns get paused or budgets jump whenever performance dips for a few days
You have on-site pixel tracking but no server-side backup, so purchase events go missing
You can't say with confidence whether cheap traffic is actually converting into buyers
30 min · Free · We'll show you the gaps, no strings attached

Questions About This Case Study

Running Catalog Ads Without Value-Based Optimisation?

We'll show you whether clean purchase data and per-brand product sets can do for your account what they did here. Free, 30 minutes, no obligation.

See All Case Studies