NieuwProduct Score, 4T Segmentation, Price War en Broken Size zijn live.Bekijk wat er nieuw is
Feedance
Artikel

cost_of_goods_sold toevoegen aan je Google-feed: een stappenplan van COGS-export tot margeniveaus

Stappenplan om cost_of_goods_sold aan je Google productfeed toe te voegen, cart data-ID's te matchen en brutowinst om te zetten in margeniveaus.

Cagdas PolatCagdas Polat
9 min. leestijd

De meeste Performance Max-rapporten laten omzet en ROAS zien. Weinig rapporten tonen brutowinst, omdat Google die alleen kan berekenen als elk product in je feed een kostprijs heeft. Google geeft aan dat deze kostprijs een ruwe schatting mag zijn: in de eigen installatiegids wordt voorgesteld om COGS te schatten op 80% van de productprijs als je geen exacte cijfers hebt. Deze gids is bedoeld voor feedmanagers en paid media leads die ergens een kostenkolom hebben (een ERP-export, een leveranciersprijslijst) en die in de Merchant Center-feed willen hebben. Aan het eind heb je een correct opgemaakt cost_of_goods_sold-attribuut, een conversietag die daarbij aansluit en een eerste margerapport dat je kunt omzetten in custom label-niveaus.

Wat cost_of_goods_sold wel en niet doet

cost_of_goods_sold is een Merchant Center-attribuut dat rapportage van brutowinst mogelijk maakt. Google beschrijft brutowinst als omzet min COGS. Het attribuut verandert niet welke producten worden goedgekeurd, hoe ze ranken of wat je biedt. Het geeft Google Ads alleen een kostenbedrag dat kan worden afgetrokken van de omzet die al per verkocht item wordt geregistreerd.

Voor de meeste merchants is het optioneel. Google noemt het alleen verplicht voor geautomatiseerde kortingen en dynamische promoties. Voor alle anderen is het een upgrade van de rapportage, en die werkt alleen als de conversietag ook winkelwagengegevens op itemniveau meestuurt.

Het attribuut is geen biedinstelling en Feedance beheert geen biedingen. De data geeft je wel een betrouwbaar beeld van welke producten en campagnes geld opleveren, zodat de beslissingen over structuur en budget die je elders neemt op winst zijn gebaseerd in plaats van op omzet.

Stap 1: Bepaal waar de kostprijs van elk product vandaan komt

Google accepteert exacte waarden, gemiddelden en schattingen, dus de eerste beslissing is welke bron je genoeg vertrouwt om bij te houden. Hieronder rangschikken we de opties op hoe vaak ze na de eerste maand nauwkeurig blijven.

KostenbronNauwkeurigheidOnderhoudslastGebruik wanneer
Export uit ERP- of voorraadsysteem, per SKUHoogLaag zodra geautomatiseerdKostprijzen al per variant zijn opgeslagen
Leveranciersprijslijst gekoppeld op SKUGemiddeld tot hoogGemiddeld; lijsten veranderen per seizoenJe geen ERP hebt, maar wel een schoon leveranciersbestand
Categoriegemiddelde (bijvoorbeeld 0.62 x prijs voor één categorie)GemiddeldLaagMarges binnen een categorie uniform zijn
Vast percentage van de prijs (voorbeeld van Google: 80%)LaagGeenJe deze week een eerste rapport nodig hebt en later wilt verfijnen

Een vast percentage levert brutowinst op die exact meebeweegt met de omzet, dus je zult er nooit uit afleiden dat het ene product per verkoop meer oplevert dan het andere. Gebruik het om de rapportage aan te zetten, niet om margebeslissingen op te baseren.

Stap 2: Maak het attribuut exact op in het juiste formaat

De specificatie van Google voor cost_of_goods_sold is een getal plus een ISO 4217-valutacode, niet herhaald, met een punt als decimaalteken. Als je een van beide regels niet volgt, kunnen producten niet in aanmerking komen voor rapportage, waardoor de data onvolledig is.

