Do You Really Need Ads When You Rank #1? How Skroutz Built a Tech Framework to Detect Ads Cannibalization

TL;DR

As Skroutz expanded into new markets and services, Paid Search became an important growth lever. However, we noticed something troubling: in several cases, ads were not generating new traffic. They were simply replacing clicks we were already capturing organically. When you rank #1, users may click the ad instead of the organic result, but that is not incremental value, it is just a paid substitute for a “free” click.

To tackle this systematically, we built an internal framework that detects ads cannibalization at the query level. Our “hannibal” framework combines time series correlation between ad spend and organic CTR, baseline CTR comparisons during low-ad periods, and ROAS filters to distinguish between toxic and profitable cannibalization. Ιn some queries, up to 50% of paid clicks turned out to be non-incremental, while in others, ads drove fully new demand.

The biggest shift, though, was conceptual: ads moved from a channel decision to a capital allocation problem, and that changed how our SEO and Performance teams work together.


Introduction

From its early days, Skroutz has been a deeply SEO-driven product. Organic traffic wasn’t just another acquisition channel for us, it was the primary growth engine.

Until recently, we relied very little on paid advertising. But as we expanded into new services (Skroutz Plus, Lockers), new verticals (Supermarket, Used Cars), and new markets (Cyprus, Romania, Bulgaria and beyond), the need for Paid Search became unavoidable.

More ads typically means more traffic. In our case, though, they also introduced a new risk: paying for traffic we were already capturing organically.

This led us to a question that sounds simple but is anything but:

Are we generating incremental traffic, or just paying for traffic we already own?


Why this problem is hard

The interaction between SEO and Paid Search is messy. Entire books could be written about it. Here we’ll focus on the core challenges that most growth teams run into.

Attribution

How do you assign a session, or more importantly a conversion, to a specific channel? Can you confidently say that a user who clicked an organic result wasn’t influenced by an ad they saw the day before? Or that a paid click wasn’t the result of prior organic exposure?

It gets worse. Each platform has its own measurement logic: Google Search Console for organic, Google Ads with its own conversion tracking, Meta Pixel for Meta platforms, etc. Attribution windows differ too (typically 30 days for Google Ads, 7 days for Meta). A conversion may be attributed to an ad long after the user has interacted multiple times via organic or direct channels.

Constantly changing SERPs

Search result pages are not static. A query that today returns 10 blue links may tomorrow include ads, maps, “People Also Ask”, AI Overviews, rich results… and more ads 😒. All of these elements compete for user attention and can suppress organic visibility significantly.

Even within the same vertical, ie e-commerce (products), SERPs vary dramatically. A fashion query behaves very differently from a tech query — in layout, intent, and click distribution.

Paid Search is a dynamic auction. Competitor strategies, seasonality and budget shifts can rapidly change the number and type of ads shown, their positioning, and their aggressiveness. This volatility makes it really hard to isolate the true impact of your own ads.

Business context

Now, not all campaigns are designed for direct performance (clicks). Some focus on brand awareness, visibility dominance or strategic positioning. On top of that, metrics like ROAS (Return on Ad Spend) add another layer of complexity to decision-making.

Organizational complexity

In many organizations, SEO and Paid teams operate separately, with different KPIs and incentives. This lack of alignment often leads to inefficiencies and, ultimately, wasted spend.


Our hypothesis

Our core hypothesis was straightforward:

If a query is already dominated by strong organic rankings, then a portion of paid traffic is likely non-incremental.

