Naar de inhoud

GidsenGoogle Analytics 410 min leestijd

Waarom de omzet van GA4 niet overeenkomt met Shopify-bestellingen

Waarom GA4 en Shopify verschillende omzet kunnen tonen, hoe ik bestellingen controleer, en één volledig afgestemde hypothetische maand.

Gepubliceerd
Gecontroleerd
Vergelijk afzonderlijke bestellingen en onderzoek de verschillen.

Daniil MaximkinProduct & Solutions Engineer

Kort antwoord

Ik vergelijk dezelfde maatstaf, periode en valuta voordat ik een omzetverschil beoordeel. GA4-aankoopomzet telt aankoopbedragen op, minus geregistreerde terugbetalingen; het is geen sessietelling. Shopify-verkooprapporten bevatten openstaande, onbetaalde en geannuleerde bestellingen en boeken verkoopcorrecties op hun verwerkingsdatum. Toestemming, fouten in de gegevensverzameling en rapportagescope kunnen de vergelijking veranderen. Ik stem bestellingen afzonderlijk af voordat ik een oorzaak aanwijs; geen gedocumenteerd percentage maakt een verschil acceptabel.

— Daniil

Belangrijkste punten

  • Een omzetverschil kan ontstaan door definities, gegevensverzameling of rapportage. De grootte alleen bewijst geen trackingfout.
  • GA4-aankoopomzet is gebaseerd op events. Attributie verdeelt de bijdrage over kanalen; het maakt van aankoopomzet geen sessies.
  • De basisversie van consent mode blokkeert tags na weigering; de geavanceerde versie kan metingen zonder cookies sturen. Drempelwaarden houden rapportregels achter; actieve gegevensfilters sluiten binnenkomende events permanent uit.
  • Ik koppel bestellingen via een afgesproken sleutel, vergelijk bedragen en terugbetalingen, en laat elke onverklaarde oorzaak als onbekend staan.
  • Controleer datums, valuta, testbestellingen en het versturen van terugbetalingen voordat je code wijzigt. Er is geen gedocumenteerd acceptabel afwijkingspercentage.
In deze gids

Als GA4 en Shopify verschillende omzet tonen, vraag ik eerst wat elk totaal bevat. Een verschil kan komen door definities, datumgrenzen of gegevensverzameling. Ik vergelijk afzonderlijke bestellingen en correcties voordat ik het een trackingfout noem.

Waarom kan de omzet van GA4 en Shopify verschillen?

Ik onderscheid scopeverschillen van ontbrekende of onjuiste gegevensverzameling. Deze controles kunnen een verschil verklaren, maar geen ervan stelt zonder bewijs de oorzaak vast.

  • Attributie en scope. Attributie verdeelt de bijdrage aan een aankoop over contactmomenten. Ik vergelijk eerst aankoopomzet over alle kanalen, in plaats van een kanaalsubtotaal of sessietelling. Een andere verdeling over kanalen verandert die totale eventsom op zichzelf niet.
  • Tijdzone. De rapportmetadata van GA4 vermeldt de rapportagetijdzone; Shopify heeft een aparte winkeltijdzone-instelling. Bij verschillende instellingen kan één tijdstempel op verschillende kalenderdatums vallen. Het synthetische voorbeeld hieronder laat die grens expliciet zien.
  • Toestemmingsinstellingen. De basisversie van consent mode blokkeert Google-tags na weigering. De geavanceerde versie kan metingen zonder cookies sturen. Ik onderscheid het koppelen van waargenomen bestellingen van gemodelleerde rapporttotalen. Dit beschrijft technische gegevensverzameling, geen juridisch advies.
  • Gegevensverzameling en privacycontroles. Ik controleer of het aankoopverzoek is verstuurd en ontvangen, en of een privacycontrole of tagfout dat heeft verhinderd. Alleen een ontbrekende rapportregel maakt geen onderscheid tussen die mogelijkheden.
  • Timing en verzending van terugbetalingen. Shopify boekt een verkoopcorrectie als negatief bedrag op de verwerkingsdatum, die later kan zijn dan de bestelling. GA4 heeft een geregistreerd refund nodig om aankoopomzet aan te passen. Ik controleer het soort correctie en de verzending; niet elke terugbetaling van alleen geld verandert Shopify-verkopen op dezelfde manier.
  • Valutaconversie. Bij meerdere valuta’s kan GA4 een waarde in de presentatievaluta ontvangen terwijl Shopify in de winkelvaluta rapporteert, of kan de conversie een andere koers gebruiken. Het aantal bestellingen kan kloppen terwijl de omzet verschilt.
  • Gegevensfilters en drempelwaarden. Actieve uitsluitende gegevensfilters sluiten binnenkomende events permanent uit van verwerking en BigQuery. Gegevensdrempelwaarden houden juist rapport- of verkenningsregels achter. Ik controleer welk mechanisme geldt; het is niet hetzelfde soort ontbrekende gegevens.

