About Services Cases Blog Tools Reviews Partners Contacts

From ROMI 37% to 212% in 5 months: how CRM data changed everything

End-to-end analytics: monthly dynamics April — August 2026 · B2C / B2B breakdown · final data Google Ads spend ₴419 584 Orders 2 025 Revenue ₴3 990 852 Margin profit ₴801 639 ROMI 91.1% 0k350k700k1050k1400k 0k25k50k75k100k AprMayJunJulAug B2C revenue B2B revenue Margin profit Google Ads spend

Client: an online store selling electronics and electrical goods. A mixed audience: B2C and B2B in one store, dropshipping, SalesDrive CRM, Khoroshop platform.
Start of cooperation: April 20, 2026
Data: April — August 2026 (August — 26 of 31 days)

Contents
  1. Starting point: ads on the edge of a loss
  2. April — May: building the foundation
  3. June: the first breakthrough. −20% spend, +20% margin
  4. July: more orders, margin almost unchanged. We figure out why
  5. August: B2B ×2, ROMI 212%
  6. The big picture: April — August
  7. Analytics dashboard: a tool, not a pretty picture for a report
  8. What’s next
  9. Key takeaways
  10. FAQ

Starting point: ads on the edge of a loss

The client came with ads already running. He had launched them himself; something was running, but end-to-end analytics showed a clear picture: margin-based ROMI was 37.1%. That means for every hryvnia invested, the client got that hryvnia back and earned 37 kopecks of margin profit. With operating costs factored in, that is practically break-even.

But the main problem was not in the campaign settings. It ran deeper.

Problem #1: two completely different audiences in one account

The average B2C order is 1,240 UAH ($28). The average B2B order is 7,295 UAH ($162). Almost a 6x difference. With dropshipping and a tiny margin, B2C orders were effectively break-even — after acquisition costs, the margin shrank to symbolic amounts. All the real profit came from the B2B segment. But the ads did not know that — they optimized for “any order” and attracted everyone.

How to Separate B2B and B2C in Google Ads and Improve Lead Quality

Video: How to Separate B2B and B2C in Google Ads and Improve Lead Quality

Problem #2: the system did not understand what “success” meant for it

Without real sales data, Google Ads optimized for raw online orders from the cart. But B2B clients often place orders by phone, email or messengers — not through the cart. These very orders — the highest-margin ones — the system did not see at all and did not take into account in training.

Problem #3: 17 direct competitors with an identical assortment

Plus a “parent” company with a strong market position. In these conditions, the winner is not the one who spends more, but the one whose algorithm is trained on better data.

April — May: building the foundation

The first month is not about results. It is about infrastructure.

Dynamic call tracking. I connected call tracking to record phone sales and pass them to Google Ads. For a B2B niche this is critical — a significant share of deals is closed by voice.

CRM integration with Google Ads — two separate goals:

  • Actual revenue from a closed order
  • Actual margin profit

Why margin and not revenue? Because different products have different markups. If you pass revenue, the algorithm will optimize for large orders regardless of their profitability. Margin gives the right signal: look not for large orders, but for profitable ones.

At first we built a general integration without splitting B2C and B2B. By the second or third month, together with the client, we found a way to classify all orders and send them back to Google Ads as two separate signals. When you pass one general signal, Google does not understand who is B2C and who is B2B, and keeps looking for any audience according to the strategy.

A custom system for collecting orders from all channels. This is a solution I developed for this project, and as far as I know nobody had implemented it in this form before: full attribution of messenger and email orders back to Google Ads via the Offline Conversions API.

B2B clients often write in Telegram or by email — especially when the order is large or needs clarification. Previously these orders were lost in the analytics blind spot. Now they are correctly attributed and returned to the system as conversions with actual margin. All orders from everywhere — cart, phone, email, messengers — are collected, correctly attributed and sent back to Google Ads. A fully closed loop.

May — the results barely changed compared with April. ROMI 32.2%. Spend grew slightly, and margin grew slightly too — proportionally. This is normal: the system was only starting to learn from the new signals.

