Kids' IT school (Kazakhstan): $49,353 → 9,812 leads at $5.03, 153% ROMI
Updated:
The task
A network of children’s programming schools: offline branches in Kazakhstan’s cities plus an online format for the whole country. Name not disclosed (NDA).
The client came in late June 2024. They needed trial-lesson leads at up to $5–6 each, separately for every offline city and separately for online. Each lead had to land in the client’s amoCRM tagged with a city so the right branch could pick it up. Before us another media buyer ran a few city campaigns on old landing pages with no lead analytics.
What we did
- Landing pages from scratch. The old pages were beyond fixing, so we rebuilt them on Tilda: a page for online, separate pages for cities and for the summer camp in Almaty. Every page passes the form into amoCRM.
- One naming scheme and dynamic UTMs. Campaign =
brand_city, ad set =number+geo_segment, ad =ad№. The link carries{{campaign.name}},{{adset.name}},{{ad.name}}— the client’s CRM sorts leads into city pipelines on its own. - Structure by geo. Online is one campaign for the whole country. Every offline city gets its own campaign and its own creative with the city name: Almaty, Astana, Karaganda, Aktau, Pavlodar, Ust-Kamenogorsk, Aktobe, Shymkent, Petropavlovsk. For Karaganda the headline said “Karaganda, city center” because leads were coming from the region.
- Creatives in hypothesis packs. Interest audiences did not work — the Russian-speaking audience is small, so we ran broad and influenced results with creatives only. One hypothesis = three creatives with different design and angle: “your kid is glued to gadgets”, “plays Roblox and Minecraft — we’ll teach them to build their own games”, parent reviews, lesson price. In the first six weeks — 30 static visuals with 2–4 offers each and 22 video scripts. In weak cities we swapped photo-geo for video with the city name.
- Daily lead reporting. Leads were pulled from the CRM into a sheet every day: how many, which city, qualified or not. When online hit 60% unqualified, we relaunched: “age 8+” and “computer required” on the creatives, and switched off cities where kids have no PC.
- Scale. By mid-August — 13 campaigns across Kazakhstan; by December — 225.
Results
June–December 2024:
- Spend: $49,353
- Leads: 9,812
- Cost per lead: $5.03 against the client’s $5–6 KPI
- ROMI: 153% — $124,863 revenue on $49,353 ad spend
- Account: 225 campaigns, 12.7M impressions, 2.86M reach, 63,967 clicks at $0.77

Cost per lead and ROMI are taken from the core period, July–September: $21,069 spend, 4,188 leads at $5.03.

In the first weeks leads came in at $3.50 and the client’s sales team asked for more volume: “the online managers quietly ate up those leads.”
Insights
- A city name in the creative headline plus a dedicated city landing page brings cheaper leads than one country-wide campaign. A parent sees “Astana” or “Karaganda, city center” and knows it is nearby.
- For a Russian-speaking audience outside Russia, interests and narrowing do not work — the audience is too small. Run broad and test hypotheses with creatives: three variants per pain point, not one creative per ad set.
- One naming scheme and dynamic UTMs are not bureaucracy but the condition for a lead to reach the right branch. Without them the client’s CRM dropped leads into the wrong pipeline.
- A cheap lead is not a qualified lead. 60% unqualified online leads are fixed with a filter right on the creative: the child’s age and “computer required”. Cost per lead goes up, and so does the share of leads that buy.