Hoeveel omzetvariatie tussen GA4 en Shopify is normaal?

De gelinkte platformdocumentatie noemt geen acceptabel percentage. Toestemmingsinstellingen, rapportagescope en de bestellingen in de periode beïnvloeden de vergelijking. Ik beoordeel of elk verschil verklaard is, in plaats van een percentage normaal te noemen.

Een drempel om onderzoek te prioriteren is een werkregel, geen platformstandaard. De gelinkte symptoompagina gebruikt zulke drempels; ik gebruik ze niet als bewijs dat gegevensverzameling goed of fout is.

Ik gebruik drie patronen om te kiezen waar ik verder onderzoek:

  • De richting blijft gelijk. Controleer vaste scopeverschillen, gegevensverzameling en de verzending van terugbetalingen.
  • Het begon op een datum. Vergelijk wijzigingen in configuratie, toestemming, thema en checkout rond die datum. Een gewijzigde toestemmingsopzet kan het verschil ook veranderen.
  • Het groeit. Controleer veranderingen in de samenstelling van bestellingen, scope en gegevensverzameling. Groei alleen identificeert geen falende gegevensstroom.

Daarna stem ik bestellingen af, vergelijk ik correcties en zoek ik bewijs op eventniveau. Koppelen identificeert verschillen; het verklaart niet automatisch waarom een event ontbreekt.

Diagnostische beslisboom

Gebruik deze patronen om een controle te kiezen. De middelste kolom noemt mogelijke verklaringen, geen diagnoses.

SymptoompatroonMogelijke verklaringHoe te controleren
GA4 overal lager, stabiel percentage per maandAndere scope, toestemmingsopzet of gegevensverzamelingVergelijk definities en bewijs per bestelling; leid geen oorzaak af uit alleen Unassigned-verkeer of stabiliteit
GA4 pas lager sinds een specifieke datumEen configuratie-, toestemmings- of checkoutwijzigingVergelijk wijzigingsdatums; test toestemming, netwerkverzending en debuginstellingen
GA4 lager en het verschil groeitAndere bestellingsmix, scope of een falende checkoutrouteStem bestellingen af en test de routes bij ontbrekende events
GA4 hoger dan ShopifyTestbestellingen, terugbetalingsevents of herhaalde verzendingenControleer opgenomen bestellingen, terugbetalingen en transactie-ID’s voordat je dubbele rapportomzet aanneemt
Verschil schommelt dagelijks maar valt weg over een maandTijdzonegrens en timing van terugbetalingenBreng beide exports naar dezelfde tijdzone en datumperiode
Aantal bestellingen klopt maar omzet nietValutaconversie of verkeerde value-parameterControleer currency en value op het purchase-event

Hoe stem ik GA4 en Shopify bestelling voor bestelling af?

