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.
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
| Capabilitate | 14 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↔desire | Salvată î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 eveniment | Pe 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-uri | Legat 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 surse | Pe reconstrucția din PostHog | Din 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ă orb | gtag + 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.
| Nivel | Cum îl măsurăm noi (PostHog) | Exemplu | Limite |
|---|---|---|---|
| Campanie | utm_campaign — ID-ul nostru unic per test | gads-search-exact-infiintare-srl | — |
| Ad / creativă (ad set, asset group) | utm_content | ad-v1-pret, asset-group-v1 | Pe 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 licitat | infiintare+srl+pret | Primeș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 / device | ValueTrack î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 Adi | matchtype=e (exact), b (broad), p (phrase) | Parametri custom, nu UTM standard — se extrag din raw_query la analiză |
| Click individual | gclid — ID-ul unic al clickului, pus automat de Google | gclid=Cj0KCQ… | Cheia pentru a trimite conversii înapoi în Google (secțiunea 4) |
| Conversie | Evenimente 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 campanie | Funcț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 cugclidî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).
| Mecanism | Cum funcționează | Pro / Contra | Verdict |
|---|---|---|---|
| A. Tag Google Ads (gtag) pe site | Snippet-ul Google măsoară conversia direct în browser, pe evenimentul de lead | Standard, rapid de pus; dar suferă de aceleași pierderi ca browserul (ad-block, consimțământ) și dublează măsurarea | live 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 Ads | Automatizează varianta B fără cod propriu; dar e marcată experimentală, fără suport oficial, cere Enhanced Conversions + acces API | de testat |
| D. GA4 | Google Analytics legat de Google Ads poate importa conversii | Solo î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+B | nu 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ă.
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) | Spend | Click-uri (Google) | Vizite LP (PostHog) | Lead-uri (PostHog) | CR | Cost/lead (PostHog) | Cost/lead (Google) | Δ | Decizie |
|---|---|---|---|---|---|---|---|---|---|
gads-search-broad-tcpa-srl | 700 Lei | 210 | 195 | 21 | 10,8% | 33 Lei | 29 Lei | +14% | scalează |
gads-pmax-srl-assets-v1 | 700 Lei | 610 | 540 | 9 | 1,7% | 78 Lei | 21 Lei | +270% | stop — conversiile Google nu se confirmă |
gads-search-exact-srl-pret | 350 Lei | 80 | 74 | 8 | 10,8% | 44 Lei | 41 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_querype 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) | Spend | Vizite LP | Lead-uri | CR | Cost/lead |
|---|---|---|---|---|---|
gads-search-broad-tcpa-srl ▼ (o deschidem mai jos) | 700 Lei | 195 | 21 | 10,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 LP | Lead-uri | CR | Cost/lead |
|---|---|---|---|---|---|
infiintare+srl | 380 Lei | 118 | 12 | 10,2% | 32 Lei |
deschidere+firma | 210 Lei | 52 | 6 | 11,5% | 35 Lei |
infiintare+firma+online | 110 Lei | 25 | 3 | 12,0% | 37 Lei |
2 · Deschidere pe ad / creativă — același filtru, breakdown utm_content:
| Ad (utm_content) | Vizite LP | Lead-uri | CR | Ce înseamnă |
|---|---|---|---|---|
ad-v1-pret (mesaj pe preț) | 108 | 13 | 12,0% | mesajul pe preț convertește mai bine → candidat de păstrat |
ad-v2-rapid (mesaj pe viteză) | 87 | 8 | 9,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 group | Device | Vizite LP | Lead-uri | CR |
|---|---|---|---|---|
ag-infiintare-srl | mobile | 89 | 8 | 9,0% |
ag-infiintare-srl | desktop | 54 | 8 | 14,8% |
ag-costuri-firma | mobile + desktop | 52 | 5 | 9,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:
| Lead | Keyword | Ad | Prima pagină | Parcurs |
|---|---|---|---|---|
| lead_a3f… | infiintare+srl | ad-v1-pret | /lp/infiintare-srl | 1 sesiune — a completat direct pe LP |
| lead_b81… | deschidere+firma | ad-v2-rapid | /lp/infiintare-srl | 2 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 | |
|---|---|
| Întrebarea | Broad 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ă. |
| Variante | A: utm_campaign=gads-search-broad-infiintare-srl · B: utm_campaign=gads-search-exact-infiintare-srl |
| Perioadă / buget | 14 zile · 700 Lei / variantă · KPI principal: cost/lead din PostHog · prag de oprire: CPA peste 50 Lei 5 zile consecutive |
| Variantă | Spend | Click-uri (Google) | Vizite LP (PostHog) | Lead-uri (PostHog) | CR | Cost/lead (PostHog) | Cost/lead (Google) | Δ |
|---|---|---|---|---|---|---|---|---|
| A · Broad match | 700 Lei | 218 | 201 | 21 | 10,4% | 33 Lei | 30 Lei | +10% |
| B · Exact match | 700 Lei | 138 | 129 | 16 | 12,4% | 44 Lei | 41 Lei | +7% |
Drill-down keywords (varianta A, breakdown pe utm_term în PostHog):
| Keyword licitat (utm_term) | Vizite LP | Lead-uri | CR | Cost/lead |
|---|---|---|---|---|
infiintare+srl | 132 | 15 | 11,4% | 31 Lei |
deschidere+firma | 46 | 4 | 8,7% | 39 Lei |
infiintare+firma+online | 23 | 2 | 8,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.
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) |
| Întrebarea | ce vrem să aflăm, într-o propoziție |
| Variabila unică | singurul lucru care diferă între variante — tot restul identic (pagină, buget, perioadă) |
| Variante | A: utm_campaign=… · B: utm_campaign=… |
| Buget | … Lei / variantă — egal între variante |
| KPI principal | Cost/lead din PostHog · prag de oprire: CPA peste 50 Lei 5 zile consecutive |
| Variantă | Spend | Click-uri (Google) | Vizite LP (PostHog) | Lead-uri (PostHog) | CR | Cost/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 group | Vizite LP | Lead-uri | CR | Cost/lead |
|---|---|---|---|---|
utm_term=… | … | … | … | … |
utm_content=… | … | … | … | … |
| Verdict — se completează la final | |
|---|---|
| Câștigător + de ce | varianta X, cost/lead … vs … (−…%) |
| Din search terms | termeni de mutat pe exact/phrase · termeni de pus la negative |
| Decizie | scalează / 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 test | ce 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).
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").
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ă #455Paginile /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.