eCommerce / Retail · Case Study
Google Ads for an eCommerce retailer: hitting a stable 5–7x ROAS on an €18,000 monthly budget
A full account rebuild — from conversion tracking in GA4 and Google Ads, through data-driven attribution, to Performance Max with a properly engineered Merchant Center feed. Step by step, with the actual decisions and numbers behind them.
Stable ROAS, up from 2.1x
Order volume month over month
Cost per acquisition
In this case study, we walk through how we took an eCommerce retail client — a multi-category online store running in parallel on PrestaShop and Allegro with a catalog of over 3,500 SKUs — from a Google Ads account where everything was set to auto-pilot and the real ROAS hovered around 2.1x, to a stable 5–7x return month over month on a budget above €18,000.
Before we get into the specific changes, we'll describe the context — who the client was, what the product looked like, and what market environment we were working in. It's not the most spectacular part of the material, but without it, it's hard to understand why we made the decisions we made. If you're running a Google Ads account and you recognize similar symptoms, the context will help you judge how much of what we describe can be translated to your situation.
About the client and the starting point
To protect the client's competitive position, we won't name the brand or share details that could identify it. What we can share:
- A multi-category eCommerce retailer (home & garden, accessories, small appliances), operating on the Polish market and expanding into Germany and the Czech Republic.
- Over 15 years on the market, recognizable brand within its niche.
- Two parallel sales channels: their own PrestaShop store and a seller account on Allegro (the dominant Polish marketplace).
- Starting Google Ads budget: approximately €18,000/month.
- Account previously managed by an agency focused mostly on day-to-day execution rather than strategic change.
The owner is an active entrepreneur running several businesses in parallel and was looking for a partner he could fully delegate the Google Ads channel to — with the confidence that someone is steering the ship and making decisions, not just executing tasks. The internal marketing team handled Allegro, social media, and content-led SEO; Google Ads was the area where they felt something was off, but lacked the bandwidth and specialist competence to unwind it from scratch.
Business model and catalog
The model is classic eCommerce retail: order, cart, payment, fulfillment. AOV around €58, operating margin allowing a CAC of €15–18, decent repeat purchase behavior (around 28% of customers return within 12 months). The catalog rotates seasonally — some categories (garden, tools, Christmas decor) have clear peaks.
The important point from a Google Ads perspective: the catalog contains over 3,500 active SKUs. That means relying purely on the Search network with hand-managed keywords for each category is a dead end. Shopping Ads and Performance Max have to be the core of the strategy, with the Search network supplementing brand and high-intent queries.
Market context
We started this engagement during a period when the Polish eCommerce market was simultaneously dealing with inflationary pressure, rising logistics costs, and sharper price competition from Asian players on Allegro. The client had raised prices by 6–8% a few months earlier — in response to supplier costs — and worried this would hit conversion rates. The first data points showed a slight CR drop, but the higher AOV partially offset it.
On the technical side, the Google Ads ecosystem in 2025–2026 looked very different from even two years prior: Universal Analytics was dead, GA4 was the default standard, Consent Mode v2 was the required minimum for EU traffic, and data-driven attribution was the default for new conversion actions. All of that needed to be straightened out in the first week.
State of the Google Ads account on day one
From conversations before kickoff, we knew the client estimated customer LTV at around €180–220 (first purchase plus repeats over 12 months). That gave us comfortable headroom to target a stable 4–5x ROAS on the first purchase without panicking over any single weak week.
The audit surfaced a picture we've seen many times before in accounts that have been "managed" for years without strategic intervention:
- The Google Ads tag was not properly deployed — conversions were imported from GA4 instead of tracked natively by Google Ads.
- Enhanced Conversions were turned off, even though the client already had marketing consent from logged-in users.
- Consent Mode was running in basic mode — without conversion modeling for users who rejected cookies — simply suppressing visible conversion volume by roughly 18%.
- Auto-applied recommendations were fully enabled — Google had been quietly adding keywords and changing campaign settings for months, drifting spend without active oversight from the team.
- Most campaigns sat on default settings, including last-click attribution on older conversion actions.
- No Responsive Search Ads in dozens of ad groups.
- Asset extensions used fragmentarily, with outdated copy.
- Performance Max running as a single campaign across the whole catalog, with no segmentation by margin or by return tier.
Goals and how we measured progress
The account had a long history — several hundred ad groups, several thousand keywords, tens of thousands of SKUs rotating through the feed. We explained to the client that reaching the target state isn't a one-week job — it's a 4–6 month systematic effort with clear checkpoints.
We agreed on the first-phase goal: a stable 4x ROAS within three months, while holding or growing order volume. To measure progress we used a simplified formula the client could verify themselves at any moment:
÷
Google Ads spend for the month
=
First-purchase ROAS
Example from the first full month after the new tracking went live:
- 1,240 orders attributed to Google Ads
- €58 average order value
- 1,240 × €58 = €71,920 revenue
- €18,200 Google Ads spend
- €71,920 ÷ €18,200 = 3.95x ROAS
LTV and the 12-month return picture were measured separately, once a quarter. But the client could see that even on the first purchase, we'd moved from 2.1x and were heading toward the target.
Foundation: conversion tracking in GA4 and Google Ads
The first thing we tackled was conversion tracking. Contrary to what less experienced practitioners sometimes claim, importing conversions from GA4 into Google Ads is not equivalent to native Google Ads tracking. The two systems use different attribution models at the source, have different conversion windows, and handle the no-consent case differently.
GA4 vs. Google Ads — where the divergence appears
GA4 uses data-driven attribution by default, but its reporting layer still rests on session-based user identification. A conversion that happens after the session expires, without GCLID parameters, can be attributed to a different channel than the actual source. Google Ads, when its own conversion tag is in place with GCLID, will count the conversion against the click even over a long window (up to 90 days).
For this client, the gap was painful: comparing data from GA4 and Google Ads (after deploying both trackings in parallel) showed that native Google Ads tracking caught 23% more orders attributed to paid search than the GA4 import. Those conversions had been quietly "disappearing" in attribution because the user came back later directly or via a branded search.
Practical takeaway: If your Google Ads account imports conversions exclusively from GA4, you're probably underreporting paid channel value by anywhere from ten to thirty percent. That directly affects Smart Bidding decisions — the model learns on incomplete data and doesn't know your keywords are actually working.
What we deployed
- Native Google Ads conversion tag in Google Tag Manager — separate actions for purchase and for micro-conversions (add to cart, begin checkout).
- Google Ads remarketing tag, separate from GA4 audiences — so we could build audience lists with dynamic feed parameters.
- Enhanced Conversions for purchase — hashed email and phone number from the order form (post-consent), to recover conversions lost to cookie restrictions.
- Consent Mode v2 in advanced mode, with conversion modeling for users who didn't grant consent.
Multi-click attribution modeling
Once tracking moved to native Google Ads, attribution work wasn't done. Step two was changing the attribution model across all conversion actions.
Imagine a typical purchase journey in this client's category:
- Click 1: a generic category query, e.g., "home accessories gift idea"
- Click 2: a more specific product query, e.g., "brass vintage candle holder"
- Click 3: a branded query, e.g., the store name — and the purchase happens here
Under last-click attribution, full credit for the conversion goes to the third click — the branded one. In reality, the first two queries did the work of building awareness and consideration; the branded query just closed the sale. If you allocate budget purely on last click, you'll prune the generic and product queries — and a few months later you'll watch branded volume start dropping, because nothing is feeding the top of the funnel anymore.
Google Ads has used data-driven attribution (DDA) as the default and recommended model for some time now. The model learns from your conversion history and decides how to weight each click in the path. It needs adequate data volume to work — and this client's account had long since crossed the DDA threshold.
We switched all conversion actions to DDA, set the conversion window to 30 days for clicks and 1 day for view-through. Two weeks in, we could already see credit reallocation in the reports: generic and category queries started getting a share that had previously gone entirely to brand. Smart Bidding began distributing CPC differently, and you could see it in the quality of traffic landing in GA4.
Enhanced Conversions and Consent Mode v2
These are two elements that separate a "managed" account from an "optimized" one in 2026. Skipping either of them means you're paying Google for clicks whose conversions you can't see — and Smart Bidding is making decisions on an impoverished data set.
Enhanced Conversions for Web
The mechanism is simple in description but requires care in deployment: after the order is placed, we collect the buyer's email and phone number from the form, hash them in the browser using SHA-256, and send them to Google along with the conversion. Google compares the hash with the hash of a signed-in Google user, and if there's a match, it attributes the conversion to the click even when cookies aren't available or the user crossed devices.
For this client we deployed it via Google Tag Manager, reading from the dataLayer that PrestaShop exposes on the order confirmation page. After a month, Google was reporting that Enhanced Conversions were recovering about 14% additional conversions that weren't visible to the standard tag.
Consent Mode v2 — advanced mode
The client had a CMP (Consent Management Platform) deployed but running Consent Mode in basic mode — meaning that if a user rejected marketing cookies, Google Ads tags didn't fire at all. Total blackout.
We switched the CMP to advanced mode. In this mode, tags fire even without consent, but in cookieless form — they send anonymized pings, and Google models the missing conversions based on behavior from fully-consented users. In practice, this recovered visibility on roughly 18% of conversions that had been completely invisible. Importantly, this is fully GDPR-compliant — the modeling happens on Google's side, on anonymized data.
Keywords and search terms
With the measurement foundation in place, we could start making structural decisions. The keyword-layer audit highlighted four main work areas:
- Disabling auto-applied recommendations
- Cleaning up informational queries
- Consolidating exact match into phrase / broad match with control via a negative list
- Restructuring overly broad ad groups
Auto-applied recommendations — turn them off
The feature is designed for small accounts running without an agency. Google adds keywords on its own, expands campaigns, and changes targeting settings — with a 14-day notification window that nobody reads. On an actively managed account, it's a constant nuisance: unexpected queries appear, campaigns start spending outside the intended profile, and explaining to the client why something changed becomes painful.
We disabled all auto-applied recommendations — including the ones Google defaults to as "safe." Every recommendation gets a manual review once a week and a conscious decision.
Informational queries on the negative list
The search terms report showed substantial traffic on queries starting with "how to," "what is," "where to buy," "when," "why." In a retail eCommerce setting, these queries rarely lead to a purchase — the user is looking for information, not a product. Conversion on them was about four times lower than on transactional queries, with comparable CPC.
We compiled a list of around 240 informational phrases with the highest volume and worst conversion, added them to a shared negative keyword list, and assigned it to all Search campaigns. The list can always be expanded — or specific phrases removed — if we later want to test content marketing angles. But in the aggressive ROAS-optimization phase, it was unambiguously beneficial.
Exact match → phrase and broad with control
The account had grown over the years mainly by adding more exact-match keywords — that was the previous agency's playbook. With a 3,500-SKU catalog, this meant ad groups with hundreds of exact-match keywords, whose upkeep was draining more time than it was worth.
In 2026 — with Smart Bidding working well and full conversion measurement — a pure exact-match strategy only makes sense in very narrow niches. We consolidated keywords into phrase match and broad match with active search terms monitoring and a robust negative list. That gave Smart Bidding more room to explore, while keeping a control surface.
Overly broad ad groups
The account had thematically mixed ad groups — for example, "floor lamp for living room" sitting in the same group as "closet organizers." A single ad rotation serves both, and Quality Score drops because the ad copy doesn't match either intent precisely.
We split the overly broad groups into tightly themed ones where keywords and ad copy are coherent. Result: average CTR on the Search segment rose 31% in the first month after restructuring, and Quality Score on most transactional queries went up 1–2 points. Translation: we're paying less per click for the same traffic.
Ad copy and SERP real estate
On the copy side, the client had a relatively strong baseline — 15 years of selling teaches you what works. Our role was more about refinement and increasing variant volume than reinventing the brand voice.
Headlines in title case
Most Responsive Search Ads on the account were written in lowercase. It's a simple change, but it consistently lifts CTR. Ads written as Home Accessories Store — 24h Delivery outperform home accessories store — 24h delivery in a measurable way. After moving all active RSAs to title case, average CTR rose by 0.8 percentage points.
Updating offers and USPs in copy
The ads were talking about "over 2,000 products" when the catalog had already crossed 3,500 SKUs. They were mentioning free delivery from PLN 199 when the threshold had long since dropped to PLN 149. The numbers in the ads were over two years out of date.
We went through every active ad and asset, updated the numbers, USPs, delivery terms, and guarantee language. It sounds mundane, but shoppers do read those numbers and compare them — unconsciously — against other ads on the SERP.
Maximizing SERP real estate
Each Google Ads ad has 15 headlines, 4 descriptions, display paths, plus assets (extensions): sitelinks, callouts, structured snippets, prices, location, calls. The more slots you fill, the more SERP real estate your ad occupies, the higher your rank, and the less room you leave for competitors.
For this client, many ads used 4–6 headlines instead of all 15, and most campaigns didn't have a complete asset set. We built account-level assets (for brand consistency) plus campaign-level assets (for category-specific messaging). The result: average Ad Strength for active RSAs moved from Average to Good/Excellent on 78% of ads.
Ad volume per group
Google's recommendation is at least 2 Responsive Search Ads per ad group. This lets the system rotate and compare variants, identifying which headline + description combinations resonate best with specific queries. For this client, many groups had only one ad — Smart Bidding had nothing to choose between and couldn't optimize.
We made sure every active Search ad group had 2–3 RSAs with different communication angles: one leaning on price, one on quality guarantee, one on delivery speed.
Merchant Center feed and Performance Max
The most significant strategic change — and the one that moved ROAS the hardest — was feed work and Performance Max restructuring.
Feed audit
The first Merchant Center feed audit showed:
- Product titles auto-generated from PrestaShop without category, brand, or variant — e.g., "Brass candle holder" instead of "Brass standing candle holder 30cm — vintage XYZ."
- 21% of products rejected by Merchant Center due to missing or non-compliant attributes (GTIN, availability, Google product category).
- No custom labels — meaning no ability to segment products by margin, seasonality, or historical ROAS tier in campaigns.
We deployed feed rules in Merchant Center plus a separate optimization middleware that built titles for each category according to a proven template: [Brand] [Product type] [Key attribute] [Variant]. We brought the active products rate from 79% to 96%.
We added five custom labels:
custom_label_0: margin tier (high / mid / low)custom_label_1: seasonality (whole_year / spring / summer / autumn / christmas)custom_label_2: price tier (premium / mid / budget)custom_label_3: historical ROAS (proven / testing / underperformer)custom_label_4: bestseller (yes / no)
Performance Max restructuring
Previously, all sales went through one Performance Max campaign with the entire catalog dumped in. Smart Bidding was trying to optimize everything at once — high-margin and low-margin products, bestsellers and tail SKUs. Result: budget allocation was uneven, and the campaign-level tROAS didn't reflect what individual segments could actually deliver.
We split Performance Max into four campaigns segmented by custom labels:
- PMax — Bestsellers & Proven ROAS (custom_label_3 = proven OR custom_label_4 = yes): tROAS 600%, top budget priority.
- PMax — High Margin (custom_label_0 = high): tROAS 500%, aggressive CPC.
- PMax — Seasonal (custom_label_1 ≠ whole_year): turned on and off seasonally, tROAS 450%.
- PMax — Rest & Testing: tROAS 350%, lower budget, treated as the experimentation lane.
Each campaign has its own asset set (images, video, headlines), its own audience signals, and its own budget. Smart Bidding now optimizes within homogeneous segments instead of across the whole catalog at once.
Audience signals — the first-party data contribution
For each Performance Max campaign, we prepared audience signals built from the client's first-party data — purchaser lists from the last 540 days, engaged newsletter subscribers, segments of cart-abandoners. This data feeds the Smart Bidding model and meaningfully accelerates the learning phase.
Results
After four months of systematic work:
An account where the owner was questioning whether to keep Google Ads at all became the most efficient customer acquisition channel in the brand's portfolio — outperforming Allegro Ads on revenue per unit of spend and Meta Ads on traffic quality. The client raised the monthly budget by 35% (to roughly €24,500) because the return level allowed aggressive scaling without margin erosion.
On the operational side:
- The internal marketing team freed up bandwidth for content and SEO.
- Reporting fits on one A4 page per month, not a 30-minute explanation.
- Budget decisions rest on real, full attribution — not guesswork.
The engagement is ongoing — we're working on further optimizations, expansion into DE and CZ markets, and integration of Google Ads with the client's CRM processes.