Dashboardtotalen tonen een verschil; koppelen identificeert de betrokken bestellingen en correcties. Dit is mijn werkwijze. Onbekende oorzaken blijven open totdat het bewijs ze ondersteunt.

  1. Kies een afgesloten periode. Ik kies een volledige maand en noteer het exportmoment. Latere correcties controleer ik apart; ik neem niet aan dat de maand nooit meer kan veranderen.
  2. Exporteer de Shopify-kant. Ik bewaar bestelnaam of -ID, aanmaaktijdstip, totaal, valuta en financiële status uit de bestel-CSV. Meerdere artikelen kunnen meerdere regels opleveren; ik tel één bestelling niet dubbel. Ik spreek af welke bestellingen meetellen en haal gedateerde verkoopcorrecties apart op: het huidige besteltotaal is niet hetzelfde als het verkooprapport van de periode.
  3. Exporteer de GA4-kant. Ik gebruik rapportregels per transactie-ID of ontvangen BigQuery-events, inclusief aankopen en terugbetalingen. Ik controleer exportinstellingen en volledigheid voordat ik vergelijk; streaming kan hiaten bevatten.
  4. Normaliseer beide kanten. Ik stem tijdzone, datumperiode, valuta en verkoopcomponenten af en spreek de behandeling van terugbetalingen af. Ik documenteer elke correctie zonder aan te nemen dat normalisatie elk verschil verklaart.
  5. Koppel via een afgesproken sleutel. Ik koppel de bestelidentifier aan GA4 transaction_id, met een geverifieerde vertaalslag als de formaten verschillen. Niet-gekoppelde of onduidelijke regels blijven apart.
  6. Classificeer de verschillen. Ik onderscheid bestellingen alleen in Shopify, records alleen in GA4 en gekoppelde records met andere bedragen. Dat zijn waarnemingen: timing, scope, tests, ontbrekende verzending en valuta zijn mogelijkheden om te onderzoeken, geen automatische diagnoses.
  7. Onderzoek groepen. Ik groepeer verschillen op basis van beschikbaar checkout- of betalingsbewijs. Een gedeeld kenmerk zegt waar ik moet testen; het bewijst geen codeoorzaak. Ontbrekend bewijs markeer ik als onbekend.

Dit synthetische SQL-sjabloon zoekt herhaalde transactie-ID’s in een dagelijkse export. Het is niet uitgevoerd op klantgegevens. Herhaalde ruwe ID’s bewijzen geen opgeblazen rapportomzet; gebruiker, bestelling en deduplicatiescope controleer ik apart:

-- Transactie-ID's van aankopen die meer dan één keer per dag zijn verstuurd (GA4 BigQuery-export)
SELECT
  (SELECT value.string_value FROM UNNEST(event_params)
   WHERE key = 'transaction_id') AS transaction_id,
  COUNT(*) AS purchase_events
FROM `project.analytics_XXXXXX.events_20260701`
WHERE event_name = 'purchase'
GROUP BY transaction_id
HAVING purchase_events > 1
ORDER BY purchase_events DESC;

Een uitgewerkt voorbeeld (hypothetisch)

Dit is één volledig synthetische periode, geen klantresultaat. Ik vergelijk september 2026 in een hypothetische Shopify-winkel met America/New_York en USD met een GA4-property met UTC en USD. Alle bedragen, bestellabels en wisselkoersen zijn verzonnen voor dit voorbeeld.

De eerste exports gebruiken elk hun eigen septembergrens. Shopify toont Total sales van $400,60; GA4 toont Purchase revenue van $318,29. Het verschil, Shopify minus GA4, is $82,31. Ik gebruik aankoopomzet over alle kanalen, geen toegeschreven kanaalsubtotaal. Shopify Total sales bevat verkoopcorrecties en andere verkoopcomponenten; GA4 Purchase revenue trekt geregistreerde terugbetalingen af.

In dit voorbeeld zijn alle echte bestellingen betaald. Belasting, verzending, invoerrechten, kosten en kortingen zijn nul. Er zijn geen abonnementen, advertentie-inkomsten, andere bestellingen of andere terugbetalingen. De ene terugbetaling is een verwerkte verkoopcorrectie op artikelniveau, geen aangepaste terugbetaling van alleen geld: Shopify documenteert dat die in rapporten en exports kunnen verschillen. Terugbetalingsregels maken of verwijderen geen aankoopbestellingen.

