ColdEmail átadás — kampányindítás

Minden, ami az új cold-email kampány elindításához kell: az előző kampány valódi, élő beállításai, a személyre szabás pontos működése, a kötelező ellenőrző kapuk, és a kézi minőségellenőrzés, amit indítás előtt le kell futtatnod.

Dani részére · Mátyástól · 2026-07-21 · élő Instantly adatok: 2026-07-21T14:20:25Z

Minden a GitHub branchen van. A Linux szerverhez semmilyen hozzáférés nem kell — nem is fogsz hozzányúlni.

Branch megnyitása a GitHubon Meghívó elfogadása
git clone https://github.com/matt-clientsflow/coldemail.git
cd coldemail
git checkout handoff/daniel-campaign-launch
cd handoff/daniel-2026-07-21

A repo privát. A dani-clientsflow fiókra kiment az írási jogú meghívó — előbb fogadd el. A credentials.md soha nincs a repóban: azt Mátyás küldi külön, és a repo gyökerébe kell tenned.

Mi van ezen az oldalon
  1. A személyre szabás — hogyan működik valójában
  2. Az előző kampány élő szövege és számai
  3. A pipeline: nyers listától az indításig
  4. A két kötelező kapu
  5. Kézi minőségellenőrzés indítás előtt
  6. Kész promptok Claude Code-hoz
  7. A felhős lead-értékelő futás állapota
  8. Amit nem szabad felpuhítani

1 · A személyre szabás — hogyan működik valójában

Ez a legfontosabb rész, és sokkal egyszerűbb, mint amit a repo dokumentációja sugall. Élő Instantly lead-adatokból visszafejtve: két mező, mindkettő mechanikus, mindkettő abból épül, hogy a cég mit csinál. Semmilyen AI által írt egyedi nyitómondat nincs benne — ez házirend, mert az a legárulkodóbb spam-jel.

MezőMintaValódi élő példák
greeting„Szia" ha nincs név · „Kedves <Keresztnév>" ha van Szia · Kedves Richárd · Kedves Szabolcs
personalisation1a tevékenység -val/-vel raggal burkolással · műanyag fröccsöntéssel · redőnyjavítással és -szereléssel
personalisation2„a/az <szakma> céged / vállalkozásod" a burkoló céged · az ablakbeépítő céged · a késkészítő vállalkozásod

A mondatba illesztve így néz ki, amit a címzett kap:

{{greeting}},

Láttam, hogy {{personalisation1}} foglalkoztok, és feltűnt néhány dolog, amivel profibb hatást és több megrendelést érhetnétek el.
{{greeting}},

Láttam {{personalisation2}} és van néhány észrevételem az oldalatokon, amivel több munkalehetőséget tudtok szerezni.

A nyelvtani eset a lényeg. Ha a rag hibás, a mondat eltörik — és az olvasó azonnal látja, hogy gépi. A personalisation1 mindig -val/-vel ragos, a personalisation2 mindig birtokos szerkezet. Ez a teljes trükk.

Tegeződés. Az élő kampány végig tegez („Szia", „küldd el a számod"). A repo name_guard.py szkriptje viszont magázó Tisztelt Vezetéknév Keresztnév! megszólítást állít elő. Döntsd el tudatosan, melyiket akarod, és igazítsd össze a kettőt — különben fél lista tegez, fél lista magáz.

2 · Az előző kampány élő szövege és számai

4 kampány (V1–V4), „2026-jun-kert-meden-szauna-stb", magyar építőipari kkv-k. A teljes, szó szerinti szövegek — minden lépés, minden variáns — a branch 02_LIVE_CAMPAIGNS.md fájljában vannak. A lényeg:

959elküldött email
48válasz
5,0%átlag válaszarány
12lehetőség
KampányKüldveVálaszVálaszarányLehetőségÁllapot
V1262124,58%5lezárva
V2240104,17%1lezárva
V3230125,22%3lezárva
V4227146,17%3lezárva

V4 vitte a legjobb számot — ez egyben a legrövidebb, legdirektebb szöveg is. De a korábbi kampányok ugyanebben a fiókban jóval jobban mentek: arny-szaun-kerit-meden-2026.04.20._v1 10,12% 573 küldésen, boti_kerteszek_2026.03.10._v2 11,11%. A júniusi széria nagyjából felezte az áprilisi válaszarányt. Érdemes megérteni, mielőtt szó szerint átemeled.

Egyik kampány sem érte el a döntési küszöböt. Házirend: variánsonként 500–1000 küldés alatt nincs győztes. 227–262 küldésnél ezek a számok irányt mutatnak, nem döntenek el semmit.

Három hiba az élő beállításban — ezeket ne másold

