Behöver ert företag hjälp med att implementera AI? Kontakta oss och få prisoffert här →
AI Skolan
januari 22, 2026

Apify + Google Sheets: Upwork-leads spårade

Rickard Andersson Partner, Nodenordic.se

Att kolla Upwork “en gång till” blir snabbt en daglig rutin. Du scrollar, öppnar flikar, kopierar länkar, klistrar in anteckningar och glömmer sedan vilka du redan har granskat.

Den här automationen för att spåra leads på Upwork träffar frilansare först (för tid är debiterbar), men byråägare och marknadskonsulter känner av den också. I stället för att jaga jobb får du en strukturerad lista i Google Sheets plus en daglig e-postsammanfattning som du kan agera på direkt.

Nedan ser du hur workflowet hämtar nya Upwork-jobb via Apify, avduplicerar dem, uppdaterar nyckelordsstatistik och skickar en enkel daglig rapport som hjärnan faktiskt kan ta in.

Så fungerar den här automationen

Här är hela workflowet som du kommer att sätta upp:

n8n Workflow Template: Apify + Google Sheets: Upwork-leads spårade

Varför det här spelar roll: Upwork-leads missas (och dupliceras)

Leadgen på Upwork ser enkelt ut tills du gör det varje dag. Du söker på en handfull nyckelord, skummar samma resultat och oroar dig ändå för att du missade det perfekta jobbet som lades upp över natten. Sedan kommer det röriga: att spara annonser någonstans som faktiskt är användbart, komma ihåg varför du gillade dem och undvika det klassiska “jag har redan ansökt till den här… eller?”-ögonblicket. Den verkliga kostnaden är inte bara tiden. Det är den mentala belastningen av att spåra leads över flikar, anteckningar och halvfärdiga kalkylark, vilket gör dig långsammare att pitcha.

Det bygger upp snabbt. Här är var det vanligtvis faller isär i verkligheten:

  • Att manuellt granska flera nyckelord kan ta ungefär en timme per dag, särskilt när du öppnar och stänger 20+ jobbflikar.
  • Dubbletter smyger sig in när ett jobb matchar mer än ett nyckelord, vilket gör ditt “sparade leads”-ark brusigt och svårt att lita på.
  • Leads blir inaktuella eftersom du inte har ett konsekvent “postat de senaste 24 timmarna”-filter i varje sökning.
  • Utan nyckelordstotaler och en daglig sammanställning fortsätter du gissa vilken nisch som faktiskt genererar jobb.

Vad du bygger: Daglig Upwork-scraping → Sheet + e-postsammanfattning

Det här workflowet gör Upwork-browsing till ett repeterbart dagligt inflödessystem. Du har din nyckelordslista i Google Sheets, kör workflowet och n8n loopar igenom varje nyckelord för att trigga en Apify-scraper. När Apify är klar hämtar workflowet datasetet, filtrerar annonser till senaste dygnet och formaterar varje jobb till strukturerade kolumner (titel, beskrivning, budget, betyg, länk, nyckelord, tidsstämplar). Sedan avduplicerar det poster så att samma jobb inte skräpar ner ditt ark bara för att det matchade två sökningar. Till sist räknar det fram sammanfattande statistik och skickar ett prydligt dagligt mejl så att du kan granska leads på några minuter och pitcha medan jobbet fortfarande är färskt.

Workflowet börjar med ditt nyckelordsark. Därifrån samlar Apify in matchande jobb och n8n städar upp dem, tar bort upprepningar och uppdaterar dina dagliga flikar och sammanfattningsflikar. Sista steget är en Gmail-sändning som lägger en strukturerad rapport i din inkorg med nyckeltalen och en länk till arket.

Det du bygger

Förväntade resultat

Säg att du spårar 12 nyckelord. Manuellt kanske du lägger cirka 5 minuter per nyckelord på att söka, öppna annonser och spara de som är värda en pitch, vilket blir ungefär en timme per dag. Med det här workflowet kör du det en gång och skummar sedan mejlet plus det rensade Google Sheet-arket på cirka 10 minuter. Även om Apify tar lite tid att bli klar i bakgrunden så gör du inte jobbet. Det är nära en timme tillbaka de flesta vardagar.