Elke rij draagt bij aan de oorspronkelijke septembertotalen. Alle dollars zijn USD; bestelling C is vóór conversie in EUR betaald. Verschil betekent Shopify minus GA4. De rijlabels blijven zichtbaar als je de tabel verschuift.

RijShopifyGA4Verschil
A: gewoon$120,10$120,10$0,00
B: gewoon$80,20$80,20$0,00
C: EUR 100$110,00$108,00+$2,00
D: geweigerd$50,40$0,00+$50,40
E: tijdzonegrens$60,25$0,00+$60,25
F: testbestelling$0,00$9,99−$9,99
B terug, 20 sep.−$20,35$0,00−$20,35
Totaal$400,60$318,29+$82,31

Dit is het bewijs dat ik voor elk verschil aanneem. Bij een echte afstemming zou ik dit bewijs eisen voordat ik een oorzaak aanwijs.

  • Valuta, +$2,00. Voor C is het hypothetische opgeslagen Shopify-equivalent EUR 100,00 × 1,10 = $110,00. Het hypothetische GA4-rapportbedrag is EUR 100,00 × 1,08 = $108,00. Dit zijn voorbeeldkoersen, geen beweerde septemberkoersen. GA4 rekent lokale valuta om naar de rapportagevaluta; ik gebruik opgeslagen bedragen zonder aan te nemen dat beide systemen dezelfde koers kozen.
  • Toestemming, +$50,40. D is voltooid, maar de hypothetische basisversie blokkeerde analytics-tags na weigering, zonder waargenomen aankoop. Basis- en geavanceerde gegevensverzameling verschillen. Het voorbeeld gebruikt waargenomen transacties zonder gemodelleerde toevoegingen; het beweert niet dat elke bestelling met geweigerde toestemming in elk GA4-rapport ontbreekt. Dit betreft techniek, geen juridisch advies.
  • Tijdzonegrens, +$60,25. E vond plaats op 30 september om 23:30 in America/New_York: 1 oktober om 03:30 UTC. De GA4-aankoop bestaat in oktober; het event ontbreekt niet. De afgesproken winkelperiode loopt van 1 september 04:00 UTC tot 1 oktober 04:00 UTC, zonder het eindmoment. Geen ander voorbeeld-event kruist die grenzen. Ik selecteer events opnieuw op tijdstempel; een dashboardlabel wijzigen verplaatst het event niet.
  • Testopname, −$9,99. F is een hypothetische bestelling in de testmodus van Shopify Payments. Shopify-verkopen sluiten die uit, maar in dit voorbeeld faalde het testfilter en bereikte de aankoop GA4. Verkooprapporten sluiten testbestellingen uit; bestelexports bevatten ze. Ik verwijder F uit de vergelijking en onderzoek het filter.
  • Terugbetaling, −$20,35. B’s verwerkte artikelcorrectie in september verlaagt Shopify-verkopen. Het voorbeeld stuurde geen GA4-refund, dus GA4 behoudt de oorspronkelijke $80,20. GA4-terugbetalingsmeting vereist een refund-event gekoppeld aan de transactie. Ik verwerk de ontbrekende $20,35 en noteer de verzending als onderzoekspunt; dit is niet automatisch onschuldige structurele variatie.

Ook de aantallen kloppen: Shopify heeft vijf echte bestellingen (A–E). De oorspronkelijke GA4-selectie voor september heeft vier aankopen (A, B, C en test F). Zonder F blijven er drie; met E binnen de afgesproken periode zijn er vier echte waargenomen aankopen. D verklaart de ene resterende niet-waargenomen bestelling. De terugbetaling is een aparte geldcorrectie, geen zesde bestelling.