The client knew this in advance. One of the conditions of our cooperation: I need three months. Anyone who promises you profit from the first month is either incompetent or lying. Google’s algorithms do not work that way.

June: the first breakthrough. −20% spend, +20% margin

In the second half of June we collected enough data and switched campaign optimization to the “margin profit from CRM” goal. Not revenue, not the number of orders — actual margin from confirmed sales.

We spent less and earned more. This is not street magic and I am not David Blaine — it is an algorithm that finally understood what was expected of it. In parallel, in June we significantly changed the campaign structure, which also contributed.

July: more orders, margin almost unchanged. We figure out why

July brought +25% orders with a practically unchanged budget. But margin profit grew by only 5%.

The reason became clear quickly: the system brought more orders, but the share of B2C among them was growing — small orders with a tiny margin. Enough B2B signals had already accumulated, so from the end of July we switched to optimizing exclusively for the B2B audience.

August: B2B ×2, ROMI 212%

August speaks for itself. Data through the 26th of 31 days.

Google Ads Case Study: 2.5x Profit Growth from B2B Leads in 3 Months + End-to-End Analytics

Video: Google Ads Case Study: 2.5x Profit Growth from B2B Leads in 3 Months + End-to-End Analytics

Fewer orders (−20%), but 63% more revenue and 54% more margin. Spend fell by 4%. The average order grew from ~1,582 ₴ ($35) to 3,206 ₴ ($71) — more than double.

B2B orders in August — 78. In July — 39. Exactly twice as many.

The system found its audience. There are fewer B2C orders — and that is good, they brought almost no margin. B2B orders doubled — and that made the whole August result.

August: the system found its audience B2B orders July → August 39July78August×2B2B orders per monthAverage order:₴1 582 → ₴3 206
💬 From correspondence with the client · August 2026 (details anonymized)
C
Client
For the last 2–3 weeks, payments from companies and sole proprietors have been coming in almost every day — 10+ invoices each. And that is within 24 hours. It seems to me the ads have started working exactly in the direction we need.
C
Client
This is really great. Of course there are orders for 200–300 UAH ($4–7), but the chance of “hooking” a big client increases many times over.
C
The client, the next day
More than a dozen new invoices in a day. All companies, sole proprietors and so on :)

The big picture: April — August

Over 5 months, ROMI grew from 37% to 212%. Margin profit more than doubled. The budget stayed at practically the same level.

37% → 212%
ROMI over 5 months
×2.3
margin profit
~0%
budget change

Exact monthly data

PeriodSpendOrdersRevenueMarginROASROMI
April 202678,518 UAH ($1,745)283537,798 UAH ($11,951)107,652 UAH ($2,392)6.85x37.1%
May 202697,463 UAH ($2,166)425658,177 UAH ($14,626)128,805 UAH ($2,862)6.75x32.2%
June 202680,756 UAH ($1,795)410703,635 UAH ($15,636)153,933 UAH ($3,421)8.71x90.6%
July 202682,923 UAH ($1,843)503795,955 UAH ($17,688)161,725 UAH ($3,594)9.60x95.0%
August 202679,924 UAH ($1,776)4041,295,287 UAH ($28,784)249,524 UAH ($5,545)16.21x212.2%
TOTAL419,584 UAH ($9,324)2 0253,990,852 UAH ($88,686)801,639 UAH ($17,814)9.51x91.1%
From ROMI 37% to 212% 5 months · April — August 2026 APRILROMI 37%StartMAYROMI 32%Building the foundationJUNE−20% / +20%First breakthroughJULY+25% ordersFiguring out whyAUGUSTROMI 212%B2B ×2

Analytics dashboard: a tool, not a pretty picture for a report