In een tabgescheiden feed ziet de waarde er zo uit:

412.50 TRY

In XML:

<g:cost_of_goods_sold>412.50 TRY</g:cost_of_goods_sold>

Gebruik voor COGS dezelfde valuta als de prijs die je conversietag rapporteert. Google raadt dit aan om inconsistenties door wisselkoersen te voorkomen. Merchants die in Turkse lira verkopen met een leverancier die in euro factureert, moeten de kostprijs vóór de export in de feed naar lira omrekenen, met een koers die je volgens een vast schema ververst.

Dit zijn de opmaakfouten die we het vaakst in kostenkolommen zien, en wat ze veroorzaken:

BronwaardeProbleemGecorrigeerde waarde
412,50 TRYKomma als decimaalteken, gebruikelijk in exports met Turkse locale412.50 TRY
412.50Geen valutacode412.50 TRY
TL 412.50Geen ISO 4217-code, verkeerde volgorde412.50 TRY
1,412.50 TRYDuizendtalscheidingsteken in het getal1412.50 TRY
0.00 TRYLege kostprijs geëxporteerd als nul, wat wordt gelezen als 100% margeLaat het attribuut voor dat product weg

De laatste rij is een afweging en geen regel van Google. Een kostprijs van nul is een geldig getal, dus Google accepteert het, en het blaast de brutowinst van dat item op. Wij laten het attribuut weg wanneer de kostprijs onbekend is.

Stap 3: Lever de waarde aan bij Merchant Center

Google noemt drie manieren om COGS-data aan te leveren: je productfeed, de Content API (en de opvolger daarvan, de Merchant API) of een aanvullende feed. De aanvullende feed is meestal de veiligste route als de kostendata uit een ander systeem komt dan de productcatalogus, omdat je een bestand met twee kolommen (id en cost_of_goods_sold) kunt aanleveren zonder de primaire feed aan te raken.

Als je feeds met een platform beheert, is het equivalent een laag die een attribuut toevoegt zonder de bron te herschrijven. In Feedance is dat waar aanvullende feeds voor dienen, en met feed rules kun je een categoriegemiddelde kostprijs uit de prijs berekenen als je met een schatting werkt. We hebben van dit specifieke gebruik geen klantvoorbeeld gepubliceerd, dus beschouw de werking als die op de betreffende featurepagina's.

Stap 4: Controleer of winkelwagengegevens aansluiten op je feed-ID's

De kostprijs wordt alleen gebruikt als Google een verkocht item aan een feeditem kan koppelen. Volgens de Google-hulp moeten de item-ID's in de items-array van de conversietag exact overeenkomen met het id-attribuut in je Merchant Center-feed, en worden alleen items verwerkt van een Merchant Center-account dat is gekoppeld aan het Google Ads-account. Geschikte conversies moeten biedbare aankoopconversies zijn die gebruikmaken van de Google-tag of Google Tag Manager.

Loop deze checklist door voordat je op data gaat wachten:

  1. Het Merchant Center-account is gekoppeld aan het Google Ads-account dat eigenaar is van de aankoopconversie.
  2. De aankooptag stuurt een items-array mee met een ID, een prijs en een hoeveelheid voor elke orderregel.
  3. Het ID in de tag is exact dezelfde string als het feed-id, inclusief hoofdletters en eventuele variantsuffix. Als je tag de parent-SKU verstuurt en je feed variant-ID's gebruikt, komt er niets overeen.
  4. De prijs in de tag gebruikt dezelfde valuta als de COGS-waarden.
  5. De diagnostiek van de conversieactie toont geen waarschuwingen over niet-overeenkomende ID's. Google verwijst naar dit diagnostiekgedeelte om afwijkingen te vinden.

Afwijkende item-ID's zijn de meest voorkomende reden dat een COGS-uitrol streepjes laat zien in plaats van cijfers. Google merkt op dat zonder COGS-attribuut de waarden voor COGS en brutowinst leeg of als streepje in rapporten verschijnen.