De afstemmingsbrug is $318,29 − $9,99 + $60,25 + $2,00 − $20,35 = $350,20. Met D’s $50,40 erbij kom ik op $400,60, precies Shopify’s totaal. Dit zijn afstemmingscorrecties, geen wijzigingen in GA4 of instructies om een aankoop met geweigerde toestemming alsnog te sturen. De oorspronkelijke $82,31 is volledig verklaard: $2,00 + $50,40 + $60,25 − $9,99 − $20,35 = $82,31.

Ik zou het testfilter en de ontbrekende refund-verzending onderzoeken. Valuta- en periodeverschillen zou ik documenteren, met behoud van D’s toestemmingsgrens. Een verklaard totaal dat klopt, bewijst niet dat elke checkoutroute werkt; het zegt alleen dat dit voorbeeld geen onverklaard restant heeft.

Hoe ik dit controleer in echte implementaties

Ik gebruik afstemming om verschillen te vinden en test daarna eventverzending en configuratie. Dit zijn voorgestelde controles voor een echte implementatie; ze zijn voor dit artikel niet op een klantsysteem uitgevoerd.

  • DebugView en netwerkbewijs. Met debugmodus aan controleer ik purchase-parameters in DebugView. Privacycontroles of geweigerde toestemming kunnen zichtbaarheid verhinderen. Een ontbrekende regel bewijst op zichzelf geen codefout of ontvangen verzoek; ik controleer toestemming, debuginstellingen en browsernetwerkverzoeken.
  • Meerdere checkoutroutes. Ik test de daadwerkelijke kaart-, wallet-, express- en post-purchaseroutes binnen de scope. Eén geslaagde checkout bewijst niet dat alle routes werken.
  • Transactie-ID’s. Ik controleer één uniek, niet-leeg ID per bestelling. GA4 dedupliceert aankopen van dezelfde gebruiker met hetzelfde ID bij webstreams, niet bij appstreams. Hergebruikte of lege ID’s kunnen verschillende aankopen verbergen; verschillende ID’s voor één bestelling kunnen deduplicatie verhinderen.
  • BigQuery-bewijs. Ik vergelijk ontvangen ruwe events met bestelrecords. Ze tonen geen niet-ontvangen event en garanderen geen volledige gegevensverzameling; ik controleer ook exportlimieten en instellingen.

Veelvoorkomende faalpatronen

Ik zou deze mogelijke implementatieproblemen onderzoeken in plaats van ze uit een totaal af te leiden.

  • Onvolledige verzending. Een benodigde checkoutroute levert geen ontvangen aankoop op. Ik test de trigger en het verzoek op die route.
  • Herhaalde verzendingen. Twee routes sturen één bestelling met verschillende of ontbrekende ID’s. Rapporten dedupliceren webaankopen van dezelfde gebruiker met hetzelfde ID; twee tags alleen bewijzen geen dubbele omzet. De purchase-eventgids beschrijft de te controleren routes.
  • Onduidelijke sleutels. Bestelidentifiers vragen om een geverifieerde vertaalslag. Een niet-gekoppelde string bewijst op zichzelf geen deduplicatiefout.
  • Ontbrekende refund-verzending. Een Shopify-verkoopcorrectie heeft geen bijbehorende GA4-refund. Ik controleer soort, bedrag en periode voordat ik het verschil toewijs.
  • Verkeerde waarde of valuta. Ik vergelijk ontvangen parameters met de bedoelde bestelbedragen en componenten.

Beperkingen van afstemming

Afstemming vraagt om bruikbare identifiers, vergelijkbare definities en beschikbaar bewijs. Een kloppend totaal kan fouten verbergen die elkaar opheffen. Ruwe exports kunnen verschillen van gemodelleerde rapporten, en latere correcties kunnen de vergeleken periode veranderen.