A tárgymező spintax. Mind a négy kampány ugyanazt a beágyazott {{RANDOM ...}} tárgymező-pörgetőt használja. A házirend viszont külön, diszkrét tárgymező-variánsokat ír elő, mert a spintax elmossa, hogy melyik tárgy hozta az eredményt. Nálad legyen 2–3 külön variáns.

A V3 első lépésének van egy üres második variánsa (<div><br /></div> — se szöveg, se merge tag). Ha az Instantly beleforgatott, a V3 230 küldésének egy része üres levélként ment ki. Minden felépített kampánynál nézd végig az összes variáns-slotot.

A követő levél vékony. Mindössze 2 lépés van (nyitó, majd +1 nap), és a második mind a négy kampányban ugyanaz a három sor, új szög nélkül. A házi sztenderd 3 lépés valódi lezáró levéllel. Itt van hova fejlődni — ne másold, javítsd.

A repo azt írta, hogy ez a 4 kampány „aktív". Az élő API szerint mind a négy lezárva (status 3), 2026-07-21T14:20:25Z állapot szerint. Pontosan ezért van az a házirend, hogy Instantly-számot soha ne jegyzetből idézz.

Küldési beállítások, ahogy élesben voltak

3 · A pipeline: nyers listától az indításig

  1. Élő állapot lekérdezése. Mielőtt bármit mondasz vagy csinálsz: instantly_live_status.py <slug> --json. Írd fel az időbélyeget.
  2. Scrape — Apify. Mindig --check-only előbb: ingyenes előellenőrzés, és az Apify fiók havi 5 dolláros kereten van, amin az összes ügyfél osztozik.
  3. Weboldal-bejárás + jó-illeszkedés osztályozásnavbar_crawler.py, majd fit_classifier.py (Gemini) egy ügyfélre szabott ICP prompttal.
  4. Email-ellenőrzésneverbounce_verify.py. Tudatosan döntsd el, hogy --strict (csak valid) vagy alapértelmezett (valid + catchall).
  5. Duplikátum-szűrésdedup_registry.py diff. Senki ne kapjon két levelet két kampányból vagy két ügyféltől.
  6. Összeállításassemble_deliverable.py.
  7. Szöveg — 4 megközelítés, ebből 2 indul. Nincs link az első levélben.
  8. A két kötelező kapu — lásd lent. Mindkettőnek 0-val kell kilépnie.
  9. Feltöltés — csak a good.csv-t.
  10. Feltöltés utáni ellenőrzésaudit_personalisation_leads.py.

Egy ismert rés, amit tudnod kell: a feltöltés ma kézi CSV-import az Instantly felületén. Nincs olyan szkript, ami technikailag kikényszerítené a két kaput — azok fegyelemből kötelezőek, nem a rendszer akadályozza meg, hogy megkerüld őket. Ezért fontos a feltöltés utáni ellenőrzés.

4 · A két kötelező kapu

6b — névőr blokkol

python3 .claude/skills/cold-email-pipeline/scripts/name_guard.py leads.csv --json

6c — személyre-szabás teljességi őr blokkol

python3 .claude/skills/cold-email-pipeline/scripts/personalisation_guard.py leads.csv --json \
        --quarantine bad.csv --clean good.csv

Ha valamelyik kapu blokkol, az a válasz, hogy „még nem indítható". A blokkolt sort ember javítja vagy kiveszi. Felülbírálni nem szabad — pontosan ezért van ott.

5 · Kézi minőségellenőrzés indítás előtt

Ez az a rész, amit egy szkript sem tud elvégezni helyetted, és amiért ez az egész átadás létezik. 2026. július 9-én és 10-én két hibás küldés ment ki valódi leadekhez — mindkettő két perc szemrevételezéssel elkerülhető lett volna.

Amit valóban látni akarsz

1. Rakd össze kézzel a nyitómondatot 10 véletlen sorra. Vedd a sor greeting és personalisation1 értékét, illeszd be a sablonba, és olvasd el. Ember írta magyar mondat, vagy sablon-maradvány?

Hibás — élesben kiment, 2026-07-10:

,

Láttam, hogy  foglalkoztok és azért írok…

Csupasz vessző név helyett, és üres rés a „hogy" meg a „foglalkoztok" között. Mind a három személyre szabott mező üres volt a lead rekordjában.

Hibás — élesben kiment, 2026-07-09:

Láttam, hogy  foglalkoztok és azért írok…

Itt az adat rendben volt: a sablonban volt elgépelve a merge tag — {{personalisation}} a helyes {{personalisation1}} helyett. Az Instantly az ismeretlen taget némán üres sztringre cseréli, és nem szól semmit.

Jó:

Kedves Szabolcs,

Láttam, hogy burkolással foglalkoztok, és feltűnt néhány dolog, amivel profibb hatást és több megrendelést érhetnétek el.