Stap 5: Lees het eerste rapport en vergelijk het met je financiële cijfers

Google Ads toont de resultaten als brutowinst, brutowinstmarge, kostprijs van verkochte goederen, omzet en verkochte eenheden. Voor Performance Max documenteert de Google Ads API deze metrics als metrics.gross_profit_micros, metrics.gross_profit_margin en metrics.cost_of_goods_sold_micros, beschikbaar in asset_group_product_group_view, campaign, customer en shopping_performance_view.

Twee kanttekeningen uit de API-documentatie beïnvloeden hoe je de eerste cijfers leest. Metrics voor winkelwagengegevens zijn pas beschikbaar nadat alle conversies voor de bijbehorende producten zijn geregistreerd, dus de eerste dagen zien er onvolledig uit. En vanaf 15 juni 2026 bevat shopping_performance_view data van alle Performance Max-netwerken, niet alleen van het Display Network, waardoor metrics eenmalig kunnen stijgen wanneer die data wordt toegevoegd. Als je een voor- en nameting vergelijkt, beschouw die eenmalige stap dan niet als effect van je feedwijziging.

Valideer met een controle op realiteitszin: kies een week, neem de omzet die Google Ads aan winkelwagengegevens toeschrijft, trek de kostprijs van je financiële team voor dezelfde producten af en vergelijk. Verwacht een verschil als je COGS een gemiddelde is. Verwacht niet dat het nul is.

Stap 6: Zet brutowinst om in margeniveaus

Zodra de brutowinstmarge per product zichtbaar is, groepeer je producten in een paar niveaus en schrijf je het niveau in een custom label. Google staat custom_label_0 tot en met custom_label_4 toe, elk tot 100 tekens, met één waarde per product per attribuut en maximaal 1.000 unieke waarden per label. Drie tot vijf niveaus is genoeg.

Een illustratief schema (de getallen zijn voorbeelden, geen benchmarks):

Brutomarge op feedprijsWaarde custom_label_1Typisch gebruik
Onder 20%margin_lowAparte listing group; beoordeel op winst per klik, niet op ROAS
20% tot 40%margin_midStandaardgroep
Boven 40%margin_highKandidaat voor meer budget
Geen COGSmargin_unknownControlelijst; los de data op

Het niveau is een berekening aan feedzijde op basis van price en cost_of_goods_sold, dus een feed rule kan het automatisch wegschrijven telkens als de feed opnieuw wordt opgebouwd. Ons eerdere artikel over custom labels, product type en item-ID voor Performance Max listing groups gaat in op hoeveel labeldimensies een listing group-boom kan dragen voordat die gefragmenteerd raakt. Als je wilt nagaan of de wijziging heeft geholpen, is onze methode om een feedwijziging af te zetten tegen ROAS ongewijzigd van toepassing.

Stap 7: Houd de kostenkolom actueel

Kostprijzen verouderen sneller dan verkoopprijzen. Wijs er een eigenaar en een verversingsritme aan toe. Exporteer opnieuw na elke prijswijziging van een leverancier, elke valutabeweging die voor je marge van belang is en elk seizoen. Een product waarvan de kostprijs boven de verkoopprijs uitkomt, zou in je eigen controle een negatieve marge moeten tonen, nog voordat het in een rapport verschijnt.

Waar dit tekortschiet

COGS-rapportage meet de brutowinst op de verkochte items. Verzendkorting, retouren, betaalkosten en advertentiebudget zijn er niet in opgenomen, dus een product kan een gezonde brutomarge tonen en toch geld verliezen. De eigen SA360-documentatie van Google geeft het voorbeeld van inkoopkosten vóór belasting, verzend- en advertentiekosten, wat die reikwijdte bevestigt.

