Saint Petersburg case: cleaning traffic from zero, revenue ×3

3 years 9 months case study: cleaning company in Saint Petersburg from weak digital to Rosatom, Tikkurila, MC-Bauchemie. From 36k to 200k rubles/month.

For three and a half years I ran traffic for a cleaning company in Saint Petersburg that was operating but barely visible online. I started with 36,000 rubles/month in Yandex Direct, a disconnected office phone, and a site on the Megagroup website builder where cleaning services sat next to laundry-gel listings. Today the company’s portfolio includes Rosatom, Tikkurila, MC-Bauchemie, Yasnye Zori poultry farm, and Sestroretsk Bakery. Revenue tripled.

Below — the details: which channels worked, which I burned, how I went through an audit, how I gave the owner an ultimatum, and why in 2026 I finally got into SEO. The case is long and personal — no abstracts, as it happened.

Key takeaways

  • In 3 years 9 months, the Saint Petersburg cleaning company’s revenue tripled. The portfolio now includes Rosatom, Tikkurila, MC-Bauchemie, Yasnye Zori, and Sestroretsk Bakery (source: my project management, July 2022 - April 2026).
  • In 29 days after the new PHP 8.4 site launch, SEO organic reached the level of the best paid channels — 5.60% conversion vs 8.00% for Yandex Direct Search; together Search + SEO drive 26 of 49 site goals (Yandex Metrica, March 22 - April 19, 2026).
  • A starting Direct budget below 70,000 rubles/month in Saint Petersburg cleaning is pointless: the ad runs half a day and switches off, the top commercial traffic stays unclaimed.
  • In B2B cleaning, only Search on commercial queries works systematically. YAN, retargeting, VK targeting and Avito were all tested and did not produce systematic leads.
  • I wrote the PHP 8.4 site myself, I run SEO myself - no studios, no contractors, the full marketing and development stack in one pair of hands.

Starting point - July 2022

In July 2022 I joined a cleaning company that was operating in the Saint Petersburg market but barely visible online. There was one main service - daily cleaning - and a pile of adjacent areas no one was running systematically. The site on Megagroup lived a strange life: cleaning services sat next to laundry-gel sales, and half the pages 404’d.

On day four I asked for the office phone number to put on the new site. The answer was: ‘Oh Dim, that one doesn’t actually work.’ Good illustration of the state of marketing and sales. The main lead source was cold calling. In cleaning in 2022, that was already dead.

We need a Tilda site, urgently. That’s what I can do right now - plus launch Direct. Everything else waits.

That’s what I said on day one. The budget we started with: 36,000 rubles/month including VAT. No cases. No equipment. No brand recognition. Blank slate.

First week - Tilda and Direct

I built the Tilda site in a week. Block layout, hooked up Yandex Metrica, made separate pages per service - no ‘one landing for everything’. In Direct I launched Search campaigns: targeted commercial queries, no competitor names in the semantics. For competitors, separate Master Campaigns. Retargeting I did not touch: in cleaning it does not work.

The big strategic decision of that week was to push into industrial cleaning. Before this I had been at a federal cleaning company where industrial was the main line. Different money, different clients, completely different level of negotiations. Daily apartment cleaning is fine, but for the project to pay off we needed B2B sites.

First major client - Rosatom

The first major client was Rosatom. One-off jobs. I did not get in via advertising - I sat down and sold it myself. Chatted, pitched, pulled cases from the previous company. The owner was stunned by the speed.

Hold on, we’re just getting started. So don’t expect it to be easy. It’s going to be very hard - we have no case studies, no track record.

But two months later the project went into the black. Average CPL across the mix ‘apartments + offices + industrial’ was 880 rubles including VAT. The first systematic result appeared: at least one industrial lead per month, enough to cover all operating costs.

The year we hung on at 36k

From September 2022 to November 2023 the ad budget did not change. 36,000 rubles/month. The hardest period. I kept refining the site, adding new service pages. Tilda unexpectedly delivered solid organic output: on ‘industrial cleaning Saint Petersburg’ we landed on page one of Yandex.

I hooked up Yandex Maps, Yandex Business, tried Avito - two listings, low-margin traffic, haggled to the last ruble. Tried VKontakte - got two decent residential jobs, then the platform reshuffled the ad cabinets and everything broke. I closed the channel without regret.

