Stub-text
Centraliserad tracking och datapipeline för Svenska Vet: GTM-containrar (klinik + ProVet) med parametrar tabbing och fbclid, 31 GA4-properties exporterade till BigQuery (svg-data-warehouse i EU), Google Ads + Meta + GA4 daglig synk till BQ, kända tracking-luckor i Vetlanda/Helsingborg/Ramkvilla/Tingsryd, attribution-outliers i Skara/Djurlakarna, conversion-categorization med AD_CALL/GOOGLE_HOSTED, rolling 3-day funnel-dedup. Lasa vid fragor om GA4, GTM, BigQuery, attribution, conversions, fbclid, tracker, datasynk, outliers.
Fullständigt arkiv
Tracking, BigQuery & GA4 datapipeline för Svenska Vet
Senast uppdaterad: 2026-05-06 Status: produktion, dagliga BQ-syncs gröna
Centraliserad tracking och datapipeline över alla SVG-kliniker (26 aktiva klinikkonton efter avveckling av Cityveterinären Malmö och Vara 2026-05-05). Syftet är att kunna mäta paid attribution per klinik, bygga dashboards på BigQuery och förbereda LTV-koppling mot ProVet.
GTM-containrar
- GTM Account ID: 6308141447
- Clinics-container: GTM-5B6B87PV (container ID 229103947), installerad på alla kliniksajter via Bliss CMS. Tag 40 är param-forwarding-scriptet (se nedan).
- ProVet Cloud-container: GTM-MPJ5P69C, byggd av Arash, konfigurerad med GA4/Google Ads/Meta via lookup-table per klinik. Laddas via Usercentrics consent-flöde (CSP fixad av Olli 2026-03-27).
Param-forwarding (Tag 40, deployed 2026-03-13)
Fångar gclid/fbclid/utm_* från landnings-URL, sparar i sessionStorage, dekorerar boka-länkar med MutationObserver. Bliss CMS-redirecten bevarar query-parametrar. Verifierat fungerande på Göteborg, SöderVet, Vet på Söder. Redirect override-map (2026-03-23) fixade trasiga 301-redirects på SöderVet, Vet på Söder, Vetlanda, Göteborg.
Andra viktiga tags
- Tag 36 (click_tel): Skickar custom event
click_tel till Meta Pixel (INTE standard Lead). Custom conversion "SVG - Telefonklick" (ID 4124593674429760, event type CONTACT, pixel 930514942754943) gör att eventet räknas som konvertering i Ads Manager.
- Tag 46 (Conversion Linker):
enableUrlPassthrough true sedan v34 (2026-04-28). Förbättrar GCLID-passthrough klinik → ProVet.
- Tag 88 (DOM scraper): Skrapar email/telefon från ProVet-bokningsformuläret för Advanced Matching.
- Tag 89 (Enhanced Conversions Google Ads): Använder samma scrapade PII.
- Tag 90+91 (Booking Attribution Sync): PAUSAD i v35 (2026-04-29) efter 0 produktionsrader på 28h. Worker-validering för strikt + Tag 91 läser fel dataLayer-fält.
- Variabel 52 (Lookup GA4 Measurement ID): clinicId=19 fixad till
G-8V5C8YP3DZ 2026-04-28 (Djurcentralen Gävle skickade till fel property tidigare).
GA4-properties
- Antal: 31 aktiva klinik-properties + paraply (efter Vara avstängdes 2026-05-05).
- Measurement IDs: matchar mellan klinikernas sajter och ProVet via lookup-table i GTM-MPJ5P69C.
- BigQuery-export: Aktiv på alla 31, projekt
svg-data-warehouse (project number 59784424051), EU multi-region. Alingsås kör i annat projekt sedan 2025-08 (159978200820).
- GA4 Admin API-faltnamn:
exportStreams (INTE dataStreams), project: "projects/{nummer}", datasetLocation: EU obligatoriskt. googleapis Node-klienten filtrerar bort gamla länkar utan exportStreams, använd direkta HTTPS-anrop för att se/radera.
SQL-vyer på exporten
v_bookings, v_booking_funnel, v_bookings_by_source aggregerar alla GA4-datasets till klinik-nivå.
Google Ads BQ-synk
- Script:
/workspace/group/svg-ads-db/sync-gads-bq.js
- BQ-tabell:
svg-data-warehouse.svg_ads.ads_daily (eller via Google Ads Transfer Service google_ads-dataset på kund-projekt).
- Cron: nattlig, 46-51 rader/dag över 26 konton (3 443-4 254 SEK spend).
- Conversion-categorization (fixad 2026-05-04):
categorizeConversion() missade tidigare "Samtal från annonser" (AD_CALL) och "Clicks to call" (GOOGLE_HOSTED). 1 999 samtal flyttades från conv_other till conv_tel via backfill från 2026-01-01.
- CPA-fix (2026-05-04): Bokningskonv-CPA =
spend / bokningar (tidigare felaktigt spend / (bokningar + tel)). Telefonsamtal-CPA är eget sub-fält. Klinik-tabellen har två separata CPA-kolumner.
- MCC: Republiken 337-360-7442 (1 SVG-konto = Enköping 5595944901). SVG eget MCC 636-855-1550 med 28 kundkonton (nu 26).
- Lag: 1-2 dagar. Använd
c._LATEST_DATE = c._DATA_DATE i JOIN för senaste kampanjmetadata utan dubbletter.
- Backfill cap: 300 dagar/run via Data Transfer Service.
Meta Ads BQ-synk
- Script:
/workspace/group/svg-ads-db/sync-meta-bq.js
- BQ-tabell:
svg-data-warehouse.meta_ads.ads_daily (partitionerad på date, klustrad på ad_account_id+campaign_id, EU).
- Konton: 19 SVG ad accounts.
- Sync-mönster: BQ load jobs (gratis) med delete-then-load för idempotenta dagliga syncs.
- Backfill-state: 2026-03-05 → 2026-04-30 klart (57 dagar, 19 kampanjer). 14 månader (2025-01-01 → 2026-03-04) saknas fortfarande.
- Conversion event-filter: ALLTID exakt
offsite_conversion.fb_pixel_custom.boka-tid för boka-tid-conversions. Substring-match dubbelräknar.
- Meta API-version: v24.0 (NOT v21).
GA4 source-by-clinic historical
- Script:
/workspace/group/svg-ads-db/sync-ga4-source-bq.js (ej schemalagt nattligt än per 2026-05-04).
- BQ-tabell:
svg-data-warehouse.svg_ads.ga4_source_daily_historical (12 395 rader, backfillad från 2026-02-21).
- Worker-endpoint:
/api/ga4-sources (CACHE_VERSION v8).
- Användning: GA4 source-filter på dashboard GA4-fliken.
GA4 funnel (rolling 3-day dedup)
- Script:
sync-ga4-funnel-bq.js med rolling 3-dagars DELETE-before-INSERT (2026-05-04).
- Cron:
5 6 * via mcp__nanoclaw__schedule_task.
- Resultat: 0 dubbletter kvar. BQ vs GA4 live 2026-05-01 till 2026-05-03 = 0% diff.
- Late-arriving GA4-data: ~0,8% diff över 30 dagar (24-72h fördröjning).
Tracking-luckor per klinik
| Klinik | Problem | Status |
|---|
| Vetlanda | GTM saknas helt (WordPress/Divi) + redirect vetlandadjurklinik.se/referral | Oscar behöver installera GTM-5B6B87PV |
| Helsingborg | Separat ProVet-path (my.provet.com/helsingborgs-veterinarklinik) | Pågår |
| Ramkvilla | Ingen online-bokning, bara telefon/kontaktformulär | Inget kan fixas |
| Tingsryd | Ingen online-bokning, bara telefon/kontaktformulär | Inget kan fixas |
| Lerum | Kampanjer startade 2026-04-08 (utanför analysfönstret) | OK |
| Cityveterinären Malmö | Avvecklad 2026-05-05 | Borttagen från pipeline |
| Vara | Avvecklad 2026-05-05 | Borttagen från pipeline |
Kliniker UTAN Google Ads-konto under MCC
goteborgsdjurklinik.se, smadjursklinikenilerum.se, mjonasdjurklinik.se, sodervet.se, vetlandadjurklinik.se, vetpasoder.se. Bara dinveterinarenkoping.se (5595944901) hade aktiva kampanjer under Republikens MCC 2026-03-23.
GA4 outliers (klick / CPC-sessioner > 1.5x, period 2026-03-23 till 2026-04-07)
| Klinik | Ratio | Trolig orsak |
|---|
| Skara | 2.8x | Tracking-gap (11 GA4-direktbokningar, 0 från CPC) |
| Djurläkarna Nord | 1.8x | Cross-device + consent-blockering |
| Göteborg | 1.7x | Telefon som primär CTA, redirect-kedja (löst 2026-03-23) |
| Mjönäs | 1.6x | Hero-CTA "Kontakta oss" leder fel |
| Magleberg | 1.5x | Mindre allvarlig, generellt OK |
OK (1.0-1.4x): Kalmar, Knivsta, Enköping, Alingsås, Örebro, Vallentuna, SöderVet, Skövde, Sollentuna.
Tolkning: "Folk klickar och backar" förklarar INTE gapet. En GA4-session skapas så fort sidan laddas. Gapet beror på tracking-luckor, redirect-kedjor, consent-blockering och cross-device.
Service accounts & access
- Drive/DWD:
dataextractor@republiken-service-accounts.iam.gserviceaccount.com (impersonate jonatan.sundemo@republiken.se).
- GA4/GTM/BQ Data Editor:
republiken-shared@republiken-service-accounts.iam.gserviceaccount.com (Editor på GA4-konto 337709292 sedan 2026-04-10).
- Google Ads:
mcp-google-ads-sa@braided-woods-456015-v7.iam.gserviceaccount.com.
- GCP-projekt SVG:
svg-data-warehouse (number 59784424051), taggat customer: svg. EU multi-region.
- MCC Republiken: 337-360-7442. SVGs eget MCC: 636-855-1550.
- Drive-mapp Jonatan:
1-cE-i8C6UYodGTl-bFjXkk8EL67x_xrI.
- Delad svenska-vet-2-mapp:
1KwsdwI3eziZ6LfOAVmaz0fqI49S8WDXg (under shared Flexbert-mapp 1XGTm6Cm2Z-w4bccwLF3GWLTaJhSXSGL3).
- BQ-scopes:
bigquery.readonly för läs, bigquery för skriv. Compute SA behöver roles/bigquery.dataEditor på dataset + roles/bigquery.jobUser på projektnivå för DELETE/MERGE.
Project number gotcha
GA4 Admin API exportStreams kräver project NUMBER (projects/59784424051), inte project ID (projects/svg-data-warehouse). Andra endpoints accepterar bägge.
Common attribution debugging steps
- Klick utan sessions? Kolla GA4 → Reports → Acquisition → Traffic acquisition, filtrera CPC. Om 0 sessioner trots klick: tracking-gap (GTM laddas inte, redirect strippar params, consent blockerar).
- Sessions utan konverteringar? Kolla
provet_*-events per source. Om direct dominerar: param-forwarding broken eller redirect strippar parametrar.
- GA4 vs Google Ads ratio? Kör
analyticsdata v1beta mot property, jämför sessions WHERE source=google AND medium=cpc med Google Ads-klick samma period.
- Dubletter i funnel? Rolling 3-day DELETE-before-INSERT i sync-script (se sync-ga4-funnel-bq.js).
- Conversion mismatch GAds vs Meta? Kolla
categorizeConversion() så AD_CALL och GOOGLE_HOSTED hamnar i conv_tel.
- Region mismatch i BQ-JOIN? Datasets måste vara i samma region (EU multi-region eller europe-west1, INTE blandat).
Verktyg / referensdata
svg-google-ads-konton.md (26 aktiva klinikkonton, uppdaterad 2026-05-05)
svg-bigquery-views.sql (vy-definitioner)
- DB-backup:
svg-ads.db.bak-2026-05-05 (innan Malmö/Vara borttogs)
Avveckling 2026-05-05 (Cityveterinären Malmö + Vara)
Sålda/nedlagda. Jonatan stängde av GA4-importen. Tagit bort:
- 904 rader i
google_ads.ads_daily (Malmö 826 + Vara 78)
- 71 rader i
svg_ads.ga4_funnel
- 1 322 rader i
svg_ads.ga4_daily_historical
- 266 rader i
svg_ads.ga4_source_daily_historical (alla Vara, pid 468768737)
- SQLite: 136 gads-rader (Malmö) + 50 GA4-rader (Vara)
Uppdaterat: alla sync-scripts, dashboard CLINIC_MAP, svg-bigquery-views.sql, svg-google-ads-konton.md (28 → 26 aktiva). CIDs som inte längre används: 2282158991 (Malmö), 7717262315 (Vara). Property IDs: 468790341 (Malmö), 468768737 (Vara).