Stub-text
Svenska Vet aktiva dashboards: svg-dashboard-v2 pa Cloudflare Pages (https://svg-dashboard-v2.pages.dev) med flikar Google Ads, Meta, GA4, Conversion Funnel, per-klinik CPA, drivs av svg-bq-worker.jonatan-sundemo.workers.dev pa BigQuery svg-data-warehouse. Backfill 2025-01-01 GA4 och Google Ads, 2026-03-05 Meta. Source HTML: /workspace/group/svg-dashboard-v2.html. Looker Studio klinik-rapport planerad. ProVet sandbox-integration test. Lasa vid fragor om dashboard, rapport, visualisering, Cloudflare Pages, Worker, dashboard-URL, backfill, CPA-kolumn.
Fullständigt arkiv
Aktiva dashboards för Svenska Vet
Senast uppdaterad: 2026-05-06 Status: svg-dashboard-v2 i drift, Looker Studio-rapport planerad, ProVet sandbox-integration testad
svg-dashboard-v2 (primär)
- URL: https://svg-dashboard-v2.pages.dev
- Plattform: Cloudflare Pages, projekt
svg-dashboard-v2
- Källfil:
/workspace/group/svg-dashboard-v2.html
- Bygg-script:
/tmp/build-svg-dashboard.js
- Deploy:
npx wrangler pages deploy /tmp/deploy --project-name=svg-dashboard-v2
- Datakälla: BigQuery (
svg-data-warehouse) via Cloudflare Worker-proxy
- Live sedan: 2026-04-22
- Cache version: v8 (per 2026-05-04)
Arkitektur
Tidigare bygge med embedded data blev 13 MB (avvisat). Nuvarande HTML är 91 KB, hämtar data live från BQ via Worker. JWT-signing med SubtleCrypto för GCP-auth. Cache 1h via Cache API, versionerad cache-key (CACHE_VERSION-konstant) för att kunna purga vid query-ändringar. ?nocache=1 för manuell bypass.
Flikar
| Flik | Innehåll | Källa |
|---|
| Översikt | Aggregerad förstasida + datumväljare | Alla worker-endpoints |
| Google Ads | Per-klinik CPA (bok / tel separat sedan 2026-05-04) | /api/gads |
| Meta | Spend, bokningar, schedule_total | /api/meta |
| GA4 | Channels + per-clinic + source-filter (sedan 2026-05-04) | /api/ga4-channels, /api/ga4-per-clinic, /api/ga4-sources |
| Conversion Funnel | Bokningstratt med 3-day rolling dedup | /api/funnel |
Datum-presets: 7d / 30d / MTD på alla flikar. Default vid sidladdning: 30 dagar.
CPA-formel (Google Ads-fliken, fixad 2026-05-04)
- Bokningskonv-CPA =
spend / bokningar
- Telefonsamtal-CPA = eget sub-fält
- Tidigare felaktigt
spend / (bokningar + tel) → patchat
- Snitt CPA-subtitel förtydligad: "Per konvertering (bok+tel)"
- GA4 Kanaler-tabell visar föregående periods värde inom parentes per cell
Meta "Bokning klar"
Använder schedule_total istället för provet_booked_conv (det senare nära noll för SVG). Ger 153 bokningar på 30d, 27 på 7d (apr 2026). boka_tid_conv är click-eventet (mycket högre volym).
Backfill-ranges per source
| Source | Backfill från | Notering |
|---|
| Google Ads | 2025-01-01 | Klart |
| GA4 channels | 2025-01-01 | Klart |
| GA4 per-clinic | 2025-01-01 | Klart |
| GA4 funnel-events | 2026-02-04 | Senaste tillgängliga |
| Meta Ads | 2026-03-05 | 14 mån saknas (2025-01-01 → 2026-03-04) |
| GA4 source-by-clinic | 2026-02-21 | 12 395 rader, ej schemalagd nattligt än |
Known bugs / quirks
- Provet Sandbox dropdown: hover-bug fixad 2026-05-04 (osynlig padding-bridge + 250ms grace-period).
- CACHE_VERSION: måste bumpas vid query-ändringar för att globalt invalidera. Bara att deploya HTML/Worker räcker inte, edge-noder cachear per nod.
- Cityveterinären Malmö + Vara: borttagna ur CLINIC_MAP 2026-05-05 (helpers.js, other-tabs-js.js).
- Wrangler 4 non-interactive: kräver
CLOUDFLARE_API_TOKEN exporterad som env-var. set -a && source .env && set +a istället för bara source.
svg-bq-worker (Cloudflare Worker)
- URL:
https://svg-bq-worker.jonatan-sundemo.workers.dev
- Projekt:
/workspace/group/svg-bq-worker/ (wrangler-projekt)
- Auth: JWT-signing mot GCP via SubtleCrypto.
GCP_SA_KEY satt som wrangler secret.
- Cache-key-mönster:
https://cache.internal/${VERSION}${pathname} (för global invalidering).
Endpoints
/api/gads – Google Ads klick + spend + conv per klinik
/api/meta – Meta Ads insights per klinik
/api/ga4-channels – GA4 channels per klinik (med föregående periods värden)
/api/ga4-per-clinic – GA4 sessions/users per klinik
/api/ga4-sources – GA4 source-filter (ny 2026-05-04)
/api/funnel – Conversion funnel (booking_started → reason_selected → date_selected → appointment_booked)
/api/clinics – Klinik-metadata
Gammal v1 (referens, ej längre underhållen)
- URL:
https://elegant-sorbet-f8adde.netlify.app
- Fil:
/workspace/group/svg-klinikanalys-alla.html
- Netlify site ID:
5651a85b-40e6-41f4-b715-b45b344d7836
- Ersatt av v2 2026-04-22.
svg-cpa-rapport (engångsrapport)
- URL: https://svg-cpa-rapport.pages.dev
- Plattform: Cloudflare Pages, projekt
svg-cpa-rapport
- Period: 2026-03-29 framåt
- Syfte: Djupanalys av varför kliniker har hög CPA (tre kategorier: spårningsproblem, låg ProVet CVR, GAds vs Meta-diskrepans).
Looker Studio (planerad)
- Klinik-rapport med funnel disclaimer planerad sedan 2026-04-20 (Pontus, Ramtin).
- Rapport schemalagd måndag 14 apr kl 07:10 (initial setup).
- Status: byggs på BQ-vyer
v_bookings, v_booking_funnel, v_bookings_by_source.
- Sixten Engevall vill ha kliniknivå-tabell (impressions/clicks/CTR/CPC/conv) i den löpande Google-rapporten framåt.
ProVet sandbox-integration (test)
- Status: sandbox-access fungerar, attributionsmodell byggd och testad (per månadsmöte 2026-05-04).
- Endpoint-lista: skickad till ProVet developers, väntar ETA.
- Blockerare: Sixten klargör kostnadsbilden med Dan Haglund innan skarp drift.
- Avbokningstratt visar total konverteringsfrekvens ca 18-19% (ProVet-data från 2026-03 och framåt).
Pausad: Booking Attribution Sync prototype
- Tag 90+91 i GTM-MPJ5P69C, hashade email/phone i webbläsaren och POST:ade till Worker → BigQuery
svg_attribution.bookings.
- Pausad: v35 publicerad 2026-04-29 ~14:43, workspace 40
revert-prototype-2026-04-29.
- Problem: 0 produktionsrader på 28h, endast 2 testrader. Estimerat 50-100 missade bokningar.
- Rotorsaker:
- Worker (
svg-bq-worker/src/index.js:441-448) returnerar 400 om payload saknar tracking-params, direkttrafik filtreras bort.
- Tag 88 scrapar DOM efter email, men Tag 91 läser
event.email på root i dataLayer.
- Outdated source-fil:
/workspace/group/svg-attribution/create_gtm_tag91.js matchar INTE live Tag 91-koden.
- Bevarat i v35: Tag 46
enableUrlPassthrough=true + Variabel 52 (klinik 19 G-8V5C8YP3DZ).
- För revert: kräver (a) verifiera ProVet pushar email på root, eller (b) lätta worker-validering, eller (c) lägg till fallback i Tag 91.
Tekniska insikter (kuraterade)
- Cloudflare Pages HTML-deploy: filen som ska visas måste heta
index.html. Projektnamn = URL.
- Cloudflare Worker Cache API:
cache.put-entries lagras per edge-nod. För global invalidering: bump CACHE_VERSION i cache-key.
- BQ load jobs > streaming inserts vid project-number-prefix-issues (load jobs är gratis och mer reliable).
- Region mismatch: kan inte JOIN:a
EU multi-region med europe-west1 single-region. Datasets måste vara i samma region.
- Google Ads Transfer Service:
c._LATEST_DATE = c._DATA_DATE i JOIN för att undvika dubbletter när Google retroaktivt uppdaterar äldre rader.
Dashboard-feedback från handover (2026-04-22)
Niclas Malm tog upp i handover-mötet:
- CPA saknar telefonsamtal (FIXAT 2026-05-04, nu separata kolumner).
- Extremt låg CTR på några kliniker (kan vara interna klick).
- Lite buggigt, datum funkar inte helt (delvis fixat).
- Niclas måste ha det som mål att snacka om på månadsmötet.
- Dashboard-ägandeskap ska flyttas över till SVG vid skärmdelningssession när datan är stabil (per månadsmöte 2026-05-04).