blog/helft-shopping-budget-naar-onbekend.mdx
Alle notities

22 april 2026

De helft van het Shopping-budget verdween naar 'Unknown': verslag van een audit op een zevenstellig account

Ik heb net een audit gedaan op een Nederlands e-commerce Shopping-account met zevenstellige omzet. De grootste kostenpost was geen campagne of product. Hij heette 'Unknown' en at zo'n 50% van het budget op. In dit artikel: de audit, de Hybrid Matrix-architectuur die één enkele DSA-campagne vervangt, het Opener/Closer/Assister-raamwerk dat voorkomt dat je je eigen assists om zeep helpt, en de nachtelijke BigQuery → Sheet → Merchant Center-pipeline die dit alles in stand houdt.

Jermaya Leijen

Jermaya Leijen

Google Ads-specialist & AI-engineer

Ik heb net een Google Ads-audit afgerond op een Nederlands e-commerce account met zevenstellige omzet in technische producten, het soort catalogus waarbij Shopping vrijwel alle groei levert, de marges dun zijn en elk procentpunt aan verspilling zich opstapelt. Het eerste wat ik bij elke audit controleer, is waar het geld naartoe gaat. De grootste kostenpost was geen categorie, campagne of product. Hij heette “Unknown” en was goed voor bijna de helft van het budget.

Dat label is het symptoom. De oorzaak eronder is wat er gebeurt met een Shopping-account wanneer je de feed behandelt als een statische export in plaats van als een strategiedocument dat dagelijks meebeweegt met je data. Ik zie dezelfde constructiefout terugkomen bij vrijwel ieder account boven zo'n €20k per maand dat ik onder ogen krijg. Hieronder volgt de volledige audit, in algemene vorm.

Shopping budget allocation showing 48% of spend in 'Unknown' category, with 6-month ROAS line stable at 1.9-2.2 and a December dip to 1.6

1 · Het “Unknown”-probleem

In de Google Ads-interface kun je de spend opsplitsen naar Google Product Category. Staat zo'n 50% van de spend in een rij met het label “Unknown” of “Onbekend”, dan is er meestal een van deze drie dingen aan de hand:

  1. De feed heeft geen google_product_category gemapt, of het is alleen op het hoogste niveau ingesteld.
  2. Het veld product_type, je eigen categorieboom, ontbreekt of staat voor de hele catalogus op dezelfde vaste waarde. Splits je de spend op dat veld, dan valt alles in één hoop.
  3. De custom_label_*-velden (vrije velden waarmee je producten zelf kunt indelen, bijvoorbeeld op marge of voorraad) zijn leeg, waardoor je de catalogus in de campagnes op geen enkele eigen dimensie kunt opdelen.

Het gevolg zit aan twee kanten. Google valt terug op zijn eigen inschatting van je producten, op basis van titel, omschrijving en afbeelding, en die inschatting kun je nergens corrigeren. En jij kunt je uitgaven niet meer terugvoeren op een categorie, dus van bijna de helft van het budget weet je niet waar het heen ging. Bij dit account ging het om €23.800 per maand.

De oplossing is mechanisch (koppel de taxonomie van Google aan je CMS-categorieën, vul product_type vanuit je echte categorieboom, vul de custom_label_*-velden). De les is structureel: de feed is de strategie. De campagne-indeling, het bod en de asset group volgen daar alleen uit.

Die twee manieren van kijken naast elkaar:

Feed als statische exportFeed als strategiedocument
Wie bepaalt de campagne-indelingDe specialist, handmatig in de interfaceLabels die elke nacht uit je eigen data worden berekend
Hoe vaak de indeling verandertBij de lancering, daarna zeldenElke nacht, automatisch
Waar de strategie leeftIn campagne-instellingen die niemand kan teruglezenIn feedlabels die iedereen kan zien
Als een product zich anders gaat gedragenEr gebeurt niets, tot iemand het opmerktHet product verhuist zelf naar de juiste campagne
OverdraagbaarheidZit in het hoofd van de beheerderDe architectuur legt zichzelf uit

2 · Het prestatiepatroon over 6 maanden