2. Vesd össze a sablon merge tagjeit a CSV oszlopneveivel — minden variánsban és minden lépésben. A 2026-07-09-es hiba pont az volt, hogy egyetlen kampány (V2) vitte az elgépelést, míg a V1/V3/V4 helyes volt. Ha csak azt nézed, amit épp szerkesztettél, nem találod meg.

3. A 2. és 3. lépést is nézd meg. Azok is {{greeting}}-gel indulnak, tehát ugyanaz az üres érték végigmegy az egész szekvencián.

4. Küldj magadnak egy teszt-leadet a valódi szekvencián keresztül, és olvasd el a megérkezett levelet egy igazi postafiókban: sortörések, megszólítás, mindkét személyre szabott mező, aláírás. Utána töröld a teszt-leadet.

5. Feltöltés után azonnal futtasd le az ellenőrzőt — ez azt olvassa vissza, ami ténylegesen az Instantlybe került, és csak az számít:

python3 .claude/skills/cold-email-pipeline/scripts/audit_personalisation_leads.py \
        --client <slug> --all-active --json

Miért nem elég egyszer megnézni: a 2026-07-10-i átvizsgálás 523 élő leadből 16-ot (3%) talált teljesen üres személyre szabással — már kiküldve, mind a négy kampányban. Egy batch-hiba addig láthatatlan, amíg egy címzett nem szól.

6 · Kész promptok Claude Code-hoz

A teljes, bemásolható készlet a branchen: 04_PROMPTS.md. A két legfontosabb:

Tájékozódás — minden munkamenet elején

Read CLAUDE.md, PROJECT_STATE.md and the 2 newest CHANGELOG.md entries in this repo,
plus clients/<slug>/CLAUDE.md and clients/<slug>/PROJECT_STATE.md.

Then run:
python3 .claude/skills/cold-email-pipeline/scripts/instantly_live_status.py <slug> --json

Give me a =<15-line briefing: what is live right now for this client, sent/reply counts
with the UTC timestamp you fetched them, what the last session changed, and what the next
action is. Do not quote any Instantly number that did not come from that live call.

A két kapu — soha ne hagyd ki, soha ne bíráld felül

Run both mandatory pre-upload gates on <path-to-final.csv>:

python3 .claude/skills/cold-email-pipeline/scripts/name_guard.py <path> --json
python3 .claude/skills/cold-email-pipeline/scripts/personalisation_guard.py <path> --json \
        --quarantine bad.csv --clean good.csv

Report: exit codes, every blocked/ambiguous/rejected row with the reason, and the warn-tier
count.

Do NOT fix blocked rows automatically and do NOT upload anything. For each blocked row, tell
me what is wrong and what the options are. I decide. If either gate exits non-zero, the answer
is "not ready to upload" — say so plainly.

A többi prompt: listaépítés, szövegírás, a személyre szabott mezők generálása, kampányépítés az Instantlyben, feltöltés utáni ellenőrzés, és a munkamenet naplózása a megfelelő ügyfél-changelogba.

7 · A felhős lead-értékelő futás állapota

Fut egy folyamatos futás a szerveren: minden domainről képernyőképet készít, majd egy vision modell 1–10-ig osztályozza a weboldalt. A cél olyan cégek megtalálása, akiknek láthatóan rossz a weboldala — így a megkeresés valódi megfigyeléssel indulhat. Neked nem kell hozzányúlnod, csak tudd, hogy mi van kész.

22 002sikeresen értékelt oldal
2 354gyenge oldal (1–5)
~28 800teljes célhalmaz
$0,00eddigi költés (keret $9,50)

A 2 354 gyenge oldal kész, bizonyítékkal alátámasztott prospekt-készlet — mindegyikhez tartozik egy elmentett képernyőkép, amire konkrétan hivatkozni lehet a nyitólevélben. Ha kell, kérd el Mátyástól CSV-ben; ez 30 másodperc, és nem kell hozzá a szerverhez nyúlnod.

Ami viszont hibás benne, és még nincs javítva:

Röviden: a meglévő ~22 ezer értékelés valódi és ma is használható, de a maradék ~6,7 ezer domain magától nem fog befejeződni — javítás kell hozzá. Pénzt közben nem éget, tehát nem sürgős.

8 · Amit nem szabad felpuhítani


Mi a dolgod ezzel az oldallal

Nézd át, hogy stimmel-e — főleg az 1. és a 2. szakaszt, mert azok az élő rendszerből jöttek, nem a dokumentációból. Ha valami nem egyezik azzal, amit tudsz, szólj, mielőtt bármit indítanál. Utána a 3–5. szakasz a tényleges munkamenet, a 6. pedig a bemásolható promptok.