Din leadlista ska inte bli sämre varje gång du ”kör snabbt”. Men när du hämtar prospekt från Apollo, kopierar dem till kalkylark, rensar e-postadresser och försöker att inte ladda upp dubbletter igen, är det i praktiken garanterat att det blir rörigt.
Tillväxtmarknadsförare märker det när kampanjer stannar av för att listan är smutsig. Sales ops fastnar i att fixa det. Och grundare som gör sin egen outbound sitter uppe på kvällarna med något som borde varit en 2-minutersuppgift. Den här automatiseringen för Telegram Apollo leads tar ett röstmeddelande eller en textförfrågan och gör om det till verifierade leads som sparas korrekt och utan dubbletter i Postgres.
Nedan ser du exakt hur flödet körs, vad det automatiserar, vilka resultat du kan förvänta dig och vanliga fallgropar att undvika så att det fungerar från dag ett.
Så här fungerar automatiseringen
Hela n8n-workflowet, från trigger till slutresultat:
n8n Workflow Template: Telegram till Postgres, verifierade Apollo-leads sparas
flowchart LR
subgraph sg0["Telegram Message Flow"]
direction LR
n0["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/telegram.svg' width='40' height='40' /></div><br/>Telegram Message Trigger"]
n1@{ icon: "mdi:swap-horizontal", form: "rounded", label: "Detect Voice Or Text", pos: "b", h: 48 }
n2["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/telegram.svg' width='40' height='40' /></div><br/>Retrieve Voice File"]
n3@{ icon: "mdi:robot", form: "rounded", label: "Transcribe Audio", pos: "b", h: 48 }
n4@{ icon: "mdi:swap-vertical", form: "rounded", label: "Capture Text Input", pos: "b", h: 48 }
n5@{ icon: "mdi:robot", form: "rounded", label: "Lead Scraper Agent", pos: "b", h: 48 }
n6@{ icon: "mdi:brain", form: "rounded", label: "OpenAI Chat Engine", pos: "b", h: 48 }
n7@{ icon: "mdi:memory", form: "rounded", label: "Buffer Memory", pos: "b", h: 48 }
n8@{ icon: "mdi:robot", form: "rounded", label: "Structured Parser", pos: "b", h: 48 }
n9@{ icon: "mdi:swap-vertical", form: "rounded", label: "Build Query Payload", pos: "b", h: 48 }
n10["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/code.svg' width='40' height='40' /></div><br/>Assemble Search Link"]
n11@{ icon: "mdi:swap-horizontal", form: "rounded", label: "Execute Apify Actor", pos: "b", h: 48 }
n12@{ icon: "mdi:swap-vertical", form: "rounded", label: "Map Lead Details", pos: "b", h: 48 }
n13@{ icon: "mdi:swap-horizontal", form: "rounded", label: "Filter Verified Emails", pos: "b", h: 48 }
n14["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/postgres.svg' width='40' height='40' /></div><br/>Fetch Existing Emails"]
n15["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/compare.svg' width='40' height='40' /></div><br/>Isolate New Leads"]
n16@{ icon: "mdi:cog", form: "rounded", label: "Marked Existing", pos: "b", h: 48 }
n17["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/supabase.svg' width='40' height='40' /></div><br/>Insert New Leads"]
n19@{ icon: "mdi:swap-vertical", form: "rounded", label: "Compose Telegram Reply", pos: "b", h: 48 }
n20@{ icon: "mdi:cog", form: "rounded", label: "Restrict Results", pos: "b", h: 48 }
n21["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/telegram.svg' width='40' height='40' /></div><br/>Send Telegram Confirmation"]
n20 --> n21
n4 --> n5
n10 --> n11
n3 --> n5
n12 --> n13
n11 --> n12
n0 --> n1
n5 --> n9
n5 --> n14
n7 -.-> n5
n2 --> n3
n1 --> n2
n1 --> n4
n6 -.-> n5
n19 --> n20
n9 --> n10
n15 --> n16
n15 --> n17
n8 -.-> n5
n17 --> n19
n13 --> n15
n14 --> n15
end
subgraph sg1["Flow 2"]
direction LR
n18@{ icon: "mdi:cog", form: "rounded", label: "Node_18", pos: "b", h: 48 }
end
%% Styling
classDef trigger fill:#e8f5e9,stroke:#388e3c,stroke-width:2px
classDef ai fill:#e3f2fd,stroke:#1976d2,stroke-width:2px
classDef aiModel fill:#e8eaf6,stroke:#3f51b5,stroke-width:2px
classDef decision fill:#fff8e1,stroke:#f9a825,stroke-width:2px
classDef database fill:#fce4ec,stroke:#c2185b,stroke-width:2px
classDef api fill:#fff3e0,stroke:#e65100,stroke-width:2px
classDef code fill:#f3e5f5,stroke:#7b1fa2,stroke-width:2px
classDef disabled stroke-dasharray: 5 5,opacity: 0.5
class n0 trigger
class n3,n5,n8 ai
class n6 aiModel
class n7 ai
class n1,n11,n13 decision
class n14 database
class n10 code
classDef customIcon fill:none,stroke:none
class n0,n2,n10,n14,n15,n17,n21 customIcon
Problemet: leadlistor blir smutsiga så fort du skalar
Manuell lead scraping funkar ”okej” tills volymerna ökar. En person exporterar från Apollo, en annan filtrerar ”verifierade” e-postadresser, någon tredje importerar till en databas, och plötsligt har du dubbletter överallt. Sedan sticker bounce rate iväg, domäner värms upp långsammare och outreach-verktyg börjar flagga dina kampanjer. Värst är den mentala belastningen. Du slutar lita på din egen data, så varje ny kampanj börjar med städning i stället för lansering.
Friktionen byggs på. Här är det som oftast skapar fel.
- Att kopiera och klistra in lead-data mellan verktyg orsakar små misstag som senare blir dålig personalisering.
- Filtrering för verifierade e-postadresser görs inkonsekvent, så leveransbarheten får en tyst smäll över tid.
- Dubbletter smyger sig in när två teammedlemmar kör liknande sökningar med en veckas mellanrum.
- ”Snabb listbyggning” blir ett halvdagsjobb när du räknar in export, formatering och import.
Lösningen: Telegram-förfrågan → verifierade Apollo-leads → Postgres
Det här workflowet gör om ett enkelt Telegram-meddelande till en korrekt formaterad, deduplicerad prospekttabell i din databas. Du skickar en textförfrågan som ”Hitta 200 VP Marketing-leads i Austin inom SaaS” eller spelar bara in ett snabbt röstmeddelande. Om det är röst hämtar workflowet ljudet och transkriberar det med OpenAI. Sedan tolkar en AI-agent vad du menade (plats, bransch, jobbtitlar, företagsstorlek) och gör om det till strukturerade sökparametrar. Därefter bygger den Apollo-sökpayloaden och kör en scrape via Apify, mappar de returnerade leadfälten, filtrerar till enbart verifierade e-postadresser och kontrollerar dina befintliga Postgres/Supabase-poster för att förhindra dubbletter. Till sist infogar den bara nya leads och skickar en Telegram-bekräftelse med antal, så att du vet att det fungerade.
Workflowet startar i Telegram, så förfrågningar känns friktionsfria. I mitten gör AI rörigt mänskligt språk till exakta sökkriterier, och sedan hämtas, rensas och dedupliceras Apollo-data. På slutet uppdateras din Postgres-tabell direkt och du får ett ”klart”-meddelande tillbaka i Telegram.
Vad du får: automatisering vs. resultat
| Vad workflowet automatiserar | Resultat du får |
|---|---|
|
|
Exempel: så här ser det ut
Säg att du behöver 300 verifierade leads för en ny outbound-kampanj. Manuellt kan du lägga ungefär 20 minuter på att bygga Apollo-filter, ytterligare 30 minuter på export och rensning, och sedan 20 minuter på deduplicering och import till Postgres. Säg cirka 1,5 till 2 timmar, plus oron ”har vi redan kontaktat de här?”. Med det här workflowet skickar du en Telegram-förfrågan (kanske 30 sekunder), väntar under 30 sekunder på bearbetning och får ett bekräftelsemeddelande när nya leads har lagts in. Din lista är redo för outreach nästan direkt.
Det här behöver du
- n8n-instans (prova n8n Cloud gratis)
- Alternativ för self-hosting om du föredrar det (Hostinger fungerar bra)
- Telegram för trigger via röst/textförfrågan
- OpenAI för att transkribera röst och tolka förfrågningar
- Apollo.io + Apify för att hämta lead-data pålitligt
- Postgres eller Supabase för att lagra leads och deduplicera
- API-nycklar (från OpenAI, Apollo, Apify och din DB)
Svårighetsnivå: Medel. Du kopplar konton, klistrar in API-nycklar och säkerställer att dina databasfält matchar det du vill lagra.
Vill du inte sätta upp detta själv? Prata med en automationsexpert (gratis 15-minuterskonsultation).
Så fungerar det
Ett Telegram-meddelande startar allt. Workflowet använder en Telegram-trigger och kontrollerar sedan om du skickade text eller ett röstmeddelande. Enkel förgrening, inga gissningar.
Röst transkriberas, text tas emot. Om det är ljud hämtar n8n filen och kör den genom OpenAI-transkribering. Om det redan är text sparas den som den är så att nästa steg alltid ser en konsekvent input.
En AI-agent gör intention till targeting. Agenten tolkar din förfrågan och producerar strukturerade sökkriterier (titlar, branscher, platser, företagsstorlek). Den strukturen är viktig eftersom den förhindrar ”nästan rätt”-sökningar som drar in skräpleads.
Apollo-leads hämtas, rensas och dedupliceras. Workflowet sätter ihop en sökpayload, kör en Apify-actor för att hämta resultaten, mappar nyckelfält (namn, titel, företag, LinkedIn, e-post), filtrerar till verifierade e-postadresser och jämför mot befintliga poster i Postgres/Supabase så att upprepningar inte infogas.
Du får en omedelbar bekräftelse. Efter att bara nya leads har lagts in skickar n8n ett Telegram-meddelande tillbaka med antal och (valfritt) en länk till den genererade Apollo-sökningen.
Du kan enkelt justera sökgränserna och vilka fält som lagras utifrån dina behov. Se hela implementationsguiden nedan för anpassningsalternativ.
Steg-för-steg-guide för implementation
Steg 1: Konfigurera Telegram-triggern
Konfigurera arbetsflödet så att det startar när ett Telegram-meddelande tas emot, så att pipelinen kan ta emot leadförfrågningar via röst eller text.
- Lägg till Telegram Message Trigger och behåll Updates inställt på
message. - Autentisering krävs: Anslut era telegramApi-uppgifter i Telegram Message Trigger.
- Öppna er Telegram-bot och skicka ett testmeddelande för att bekräfta att triggern går att nå.
Steg 2: Rutta röst- kontra textinmatning
Det här steget förgrenar flödet beroende på om användaren skickade ett röstmeddelande eller text.
- I Detect Voice Or Text behåller ni de två reglerna som kontrollerar
{{ $json.message.voice.file_id }}och{{ $json.message.text }}för att skapa utgångarna Voice och Text. - För röstgrenen konfigurerar ni Retrieve Voice File med Resource inställt på
fileoch File ID inställt på{{ $json.message.voice.file_id }}. - Autentisering krävs: Anslut era telegramApi-uppgifter i Retrieve Voice File.
- För textgrenen konfigurerar ni Capture Text Input att sätta text till
{{ $json.message.text }}. - Koppla Retrieve Voice File → Transcribe Audio och Capture Text Input → Lead Scraper Agent.
Steg 3: Sätt upp AI-bearbetning för att extrahera sökfråga
Det här steget omvandlar röst eller text till en strukturerad sökfråga som scrapern kan använda.
- I Transcribe Audio behåller ni Resource inställt på
audiooch Operation inställt påtranscribe. - Autentisering krävs: Anslut era openAiApi-uppgifter i Transcribe Audio.
- Konfigurera Lead Scraper Agent med Text inställt på
{{ $json.text }}och säkerställ att Prompt Type ärdefinemed Has Output Parser aktiverat. - I OpenAI Chat Engine ställer ni in Model till
gpt-4.1-nano(eller er föredragna modell). - Autentisering krävs: Anslut era openAiApi-uppgifter i OpenAI Chat Engine.
- Koppla Buffer Memory och Structured Parser till Lead Scraper Agent som AI-undernoder. Säkerställ att uppgifter läggs till i OpenAI Chat Engine (förälder), inte i undernoderna.
- Bekräfta att Structured Parser använder det angivna JSON-schemaexemplet för
location,businessochjob_title.
Lead Scraper Agent skickar utdata parallellt till både Build Query Payload och Fetch Existing Emails.
Steg 4: Bygg och kör lead-scrapen
Generera en sök-URL, kör Apify-aktorn och mappa lead-resultaten till en konsekvent struktur.
- I Build Query Payload ställer ni in Mode till
rawoch JSON Output till{ "query": {{ $json.output }} }. - I Assemble Search Link behåller ni den medföljande JavaScript-koden för att bygga Apollo-URL:en och output
finalURL. - I Execute Apify Actor ställer ni in Operation till
Run actor, Build tilllatest, Timeout till10000och Wait For Finish till60. - Ställ in Custom Body i Execute Apify Actor till
{ "getPersonalEmails": true, "getWorkEmails": true, "totalRecords": 500, "url": "{{ $json.finalURL }}" }. - Autentisering krävs: Anslut era apifyApi-uppgifter i Execute Apify Actor.
- I Map Lead Details mappar ni fält som firstName till
{{ $json.first_name }}, emailAddress till{{ $json.email }}och jobTitle till{{ $json.employment_history[0].title }}.
⚠️ Vanlig fallgrop: Om scrapern returnerar tom employment_history kommer uttrycket {{ $json.employment_history[0].title }} att fallera. Överväg att lägga till skyddslogik vid behov.
Steg 5: Filtrera och avduplicera leads
Endast verifierade e-postadresser sparas, och befintliga e-postadresser tas bort innan infogning.
- I Filter Verified Emails behåller ni villkoret att emailStatus är lika med
verifiedmed{{ $json.emailStatus }}. - I Fetch Existing Emails ställer ni in Operation till
select, Return All tilltrueoch inkluderar outputColumns medemailAddress. - Autentisering krävs: Anslut era postgres-uppgifter i Fetch Existing Emails.
- I Isolate New Leads behåller ni Merge By Fields konfigurerat för att jämföra inkommande e-postadresser med befintliga.
- Lämna Marked Existing som en no-op-gren för dubbletter.
Steg 6: Lagra resultat och skicka Telegram-bekräftelse
Nya leads infogas i Supabase, ett bekräftelsemeddelande skapas och ett Telegram-svar skickas.
- I Insert New Leads ställer ni in Table ID till
Leads_n-mailoch mappar fält som firstName till{{ $json.firstName }}, jobTitle till{{ $json.jobTitle }}och country till{{ $json.country }}. - Granska mappningen för businessIndustry:
{{ $json.businessIndustry }}{{ $('Apollo Scraper').item.json.organization.industry }}. - Autentisering krävs: Anslut era supabase-uppgifter i Insert New Leads (inga uppgifter är konfigurerade ännu).
- I Compose Telegram Reply ställer ni in output till
{{ $input.all().length }} nya kontakter har lagts till i Google Sheet!. - I Send Telegram Confirmation ställer ni in Text till
{{ $input.all().length }} nya kontakter har lagts till i Google Sheet!och Chat ID till[YOUR_ID]. - Autentisering krävs: Anslut era telegramApi-uppgifter i Send Telegram Confirmation.
⚠️ Vanlig fallgrop: Arbetsflödet refererar till Apollo Scraper i Insert New Leads, men den noden finns inte i det här arbetsflödet. Ersätt den referensen eller ta bort den för att förhindra körningsfel.
Steg 7: Granska platshållar- och icke-fungerande noder
Det här arbetsflödet innehåller noder som inte körs och som används för anteckningar eller framtida utbyggnad.
- Behåll Flowpast Branding som en dokumentationsnotering på canvasen.
- Identifiera Unnamed (typ
unknown) och ta bort eller ersätt den om den dyker upp i framtida kopplingar.
Steg 8: Testa och aktivera ert arbetsflöde
Validera arbetsflödet end-to-end och aktivera det sedan för användning i produktion.
- Klicka på Execute Workflow och skicka ett text- eller röstmeddelande till er Telegram-bot.
- Bekräfta att Detect Voice Or Text ruttar korrekt och att Lead Scraper Agent ger en strukturerad sökfråga som utdata.
- Verifiera att Execute Apify Actor returnerar leaddata och att Insert New Leads skapar poster i
Leads_n-mail. - Kontrollera att Send Telegram Confirmation levererar ett meddelande med korrekt antal.
- När allt fungerar, växla arbetsflödet till Active för att köra automatiskt på nya Telegram-meddelanden.
Vanliga fallgropar
- Åtkomst till Telegram-filer kan fallera om din bot-token ändras eller saknar behörighet. Om hämtning av ljud slutar fungera, kontrollera först Telegram-credentials i n8n och verifiera sedan att chatten fortfarande är auktoriserad.
- Om du använder Wait-noder eller extern rendering varierar processtiderna. Öka väntetiden om nedströmsnoder fallerar på tomma svar.
- Standardprompter i AI-noder är generiska. Lägg in din tonalitet tidigt, annars kommer du att redigera outputs för alltid.
Vanliga frågor
Cirka 45 minuter om dina API-nycklar och databasen är redo.
Nej. Du kommer främst att koppla konton och klistra in API-nycklar. Den enda ”tekniska” delen är att säkerställa att kolumnerna i din Postgres/Supabase-tabell matchar de mappade fälten.
Ja. n8n har ett gratis self-hosted-alternativ och en gratis provperiod på n8n Cloud. Cloud-planer börjar på 20 USD/månad för högre volym. Du behöver också räkna in kostnader för OpenAI-transkribering/chatt samt Apollo/Apify, som beror på hur många leads du hämtar.
Två alternativ: n8n Cloud (hanterat, enklast att komma igång) eller self-hosting på en VPS. För self-hosting är Hostinger VPS prisvärd och hanterar n8n bra. Self-hosting ger dig obegränsade körningar men kräver grundläggande serverhantering.
Ja, det är hela poängen med bygget. Du kan justera instruktionerna för AI-agenten så att den känner igen dina föredragna mönster för jobbtitlar, regler för senioritet och platsformat, och sedan uppdatera mappningen i ”Build Query Payload” så att Apollo får exakt de filtren. Vanliga justeringar är att begränsa till specifika senioritetsnivåer, lägga till exkluderingar (som ”recruiter”) och ändra leadtaket per förfrågan så att du inte hämtar för mycket.
Oftast handlar det om bot-token eller chattauktorisering. Kontrollera Telegram-credentials i n8n igen och bekräfta sedan att boten fortfarande är i chatten och har rätt att läsa meddelanden. Om bara röstförfrågningar failar är steget ”Retrieve Voice File” ledtråden: Telegram kan returnera ett file_id som din bot inte kan hämta förrän behörigheterna är korrigerade. Det är också värt att kolla grundläggande rate limits om du skickar förfrågningar tätt efter varandra.
Workflowet är byggt för att hantera 500+ leads per förfrågan, och den praktiska gränsen är oftast din Apollo/Apify-plan samt hur du har ställt in batch- och limit-noderna. På n8n Cloud Starter beror körningsgränser på din plannivå; på self-hosted n8n finns inget körningstak, men serverresurserna spelar fortfarande roll. Om du hämtar stora listor, kör mindre batchar oftare, eftersom det håller databas-insert snabb och dedupe-kontrollen tillförlitlig.
Ofta, ja. Det här workflowet bygger på förgreningslogik (röst vs text), strukturerad AI-tolkning, batchning och dedupe-kontroller mot en databas, vilket är områden där Zapier och Make kan bli klumpiga eller dyra. n8n ger dig också möjligheten att self-hosta, vilket är viktigt om du kör lead-gen i skala. Med det sagt: om du bara behöver ”Apollo-export → Google Sheet” och inget mer kan enklare verktyg räcka. Om du vill ha hjälp att välja, prata med en automationsexpert.
Det här är den typen av automatisering som tyst fixar ditt outbound-system. Korrekt formaterade leads går in, färre problem kommer ut.
Kontakta oss
Hör av dig, så diskuterar vi hur just din verksamhet kan dra nytta av alla fantastiska möjligheter som AI skapar.