Avito and VK were still useful for something else - I used them to find and fill line-staff vacancies.

November 2023 - the ultimatum

By November it was obvious: 36k was no longer physically enough. The ad ran half a day and switched off. The owner at this point was starting to think I was ‘doing something wrong’. I had been holding the line since September 2023. In November I called and put it bluntly.

Either we raise the budget to 70+ with VAT, or we stop. We have no clients. We’re not winning the top commercial traffic. I’m doing work for the sake of work. I don’t want to do that.

The budget went up. And then - an important sequence of events.

The audit and the raise

First came the audit. After the budget increase, I went through an independent audit of the ad account - and got ‘excellent’. Only after the audit, in early 2024, the owner called and invited me to a restaurant. I went. He said: ‘I’ve decided to give you a raise.’ I did not ask - he initiated.

The order matters: first external confirmation that a professional is doing the work, then the raise. Before the audit - silence. After the audit - money.

The takeaway is simple: an external audit works both ways. If you’re doing good work, it’s a way to fix the fact and get fair pay. If you’re not, it’s a way to find out exactly what’s broken, fast.

2024-2025: budget grows, leads do not

How does it work - the budget nearly triples in a year, but lead count stays flat?

From 2024 the budget grew on plan: 70 → 100 → 150 → 200 thousand rubles/month. Lead count did not grow. Revenue grew. Lead cost went from 880 rubles to 1,400-1,600 rubles. I stopped trying to catch everything: cleaned the traffic in favor of B2B and industrial.

Lead-to-contract conversion is around 15%. Each industrial deal is around 400,000 rubles gross, with margin after costs about 200,000 (excluding advertising). At a lead price around 5,000 rubles in the industrial segment, unit economics are excellent. More on channel-selection logic for B2B in the paid traffic service.

What I added to the strategy

  • Separate landing for every service - not one ‘fits-all’. Expertise on the page, detailed work description, quality criteria.
  • B2B offers: contract work with VAT, free on-site manager visit for an inspection.
  • I took the calls myself - that gave me an understanding of how the client talks. All the semantics were assembled from their voice.

In July 2025 we hooked up AmoCRM and call recording on Megafon - just so we would stop losing leads. We deliberately do not use call tracking, so some calls do not get attributed by source. Important disclaimer - real SEO contribution numbers are higher than what Metrica shows.

Key B2B sites in this period

  • Rosatom - one-off jobs at an industrial site
  • Yasnye Zori (poultry farm) - 2-year contract
  • MC-Bauchemie (Kirovsk) - industrial disinfection
  • Tikkurila - regular work
  • Sestroretsk Bakery - daily cleaning of a food production facility

How I started believing in SEO

Up until May 2025 I did not believe in SEO. Too slow, too expensive, too opaque. In February 2026, after leaving another company where I was head of marketing and saw how they ran SEO at real scale, I realized: it’s time. I decided to take it on myself, no contractors - nobody knows this business the way I do.

I spent two weeks trying to set up an SEO structure on Tilda. Theoretically possible, but at the scale of ‘dozens of pages × locations × services’ you cannot edit every title, every H1, every schema markup by hand. I sat down and over a couple of weeks wrote bare PHP 8.4 from scratch, tested on free hosting, and proposed the migration to the client.

The new PHP 8.4 site - March 22, 2026

On March 22, 2026 the site I wrote myself in plain PHP 8.4 was launched. Architecture:

  • 48 services, each multiplied by Saint Petersburg, Leningrad Oblast, Saint Petersburg districts and metro stations - no cannibalization
  • Built-in blog, custom database for reviews, comments, and view counters
  • Publications on Yandex Zen as a recommendation channel
  • Schema.org markup on every page: Service, LocalBusiness, BreadcrumbList, FAQPage

Just under a month since launch. Today, April 19, 2026, 150 pages indexed. On brand queries and individual commercial ones (‘polymer protective coating application on linoleum’) we are already in top-3. On ‘cleaning Saint Petersburg’, ‘cleaning services’, ‘industrial cleaning’ - in top-10 with fluctuating positions.

