02 · Cum măsurăm · Task #71

Cum măsurăm rezultatele campaniilor paid

Răspunsurile la cele 6 întrebări din task, cu starea reală verificată live în PostHog. Regula de bază rămâne cea din strategie: decizia se ia pe datele noastre, nu pe cele ale Google — dar Google trebuie hrănit cu conversii ca să poată optimiza.

Alexandra · 14 iulie 2026 · actualizat 16 septembrie 2026 (stare verificată live) · Surse: PostHog live (proiect Bono + Start), Strategia de măsurare (28 iun), Teste Google Ads, Analiza concurenței, minuta Google Ads Solo–Bono (9 iul), docurile de atribuire Desire, Jira BN-1329 și BN-1565

TL;DR

Stare la 16 septembrie 2026: sistemul de măsurare descris în iulie e implementat și funcționează. BN-1329 e live din 17 august: fiecare lead se salvează în baza Desire cu atribuirea completă (canal, campanie, keyword, click ID; first-touch + last-touch + parcursul de sesiuni), evenimentul desire_lead_created pleacă din server — 538 de lead-uri în 30 de zile, 100% cu sursă, 0 cu domeniu intern, 1:1 cu baza — iar 98% au istoricul de navigare legat. BN-1565 (raportul zilnic pe surse) e livrat. UTM-urile după convenție sunt pe toate campaniile, paginile /lp/ sunt live din 3 august, iar raportul de decizie al lui Teo (ads.bonofintech.ro) e nivelul 2 de raportare. Ce mai lipsește: conversiile offline către Google — acțiunile există în cont, dar 0 conversii încărcate (#452); Google optimizează deocamdată doar pe tag-ul web (283 conversii în 30 de zile). Detaliul, pe capabilități, în tabelul din secțiunea 1.

Ce măsurăm — definiția lead-ului: adresă de e-mail + număr de telefon, salvate în baza de date Desire. Același formular apare în două locuri: (1) pe desire.bono.ro și (2) direct pe bono.ro/infiintare-srl — respectiv pe echivalentul noindex /lp/infiintare-srl pentru trafic plătit. Indiferent unde e completat, lead-ul ajunge în aceeași bază — deci măsurarea și atribuirea trebuie să funcționeze identic pe ambele căi.

1 · Sistemul de măsurare — cum funcționează azi

În iulie, sursa pe canal se vedea doar prin reconstrucție, atribuirea pe campanie nu ajungea pe lead și evenimentul pleca din browser. BN-1329 (live din 17 august) și BN-1565 au închis toate trei. Fluxul de mai jos e cel care rulează acum; tabelul de la final arată, pas cu pas, ce s-a verificat pe 16 septembrie.

Fluxul de măsurare cap-coadă (implementat — BN-1329 + BN-1565)

Click pe reclamă → aterizare cu „adresa" completă.

URL-ul poartă cele 6 UTM-uri (utm_campaign unic per test, cu canalul ca prefix — ex. gads-…; {keyword} în utm_term; utm_id={campaignid} ca backup stabil la redenumiri) + click ID-ul pus automat de Google (gclid/gbraid/wbraid). Destinația: /lp/ noindex sau pagina organică cu formular.

Sursa se capturează la prima intrare și se cară până la formular.

First-touch set-once + last-touch actualizat la fiecare vizită. Parametrii merg pe linkul bono→desire (funcționează pentru toți userii, fără consimțământ) + cookie first-party .bono.ro pentru first-touch între vizite (cu consimțământ). Sursa nu poate fi niciodată un domeniu intern.

La submit — oriunde e formularul — lead-ul se salvează în baza Desire cu atribuirea completă.

E-mail + telefon + seturile first_*/last_* (source, channel, utm, click ID-uri, referrer, landing page) + parcursul de sesiuni + lista ponderată {sursă, pondere} gata calculată de server. Nicio coloană NULL — worst case „direct".

Serverul trimite desire_lead_created în PostHog — 1:1 cu baza.

Toate lead-urile ajung în PostHog (dispare pierderea de ~17% din browser), idempotent la retry, cu aceleași câmpuri de atribuire ca în bază; identify + $set_once păstrează istoricul de navigare pre-lead pe aceeași persoană.

Rapoartele ies direct din date, fără reconstrucție.

Zilnic (BN-1565): lead-uri pe surse și campanii, atribuire ponderată, ziua = ora României. Săptămânal: tabelul de decizie cost/lead per utm_campaign (secțiunea 6). Per test: documentul de concluzie.

Google primește conversiile înapoi și optimizează.

gtag la lansare + import offline pe click ID-urile salvate în bază — target CPA învață întâi pe lead-uri, apoi pe clienți plătitori (secțiunea 4). Stare: tag-ul web funcționează (283 conversii/30 zile); importul offline e construit, dar încă nu încarcă nimic (#452).

Azi → după implementare

Capabilitate14 iul (înainte)Ce trebuia să iasă (BN-1329 + BN-1565)Verificat 16 sept 2026
Sursă per lead (canal)Se vede, dar prin reconstrucție din session entry — fragilă (în mai a căzut la ~30%), 15% pierdută pe salturile interne bono↔desireSalvată în baza Desire la submit — nicio valoare NULL, niciodată domeniu intern✓ implementat 538 lead-uri în 30 zile, 100% cu sursă, 0 cu domeniu intern (bono.ro / desire.bono.ro).
Atribuire campanie / keyword (paid)Nu ajunge pe lead — 0 din 218 lead-uri (45 zile) au UTM pe evenimentPe fiecare lead: first + last + parcursul complet de sesiuni, cu utm_campaign/term și click ID-uri✓ implementat first_/last_ utm_source · medium · campaign · term · content, landing page, referrer, canal — pe fiecare lead. 257 din 538 lead-uri (48%) au un click plătit (cpc) în parcurs. Click ID-urile sunt în baza Desire (folosite în #452, #7570).
Completitudine lead-uri în PostHog~83% — evenimentul pleacă din browser (100% $lib=web)100% — eveniment din server, idempotent, număr identic cu baza pe orice zi✓ implementat 100% din server ($lib=posthog-node, 0 din browser). 1–14 sept: PostHog 234 lead-uri, baza Desire 234 — identic pe total; diferențele de ±1–3 pe zi vin din fusul orar al API-ului Desire (UTC), nu din lead-uri lipsă.
Istoric pre-lead (navigare)Legat pentru ~88% din lead-uriLegat prin identify + $set_once; sursa corectă garantată chiar și cu ad-block / refuz cookie✓ implementat 524 din 537 lead-uri (98%) au istoric de navigare legat; 289 (54%) au un click plătit în istoric. Consimțământ salvat pe lead: 462 din 538 „da”.
Raport zilnic pe sursePe reconstrucția din PostHogDin baza Desire (BN-1565): atribuire ponderată gata calculată, zi = Europe/Bucharest peste tot◐ parțial Raportul zilnic există și e folosit (linia „Google Ads — fără campanie” din #7570 a ieșit din el). Fusul orar nu e uniform: API-ul de analytics Desire grupează încă pe UTC.
Optimizare Google (target CPA)Fără semnal de conversie — Google licitează orbgtag + conversii offline pe click ID, inclusiv conversii de calitate (client plătitor, nu doar lead)◐ parțial Tag-ul web merge: „Lead Desire (web)” primary, 283 conversii în 30 zile — Google nu mai licitează orb. Conversiile offline nu curg încă: „Lead Desire (offline)” și „Client plătitor (offline)” există în cont, dar au 0 conversii (blocaj pe cheile de acces, #452; plata depinde de #455/#7312).

Referința „azi", verificată live în PostHog (proiect Bono + Start, 14 iul 2026): 218 desire_lead_created în 45 zile (google.com 47%, direct 20%, intern nerezolvat 15%); 1 204 pageview-uri cu UTM și 50 cu gclid în 30 zile — captura pe vizite funcționează, inclusiv pe campaniile gads-srl-search-evergreen și S_SRL_General; insight-urile D1/D2 și alertele de freshness există; /lp/ e în CMS cu trafic de test (taskurile #121 și #438 în curs).

2 · Ce se poate măsura (campanie, ad set, keyword…)

Fiecare nivel al unei campanii are „adresa" lui în UTM. Convenția e deja definită în strategia de măsurare — asta e harta completă a ce putem vedea la noi vs ce rămâne doar la Google.

NivelCum îl măsurăm noi (PostHog)ExempluLimite
Campanieutm_campaign — ID-ul nostru unic per testgads-search-exact-infiintare-srl—
Ad / creativă (ad set, asset group)utm_contentad-v1-pret, asset-group-v1Pe PMax, Google alege mixul de asset-uri — vezi grupul, nu combinația exactă
Keyword (doar Search)utm_term — cu inserția {keyword} Google pune automat cuvântul licitatinfiintare+srl+pretPrimești keyword-ul licitat, nu căutarea reală a userului (aia e doar în Search Terms, în Google Ads)
Audiență (Display/PMax/YouTube)utm_term refolosit pentru audiențăaud-remarketing-site—
Ad group / match type / deviceValueTrack în același Final URL suffix, după utm_id: adgroup={adgroupid}&matchtype={matchtype}&device={device} — în suffix-ul tuturor celor 4 campanii active (verificat 16 sept); salvarea în raw_query pe lead — de confirmat cu Adimatchtype=e (exact), b (broad), p (phrase)Parametri custom, nu UTM standard — se extrag din raw_query la analiză
Click individualgclid — ID-ul unic al clickului, pus automat de Googlegclid=Cj0KCQ…Cheia pentru a trimite conversii înapoi în Google (secțiunea 4)
ConversieEvenimente PostHog filtrate pe utm_campaign: desire_lead_created (formularul din ambele locuri — desire și bono.ro//lp/; pagina completării = pagepath), cta_clicked, vizite /lp/lead-uri per campanie, CR per campanieFuncționează din 17 aug: lead-ul poartă first_/last_utm_* (verificat 16 sept)

Ce NU vedem la noi (rămâne doar în Google Ads)

  • Cheltuiala — în PostHog nu există; raportul de decizie (ads.bonofintech.ro) o ia automat din Google Ads API și o pune lângă lead-urile din PostHog.
  • Impresii, CTR, impression share, ad rank — metrici pre-click; utile pentru diagnoza campaniei (Solo pe astea optimizează), dar nu pentru verdictul de cost/lead.
  • Search terms reale — doar în Google Ads; de acolo muți termenii câștigători pe exact/phrase match.

Formula de bază

Conversii per utm_campaign din PostHog ÷ cheltuială per campanie din Google Ads = cost/lead real. Google ne dă numărătorul lui (îl folosim doar pentru ranking relativ între teste), PostHog ne dă numărătorul de încredere.

3 · Test cu o campanie reală — cum se salvează UTM-ul?

Ce știm din testele deja făcute, plus protocolul de verificare cap-coadă pentru următoarea campanie.

Ce știam în iulie — și cum s-a rezolvat

  • Testul din iunie (o campanie cu UTM, una fără) a arătat că sursa și parametrii se salvează în ambele cazuri pe pageview — Google adaugă oricum gclid, iar PostHog îl prinde. Insight-urile de verificare există („Google Ads paid clicks — UTM check", „Slug-uri utm_campaign").
  • Confirmare live pe 14 iul: pageview-uri cu utm_campaign=gads-srl-search-evergreen (29), S_SRL_General (21) și 50 de pageview-uri cu gclid în ultimele 30 zile.
  • Unde se rupea (rezolvat 17 aug, BN-1329): UTM-ul trăia pe pageview și pe sesiune, dar nu ajungea pe evenimentul de lead (0/218 în iulie; 262/538 cu utm_campaign în sept — restul sunt lead-uri organice/directe). Formularul apare în două locuri, iar cele două căi au dificultăți diferite: (a) formularul chiar pe pagina de aterizare (bono.ro/infiintare-srl sau /lp/) — cazul simplu: UTM-ul e pe URL în momentul submit-ului, trebuie doar citit și salvat; (b) traseul către desire.bono.ro — cazul greu: saltul de subdomeniu pierde sursa dacă nu e cărată explicit. BN-1329 le acoperă pe ambele: valorile se pun în câmpuri ascunse și pleacă la submit din formular, nu din URL. Un caz-limită găsit ulterior de Teo — omul revine din Google organic și linkul spre desire pierdea campania plătită — a fost reparat pe 15 sept (#7570, PR #656).

Protocolul de test pentru următoarea campanie reală

Construiește URL-ul final cu UTM complet

După convenție: bono.ro/lp/infiintare-srl?utm_source=google&utm_medium=cpc&utm_campaign=gads-search-…&utm_id={campaignid}&utm_content=…&utm_term={keyword}. Adaugă și un gclid=TEST123 fals pentru testul manual.

Simulează userul în incognito — pe ambele căi de conversie

Calea A (principală pentru paid): click pe URL → completezi formularul direct pe pagina de aterizare (/lp/ sau bono.ro/infiintare-srl), cu email + telefon de test. Calea B: click pe URL → navighezi 2–3 pagini → treci pe desire.bono.ro → completezi acolo. Ambele trebuie să producă lead cu aceeași atribuire.

Verifică în PostHog (3 locuri)

(a) pageview-ul are toate cele 6 UTM + gclid; (b) sesiunea are $session_entry_utm_*; (c) evenimentul desire_lead_created al persoanei tale de test are first_*/last_* completate și $lib=posthog-node.

Verifică în baza Desire

Seturile first_* și last_* (source, channel, utm, click ID-uri, referrer, landing page) completate pe lead, plus lista de sesiuni din parcurs. Acceptance din ticket: Google → bono → desire → submit ⇒ first_source ȘI last_source = google/organic; sursa nu are voie să fie niciodată un domeniu intern; un lead cu consimțământ și ≥2 sesiuni are ≥2 intrări în listă.

Repetă scenariile rele

Cookie refuzat, ad-block pornit, intrare direct pe desire — toate produc un lead cu sursă ne-nulă (fără consimțământ: first_* = last_*, copia vizitei de conversie) și eveniment în PostHog cu $lib=posthog-node.

Abia apoi pornește bugetul — protocolul a fost rulat de Teo la relansare (#467, verificare incognito + PostHog, 13 aug)

Regula din strategie: nu dăm bani pe reclame până nu trece testul manual.

4 · Legătura PostHog ↔ Google — cum află Google rezultatele ca să optimizeze?

Două direcții separate, care nu trebuie confundate: noi măsurăm ca să decidem; Google primește conversii ca să optimizeze (Smart Bidding / target CPA licitează orb fără semnal de conversie).

Important: PostHog nu comunică nimic către Google de la sine. Dacă nu-i trimitem noi conversiile, Google optimizează pe ce măsoară el singur (tag-ul lui) sau pe nimic.
MecanismCum funcționeazăPro / ContraVerdict
A. Tag Google Ads (gtag) pe siteSnippet-ul Google măsoară conversia direct în browser, pe evenimentul de leadStandard, rapid de pus; dar suferă de aceleași pierderi ca browserul (ad-block, consimțământ) și dublează măsurarealive din 3 aug „Lead Desire (web)”, primary — 283 conversii în 30 zile
B. Import de conversii offline pe click ID din baza noastrăBN-1329/T1 salvează click ID-urile (gclid, gbraid, wbraid + fbclid, msclkid, ttclid, li_fat_id) din orice vizită din parcurs — explicit „pentru offline conversions în Google Ads". Încărcăm conversiile în Google Ads (API sau manual), Google leagă conversia de click și învațăCel mai robust și aliniat cu „sursa de adevăr = baza noastră"; permite și conversii de calitate (client plătitor, nu doar lead) — evită capcana semnalată la Solo (Google optimizează pe cine se înscrie, nu pe cine devine client)construit, nu curge „Lead Desire (offline)” + „Client plătitor (offline)” există în cont, 0 conversii (#452, #7312)
C. Destinația PostHog „Google Ads Conversions" (CDP)PostHog trimite automat evenimentele de conversie cu gclid către o conversion action din Google AdsAutomatizează varianta B fără cod propriu; dar e marcată experimentală, fără suport oficial, cere Enhanced Conversions + acces APIde testat
D. GA4Google Analytics legat de Google Ads poate importa conversiiSolo îl folosește ca arbitru secundar; la noi ar adăuga un al treilea sistem de măsură fără să rezolve nimic ce nu rezolvă A+Bnu acum

Stare 16 sept: varianta A e live și e singurul semnal pe care Google optimizează; varianta B e construită (job la 6h, consimțământ de marketing salvat, MCC + developer token active), dar blocată pe mutarea cheilor de acces — nicio conversie offline încărcată încă. Decizia din 1 sept (#452, #7312): „Lead Desire (web)” rămâne primary până curg conversiile offline; apoi inversăm. Conversiile din fluxul de înființare („Cont Start (web)”, „Plată 152 lei (web)”) sunt create ca secondary, fără valoare. Recomandarea din iulie (rămâne valabilă): la lansarea campaniilor punem gtag pe evenimentul de lead (varianta A) ca Google să poată optimiza imediat, și construim în paralel importul offline pe click ID (varianta B, după BN-1329) — care devine sursa „de calitate" pe care o hrănim cu conversii reale, inclusiv plăți. Bonus din BN-1329/T2: evenimentul server-side poartă atribuirea cu aceleași nume de câmpuri ca în bază (first_*/last_* + lista ponderată), deci raportarea din PostHog se potrivește 1:1 cu baza. Discrepanțele dintre Google Ads și datele noastre sunt normale, dar trebuie să rămână mici — le urmărim explicit în raport (secțiunea 6). Consimțământul alimentează și Google Consent Mode v2 (ticket separat, notat în BN-1329/T3).

5 · Ce fac alții? Cum măsoară Solo?

Din minuta „Google Ads Solo–Bono" (9 iulie 2026) + analiza concurenței (iunie 2026).

Cum măsoară Solo

  • Optimizează pe datele din Google Ads — acolo văd conversiile pe campanie. Compară cu GA4 și cu un dashboard intern construit pe ListenLayer. Regula lor: discrepanțele Google ↔ Analytics sunt normale, dar trebuie să rămână mici.
  • Au încercat PostHog și l-au găsit greu: „are potențial, dar e complex și cere multe setări"; setup-ul automat nu le acoperă nevoile; au problemă cu user ID diferit între platforme. (Noi am trecut deja prin setările astea — e un avantaj câștigat.)
  • Definiții: lead = cont creat (email + parolă); conversie = a trecut de payment. Costuri: ~150 Lei/lead, ~300 Lei/client; Google Ads aduce 13–19% din totalul canalelor; lead→client ~50–56%.
  • Structură: Search evergreen pe intenții (înființare, contabilitate, tool-uri, calculatoare) + PMax; spend mutat de la 20/80 spre 50/50 pentru că Search prinde mai bine high-intent-ul. Broad match ca plasă largă → termenii care convertesc se mută pe phrase/exact. 2 ads per ad group, keywords la nivel de ad group.
  • Nu folosesc pagini noindex — paginile lor dedicate (medici, IT, CAEN) sunt indexate. Testele fine le fac abia după ce structura de bază e stabilă.
  • Atenționare de la ei, direct relevantă pentru Desire: Google învață pe semnalul setat ca obiectiv. Dacă fluxul se oprește la înscrierea pe listă, Google optimizează pe profilul celor care se înscriu — nu neapărat al celor care devin clienți.

Restul pieței (pe scurt — detalii în Ce fac alții)

  • Keez — benchmark-ul nostru: pagini lp- noindex dedicate reclamelor, formular de lead, promovează și înființarea și contabilitatea (~200 reclame).
  • StartCo — zeci de variante pe aceeași pagină; cel mai bun activ paid = calculatorul (~200 reclame Google + ~140 Meta).
  • Solo — cel mai agresiv (~400 reclame), volum pe PFA și calculatoare, reclame pe persona.
  • Concluzia transversală: nimeni nu câștigă din CPC mai mic (toți ~3–5 Lei); diferența o fac landing page-ul, volumul de creative și testarea la scară.
Diferența de filozofie: Solo decide pe datele Google și verifică cu GA4. Noi decidem pe datele noastre (PostHog + baza Desire) și îi dăm lui Google conversii ca să optimizeze. Suntem mai stricți cu bună știință — istoricul nostru arată de ce: PMax părea câștigător la 19,95 Lei/lead, dar cu CR de 2,45% (de 4–6 ori sub Search) — exact genul de „victorie" care trebuie validată în datele noastre înainte să scalăm.

6 · Cum arată un raport de campanie? (start with the end in mind)

Trei niveluri de raportare, de la puls zilnic la verdict de test. Toate trei există azi: raportul zilnic pe e-mail (BN-1565), raportul de decizie al lui Teo (nivelul 2, cu Δ Google vs PostHog calculat) și fișele testelor din Planul de testare 2026 (nivelul 3). Tabelele de mai jos sunt modelele din iulie, cu cifre ilustrative.

Nivel 1 — Raportul zilnic de lead-uri (BN-1565, livrat)

„Lead-uri noi pe lista de așteptare Desire": lead-uri ieri / MTD / medie zilnică, defalcate pe surse — inclusiv campaniile Google Ads separat, cu cuvintele cheie. E ticketul BN-1565 (raport zilnic pe e-mail), livrat după BN-1329 — din el a ieșit, de exemplu, linia „Google Ads — fără campanie” care a dus la #7570. Sursa fiecărui lead se citește din baza Desire, cu regula de atribuire decisă pe 10 iulie: weighted average pe sesiunile din parcurs, cu excluderea sesiunilor Direct (mai puțin cazul în care Direct e prima sesiune) — ex.: Google Ads → Direct ⇒ Google Ads 100%; Direct → Google Organic ⇒ 50/50. Serverul salvează lista {sursă, pondere} gata calculată la submit, iar raportul doar însumează ponderile — fără logică de atribuire în raport. „Ziua" = 00:00–24:00 Europe/Bucharest, identică în bază, PostHog și raport (BN-1329/T4) — parțial: API-ul de analytics din Desire grupează încă pe UTC (diferențe de ±1–3 lead-uri pe zi față de PostHog, total identic).

Nivel 2 — Raportul săptămânal de campanie (tabelul de decizie)

Campanie (utm_campaign)SpendClick-uri (Google)Vizite LP (PostHog)Lead-uri (PostHog)CRCost/lead (PostHog)Cost/lead (Google)ΔDecizie
gads-search-broad-tcpa-srl700 Lei2101952110,8%33 Lei29 Lei+14%scalează
gads-pmax-srl-assets-v1700 Lei61054091,7%78 Lei21 Lei+270%stop — conversiile Google nu se confirmă
gads-search-exact-srl-pret350 Lei8074810,8%44 Lei41 Lei+7%continuă — sub 100 vizite, prelungim

Rânduri ilustrative (din iulie); versiunea reală, cu cifrele la zi, e raportul de decizie. Coloana Δ (discrepanța Google vs PostHog) e verificarea de sănătate: mică = tracking ok; mare = exact cazul PMax de mai sus, nu scala înainte să înțelegi de ce.

  • Regulile de decizie (din strategie): winner clar la cost/lead de 2 ori+ mai bun → mutăm bugetul; 0 conversii sau cost de 5 ori+ → stop; sub 100 vizite/campanie → prelungim; CPA peste 50 Lei 5 zile consecutive → oprim/revenim la buget.
  • Referința istorică: baseline validat 32–40 Lei/lead pe Search (Broad+tCPA = 32,58 Lei, media contului 37,6 Lei pe 663 conversii).
  • Sursa datelor: lead-uri + CR din PostHog (insight-ul D2 „Campaign performance — sesiuni × lead-uri per UTM" există deja); spend din Google Ads — în raportul de decizie vine automat prin API.

Nivel 2b — Drill-down în campanie: keywords, ad-uri, ad groups

Tabelul săptămânal rămâne la nivel de campanie tocmai pentru că fiecare test are utm_campaign propriu — coloana „Campanie" spune direct ce am testat, nu e nevoie de o listă separată de teste. Detaliile se deschid în interiorul campaniei, din aceleași date:

  • Keyword — breakdown pe utm_term (doar Search, prin inserția {keyword}): care cuvânt licitat aduce lead-uri și la ce cost.
  • Ad / creativă — breakdown pe utm_content: care variantă de text/asset convertește.
  • Ad group și match type — nu au parametru UTM standard, dar Google le expune prin ValueTrack: le adăugăm în același Final URL suffix, după utm_id — adgroup={adgroupid}&matchtype={matchtype}&device={device}. Ajung în query string, iar BN-1329 salvează raw_query pe fiecare lead — deci le putem analiza per lead, fără setup suplimentar.
  • Căutările reale (search terms) rămân doar în Google Ads — de acolo muți termenii câștigători pe exact/phrase și scoți negativele (practica standard, confirmată și de Solo).

Simulare — cum „se deschide" o campanie, pas cu pas

Pornim de la rândul câștigător din tabelul săptămânal și coborâm în el. Mecanica e mereu aceeași: fixezi filtrul utm_campaign și schimbi breakdown-ul — trei click-uri în PostHog pentru orice nivel.

Campanie (utm_campaign)SpendVizite LPLead-uriCRCost/lead
gads-search-broad-tcpa-srl ▼ (o deschidem mai jos)700 Lei1952110,8%33 Lei

1 · Deschidere pe keyword — în PostHog: Trends → desire_lead_created → filtru utm_campaign = gads-search-broad-tcpa-srl → breakdown utm_term (vizitele: același filtru pe $pageview):

Keyword (utm_term)Spend (Google)Vizite LPLead-uriCRCost/lead
infiintare+srl380 Lei1181210,2%32 Lei
deschidere+firma210 Lei52611,5%35 Lei
infiintare+firma+online110 Lei25312,0%37 Lei

2 · Deschidere pe ad / creativă — același filtru, breakdown utm_content:

Ad (utm_content)Vizite LPLead-uriCRCe înseamnă
ad-v1-pret (mesaj pe preț)1081312,0%mesajul pe preț convertește mai bine → candidat de păstrat
ad-v2-rapid (mesaj pe viteză)8789,2%mai slab → de rescris sau de înlocuit la următoarea iterație

3 · Deschidere pe ad group / match type / device — din parametrii ValueTrack (adgroup, matchtype, device), prezenți în suffix-ul tuturor campaniilor; pe vizite se citesc din $current_url, pe lead din raw_query (de confirmat că e salvat):

Ad groupDeviceVizite LPLead-uriCR
ag-infiintare-srlmobile8989,0%
ag-infiintare-srldesktop54814,8%
ag-costuri-firmamobile + desktop5259,6%

Citirea: desktop convertește aproape dublu față de mobile pe același ad group → ipoteză de verificat pe LP mobil (viteză? formular?) înainte să ajustăm bid-urile pe device.

4 · Ultimul nivel — lead-urile individuale — fiecare lead din bază are atribuirea completă (BN-1329); în PostHog, persoana lead-ului are session recording-ul și tot parcursul:

LeadKeywordAdPrima paginăParcurs
lead_a3f…infiintare+srlad-v1-pret/lp/infiintare-srl1 sesiune — a completat direct pe LP
lead_b81…deschidere+firmaad-v2-rapid/lp/infiintare-srl2 sesiuni — a revenit a doua zi din Direct (ponderare: Google Ads 100%)

Cifrele sunt ilustrative, consecvente cu rândul de campanie de mai sus (195 vizite, 21 lead-uri). Spend-ul per keyword vine din Google Ads (acolo se vede cheltuiala pe fiecare nivel); vizitele și lead-urile vin din PostHog — respectiv direct din baza Desire (BN-1329).

Nivel 3 — Raportul per test · demo: Broad match vs Exact match — testul real e T2 (19 aug → verdict 30 sept), fișa în Planul de testare 2026

La finalul fiecărui test (minim 14 zile, o singură variabilă, buget egal) scriem documentul de concluzie. Așa ar arăta, cu cifre ilustrative, pentru testul din strategie:

Setup-ul testului
ÎntrebareaBroad match aduce lead-uri mai ieftine decât exact match pe „înființare SRL", sau doar click-uri irelevante?
Variabila unicăMatch type. Tot restul identic: aceeași pagină (/lp/infiintare-srl), același text de ad, același buget, aceeași perioadă.
VarianteA: utm_campaign=gads-search-broad-infiintare-srl · B: utm_campaign=gads-search-exact-infiintare-srl
Perioadă / buget14 zile · 700 Lei / variantă · KPI principal: cost/lead din PostHog · prag de oprire: CPA peste 50 Lei 5 zile consecutive
VariantăSpendClick-uri (Google)Vizite LP (PostHog)Lead-uri (PostHog)CRCost/lead (PostHog)Cost/lead (Google)Δ
A · Broad match700 Lei2182012110,4%33 Lei30 Lei+10%
B · Exact match700 Lei1381291612,4%44 Lei41 Lei+7%

Drill-down keywords (varianta A, breakdown pe utm_term în PostHog):

Keyword licitat (utm_term)Vizite LPLead-uriCRCost/lead
infiintare+srl1321511,4%31 Lei
deschidere+firma4648,7%39 Lei
infiintare+firma+online2328,7%51 Lei

Plus, din Google Ads → Search terms (doar acolo se văd căutările reale pe care le-a prins broad-ul): „cât costă să îți faci firmă" a adus 2 lead-uri la ~25 Lei → se adaugă ca exact match; „înființare ONG" a consumat click-uri fără niciun lead → negative keyword.

Verdict: Broad match câștigă la cost/lead (33 vs 44 Lei, −25%), exact match câștigă la rata de conversie (12,4% vs 10,4%) — intenție mai precisă, click mai scump. Ambele sub pragul de 50 Lei, discrepanțe Google↔PostHog mici (+10%/+7% — tracking sănătos). Decizie: bugetul merge pe broad; termenul câștigător din search terms trece pe exact; negativele se adaugă. Următorul test: broad + target CPA vs broad + maximize conversions. Consistență istorică: confirmă Q2 (Broad + tCPA = 32,58 Lei, cel mai bun cost pe Search din tot istoricul contului).

Modelul de tabel — de copiat la fiecare test nou

Același format ca demo-ul de mai sus, gol. Se completează o dată la setup (primul tabel) și o dată la verdict (restul).

Setup — se completează înainte de pornire
Test #numele testului · data start – data stop (minim 14 zile)
Întrebareace vrem să aflăm, într-o propoziție
Variabila unicăsingurul lucru care diferă între variante — tot restul identic (pagină, buget, perioadă)
VarianteA: utm_campaign=… · B: utm_campaign=…
Buget… Lei / variantă — egal între variante
KPI principalCost/lead din PostHog · prag de oprire: CPA peste 50 Lei 5 zile consecutive
VariantăSpendClick-uri (Google)Vizite LP (PostHog)Lead-uri (PostHog)CRCost/lead (PostHog)Cost/lead (Google)Δ
A · ………………………
B · ………………………

Formule: CR = lead-uri ÷ vizite LP · Cost/lead (PostHog) = spend ÷ lead-uri PostHog · Δ = diferența cost/lead PostHog vs Google (mică = tracking sănătos; mare = investighează înainte de decizie). Sursa: lead-uri + vizite din PostHog per utm_campaign; spend + click-uri din Google Ads.

Drill-down (opțional) — keyword / ad / ad groupVizite LPLead-uriCRCost/lead
utm_term=……………
utm_content=……………
Verdict — se completează la final
Câștigător + de cevarianta X, cost/lead … vs … (−…%)
Din search termstermeni de mutat pe exact/phrase · termeni de pus la negative
Deciziescalează / continuă / stop — după regulile de decizie (câștig de 2 ori+ → buget; 0 conversii sau cost de 5 ori+ → stop; sub 100 vizite → prelungim)
Următorul testce testăm mai departe, pornind de la câștigător

Din 10 sept, fișa fiecărui test (ce vrem să învățăm · cum · când · status · regula de verdict · decizii) trăiește în Planul de testare 2026; concluzia se scrie pe taskul testului și în tab-ul „Teste” din raportul de decizie, decizia o scrie Alexandra.

Planul de acțiune din iulie — stare la 16 septembrie 2026

În ordinea dependențelor. Primele două sunt condiția ca orice campanie pornită să producă date de încredere.

BN-1329 — „Salvare Leads + Sursă în BD" (T1–T5) — implementat, live din 17 august.

Ticketul consolidat care repară tot lanțul: T1 — atribuire first-touch + last-touch + parcursul complet de sesiuni, cu toate click ID-urile, salvate în bază la submit; UTM cărat pe linkul bono→desire (principal, fără consimțământ) + cookie .bono.ro set-once (supliment); sursa niciodată domeniu intern. T2 — desire_lead_created doar din server ($insert_id idempotent, IP-ul real al userului), cu identify pe client + $set_once din server ca istoricul pre-lead să rămână legat (iulie ~88% → septembrie 98%). T3 — anonymous mode curat + opt-out real. T4 — ziua = Europe/Bucharest peste tot. T5 — sursa afișată în Desire. PR parțial pentru T2 există deja (proxy-ul de IP).

✓ live · verificat 16 sept: 538 lead-uri, 100% cu sursă, 100% din server rămâne: T4 fus orar — API-ul Desire e pe UTC

UTM pe toate campaniile noi, după convenție + inserția {keyword}.

Fiecare test primește utm_campaign unic la setup. Checklist-ul de verificare manuală (secțiunea 3) înainte de buget. Tagging-ul pe linkuri trebuie menținut și pentru AI (ChatGPT/Perplexity nu trimit referrer — altfel apar ca „direct").

✓ pe toate cele 4 campanii active (Broad, T3, Exact, DSA) — suffix complet cu {keyword}, {creative}, adgroup, matchtype, device · registru UTM ținut de Teo

Semnal de conversie către Google: gtag la lansare, apoi import offline pe click ID.

Fără asta, target CPA n-are din ce învăța. Click ID-urile vin din BN-1329; de decis între importul propriu și destinația PostHog (experimentală) — de discutat și cu Mircea (Solo), care s-a oferit să explice setup-ul lor. Legat: Google Consent Mode v2 (ticket separat).

◐ gtag live (283 conv/30 zile) import offline construit, 0 conversii — #452 (Adi), #7312 plata după #455

Paginile /lp/ noindex, cap-coadă.

Task #121 (realizare LP-uri) + #438 (header/footer simplificat) — livrate; /lp/infiintare-srl-gratuit e destinația tuturor reclamelor din 3 aug; /lp/contabilitate-srl live din 31 iul. Verificare noindex (site: + Search Console, nu blocate în robots.txt) + măsurare completă înainte de trafic plătit. Structura recomandată: Structura LP.

✓ live · noindex păstrat · 3 pagini /lp/ pe meserii urmează (T25, oct)

Raportul de campanie.

Nivelul 1 (zilnic pe e-mail) = BN-1565, livrat. Nivelul 2 = raportul de decizie al lui Teo (ads.bonofintech.ro), cu spend din Google Ads API, lead-uri din PostHog și baza Desire, Δ și regulile de decizie evaluate în pagină. Nivelul 3 = fișele din Planul de testare 2026; rămâne de construit tab-ul „Teste” în raport (#7722, partea 3).

✓ nivelurile 1 și 2 live rămâne tab-ul „Teste” (#7722)

Surse: verificare live PostHog 14 iul 2026 și reverificare 16 sept 2026 (proiect Bono + Start, 30 zile; baza Desire prin API; contul Google Ads 885-992-9478) · Jira BN-1329 „Salvare Leads + Sursă în BD" (T1–T5) și BN-1565 „Raport zilnic pe e-mail" · „Strategie Măsurare Campanii Google Ads" (28 iun) · „Teste Google Ads — Rezultate" (iun) · „Analiza Concurenței — Google & Meta Ads" (iun) · minuta „Google Ads Solo–Bono" (9 iul, Drive) · „Atribuirea lead-urilor desire — problemă, soluție, status" (8 iun) · „Raport zilnic Desire — mockup" · docs PostHog (destinația Google Ads Conversions) · task #71 · Campanii Paid.