In other words, ranking in the top positions organically (say, #1–3) may make some paid clicks redundant.

We had repeatedly observed cases where launching or scaling ads led to a noticeable drop in organic traffic for the same pages — a pattern that looked a lot like cannibalization. That said, this wasn’t always the case. In many scenarios, paid search was clearly a growth driver.

So this is not an argument against ads. Our goal was to understand when ads create value, and when they don’t.

There were situations where we knowingly accepted some level of cannibalization — to accelerate user acquisition, to capture high-value queries (high ROAS), or to defend strategic positions. What we needed was a systematic way to make these decisions, not gut feeling.


A framework for detecting ads cannibalization

For all these, we built a framework to identify cases where paid ads “steal” traffic from organic results without creating meaningful incremental value. We named it internally “Hannibal” 😄.

Query & ads segmentation

First, we narrowed the scope. We excluded branded queries (anything containing “Skroutz”), since branded traffic behaves very differently. We also excluded Shopping Ads, because in our case their impact on organic CTR was minimal. Finally, we focused only on queries where Skroutz already ranks in the top 3 organically. If we’re not ranking strongly, there’s little organic traffic to cannibalize in the first place.

Metrics that matter

The key metrics we track are: Organic CTR, average organic position, total clicks (blended: organic + paid), revenue/GMV, and ROAS.

The decision logic

At its core, the framework tries to answer one question: when paid traffic increases, does organic performance decline in a statistically meaningful way, and does that impact business value?

We model Ads clicks and Organic CTR as two interacting time series and analyze their relationship. Here’s how it works.

Time series analysis. For each keyword, we analyze at least 14 weeks of data: weekly Ads clicks (Series A) and weekly Organic CTR (Series B).

Pearson correlation. We calculate the Pearson correlation coefficient (r) between the two series. An r between -0.7 and -1.0 indicates strong negative correlation — likely cannibalization. An r around 0 means no relationship — ads are probably incremental. A positive r might even suggest synergy (the so-called halo effect).

Baseline detection. Organic CTR can drop for many reasons (ranking loss, SERP changes), so we need a baseline to compare against. We identify the weeks with the lowest Ads activity (max at bottom 25%) and calculate the average CTR during those periods. That’s our Baseline CTR. If the current CTR is more than 30% lower than baseline and the correlation is negative, that’s a strong signal that ads are driving the drop.

ROAS filter (the business layer). Once we detect cannibalization, we evaluate whether it matters commercially. If ROAS is below 20, we call it toxic cannibalization: we’re paying to replace organic traffic with no meaningful return. If ROAS is 20 or above, it’s profitable cannibalization: even with some organic impact, paid generates enough value to justify the spend (well… up to a point).

Incrementality & wasted spend. Finally, we estimate the true incremental value. Expected Organic Clicks = Impressions × Baseline CTR. Incremental Clicks = (Organic + Paid Clicks) – Expected Organic Clicks. If incremental clicks are fewer than paid clicks, the difference multiplied by CPC gives us the wasted spend. This lets us move beyond standard ROAS and evaluate what we call Incremental ROAS — not just what ads sold, but what they sold in addition to what SEO would have delivered anyway.


What we found

After applying Hannibal across multiple queries, the results were eye-opening. In some cases, up to 50% of paid clicks were non-incremental. In others, ads were driving fully incremental demand. User behavior varied significantly by query, there’s no “one class to rule them all”.

This reinforced something we suspected but hadn’t quantified: you need query-level optimization, not channel-level assumptions.

After many iterations, our decision model settled into five main buckets:

  • Reduce / Pause — Low ROAS + high cannibalization → cut or reduce bids (toxic cannibalization)
  • Maintain — High ROAS → keep running, but monitor closely (profitable cannibalization)
  • Scale — No organic impact → increase budget
  • Reallocate — Weak organic rankings + high ROAS → shift spend here, this is where ads help most
  • Validate — Stop ads → if organic CTR recovers, the hypothesis is confirmed

A real example

Let’s make this concrete with an example. For the query “stick vacuum cleaners”, Skroutz was already generating hundreds of organic clicks per day with top organic rankings, usually #1.

Image 1: Stick vacuum results with Skroutz ad. Stick vacuum results with Skroutz ad

After introducing ads to this query, organic CTR dropped by roughly… 80%. Organic clicks dropped significantly too. Users preferred clicking the ad, even though the organic result was sitting right there at position #1. Classic SERP visibility bias.

Image 2: Organic clicks (blue line) and CTR (green line) plummeted after Skroutz ad rendered. Organic clicks (blue line) and CTR (green line) plummeted after Skroutz ad rendered

Hannibal flagged the issue. We paused the ads.

The result? Organic CTR and clicks rebounded almost immediately. The budget was reallocated to queries where ads were actually driving incremental traffic. Everyone happy 🙌.


Limitations

Like most models, this framework is not perfect. First off, it relies on correlation, not true causation. And the system operates in a highly dynamic environment: auction-based bidding, constantly evolving SERPs, different attribution models, different niches (although all under ecommerce), etc.

Our goal though, was never to perfectly model reality. It was to identify clear, high-impact inefficiencies. So far, Hannibal has proven effective at that.


Organizational impact

The biggest shift wasn’t the framework itself, it was conceptual:

Ads moved from a channel decision to a capital allocation problem.

We stopped asking “should we run ads?” and started asking “where do ads create the most incremental value?”

This also had some side effects that turned out to be just as valuable: strong alignment between SEO and Performance teams, shared KPIs and decision-making processes, and a continuous, data-driven optimization loop that benefits everyone.


Takeaways

If we had to boil down our experience for any growth team:

  1. Don’t evaluate SEO and Paid Search in isolation, they interact more than you think
  2. Incrementality matters more than channel metrics
  3. Strong SEO doesn’t replace Paid, it reshapes it
  4. SEO, Paid (SEM) and Business teams benefit each other enormously when they share workloads and goals

Closing

As with Skroutz’s SEO team’s previous challenges, like crawl budget optimization or real-time Core Web Vitals monitoring, the solution wasn’t to simplify the system. It was to model it correctly, test rigorously, and act based on data.

In complex systems, the goal is not to eliminate uncertainty. It’s to measure it well enough to consistently make better decisions.


Hero image source: Unsplash.