Nadat ik de data had gesegmenteerd op feedgezondheid, heb ik de totale kosten tegen de ROAS (return on ad spend: omzet per euro advertentiebudget) uitgezet over de afgelopen zes maanden. Drie dingen vielen op:

  • Stabiele ROAS tussen 1,9 en 2,2. Geen grote schokken en geen algoritmische verrassingen. Dat is het cijfer dat je krijgt wanneer niets kapot is en ook niemand iets actief verbetert.
  • Dip naar zo'n 1,6 in december bij de grootste campagnes, ondanks hogere spend dan in november. Klassieke seizoensgebonden CPC-inflatie die een catalogus met lage marges hard raakt.
  • De grootste afzonderlijke campagne was een “Marge 0-10%”-bucket die €18-24k per maand opslokte. Bij een SKU met 0-10% marge is een ROAS van 2,0 verlieslatend: de marge op die omzet is een fractie van wat de klik heeft gekost, en break-even ligt daar een veelvoud boven. Elk procentpunt verspilling weegt hier extra zwaar.

Samengevat: een stabiel account zonder onderscheid tussen producten, waarbij het grootste deel van het budget naar de categorie gaat die zich dat gebrek aan onderscheid het minst kan veroorloven.

3 · De DSA-valkuil

Het account draaide met slechts één Dynamic Search Ads-campagne (DSA: Google kiest daarbij zelf zoektermen en landingspagina's op basis van je website), die twee taken tegelijk moest uitvoeren: nieuwe long-tail zoektermen ontdekken en converteren op de zoektermen die hij al had geleerd. Met Maximize Conversion Value (Target ROAS) erbovenop werken die twee taken elkaar actief tegen. De bidder beloont voorspelbare converteerders en laat discovery uithongeren; de discovery-kant krijgt nooit de tijd om te leren.

De cijfers uit de audittabel vertelden hetzelfde verhaal. Specifieke DSA-targets zoals Categorie = gereedschap leverden een ROAS van 3,38 op. Het catch-all target Alle webpagina’s haalde daar maar een fractie van. DSA had duidelijk zijn discovery-taak goed gedaan. Alleen werden de winnaars nooit doorgeschoven.

De oplossing bestaat uit twee campagnes waar er eerst één was:

  • DSA Explorer. Breed, lager budget, geen agressieve Target ROAS. Zijn taak is het vinden van nieuwe zoektermen. Niet afknijpen.
  • Search Converter. Exact en phrase match op de categorieën waarvan DSA de waarde al heeft bewezen. Eigen budget, eigen biedstrategie, eigen negatieven. De gemigreerde categorie en de best converterende URL's belanden op de uitsluitingslijst van DSA, zodat de twee campagnes elkaar niet langer kannibaliseren.

Bij accounts die zwaar op DSA leunen is deze splitsing meestal de ingreep met het meeste effect. In de accounts waar ik hem heb doorgevoerd, leverde de splitsing op zichzelf al een efficiëntiewinst van 10-20% op.

4 · De Hybrid Matrix

Zodra de feed gezond is en DSA is opgesplitst, wordt de eigenlijke architectuur vanzelf duidelijk: een matrix van drie campagnefamilies naast elkaar, geen keten van boven naar beneden.

Hybrid Matrix architecture, three campaign families (Search, PMax, Standard Shopping) driven by feed labels computed nightly in BigQuery and synced via a Google Sheet to Merchant Center

Drie campagnefamilies, elk aangestuurd door labels uit de feed:

Search (geautomatiseerd via de API). Sniper (exact match op zoektermen met duidelijke koopintentie, gevonden via Google Search Console en Semrush), Brand Protection (zelf bieden op je eigen merknaam, zodat een concurrent die positie niet goedkoop overneemt), DSA Explorer (long-tail vangnet met laag budget).

PMax (Performance Max, de belangrijkste winstbron). Hero (top 5% bestsellers, geen tROAS, marktaandeel maximaliseren), Profit (hoge marge + Closers, strikte tROAS), Volume (lage marge + Openers, lagere ROAS accepteren omdat ze de Profit-campagne ondersteunen).

Standard Shopping (de reparatiewerkplaats). Zombies (0 impressies in 30 dagen, lage handmatige CPC om het algoritme te voeden), Overstock Dump (hoge voorraad, agressieve biedingen om magazijnkapitaal vrij te maken), Bleeders (kosten > €20 met €0 winst, volledig uitgesloten).

Het geheel wordt aangestuurd door feedlabels. Welke SKU een “Hero” is, bepaalt de feed, en dat werkt consequent door: zodra een SKU zich niet meer als Hero gedraagt, verliest hij het label en valt hij automatisch uit de Hero-campagne. Het onderhoud verhuist daarmee van de Google Ads-interface naar je datapipeline.

5 · Openers, Closers, Assisters

De meest ongemakkelijke bevinding kwam uit BigQuery. Als je de kostendata van Ads koppelt aan ruwe GA4-eventdata, kun je per product het verschil berekenen tussen “dit product is aangeklikt” en “dit product is gekocht”.

Three product cards showing the Closer (high direct sales, optimise on ROAS), the Opener / Assister (high assisted sales, never kill on ROAS), and the Traffic Waster (no sales, cut). Plus a callout warning that 1 in 5 SKUs is an Opener whose ROAS looks terrible in isolation

Drie profielen komen naar voren:

  • Closers. Hoge directe verkopen, lage assisted sales. Ze doen precies wat de cijfers beloven. Veilig om te optimaliseren op ROAS of POAS (Profit On Ad Spend: dezelfde som, maar dan met winst in plaats van omzet). Veilig om op te schalen of stop te zetten op basis van diezelfde metric.
  • Openers / Assisters. Hoge assisted sales, lage directe verkopen. Mensen klikken hierop (vaak omdat ze goedkoop of populair zijn) en kopen vervolgens iets anders. Nooit stopzetten op basis van lage ROAS. Ze vullen winkelmandjes. Optimaliseer ze op CPA, of accepteer bewust een lagere ROAS.
  • Traffic Wasters. Veel sessies, geen verkopen, direct noch assisted. Die kun je wegsnijden.

Ongeveer een op de vijf SKU's in de audit was een Opener met een ROAS die op zichzelf beroerd oogde. Stopzetten op basis van ROAS zou de verkopen hebben geraakt die deze producten elders in de catalogus aanjagen. Dit is in mijn ervaring een van de duurste fouten die e-commerce teams in Google Ads maken. De Google Ads-interface toont assists niet op productniveau, dus je ziet hem pas als je in ruwe GA4-data of BigQuery kijkt.

6 · De datapipeline

De architectuur werkt alleen als je de feed elke nacht opnieuw opbouwt vanuit de data. Het patroon dat steeds terugkomt:

  1. 03:00 · BigQuery-refresh. Kostendata van Google Ads, ruwe GA4-events, marge-/voorraad-/retourdata uit het CMS inladen. Koppelen op item_id.
  2. 03:30 · 5 custom labels berekenen. Margebucket, levenscyclus (Zombie/Bleeder/Winner/Kickstart), attributierol (Opener/Closer/Traffic), POAS-bucket, voorraadstatus.
  3. 04:00 · Doorzetten naar een Google Sheet. Die sheet is gekoppeld aan Merchant Center als Supplemental Feed, een aanvullende feed die extra velden toevoegt aan bestaande producten.
  4. 06:00 · Producten verplaatsen zichzelf. Een SKU die vorige week nog een Zombie was (Standard Shopping, lage handmatige CPC) en daar 30 conversies binnenhaalde, wordt vandaag automatisch een Winner, krijgt het Hero-label en verhuist naar PMax zonder tussenkomst van een mens.

In de Nederlandse praktijk is stap 1 vaak de moeilijkste. Omzetdata doorgeven lukt bijna elk webshopplatform wel, maar marge per SKU zit bij veel Nederlandse webshops in een apart inkoopsysteem of in een spreadsheet van de inkoper, niet in een veld dat je 's nachts kunt uitlezen. Zolang dat veld ontbreekt, werkt de helft van de labels niet. Behandel die dataontsluiting dus als eerste projectfase, niet als detail achteraf.

Zodra dat draait, gebruik je de Google Ads-interface vooral om mee te kijken. De strategie zit stroomopwaarts, in BigQuery en de Sheet. Dat maakt het account ook overdraagbaar: geef het morgen aan een andere specialist en de architectuur legt zichzelf uit, omdat de labels gewoon in de feed staan.

7 · De geavanceerde stap: waardecorrectie

Zodra de labels stabiel zijn, is de volgende laag het corrigeren van de conversiewaarden die je naar Google stuurt. Als BigQuery laat zien dat Product A zo'n €100 aan indirecte (assisted) omzet oplevert voor elke €10 directe omzet, kun je de conversiewaarde die je naar Google terugstuurt corrigeren: bij de aankoop zelf, of achteraf met een waardecorrectie op de al doorgegeven conversie. Value rules zijn hier niet het juiste gereedschap, want die corrigeren op apparaat, locatie en doelgroep en niet op product. De bidder ziet dan een realistischer waarde bij de klikken op Product A en biedt er niet langer te laag op.

Dit is de geavanceerde versie van de Opener/Closer-fix. De meeste accounts komen hier nooit aan toe omdat de pipeline er nog niet is. Maar zodra de pipeline er staat, kan waardecorrectie het verschil maken tussen een stabiele ROAS van 2,0 en een stabiele ROAS van 2,6, zonder een euro extra adspend. Reken die winst dan wel af tegen je werkelijke omzet en marge. Meet je hem af aan de gecorrigeerde waarde die je zelf naar Google stuurt, dan meet je je eigen correctie terug.

8 · Voor wie is dit interessant, en wat is een realistische eerste stap?

Moet je hier iets mee? Mijn inschatting per situatie:

  • Nu interessant: webshops met serieuze Shopping-spend (dit account zit ruim boven de €20k per maand, maar het patroon loont al veel eerder), honderden of duizenden SKU's, en marges die per product flink verschillen.
  • Nog niet: een webshop met enkele tientallen producten en een bescheiden budget. Daar wint een schone feed met correcte categorieën plus een eenvoudige campagnestructuur het van elke pipeline. Bouw geen nachtelijke BigQuery-machine voor een catalogus die je in een middag handmatig kunt labelen.
  • Eerst iets anders: als je conversietracking niet klopt of je marge per product nergens is vastgelegd, begin daar. Elke laag hierboven staat of valt met die twee dingen.

De realistische eerste stap kost een kwartier: open Google Ads, segmenteer je Shopping-spend op productcategorie en kijk hoeveel procent er in “Unknown” staat. Of leg die vraag voor aan je bureau. Het antwoord zegt je meteen hoeveel sturing er nog in je feed zit.

Drie regels die ik iedereen zou meegeven die een Shopping-account van deze omvang runt

  1. Behandel de feed als code. Hij verdient versiebeheer, tests en een nachtelijke rebuild-pipeline. Als je je feed niet elke nacht herschrijft met labels die je afleidt uit je eigen data, laat je een groot deel van wat het algoritme van Google kan ongebruikt.
  2. Stop niet enkel op basis van ROAS. Check altijd de assist-kolom. Bij dit account was een op de vijf SKU's een Opener, 20% van de catalogus. Pauzeer je die op ROAS, dan verlies je de assists waar verkopen elders op leunen.
  3. Splits discovery van conversie. Elk campagnetype dat Google je verkoopt als “alles-in-één” (DSA, brede PMax, destijds Smart Shopping) doet twee dingen tegelijk. Jouw taak is om discovery hongerig te houden en conversie strikt te sturen, niet om die twee te vermengen.

De verspilling vinden is bij een Google Ads-audit zelden het probleem. Die ligt bijna altijd voor het oprapen onder een label als “Unknown”. Het werk zit in het herbouwen van de datapipeline, zodat wat je vandaag oplost morgen ook opgelost blijft.

Jermaya Leijen

Over de auteur

Jermaya Leijen

Hoi, ik ben Jermaya. Sinds 2013 zit ik in Google Ads en de laatste jaren bouw ik AI-agents die het repeterende werk overnemen. Hier schrijf ik op wat ik in de praktijk tegenkom: wat werkt, wat niet, en hoe ik het zelf zou aanpakken. Een vraag of gewoon even sparren? Ik lees alles. Bekijk mijn werk of stuur me een bericht.