Het hangt er ook van af dat winkelwagengegevens correct zijn geïmplementeerd, en de aankoop moet een conversie zijn die Google kan toeschrijven. Alleen aankopen die als conversies met winkelwagengegevens worden gerapporteerd, kunnen in deze metrics verschijnen.

Gemiddelden verbergen variatie. Als één categorie een accessoire met 15% marge combineert met een kernproduct met 55% marge, geeft een categoriegemiddelde beide verkeerd weer.

Concurrenten behandelen dit onderwerp ook. DataFeedWatch publiceert een gids over het toevoegen van cost of goods sold aan een feed voor brutowinstrapportage, en platforms die om productwinstgevendheid zijn gebouwd, zoals ROI Hunter, kunnen beter bij je passen als winstlogica je belangrijkste behoefte is (zie onze vergelijking). Feedance bereidt de data voor; het stelt er geen biedingen of budgetten op af.

FAQ

Is cost_of_goods_sold verplicht voor Google Shopping?

Nee. Google beschouwt het als optioneel, behalve voor geautomatiseerde kortingen en dynamische promoties, waar het verplicht is. Zonder het attribuut draaien je advertenties gewoon, maar de metrics voor COGS en brutowinst zijn leeg.

Moet de kostprijs exact zijn?

Nee. Google geeft aan dat de data voor rapportage is en niet exact hoeft te zijn. Als de kostprijs per product verschilt, geef dan een gemiddelde op, of een grove schatting zoals 80% van de prijs.

Kunnen klanten de kostprijs zien?

Google beschrijft het attribuut als rapportage-input die wordt gebruikt wanneer conversies met winkelwagengegevens worden gerapporteerd. In de documentatie wordt het niet als advertentie-inhoud gepresenteerd, maar we hebben niet elk oppervlak getest, dus controleer het in je eigen account.

Waarom tonen mijn rapporten een streepje voor brutowinst?

Meestal ontbreekt het attribuut of komen de ID's in de conversietag niet overeen met het feed-id. Controleer eerst de diagnostiek van de conversieactie op afwijkende ID's.

Welke valuta moet ik gebruiken?

De valuta van de prijs die je conversietag rapporteert. Google raadt aan ze gelijk te houden om inconsistenties door wisselkoersen te voorkomen.

Werkt het met Performance Max?

Ja. De Google Ads API documenteert metrics voor winkelwagengegevens, waaronder brutowinst en brutowinstmarge, voor Performance Max-campagnes waarin Conversies met winkelwagengegevens is geïmplementeerd.

Waar voeg ik het toe als ik de hoofdfeed niet wil aanpassen?

Gebruik een aanvullende feed of de Content API of Merchant API. Google noemt deze naast de primaire feed als geaccepteerde aanlevermethoden.

Hoe verschilt dit van custom labels?

Het kostenattribuut voedt de winstrapportage van Google. Een custom label is een segment dat je zelf definieert voor de campagnestructuur. Met het eerste bereken je de marge, met het tweede handel je erop.

Controleer je feed voordat je de kostenkolom toevoegt

Een kostenkolom helpt alleen als de rest van de feed in orde is. Laat je feed door de gratis tool voor productfeedaudits lopen om ontbrekende en onjuist opgemaakte attributen te vinden voordat je er margeniveaus bovenop bouwt.

Bronnen

Wil je dat iemand anders ook naar je feed kijkt? We nemen hem samen met je door en laten zien waar de gaten zitten, nog voor je volgende inzending.
Doe een gratis audit
Cagdas Polat
Geschreven door
Cagdas Polat

Medeoprichter van Feedance, waar hij zijn achtergrond als computeringenieur en marketeer inzet om analytische inzichten te leveren. Met een sterke focus op het omzetten van data in concrete strategieën zet hij zich in om merken te helpen aanzienlijk te groeien in het digitale landschap.

LinkedIn

Zie welke
producten opbrengen.

Koppel je feed en GA4. We tonen Product Score, 4T, Price War en Broken Size op je eigen catalogus.