Innan du börjar

  • n8n-instans (prova n8n Cloud gratis)
  • Alternativ för egen hosting om du föredrar det (Hostinger fungerar bra)
  • Apify för att scrapa Upwork-jobbannonser
  • Google Sheets för att lagra nyckelord, jobb och sammanfattningar
  • E-postkonto (Gmail/SMTP) för att skicka den dagliga rapporten
  • Apify API-token (hämta den i Apify Console → Integrations)

Svårighetsgrad: Nybörjare. Du kopplar konton, bekräftar kolumner i arket och klistrar in en API-token.

Vill du att någon bygger detta åt dig? Prata med en automationsexpert (gratis 15-minuters konsultation).

Steg för steg

Du startar körningen på beställning. Workflowet använder en manuell trigger, vilket är perfekt för test och för att köra när du vill göra dagens hämtning. Många team byter senare till ett dagligt schema när de litar på resultaten.

Nyckelorden kommer från Google Sheets. n8n läser ditt ark “All Keywords” (eller “AI Keywords”) och loopar igenom varje aktiv term. Listan blir din kontrollpanel, så att ändra vad du scrapar är lika enkelt som att redigera en cell.

Apify scrapar Upwork och returnerar ett dataset. För varje nyckelord triggar n8n Apify-aktorn via en HTTP-request, pollar tills den är klar, väntar en kort stund och hämtar sedan datasetet. Efter det filtrerar kodnoder jobb till senaste 24 timmarna och normaliserar fält som budget, betyg och jobb-URL:en.

Strukturerade poster hamnar i Google Sheets och rapporten skickas. Workflowet lägger till jobb i ditt dagliga ark, tar bort dubbletter via titel/beskrivning, uppdaterar nyckelordstotaler och sammanfattningsstatistik, bygger sedan en e-posttext och skickar den via Gmail.

Du kan enkelt ändra filtreringsreglerna (budget, kundbetyg, jobbtyp) så att de matchar din nisch. Se hela implementationsguiden nedan för anpassningsalternativ.

Steg-för-steg-guide för implementation

Steg 1: konfigurera manuell trigger

Det här arbetsflödet startas manuellt så att ni kan styra när scraping och rapportering körs.

  1. Lägg till eller bekräfta noden Manual Execution Start som trigger.
  2. Lämna alla fält på standardvärden, eftersom den här noden inte har några parametrar att konfigurera.
  3. Koppla Manual Execution Start till Retrieve Keyword Sheet för att starta inläsningen av nyckelord.

Steg 2: anslut Google Sheets

Flera noder läser och skriver jobbdata och nyckelordssammanställningar i Google Sheets.

  1. I Retrieve Keyword Sheet ställer ni in Document till [YOUR_ID] och väljer Sheet med namnet All Keywords combined.
  2. I Load Daily Job Rows ställer ni in Document till [YOUR_ID] och Sheet till 15 July 2025.
  3. I Append Daily Jobs bekräftar ni att kolumnmappningarna inkluderar uttryck som {{ $json.title == undefined ? "No records found in last 24 hours": $json.title }} och {{ $('Iterate Keyword List').item.json.Keywords }}.
  4. I Refresh Keyword Totals ställer ni in Keywords till {{ $('Iterate Keyword List').item.json.Keywords }} och Total Count 15-07-2025 till {{ $('Filter Recent Jobs').first().json.title == undefined ? "0" : $('Filter Recent Jobs').all().length }}.
  5. I Store Clean Listings och Reload Clean Listings behåller ni samma Document- och Sheet-mål för att bevara dataflödet.
  6. I Update Summary Table och Fetch Summary Data väljer ni arket All Keywords combined för att behålla rapporteringstotalerna.

Inloggning krävs: Koppla era googleApi-inloggningsuppgifter till alla Google Sheets-noder (9+ noder hanterar nyckelord, jobbrader och sammanställningar).

Tips: Håll arknamnen konsekventa i alla Google Sheets-noder för att undvika datamissar vid append och uppdateringar.

Steg 3: konfigurera Apify-scrapingförfrågningarna