Google Search Console: 150 indexed pages for the PHP 8.4 cleaning site, 4 weeks after launch, growth chart from March 4 to April 19, 2026
Google Search Console: indexed pages grew from ~20 to 150 in 4 weeks after the site launched on March 22, 2026.

In the first month of the new site (Metrica window March 22 - April 19, 2026, 29 days since launch), SEO organic delivered 5.60% visitor-to-goal conversion. The best paid channel - Yandex Direct Search - holds 8%, and that is still the leader. But by goal count: 12 from SEO + 14 from Direct Search = 26 of 49 site goals together, or 53% (Yandex Metrica). SEO reached the level of the best paid channels in under a month. The site and SEO I run myself - no studios, no contractors.

ChannelVisitor-to-goal conversionGoals completed
Direct Search8.00%14
SEO organic (Yandex + Google)5.60%12
All paid traffic (Search + YAN + Master Campaigns)3.97%14
Site total2.23%49

The key here is not so much ‘SEO at 5.60% in a month’ but that Search + SEO together carry more than half of all goals. YAN and Master Campaigns in cleaning do not deliver B2B leads (0 goals on 149 visits in Direct networks over 29 days) and drag the paid-traffic average down to 3.97%. Direct visits and referrals cover the rest.

Site conversion by source (Mar 22 - Apr 19, 2026) Direct Search 8.00% - 14 goals (Search) SEO (Y+G) 5.60% - 12 goals All Direct 3.97% - Search+YAN+MC Site total 2.23% 0% 2% 4% 6% 8% Source: Yandex Metrica, visitor conversion on selected goals
In 29 days after launch, SEO organic matched the level of the best paid channels: 5.60% vs 8% for Direct Search.

YAN and Master Campaigns in B2B cleaning produce no goals and drag the all-Direct average down from 8% to 3.97%.

Important disclaimer: some phone leads are not tracked in Metrica at all. We do not use classic call tracking. So real conversion and SEO contribution are higher than what the numbers show.

Yandex positions on April 20: 100% of queries in top-10

On April 20, 2026 - 29 days after the PHP 8.4 site launch - of the 31 commercial cleaning queries for Saint Petersburg, all 31 sit in the Yandex top-10 (TopVisor, snapshot April 20, 2026). 7 queries in top-3, 12 in top-5. The snapshot was Yandex-only; the Google slice was not captured in this pass, planned for the second wave.

31 queries by Yandex position (Apr 20, 2026) Position 1 3 Position 2 3 Position 3 1 Position 4 2 Position 5 3 Position 6 2 Position 7 8 Position 8 4 Position 9 3 Position 10 2 Top-3 - 7 queries Top-4-5 - 5 Top-6-10 - 19 Source: TopVisor, April 20, 2026
Distribution of 31 commercial Saint Petersburg cleaning queries by Yandex position on April 20, 2026. All 31 in top-10. Source: TopVisor.

Key queries in top-3

  • Top-1: ‘global cleaning spb’ (brand), ‘haccp cleaning spb’ (HACCP - sanitary requirements for food industry, narrow B2B), ‘cold storage cleaning spb’ (industrial, food).
  • Top-2: ‘industrial floor washing spb’, ‘cold storage washing spb’, ‘cold storage cleaning spb’.
  • Top-3: ‘new building cleaning price spb’.

Without the brand ‘global cleaning spb’, 30 purely commercial queries remain - all 30 in top-10, 6 in top-3. The densest cluster of the SERP - food production and cold storage: HACCP, sanitary processing, floor washing, equipment cleaning. These are exactly the clusters on which the company’s current B2B portfolio is built (Sestroretsk Bakery, Yasnye Zori, MC-Bauchemie). Semantics and the real portfolio overlap - which means the site is capturing what the company actually knows how to do, not abstract traffic.

Full export of all 31 queries - in CSV.

