Een Google Ads-account beheer je meestal in een browser: je klikt, stelt bij en exporteert een rapport. Voor de meeste webshops werkt dat prima.
Bij Techniekwebshop werkt dat niet. Deze technische groothandel voert ruim 1,2 miljoen artikelen, voor zakelijke én particuliere kopers. Op die schaal is een account geen stapel campagnes meer, maar een systeem. En een systeem stuur je niet met de hand. Dit stuk gaat niet over de winkel, maar over hoe we dat account behandelen: als code.
Het probleem bij een miljoenencatalogus is niet te weinig om te adverteren. Het is dat verspilling zich verstopt. In de lange staart van honderdduizenden zoektermen lekt budget weg naar klikken die niets opleveren, en in een dashboard zie je dat pas als het al maanden speelt. Tel daar de dubbele markt bij op, B2B en B2C, met andere zoekintentie, andere marges en een btw-schakelaar ertussen, en het is duidelijk: de winst zit niet in méér campagnes, maar in grip.
Het account als code
We beheren het account daarom niet vanuit de interface, maar vanuit een versiebeheerde repository op GitHub. De agents zijn in Python geschreven, met een command line voor de bediening, een database voor de state en een lokale fallback zodat een run nooit strandt op een wegvallende verbinding. Dat verving de oude opzet met losse n8n-flows.
Het voordeel is simpel, maar ingrijpend: elke mutatie is een commit. Wie een ad-group pauzeert, doet dat met een reden die in de historie staat. Het account is geen black box meer waar af en toe iemand aan draait, maar een systeem met een volledige, terug te lezen geschiedenis.
Dat verandert ook hóe we ingrijpen. Wijzigingen lopen via de Google Ads API, niet met de hand door de interface. Een audit die twintig zwakke ad-groups wil pauzeren of een reeks verspillende zoektermen wil uitsluiten, voert dat programmatisch uit en logt precies wat er veranderde. Op deze schaal is dat het verschil tussen een ingreep van een halve middag en een van enkele seconden, die je bovendien kunt terugdraaien omdat je weet wat er gebeurde. Snelheid en controle bijten elkaar hier niet.
Structuur die de zoekintentie volgt
De Search-kant bouwen we niet op aannames, maar op wat mensen echt intypen. We minen doorlopend de zoektermenrapporten: wat converteert, promoveren we naar een eigen ad-group met exact keyword, zodat we er gericht op bieden. Wat alleen geld kost, sluiten we uit als negative.
Zo groeit de structuur van onderop mee met de echte vraag, in plaats van dat we onze eigen categorie-indeling over de markt heen leggen. Waarom een account de zoekintentie van de klant hoort te spiegelen en niet je organigram, werkte ik uit in accountstructuur en zoekintentie. Nieuwe structuur toetsen we via A/B op structuurniveau, dus een wijziging wordt pas de norm als ze zich bewijst.
Voor de brede catalogus, waar losse zoekwoorden niet meer schalen, draait Performance Max, verdeeld over asset-groups per productlijn. De doelgroepsignalen zetten we via de API in plaats van met de hand: één herbruikbare audience, aangevuld met user lists, die automatisch voor alle asset-groups tegelijk geldt. Zo hoeft een signaal niet acht keer los bijgewerkt te worden. Sinds juli draaien er Customer Match-doelgroepen op, gevoed met de eigen klantdata en toegevoegd als observatiesignaal. De campagnes leren zo van wie er echt koopt, niet van een gemiddelde bezoeker.
Een deel van de winst zit niet in wat je aanzet, maar in wat je uitzet. Merkverkeer scheiden we van niet-merkverkeer, zodat de cijfers van generieke campagnes zuiver blijven en niet worden opgeblazen door mensen die de winkel toch al kenden. Regio's en tijdvakken die structureel te duur converteren, knijpen we af; zoektermen die alleen budget opslokken, belanden op een groeiende negativelijst. Bij ruim een miljoen artikelen is opschonen geen bijzaak, maar het halve werk: elke euro die níet naar een kansloze klik gaat, kan naar een winstgevende.
Zonder onderhoud vervuilt dat alles vanzelf. Daarom draait er op een vaste cadans, elke twee en vier weken, een audit over het hele account. Die scoort ad-groups en zoektermen en voert de ingrepen meteen door: zwakke onderdelen pauzeren, verspilling uitsluiten, onderpresteerders herstellen of afschakelen. Geen eenmalige schoonmaak, maar een ritme, en omdat elke run in git staat, bouwt het account met elke cyclus een scherper geheugen op van wat werkt.
Die opzet betaalt zich ook uit in transparantie. Omdat elke ingreep in git staat, met datum en reden, is voor de klant altijd terug te zien wat er is gebeurd en waarom. Geen vaag maandrapport met grafieken die alle kanten op kunnen, maar een logboek van concrete beslissingen: deze ad-groups gepauzeerd, deze zoektermen uitgesloten, dit signaal toegevoegd, telkens met de onderbouwing erbij. Dat maakt het werk niet alleen beter stuurbaar voor ons, maar ook navolgbaar voor de klant, die precies ziet waar zijn budget heen gaat.
De volgende laag: sturen op winst
De volgende bouwlaag gaat verder dan klikken en conversies. We bouwen een BigQuery-laag als single source of truth, waarin elk product winst-labels krijgt, van A tot F op basis van marge en risico, plus een lifecycle-stempel. Die labels voeden een hybride campagnematrix: Performance Max opgesplitst naar winstniveau, aparte behandeling voor niet-presteerders, en Search voor de gerichte intentie. Het budget schuift dan niet meer naar wat toevallig volume trekt, maar naar de artikelen die echt renderen.
Die laag zetten we aan zodra de datakoppeling staat en klopt. Wat nu al draait, is het fundament: het account als code, mutaties via de API, Search die uit echte zoektermen groeit, Performance Max met audience-signalen en Customer Match, en een audit-engine die op ritme verspilling wegsnijdt. Geen campagne, maar een besturingsmodel dat meebeweegt met meer dan een miljoen artikelen.
Dat is de kern. Op deze schaal wint niet wie de meeste campagnes aanzet, maar wie het account als systeem behandelt: mutaties als code, beslissingen met een reden in git, audits op ritme. De agents doen het herhaalwerk, het minen, scoren en muteren dat een mens nooit met dezelfde precisie volhoudt. De sturing, welke categorie voorgaat, welk product winst maakt, waar budget lekt, blijft mensenwerk. De techniek neemt de sleur over, zodat de aandacht naar de keuzes gaat die er echt toe doen.