Separately — about the tool I developed for this project. Not a Looker Studio template that is half-alive and glitches when data refreshes. A full-fledged analytics dashboard with:

  • Order breakdown by client type (B2B/B2C), order status, traffic source (UTM)
  • Metrics for each Google Ads campaign: margin, ROAS, ROMI, spend, number of orders, CPL
  • An automatic forecast to the end of the current month — four independent statistical methods (run-rate, trend, weighted average, exponential smoothing) and a consensus between them
  • A forecast for the next month for budget planning
  • A dynamics chart with an “Enable forecast” button — linear extrapolation right on the chart

Everything updates automatically without human involvement. The client sees the real picture in real time — not a presentation once a month, but a live decision-making tool. If you need a simpler ad report without custom development, there are Looker Studio dashboards built around your data, not from a template.

🧪 DEMO VERSION — the data is randomly generated for demonstration. This is not the client’s real account. The real dashboard works with the same logic on the client’s live data.
D
Demo · End-to-end analytics
Offline sales / ads dashboard (demo data)

Period

—
Loading demo data…
This is a demo version of the dashboard on synthetic (generated) data.

What’s next

Scaling the budget. The correlation between spend and margin is confirmed — more budget brings more B2B orders and more margin. The system scales predictably.

Launching a second online store. All the infrastructure — integrations, attribution, dashboard — is carried over to the new project. There will be no need to start from scratch.

Key takeaways

  • Data decides everything. Google Ads is an algorithm. The algorithm runs on data. If the data is raw or incomplete, the system optimizes in the wrong direction. If the data is clean, complete and correctly attributed, the system finds exactly the audience you need.
  • B2B and B2C are two different businesses in one store. Optimizing them with one signal means optimizing neither. Separating audiences and sending separate signals for each segment is not an option but a necessity.
  • Attribution is not a technical detail, it is money. Orders via email and messengers are often the largest B2B deals. If they do not reach the system, the algorithm does not take them into account and does not look for such clients.
  • Results do not come in the first month. April and May — building infrastructure. June — first results. July — understanding the growth points. August — the jump. Those not ready to wait three months lose to those who are. The one who is ready to wait wins — and later picks the cherries.

No CRM, or a CRM without an API? How to send sales with revenue and margin to Google Ads through a simple web interface — in the case “Google Ads Offline Conversions Without a CRM”.

Related services
CRM integration with Google Ads Offline conversions: real sales from your CRM flow back into Google Ads, so the algorithm learns from revenue, not leads. from $300Learn more End-to-end analytics All inquiry sources and CRM sales in one picture: you see which channel actually brings money. from $400Learn more
A mixed B2B/B2C audience and ads that cannot tell who is who? Get in touch, we will review your account

Case FAQ

Frequently asked questions

Does this approach work for low-margin dropshipping?
Yes, with one condition: you need to clearly separate audience segments and pass the real margin for each order. If B2C does not bring profit, the system should know it and not spend budget on that audience.
How long does the algorithm take to relearn after connecting the CRM integration?
3–6 weeks, with at least 30–50 conversions over that period. In this case, the first noticeable result appeared about 6 weeks after the new goals were connected.
Do you have to pass margin, or is revenue enough?
If product margins differ, margin is a must. If you pass revenue, the algorithm will optimize for large orders regardless of their profitability.
What if B2B orders come in via email and messengers?
That is exactly why you need full attribution of all channels via the Offline Conversions API. Without it, the highest-margin orders stay in the system’s blind spot.
Can such results be achieved without a CRM?
Without a CRM, you cannot pass data on actual sales and margin to Google Ads. At minimum, you need a tool that records orders with their statuses and amounts. Without it, the system will optimize only for raw online conversions.
When should you start scaling the budget?
When there is a stable positive correlation between spend and margin — that is, a bigger budget brings a proportional increase in profit. In this case, the signal to scale appeared in August after the B2B segment stabilized.



Contact

Let's discuss
your project

Leave a request — we'll assess your situation, discuss your goals and find the best solution for your business and budget.

🏆
As a Google Partner, I can help you get a Google Ads bonus of up to 55,000 UAH ($1.2K) for your first campaigns.
❌ I don't work with: gambling · betting · alcohol · tobacco · crypto · grey niches · payday loans
▸ new_project.init()
Discuss a project