Dessa noder startar Apify-aktorn, pollar efter slutförande, väntar och hämtar datasetet.

  1. I Start Apify Actor ställer ni in URL till https://api.apify.com/v2/acts/[YOUR_ID]/runs och säkerställer att Method är POST.
  2. Ställ in JSON Body i Start Apify Actor till den angivna payloaden, inklusive "query": "{{ $json.Keywords }}" och "maxJobAge": { "value": 23, "unit": "hours" }.
  3. I Poll Actor Status ställer ni in URL till https://api.apify.com/v2/actor-runs/{{ $json.data.id }} och behåller waitForFinish som 150.
  4. I Pause Before Dataset ställer ni in Amount till 20 sekunder.
  5. I Get Scraped Dataset ställer ni in URL till https://api.apify.com/v2/datasets/{{ $json.data.defaultDatasetId }}/items.

Inloggning krävs: Koppla era httpHeaderAuth-inloggningsuppgifter till Start Apify Actor, Poll Actor Status och Get Scraped Dataset.

⚠️ Vanlig fallgrop: Ersätt [YOUR_ID] i Apify-URL:erna med era faktiska actor- och dataset-ID:n, annars kommer anropen att misslyckas.

Steg 4: sätt upp iteration av nyckelord och filtrering av jobb

Det här steget loopar igenom nyckelord, kör scraping, filtrerar resultaten och skriver dagliga rader.

  1. Koppla Retrieve Keyword Sheet till Iterate Keyword List för att loopa igenom varje nyckelord.
  2. Iterate Keyword List skickar output parallellt till både Load Daily Job Rows och Start Apify Actor.
  3. I Filter Recent Jobs behåller ni JavaScript-koden som filtrerar på de senaste 23 timmarna för att säkerställa att endast nya annonser behålls.
  4. I Append Daily Jobs verifierar ni att mappningen för Keyword Title använder {{ $('Iterate Keyword List').item.json.Keywords }}.
  5. Bekräfta att loopbacken från Refresh Keyword Totals till Iterate Keyword List är intakt så att alla nyckelord bearbetas.

Steg 5: avduplicera och lagra rena listningar

Efter att dagliga rader har lästs in tas dubbletter bort och rena listningar lagras och läses in igen för statistik.

  1. I Deduplicate Job Posts behåller ni Set-baserad logik som jämför title och description och hoppar över “No records found in last 24 hours.”
  2. I Store Clean Listings säkerställer ni att mappningarna inkluderar {{ $json.title }}, {{ $json.description }} och {{ $json['Keyword Title'] }}.
  3. I Purge Sheet Rows behåller ni Number to Delete satt till {{ $('Load Daily Job Rows').all().length }} för att rensa gammal data.
  4. Verifiera att Purge Sheet Rows skickar output till Reload Clean Listings för steget med sammanställningsberäkningar.

Tips: Om purge-antalet är noll, kontrollera att Load Daily Job Rows läser från rätt ark.

Steg 6: bygg sammanställningen och e-postrapporten

Sammanställ nyckelordstotaler, skapa en rapporttext och skicka ett dagligt e-postmeddelande.

  1. I Compute Keyword Stats behåller ni koden som jämför $('Reload Clean Listings').all() med $('Store Clean Listings').all().
  2. I Update Summary Table mappar ni Keywords till {{ $json.keyword }} och Total Count 15-07-2025 till {{ $json.count }}.
  3. I Compose Report Body verifierar ni att output-strukturen inkluderar date: "15-07-2025" och counts_by_type.
  4. I Dispatch Daily Email ställer ni in Send To till [YOUR_EMAIL] och behåller meddelandeuttryck som {{ $('Deduplicate Job Posts').all().length }} och {{ $json.counts_by_type.Web }}.

Inloggning krävs: Koppla era gmailOAuth2-inloggningsuppgifter till Dispatch Daily Email.

⚠️ Vanlig fallgrop: Uppdatera de hårdkodade datumvärdena (t.ex. 15-07-2025) i Compute Keyword Stats, Compose Report Body och e-postämnet för att undvika att rapporten märks med ett gammalt datum.

Steg 7: testa och aktivera ert arbetsflöde

Kör arbetsflödet manuellt för att verifiera dataflödet och aktivera det sedan för produktion.

  1. Klicka på Execute Workflow och bekräfta att Manual Execution Start triggar hela sekvensen.
  2. Kontrollera Google Sheets för att bekräfta att Append Daily Jobs lägger till rader och att Update Summary Table uppdaterar antal.
  3. Verifiera att Dispatch Daily Email skickar ett meddelande med totaler ifyllda från {{ $json.counts_by_type.Web }} och {{ $json.counts_by_type.Mobile }}.
  4. När allt är verifierat växlar ni arbetsflödet till Active för produktion.