What 3 years 9 months delivered

  • Company revenue tripled.
  • From weak digital presence to a portfolio with Rosatom, Tikkurila, MC-Bauchemie, Yasnye Zori, and Sestroretsk Bakery.
  • One stable channel (Yandex Direct) grew into two: Direct + SEO work as a pair.
  • Average ticket size: apartments 16k rubles, offices 27k, industrial 400k.
  • Visitor-to-goal conversion on Direct Search - 8% (pure commercial traffic). All paid traffic - 3.97%, because Master Campaigns and YAN produce no B2B leads and drag the average down. Lead-to-deal conversion - around 15%.
  • 150 pages indexed on the new site in 4 weeks. On April 20, 2026, of 31 commercial queries, 100% in Yandex top-10, 7 queries in top-3 (including ‘haccp cleaning spb’ and ‘cold storage cleaning spb’).
  • Ad budget grew from 36k to 200k, now split 150 Direct + 50 SEO - and SEO is already starting to pull the overall conversion up.

What this case taught me

1. A traffic specialist must listen to the client

For the first two months I took the calls myself. That killed dozens of bad hypotheses on semantics and landing pages. You quickly understand who the B2B cleaning buyer is and what words they think in.

2. I would take 70k from day one

If I could change one thing, only this: starting budget. Not 36, but at least 70k from month one. We would have grown several times faster and not spent a year on ‘survival’. Everything else - strategy, channels, the industrial bet - I would do again.

3. In B2B cleaning, retargeting, YAN, and network campaigns do not work

I tested VK, Avito, YAN, retargeting - with spend, in different setups. In this niche only Search on targeted commercial queries works, plus proper landing pages and proper service on the other end of the line. Everything else is background noise.

4. SEO is not ‘later’, it is ‘yesterday’

I lost three and a half years where SEO could have already been working. Tilda did not allow systematic SEO, but that’s a cop-out - I could have moved to clean code long ago. Today, after the March 2026 launch, SEO matched the level of the best paid channels in 29 days - 5.60% conversion vs 8% for Direct Search. Together they cover more than half of site goals. Both the SEO and the PHP 8.4 site I do myself - it’s not rocket science when you’ve been three and a half years in the niche and know the semantics at the level of ‘this is how the client talks’.

5. Sometimes the right answer is an ultimatum

In November 2023 I could have kept working ‘with what’s there’ and quietly burned out. I chose to say honestly: ‘Either we raise the budget or we close.’ The result - more budget, an audit, a new salary, and a long-term partnership. Sometimes the client needs to hear the truth, even if it’s uncomfortable.

Wrap-up

If I were starting again, I would not change a thing. Only ask for a higher budget up front. We would have grown much faster.

Related: how I work - no fluff, no 40-slide proposals, 50 days of SEO in B2B cleaning.

Frequently asked questions

What does SEO for a cleaning company cost?
In this case I run SEO myself, no separate contractor. The marketing budget allocates 50,000 rubles/month to the SEO track. The site I wrote myself in plain PHP 8.4 - cheaper and more flexible than hiring an agency. First top-10 positions came in week 4 after launch, first top-3 on low-competition queries in the same window.
Direct or SEO - which is better for cleaning?
In B2B cleaning both channels work, but differently. Yandex Direct Search leads with 8% visitor-to-goal conversion, lead cost 880-1,600 rubles with proper segmentation. SEO organic reached 5.60% within 29 days of site launch - level of the best paid channels. Together Search + SEO drive 26 of 49 site goals. You need both: Direct brings leads immediately, SEO catches up by month 2-4.
Do retargeting and Yandex Ad Network work in B2B cleaning?
No. I tested YAN, retargeting, VK targeting - none delivered systematic B2B leads. In cleaning, the contractor decision is made once and for a long time, the buying cycle is long, the audience is narrow. Only Search on commercial queries works + proper landing pages + a real human on the other end of the line.
What should be the starting budget for Yandex Direct in Saint Petersburg cleaning?
At least 70,000 rubles/month including VAT. Anything less runs half a day and switches off, while also failing to capture the top commercial traffic. I started on 36,000 rubles and survived a year - then gave the owner an ultimatum and we raised it to 70k. If I could rewind, I would take 70k from the start.
How soon after launching SEO does organic show up in cleaning?
In my case, 2-4 weeks to the first top-10 positions on a site with proper architecture (PHP 8.4, separate pages for service × location, no cannibalization). At 29 days: 150 pages indexed, top-3 on brand and low-competition queries, top-10 on the main commercial ones ('cleaning Saint Petersburg', 'industrial cleaning').