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 · 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

Odată implementate BN-1329 „Salvare Leads + Sursă în BD" (T1–T5) și BN-1565 (raportul zilnic), vom avea exact ce ne trebuie pentru paid: fiecare lead salvat în baza Desire cu atribuirea completă — canal, campanie, keyword și click ID, first-touch + last-touch + parcursul de sesiuni —, toate lead-urile în PostHog 1:1 cu baza (evenimentul pleacă din server), raport zilnic ponderat direct din bază și conversii trimise înapoi în Google prin click ID, ca target CPA să aibă din ce învăța. În jurul acestui sistem mai sunt de făcut: UTM-uri după convenție pe fiecare campanie, LP-urile /lp/, gtag + importul offline și raportul săptămânal de decizie. Referința „azi": sursa pe canal se vede deja, dar atribuirea pe campanie nu ajunge pe lead, evenimentul pleacă din browser (~17% pierdute) și sursa nu e în bază — exact golurile pe care le închide BN-1329.

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 · Current reality PostHog — și, mai important, ce vom avea

Pe scurt, azi: sursa pe canal per lead se vede (pe ea se bazează raportul zilnic), UTM-urile se capturează pe vizite, insight-urile D1/D2 există. Ce nu avem încă: atribuirea pe campanie/keyword pe lead, evenimentul de lead trimis din server și sursa salvată în baza Desire. Toate trei vin cu BN-1329 + BN-1565 — așa că mai jos e sistemul țintă, iar starea de azi rămâne doar ca referință.

Sistemul țintă — fluxul de măsurare cap-coadă (după 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).

Azi → după implementare

CapabilitateAzi (verificat live 14 iul)După BN-1329 + BN-1565
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
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
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
Istoric pre-lead (navigare)Legat pentru ~88% din lead-uriLegat prin identify + $set_once; sursa corectă garantată chiar și cu ad-block / refuz cookie
Raport zilnic pe sursePe reconstrucția din PostHogDin baza Desire (BN-1565): atribuire ponderată gata calculată, zi = Europe/Bucharest peste tot
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)

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} — ajung în query string, salvate per lead în raw_query (BN-1329)matchtype=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ă abia când lead-ul „moștenește" UTM-ul (azi nu — vezi secțiunea 1)

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

  • Cheltuiala — se aduce manual săptămânal (sau automat: PostHog are sursă de date warehouse „Google Ads" care sincronizează spend-ul — de evaluat la setup).
  • 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 știm deja

  • 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 azi: 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 rupe: UTM-ul trăiește pe pageview și pe sesiune, dar nu ajunge pe evenimentul de lead (0/218). 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.

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 — aici azi va fi gol: exact ce trebuie să repare T1/T2.

Verifică în baza Desire

După BN-1329/T1: 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 — după BN-1329 toate trebuie să 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

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ăsurareapornim cu el la lansare
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)ținta pe termen mediu
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

Recomandare: 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. Primul există deja ca mockup („Raport zilnic Desire — mockup", în folderul Metrici Bono) și devine generabil automat imediat după T1.

Nivel 1 — Raportul zilnic de lead-uri (BN-1565, există ca mockup)

„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), blocat de BN-1329. 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).

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. 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, manual sau prin sursa data-warehouse.

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_idadgroup={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 / devicedin parametrii ValueTrack (adgroup, matchtype, device), azi extras din $current_url pe vizite, iar după BN-1329 direct din raw_query salvat pe fiecare lead:

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 individualedupă BN-1329, fiecare lead din bază are atribuirea completă; î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, după BN-1329, direct din baza Desire.

Nivel 3 — Raportul per test · demo: Broad match vs Exact match

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

Modelul documentului per test rămâne „Teste Google Ads — Rezultate" — fiecare test își adaugă acolo rândul lui, ca istoricul să rămână într-un singur loc.

Ce lipsește ca totul să funcționeze — plan de acțiune

Î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) — în curs de implementare.

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. T2desire_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 (azi ~88%). 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).

IT · Jira BN-1329 · To Do

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").

Alexandra + Teo · la setup campanii

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).

Teo + IT · după BN-1329

Paginile /lp/ noindex, cap-coadă.

Task #121 (realizare LP-uri) + #438 (header/footer simplificat) în curs. Verificare noindex (site: + Search Console, nu blocate în robots.txt) + măsurare completă înainte de trafic plătit. Structura recomandată: Structura LP.

Alexandra (conținut) + IT (pagini) · în curs

Raportul de campanie.

Nivelul 2 (săptămânal) se poate construi de azi pe insight-urile D2 existente + spend manual. Nivelul 1 (zilnic pe e-mail, după mockup) = BN-1565 — blocat de BN-1329; raportul doar însumează ponderile precalculate de server.

Alexandra · mockup gata · Jira BN-1565

Surse: verificare live PostHog 14 iul 2026 (proiect Bono + Start) · 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.