Google Tag Manager / dataLayer

Repejo pushar GA4-ecommerce-händelser till window.dataLayer i webbläsaren. Marknadsförare kan då koppla konverteringar i GTM mot valfri plattform (Meta, Google Ads, TikTok m.fl.) utan separata integrationer per annonssystem. Vill ni dessutom ha serverside-spårning relayar Repejo samma purchase till GA4 Measurement Protocol.

Setup

  • Lägg till Google Tag Manager under Inställningar > Integrationer .
  • Container-ID behövs inte – Repejo pushar till window.dataLayer och er befintliga GTM-container plockar upp händelserna. Repejo laddar aldrig en egen container och skriver aldrig över en befintlig dataLayer.
  • För serverside-relä (frivilligt, ger motståndskraft mot annonsblockerare): fyll i Measurement ID och Measurement Protocol API Secret (GA4 Admin → Datastreams → Measurement Protocol API secrets). En egen server-side GTM-endpoint kan anges i fältet Server-side GTM endpoint.
  • GA4-standardnamn används. Har ni sedan tidigare egna GTM-triggers mot andra eventnamn (t.ex. repejo_first_interaction) behöver de pekas om till namnen nedan.

När purchase skickas

purchase skickas endast när betalningen är bekräftad och givaren landat på tacksidan (efter BankID/Swish). Den skickas aldrig när användaren bara skickats vidare till betalning (t.ex. väntläge för BankID/Swish). Konverteringspunkten innehåller därför korrekt kunddata på tacksidan – inte innan betalningen är klar.

Cookie-samtycke

Pushar (särskilt user_data) sker endast om besökaren samtyckt till marknadsföringscookies – samma modell som Meta-integrationen.

  • Hanterar ni samtycke själva: sätt attributet user-has-consented-to-marketing-cookies till true på webbkomponenten.
  • Cookiebot läses automatiskt om det finns.
  • För hostad checkout visas en inbyggd cookiebanner när GTM är aktiverat. Valet sparas per organisation.

Deduplicering: Klient-push och serverside-reläet använder samma transaction_id (Repejos receivable-id), så GA4 dedupliserar de två purchase-händelserna automatiskt. Konfigurera GTM-taggar att deduplicera på transaction_id så att en omladdning av tacksidan inte dubbelräknas.

Händelser och exakt data

Nedan visas exakt vad som hamnar i window.dataLayer per händelse. Varje ecommerce-händelse föregås alltid av en { ecommerce: null }-push (GA4-praxis) så att items aldrig läcker mellan händelser.

Trattshändelser: begin_checkout, view_item, add_payment_info

Byggs i webbläsaren, innehåller ingen personuppgift och har inget serverside-relä. Skickas en gång per sidladdning och händelsetyp, och endast om GTM är aktivt och marknadsföringssamtycke finns.

  • begin_checkout – första valet som startar flödet (t.ex. väljer belopp).
  • view_item – när användaren går vidare från första steget.
  • add_payment_info – när användaren väljer betalmetod.
window.dataLayer.push({ ecommerce: null });
window.dataLayer.push({
  event: "begin_checkout",          // eller "view_item" / "add_payment_info"
  ecommerce: {
    currency: "SEK",                // checkoutens valuta, annars "SEK"
    value: 205                      // utelämnas helt om beloppet inte är ett ändligt tal
  }
});

purchase – dataLayer-push

Byggs en gång på servern (samma källa som serverside-reläet) och skickas endast när betalningen är bekräftad på tacksidan. De fyra valfria nycklarna (repejo_metadata, user_data, gclid, fbclid) tas bara med när det finns ett värde.

window.dataLayer.push({ ecommerce: null });
window.dataLayer.push({
  event: "purchase",
  donation_type: "recurring",       // se tabell nedan
  ecommerce: {
    transaction_id: "rec_…",        // receivable-id, annars subscription-id, annars token
    value: 205.0,
    currency: "SEK",
    items: [{
      item_name: "Monthly donation", // se tabell nedan
      item_category: "recurring",    // samma värde som donation_type
      price: 205.0,
      quantity: 1
    }]
  },
  repejo_metadata: { … },         // publik metadata, om icke-tom
  gclid: "…",                       // Google Ads-klick, om fångat
  fbclid: "…",                      // Meta-klick, om fångat
  user_data: {                     // se nedan – avstängt som standard
    email: "donor@example.com",      // gemener + trimmad
    email_sha256: "…",
    phone_number_plus: "+46701234567",   // svensk 0… → 46…
    phone_number_plus_sha256: "…",
    phone_number_noplus: "46701234567",
    phone_number_noplus_sha256: "…"
  }
});

donation_type ligger på toppnivå så att en GTM-trigger som purchase + donation_type finns kan särskilja Repejos köp från en befintlig butiks-/shopcheckout som också använder GA4-standardeventet purchase. För separata Google Ads-konverteringar (t.ex. månadsgivare vs engångsgåvor): dela på värdet enligt tabellen nedan.

donation_type, item_name och item_category beror på checkout-typen. donation_type och item_category har alltid samma värde:

  • Månadsgivande: "recurring" / "Monthly donation"
  • Engångsgåva: "onetime" / "Donation"
  • Gåvobevis / minnesblad: "gift_card" / "Gift card"
  • Medlemskap: "membership" / "Membership"
  • P2P-insamling: "p2p" / "P2P donation"
  • Fysisk vara (shop): "product" / "Product"
  • Lotteri: "lottery" / "Lottery ticket"

user_data är avstängt som standard och måste aktiveras per integration (include_user_data). Även påslaget skickas det bara med marknadsföringssamtycke, och varje nyckel tas bara med när motsvarande värde finns. Rå e-post/telefon ingår tillsammans med SHA-256 (telefon i två format).

purchase – serverside-relä (Measurement Protocol)

Skickas enbart om Measurement ID och API Secret är ifyllda. Repejo POST:ar nedanstående body till https://www.google-analytics.com/mp/collect (eller er sGTM-endpoint) med measurement_id och api_secret som query-parametrar. Samma transaction_id som klient-pushen, så GA4 dedupliserar. Nil-värden i params tas bort innan sändning.

{
  "client_id": "111.222",           // GA4 _ga-cookie, annars härlett från e-post
  "non_personalized_ads": false,
  "user_id": "sha256(e-post)",      // när e-post finns
  "user_data": {                  // endast om include_user_data=true
    "sha256_email_address": ["…"],
    "sha256_phone_number": ["…"]    // telefon i +46-format, hashad
  },
  "events": [{
    "name": "purchase",
    "params": {
      "transaction_id": "rec_…",
      "value": 205.0,
      "currency": "SEK",
      "items": [{ item_name: "Monthly donation", item_category: "recurring",
                price: 205.0, quantity: 1 }],
      "donation_type": "recurring", // se tabell — samma värde som dataLayer-pushen ovan
      "payment_method": "swish",    // vald betalmetod, valfri
      "repejo_reference": "…",       // kampanj-/checkout-referens, valfri
      "session_id": "…",             // GA4 _ga_<MID>-cookie, valfri
      "page_location": "https://…",  // URL där köpet skedde, valfri
      "gclid": "…",                  // valfri
      "fbclid": "…",                 // valfri
      "engagement_time_msec": 100
    }
  }]
}

Testa innan ni går live

  • Aktivera Felsökningsläge på integrationen, eller lägg till ?gtm_debug=1 i checkout-URL:en. Varje push loggas i DevTools-konsolen med prefixet [Repejo GTM].
  • Använd GTM Preview / Tag Assistant för att verifiera triggers och variabler mot ovanstående struktur innan ni kopplar skarpa taggar.