🔒

Lås upp fullständig steg-för-steg-guide

Få den kompletta implementeringsguiden + nedladdningsbar mall

Felsökningstips

  • Behörigheter i Google Sheets är boven #1. Om rader inte skrivs, öppna n8n:s Google Sheets-credential, autentisera igen och bekräfta att den har åtkomst till exakt rätt kalkylark.
  • Om du använder Wait-noder eller extern scraping varierar processtiderna. Öka väntetiden om efterföljande HTTP-requests misslyckas för att Apify-datasetet inte är klart ännu.
  • Gmail-sändning kan misslyckas om du inte har aktiverat rätt autentiseringsmetod. Kontrollera din Gmail-credential i n8n och verifiera att “From”-adressen matchar det auktoriserade kontot.

Snabba svar

Hur lång tid tar det att sätta upp den här automationen för Upwork lead tracking?

Cirka 30 minuter om dina Sheets och konton är redo.

Krävs kodning för den här Upwork lead tracking-lösningen?

Nej. Du kopplar främst Apify, Google Sheets och Gmail, och bekräftar sedan att kolumnerna i arket matchar vad workflowet förväntar sig.

Är n8n gratis att använda för det här workflowet för Upwork lead tracking?

Ja. n8n har ett gratis alternativ för egen hosting 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-användning, eftersom API-anrop kan ge en liten daglig kostnad beroende på hur många nyckelord du scrapar.

Var kan jag hosta n8n för att köra den här automationen?

Två alternativ: n8n Cloud (hanterat, enklast att komma igång) eller egen hosting på en VPS. För egen hosting är Hostinger VPS prisvärd och hanterar n8n bra. Egen hosting ger dig obegränsade körningar men kräver grundläggande serveradministration.

Kan jag modifiera den här automationen för Upwork lead tracking för andra use cases?

Ja, och den är byggd för det. De flesta börjar med att ändra nyckelordsarket och justerar sedan stegen “Filter Recent Jobs” och “Deduplicate Job Posts” för att matcha sin nisch. Vanliga ändringar är att filtrera bort låga budgetar, kräva ett minimibetyg från kunden eller bara behålla fastprisroller (eller timroller). Du kan också byta ut Gmail-sändningen mot en annan e-postleverantör utan att ändra resten av logiken.

Varför misslyckas min Apify-anslutning i det här workflowet?

Oftast handlar det om en ogiltig eller utgången Apify API-token. Skapa en ny token i Apify, klistra in den i n8n-credentialn för HTTP Request och kör sedan om ett enda nyckelord för att testa. Om aktorn startar men aldrig returnerar data, kontrollera Apifys körloggar för blockerade sidor, rate limits eller felkonfigurerad sökinput. Bekräfta också att workflowet pollar rätt run ID och hämtar rätt dataset.

Vilken volym kan den här automationen för Upwork lead tracking hantera?

Mer än tillräckligt för typisk daglig prospektering: dussintals nyckelord och hundratals jobbrader per dag är normalt, så länge din Apify-plan och dina Google Sheets-gränser klarar det.

Är den här automationen för Upwork lead tracking bättre än att använda Zapier eller Make?

Ofta, ja, eftersom det här flödet har loopar, polling, avdupliceringslogik och flerstegsuppdateringar i Sheets som blir klumpiga (och dyra) i enklare verktyg. n8n ger dig också möjlighet till egen hosting, vilket innebär att du inte betalar per mikrosteg när du skalar. Zapier eller Make kan fortfarande vara helt okej om du gör en enkel automation av typen “ny rad → skicka mejl”. Men scraping plus rensning plus sammanfattningar är där n8n brukar kännas mer hanterbart. Om du vill ha en second opinion om vad som är realistiskt för din volym, prata med en automationsexpert.

När detta väl rullar slutar du “kolla Upwork” och börjar i stället granska en kort, strukturerad lista. Workflowet tar hand om det repetitiva så att du kan fokusera på att pitcha och stänga.

Kontakta oss

Hör av dig, så diskuterar vi hur just din verksamhet kan dra nytta av alla fantastiska möjligheter som AI skapar.

×

Använd mall

Få direkt tillgång till denna n8n-arbetsflödes JSON-fil

Launch login modal Launch register modal