Als de basisversie of een blocker verhinderde dat een event GA4 bereikte, kan die dataset met ontvangen events het niet terughalen. Ik heb per bestelling bewijs van gegevensverzameling of toestemming nodig om die oorzaak toe te wijzen; afwezigheid alleen is onvoldoende. De geavanceerde versie kan metingen zonder cookies sturen, dus weigering betekent niet overal afwezigheid. Ik respecteer toestemmingsgrenzen in plaats van ontbrekende bestellingen te sturen om een match af te dwingen.

Alternatieven

Als je niet handmatig kunt of wilt afstemmen, zijn er lichtere en uitgebreidere opties. Een eenmalige trackingaudit doet de afstemming en eventcontrole en levert een ingedeelde lijst met afwijkingen op.

Server-side tagging verplaatst eventverwerking naar infrastructuur die je beheert. In de browser-naar-serverstroom moet het apparaat nog steeds een verzoek sturen. Ik zou server-side werk apart afbakenen en verzending/toestemming controleren; verwerking verplaatsen bewijst niet dat geblokkeerde events terugkomen. Zie voor het terugkerende symptoom GA4–Shopify-omzetverschillen en voor de koppelmethode orderreconciliatie.

Als de gids geen uitsluitsel gafEUR 375

Ik doe deze afstemming op je winkel alleen-lezen, voor EUR 375 — schriftelijk oordeel twee werkdagen na de kickoff.

Vraag een Health Check aan

Vragen

Vragen die deze gids beantwoordt

Hoeveel verschil tussen GA4 en Shopify is acceptabel?

De gelinkte platformdocumentatie noemt geen acceptabel percentage. Ik controleer of scope, valuta, timing of bewijs van gegevensverzameling het verschil verklaren. Een plotseling of groeiend verschil is reden voor onderzoek, geen bewijs van een kapotte tag. Ook een klein onverklaard verschil vraagt om uitleg.

Moet ik Shopify of GA4 vertrouwen voor de omzet?

Ik gebruik Shopify voor bestellingen en verkopen. Betalingen en uitbetalingen van de betaalprovider stem ik apart af voor geldstromen. Shopify-verkooprapporten houden geen betalingen bij. GA4 helpt me waargenomen gedrag en de aan kanalen toegeschreven bijdrage te onderzoeken; dat is een andere vraag dan hoeveel geld is ontvangen.

Waarom is de omzet van GA4 bijna elke maand lager dan die van Shopify?

Ik zou eerst de maatstaf en de opgenomen bestellingen controleren, daarna toestemming en gegevensverzameling. De basisversie kan tags blokkeren; de geavanceerde versie kan metingen zonder cookies sturen. Een aankoopverzoek dat GA4 nooit bereikt, kan niet als ontvangen event verschijnen. Dit zijn mogelijkheden om te verifiëren; de richting van het verschil identificeert de oorzaak niet.

Kan GA4 meer omzet tonen dan Shopify?

Ja. Ik controleer testbestellingen, ontbrekende terugbetalingsevents en herhaalde verzendingen. Bij webstreams dedupliceert GA4 aankopen van dezelfde gebruiker met hetzelfde transactie-ID. Verschillende of ontbrekende ID's vragen om onderzoek; twee tags alleen bewijzen geen dubbele rapportomzet.

Heb ik BigQuery nodig om GA4 en Shopify af te stemmen?

Nee. Ik kan rapportregels per transactie-ID vergelijken met een Shopify-export. BigQuery geeft toegang tot ontvangen ruwe events, afhankelijk van exportinstellingen en limieten; het haalt een niet-ontvangen aankoop niet terug. Standaardproperties hebben een dagelijkse exportlimiet van één miljoen events, en streaming kan hiaten bevatten.

Daniil Maximkin

Hoi, ik ben Daniil.

Ik werk met je samen, van probleemdefinitie tot implementatie en overdracht. Je praat met degene die het werk doet. Ik werk in het Engels en het Russisch.

Geprobeerd en kom je er nog niet uit?

Beschrijf je taak

Het eerste antwoord is gratis, binnen één werkdag. Of schrijf rechtstreeks: next@taskfordaniel.com