Du kör en scraper, laddar ner en fil, öppnar den, fixar kolumnerna, rensar telefonnumren, normaliserar e-postadresserna … och ändå litar du inte på listan. Det är segt. Ännu värre: det är lätt att missa en liten formateringsdetalj som sabbar din outreach senare.
Det här är vad säljare känner precis innan en prospekteringsspurt. En marknadschef som bygger en ny lista känner det också. Det gör även en byråoperatör som försöker leverera ”felfria leads” till en kund. Den här Apify Sheets-automationen tar skrapade resultat och lägger in dem i Google Sheets redan rensade, så att du kan börja med outreach i stället för att vakta exporter.
Nedan ser du hur workflowet körs, vad det fixar automatiskt och vad ”redo att använda” faktiskt betyder i en verklig veckorutin för lead generation.
Så fungerar den här automatiseringen
Hela n8n-workflowet, från trigger till slutligt resultat:
n8n Workflow Template: Apify till Google Sheets, rensade leads redo
flowchart LR
subgraph sg0["Flow 1"]
direction LR
n1["<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/httprequest.dark.svg' width='40' height='40' /></div><br/>Run Apify Scraper"]
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/code.svg' width='40' height='40' /></div><br/>Clean Data"]
n3@{ icon: "mdi:database", form: "rounded", label: "Export to Google Sheets", pos: "b", h: 48 }
n4@{ icon: "mdi:swap-vertical", form: "rounded", label: "Variables", pos: "b", h: 48 }
n4 --> n1
n2 --> n3
n1 --> n2
end
subgraph sg1["Manual Flow"]
direction LR
n0@{ icon: "mdi:play-circle", form: "rounded", label: "Manual Trigger", 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 database
class n1 api
class n2 code
classDef customIcon fill:none,stroke:none
class n1,n2 customIcon
Problemet: skrapade leads är aldrig ”klara”
Att skrapa leads är den enkla delen. Den jobbiga delen är allt efteråt. Du får telefonnummer med mellanslag, parenteser, landskoder i slumpmässiga format eller till och med text blandat i. E-postadresser kommer in med konstig versalisering, avslutande blanksteg och dubbletter du inte upptäcker förrän din bounce rate sticker iväg. Och så har vi klassikern i Google Sheets: kolumner flyttar sig, fält matchar inte din outreach-mall och någon i teamet ”fixar snabbt” på ett sätt som ingen kan upprepa nästa gång. Ärligt talat: det är inte jobbet du kommer ihåg att tidrapportera, men det kostar riktiga timmar.
Friktionen byggs på. Här är var det brukar fallera.
- Export från Apify, uppladdning igen och mappning av kolumner bränner cirka 30 minuter per scrape.
- Inkonsekvent formatering av telefon och e-post skapar onödiga bounces och misslyckade uppringningsförsök.
- Du tappar momentum eftersom outreach inte kan börja förrän någon ”rensar arket”.
- Varje manuell städning blir lite olika, vilket gör listkvaliteten oförutsägbar vecka för vecka.
Lösningen: kör Apify, normalisera datan, lägg till i Sheets
Det här workflowet gör om ”skrapad dataset” till ett konsekvent Google Sheet som du faktiskt kan använda. Du triggar det i n8n, det laddar dina Apify-uppgifter (token och task-ID), och startar sedan Apify-tasken via en HTTP-request. När resultaten kommer tillbaka normaliserar workflowet fälten du bryr dig om för outreach. Telefonnummer strippas ner till enbart siffror så att de fungerar i dialers och CRM. E-post trimmas och görs till gemener, vilket minskar dubbletter och förebygger onödiga copy/paste-missar senare. Till sist läggs de rensade raderna till i ditt Google Sheet, med förutsägbara kolumner som företagsnamn, telefon och adress.
Workflowet startar med en manuell körning, så att du kan köra det på beställning när du behöver färska leads. Därifrån sköter Apify skrapningen, n8n rensar outputen och Google Sheets blir din enda sanningskälla. Inga extra nedladdningar. Inga ”vilken version av CSV:n är det här?”-diskussioner.
Det du får: automatisering vs. resultat
| Vad det här workflowet automatiserar | Resultat du får |
|---|---|
|
|
Exempel: så här ser det ut
Säg att du skrapar 300 leads varje måndag och torsdag. Manuellt kanske du lägger cirka 30 minuter på att exportera och omformatera filen, och ytterligare 30 minuter på att rensa telefon, e-post och kolumnnamn – så räkna med 2 timmar i veckan. Med det här workflowet klickar du på kör, väntar på att Apify blir klar (ofta runt 10 minuter), och ditt Google Sheet uppdateras automatiskt. Det är ungefär 90 minuter tillbaka varje vecka, plus färre misstag när du lämnar listan vidare till någon annan.
Det här behöver du
- n8n-instans (testa n8n Cloud gratis)
- Self-hosting-alternativ om du föredrar det (Hostinger fungerar bra)
- Apify för att köra din lead-scraping-task
- Google Sheets för att lagra och dela rensade leadrader
- Apify API-token (hämta den i Apify Console → Settings → Integrations)
Kunskapsnivå: Nybörjare. Du klistrar in uppgifter, väljer ditt kalkylark och kör en test-scrape.
Vill du inte sätta upp det här själv? Prata med en automationsexpert (gratis 15-minuters konsultation).
Så fungerar det
Manuell start från n8n. Du triggar workflowet när du vill ha färska leads, vilket är praktiskt om du skrapar på vissa dagar eller bara när en kampanj behöver det.
Inloggning och task-detaljer laddas. n8n läser din APIFY_TOKEN och APIFY_TASK_ID från variabelsteget så att workflowet kan köra rätt Apify-scraper utan att du behöver konfigurera om något.
Apify kör och returnerar datasetet. En HTTP-request startar skrapningen och hämtar tillbaka resultaten till n8n, så att du kan bearbeta datan innan den ens hamnar i ditt ark.
Leaddata normaliseras och läggs till. Städlogiken standardiserar telefoner och e-post, och sedan lägger Google Sheets-steget till nya rader i ditt valda kalkylark i en konsekvent kolumnordning.
Du kan enkelt justera städreglerna så att de matchar kraven i ditt CRM utifrån dina behov. Se hela implementationsguiden nedan för anpassningsalternativ.
Steg-för-steg-guide för implementering
Steg 1: konfigurera den manuella triggern
Det här arbetsflödet startar manuellt så att ni kan testa Apify-skrapningen och tillägget i kalkylbladet vid behov.
- Lägg till noden Manual Launch Trigger som arbetsflödets trigger.
- Lämna standardinställningarna som de är, eftersom den här noden inte kräver någon konfiguration.
- Koppla Manual Launch Trigger till Assign Workflow Vars för att följa exekveringsflödet.
Steg 2: anslut Apify-begäran
Ange era Apify-inloggningsuppgifter som variabler och bygg API-begärans URL dynamiskt.
- Öppna Assign Workflow Vars och ställ in APIFY_TOKEN till
[CONFIGURE_YOUR_API_KEY]. - Ställ in APIFY_TASK_ID till
[YOUR_ID]. - I Execute Apify Scrape, ställ in URL till
{{ 'https://api.apify.com/v2/actor-tasks/' + $json.APIFY_TASK_ID + '/run-sync-get-dataset-items?token=' +$json.APIFY_TOKEN}}. - I Execute Apify Scrape aktiverar ni Options → Split Into Items så att varje dataset-rad blir ett enskilt item.
- Koppla Assign Workflow Vars → Execute Apify Scrape.
Steg 3: konfigurera normalisering av lead-data
Kodsteget rensar telefonnummer och normaliserar e-postadresser innan lead-datan sparas.
- Lägg till noden Normalize Lead Data efter Execute Apify Scrape.
- Klistra in JavaScript i Normalize Lead Data exakt som visat:
// Clean scraped data before LLM processing return $input.all().map(item => ({ ...item.json, phone: item.json.phone?.replace(/[^\d+]/g, '') || '', email: item.json.email?.toLowerCase().trim() || '' })); - Koppla Execute Apify Scrape → Normalize Lead Data.
Steg 4: konfigurera utdatadestinationen
Lägg till den normaliserade lead-datan i Google Sheets med definierade kolumnmappningar.
- Lägg till noden Append to Sheets och koppla den till Normalize Lead Data.
- Inloggningsuppgifter krävs: Anslut era Google Sheets-inloggningsuppgifter i Append to Sheets.
- Ställ in Operation till
append. - Ställ in Document ID till
[YOUR_ID]. - Ställ in Sheet Name till
Sheet1. - Mappa kolumner i Columns → Define Below:
- phone →
{{ $json.phone }} - Address →
{{ $json.address }} - company name →
{{ $json.title }}
- phone →
Steg 5: testa och aktivera ert arbetsflöde
Kör ett manuellt test för att verifiera skrapningen och tilläggsbeteendet, och aktivera sedan arbetsflödet för användning.
- Klicka på Execute Workflow för att köra Manual Launch Trigger.
- Bekräfta att Execute Apify Scrape returnerar items och att Normalize Lead Data matar ut rensade fält för phone och email.
- Verifiera att nya rader visas i målarket i Google Sheet från Append to Sheets.
- När allt fungerar, slå på arbetsflödet till Active för användning i produktion.
Vanliga fallgropar
- Apify-uppgifter kan löpa ut eller så kan din token tappa behörigheter. Om det skapar fel, kontrollera tokenstatus i Apify Console och bekräfta att task-ID:t fortfarande finns.
- Om du använder Wait-noder eller extern rendering varierar processtiderna. Öka väntetiden om noder längre fram fallerar på tomma svar.
- Standardprompter i AI-noder är generiska. Lägg in er tonalitet tidigt, annars kommer du att redigera output i all evighet.
Vanliga frågor
Cirka 20 minuter om du redan har en Apify-task och ett Google Sheet klart.
Nej. Du klistrar in din Apify-token och ditt task-ID och väljer sedan målarket i Google Sheets. Datarensningen är redan inbyggd i workflowet.
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 Apify-kostnader baserat på hur ofta din task körs.
Två alternativ: n8n Cloud (hanterat, enklast setup) 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 serveradministration.
Ja, men gör det med en tydlig plan. Du kan justera fältmappningen i steget ”Append to Sheets” så att det matchar dina kolumnnamn i CRM, och du kan tweaka städreglerna i ”Normalize Lead Data” för att hantera landskoder, obligatoriska prefix eller extra fält som webbplats och kategori. Vanliga anpassningar är att lägga till en kolumn för ”source”, dela upp adresser i stad/län och att hoppa över rader som saknar en giltig e-postadress.
Oftast är det ett token-problem eller så är task-ID:t fel. Skapa en ny APIFY_TOKEN i Apify, bekräfta att APIFY_TASK_ID matchar tasken du förväntar dig och uppdatera sedan variablerna i n8n. Om det bara misslyckas vid stora scrapes kan du också slå i rate limits, eller så returnerar du ett dataset som tar längre tid att generera än vad din request förväntar sig.
Hundratals per körning är normalt, och tusentals fungerar bra om din Apify-task kan producera dem pålitligt.
Ofta, ja, eftersom scraping-output brukar behöva riktig städlogik innan den blir användbar. n8n gör den typen av databehandling enklare att förvalta, och self-hosting innebär att du inte betalar extra varje gång du kör en större batch. Zapier och Make kan fortfarande fungera om du gör ett enkelt ”skicka data till ett ark”-flöde, men de blir klumpiga när du behöver villkorliga regler och repeterbar normalisering. Om ditt workflow kommer att växa är n8n oftast det lugnare valet. Prata med en automationsexpert om du vill ha en snabb rekommendation för din setup.
Att få rensade leads direkt i Sheets utan städrutinen ändrar tempot i veckan. Sätt upp det en gång, kör det när du behöver det och håll din outreach i rörelse.
Kontakta oss
Hör av dig, så diskuterar vi hur just din verksamhet kan dra nytta av alla fantastiska möjligheter som AI skapar.