Att skrapa annonssajter ser enkelt ut tills du faktiskt gör det. Sidor laddar olika, antibot-skydd blockerar dina förfrågningar och du slutar med att copy-pasta rörig text till ett kalkylark som fortfarande måste städas upp.
Den här automatiseringen av annonsdata slår hårdast mot fastighetsanalytiker, men operatörer i proptech-team och investerare som gör veckovis dealscreening känner av det också. Du gör skyddade annonssidor till felfria, sorteringsbara rader i Google Sheets utan att lägga förmiddagarna på manuellt skrapande.
Nedan ser du vad workflowet gör, vad du får ut av det och hur du kör det stabilt (även när källsajten sätter sig på tvären).
Så fungerar den här automatiseringen
Hela n8n-workflowet, från trigger till slutligt resultat:
n8n Workflow Template: Bright Data + Google Sheets: rensade listdata snabbt
flowchart LR
subgraph sg0["When clicking ‘Test workflow’ Flow"]
direction LR
n0@{ icon: "mdi:play-circle", form: "rounded", label: "When clicking ‘Test workflow’", pos: "b", h: 48 }
n1@{ icon: "mdi:swap-vertical", form: "rounded", label: "Set URL and Bright Data Zone", 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/httprequest.dark.svg' width='40' height='40' /></div><br/>Perform Bright Data Web Requ.."]
n3@{ icon: "mdi:robot", form: "rounded", label: "Markdown to Textual Data Ext..", pos: "b", h: 48 }
n4@{ icon: "mdi:robot", form: "rounded", label: "Review Data Extractor", pos: "b", h: 48 }
n5@{ icon: "mdi:robot", form: "rounded", label: "Structured Data Extractor", pos: "b", h: 48 }
n6@{ icon: "mdi:database", form: "rounded", label: "Google Sheets", pos: "b", h: 48 }
n7@{ icon: "mdi:code-braces", form: "rounded", label: "Create a binary data for Str..", pos: "b", h: 48 }
n8@{ icon: "mdi:cog", form: "rounded", label: "Write the structured content..", pos: "b", h: 48 }
n9["<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/merge.svg' width='40' height='40' /></div><br/>Merge the responses"]
n10@{ icon: "mdi:cog", form: "rounded", label: "Aggregate the responses", pos: "b", h: 48 }
n11["<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/>Initiate a Webhook Notificat.."]
n12@{ icon: "mdi:brain", form: "rounded", label: "OpenAI Chat Model for Markdo..", pos: "b", h: 48 }
n13@{ icon: "mdi:brain", form: "rounded", label: "OpenAI Chat Model for Struct..", pos: "b", h: 48 }
n14@{ icon: "mdi:brain", form: "rounded", label: "OpenAI Chat Model for Review..", pos: "b", h: 48 }
n9 --> n10
n4 --> n9
n10 --> n6
n10 --> n11
n10 --> n7
n5 --> n9
n1 --> n2
n2 --> n3
n0 --> n1
n3 --> n4
n3 --> n5
n13 -.-> n5
n12 -.-> n3
n14 -.-> n4
n7 --> n8
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,n4,n5 ai
class n12,n13,n14 aiModel
class n6 database
class n2,n11 api
class n7 code
classDef customIcon fill:none,stroke:none
class n2,n9,n11 customIcon
Problemet: annonsdata är rörig, blockerad och långsam att samla in
Om du någon gång har försökt bygga ett prydligt kalkylark från bostadsannonser känner du igen smärtan: det är inte ”att få tag på sidan”. Det är att få tag på sidan konsekvent, och sedan omvandla det du skrapade (HTML, markdown, märklig inbäddad JSON, halvrenderad text) till något ditt team kan filtrera, sortera och lita på. En analytiker kan bränna en hel eftermiddag på att samla 30 annonser, bara för att upptäcka att priserna är formaterade olika, adresserna är ofullständiga och sajten blockerar nästa batch. Sedan ber någon om ”samma sak för en annan stad”, och ärligt talat är det tillbaka till ruta ett.
Friktionen byggs på. Här är var det faller isär i verkligheten.
- Antibot-skydd blockerar traditionella skrapare, vilket gör att ditt dataset får massor av luckor.
- Rå HTML är inte analysklar, så du lägger timmar på att rensa text innan du ens kan jämföra annonser.
- Små formateringsfel smyger sig in (en nolla som saknas, fel stadsdel), och dina slutsatser blir snabbt osäkra.
- Utan en repeterbar pipeline blir det ett slit att skala från ”några annonser” till ”varje dag, flera marknader”.
Lösningen: Bright Data hämtar sidorna, OpenAI strukturerar dem, Sheets förblir prydligt
Det här workflowet automatiserar hela vägen från ”skyddad annons-URL” till ”användbar rad i Google Sheets”. Det börjar med att sätta käll-URL:en och din Bright Data Web Unlocker-zon, och använder sedan Bright Data för att hämta sidan även när sajten har botförsvar. Därefter kör n8n det skrapade innehållet genom ett LLM-baserat konverteringssteg som gör rörig markup till renare text som faktiskt går att parsa. Sedan extraherar OpenAI strukturerade fält (pris, adress, yta, bostadstyp, egenskaper med mera) så att du slipper etikettering för hand. Till sist slår workflowet ihop och aggregerar resultaten, sparar en strukturerad fil lokalt för granskning, lägger till resultaten i Google Sheets och kan även skicka en webhook-sammanfattning till ett annat verktyg.
Det startar med URL- och zonkonfiguration. Mitten gör två viktiga saker: ”städa texten” och ”extrahera fälten” (inklusive ett granskningsliknande extraktionsflöde om du behöver det). Avslutet är enkelt: ett pålitligt kalkylark, plus en sparad JSON-fil och en valfri webhook-push.
Det du får: automatisering vs. resultat
| Vad det här workflowet automatiserar | Resultat du får |
|---|---|
|
|
Exempel: så här kan det se ut
Säg att du följer 40 nya annonser varje vecka i två städer. Manuell hantering, även en snabb genomgång, tar kanske 7 minuter per annons för att öppna sidan, kopiera detaljer och städa formateringen i Sheets, vilket blir cirka 5 timmar i veckan. Med det här workflowet klistrar du in URL:erna (eller matar in dem från en annan källa), låter Bright Data hämta dem och väntar på extraktion och aggregering, vanligtvis runt 20–30 minuters körtid. Din ”mänskliga tid” blir cirka 15 minuter för uppsättning och en snabb stickprovskontroll.
Det här behöver du
- n8n-instans (testa n8n Cloud gratis)
- Alternativ för self-hosting om du föredrar det (Hostinger fungerar bra)
- Bright Data för att låsa upp skyddade annonssidor.
- Google Sheets för att lagra och analysera extraherade rader.
- OpenAI API-nyckel (hämta den från din OpenAI-dashboard).
Kunskapsnivå: Medel. Du kopplar in credentials, klistrar in tokens och justerar några fältmappningar utan att skriva kod.
Vill du inte sätta upp detta själv? Prata med en automationsexpert (gratis 15-minuters konsultation).
Så fungerar det
En URL (och Bright Data-zon) sätter igång allt. I det här workflowet är det en manuell start, och sedan sätter ett ”set”-steg annons-URL:en och Web Unlocker-zonnamnet så att förfrågan blir repeterbar.
Bright Data hämtar sidinnehållet. n8n skickar förfrågan via Bright Data-API:et, vilket hjälper dig att undvika de vanliga blockeringarna och delvisa laddningarna som förstör dataset.
Innehållet städas och tolkas sedan. En markdown-till-text LLM-kedja gör svaret till renare text, och därefter kör OpenAI informationsextraktion för att plocka ut fälten du bryr dig om (prissättning, adress, bostadstyp, egenskaper och eventuellt ”granskningsliknande” innehåll du har konfigurerat).
Allt slås ihop och levereras dit du behöver det. n8n kombinerar de olika extraktionsflödena, aggregerar dem till en strukturerad payload, sparar en fil på disk för spårbarhet och lägger till slutraderna i Google Sheets. En webhook-förfrågan kan också skicka en sammanfattning till ett annat system.
Du kan enkelt ändra vilka fält som extraheras för att matcha ditt schema 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
Starta arbetsflödet manuellt så att ni kan testa fastighetsintelligensflödet från början till slut.
- Lägg till noden Manual Execution Start som din trigger.
- Lämna alla inställningar på standardvärdena i Manual Execution Start.
Steg 2: Anslut datakällan och hämtningsförfrågan
Ange URL:en för målfastigheten och Bright Data-zonen, och hämta sedan markdown-innehållet från Bright Data.
- I Assign Source URL & Zone lägger ni till två fält: url satt till
https://www.redfin.com/IL/Chicago/5814-W-Roscoe-St-60634/home/13464782och zone satt tillweb_unlocker1. - I Bright Data API Request ställer ni in URL till
https://api.brightdata.com/requestoch Method tillPOST. - Aktivera Send Body och lägg till body-parametrar: zone =
{{ $json.zone }}, url ={{ $json.url }}, format =rawoch data_format =markdown. - Autentisering krävs: Anslut era httpHeaderAuth-uppgifter i Bright Data API Request.
zone är aktivt och att mål-URL:en är nåbar.Steg 3: Konfigurera AI-textkonvertering och extrahering
Konvertera markdown till ren text och extrahera sedan recensioner och strukturerad fastighetsdata med parallella AI-grenar.
- I Markdown to Text Conversion ställer ni in Text till
=You need to analyze the below markdown and convert to textual data. Please do not output with your own thoughts. Make sure to output with textual data only with no links, scripts, css etc. {{ $json.data }}. - Säkerställ att OpenAI Chat for Text är ansluten som språkmodell för Markdown to Text Conversion. Autentisering krävs: Anslut era openAiApi-uppgifter i OpenAI Chat for Text (inte i chain-noden).
- Konfigurera Review Information Extractor med Text satt till
=Extract all the reviews from the provided content {{ $json.text }}och behåll Schema Type somfromJsonmed det angivna JSON-schemaexemplet. - Säkerställ att OpenAI Chat for Reviews är ansluten som språkmodell för Review Information Extractor. Autentisering krävs: Anslut era openAiApi-uppgifter i OpenAI Chat for Reviews.
- Konfigurera Structured Info Extractor med Text satt till
=Extract structured data from the provided content {{ $json.text }}och behåll Schema Type somfromJsonmed det angivna JSON-schemaexemplet. - Säkerställ att OpenAI Chat for Structured är ansluten som språkmodell för Structured Info Extractor. Autentisering krävs: Anslut era openAiApi-uppgifter i OpenAI Chat for Structured.
Parallell körning: Markdown to Text Conversion skickar utdata till både Review Information Extractor och Structured Info Extractor parallellt.
Steg 4: Slå ihop och aggregera AI-resultaten
Kombinera AI-strömmarna och aggregera resultaten till en enda payload för nedströmsåtgärder.
- Anslut både Review Information Extractor och Structured Info Extractor till Combine Response Streams.
- I Aggregate Response Data ställer ni in Aggregate till
aggregateAllItemData.
Parallell körning: Aggregate Response Data skickar utdata till Update Google Spreadsheet, Dispatch Webhook Summary och Build Binary Payload parallellt.
Steg 5: Konfigurera utdata-destinationer
Skicka data till Google Sheets, skicka en webhook-sammanfattning och skriv en lokal JSON-fil.
- I Update Google Spreadsheet ställer ni in Operation till
appendOrUpdate, Document till[YOUR_ID]och Sheet tillgid=0(Sheet1). - Mappa kolumnen data i Update Google Spreadsheet till
{{ $json.data }}. Autentisering krävs: Anslut era googleSheetsOAuth2Api-uppgifter. - I Dispatch Webhook Summary ställer ni in URL till
https://example.com/webhookoch lägger till body-parametern summary ={{ $json.data }}. - I Build Binary Payload ställer ni in Function Code till
items[0].binary = { data: { data: new Buffer(JSON.stringify(items[0].json, null, 2)).toString('base64') } }; return items;. - I Save Structured File ställer ni in Operation till
writeoch File Name till=d:\Realestate-StructuredData.json.
Steg 6: Testa och aktivera ert arbetsflöde
Validera hela fastighetsintelligensflödet innan ni aktiverar det för regelbunden användning.
- Klicka på Execute Workflow från Manual Execution Start för att köra ett manuellt test.
- Bekräfta att Update Google Spreadsheet lägger till eller uppdaterar en rad och att Dispatch Webhook Summary tar emot en payload.
- Verifiera att Save Structured File skriver
Realestate-StructuredData.jsonmed aggregerat innehåll. - När allt fungerar växlar ni arbetsflödet till Active för produktionsbruk.
Vanliga fallgropar
- Bright Data-credentials kan gå ut eller kräva specifika behörigheter. Om något slutar fungera, kontrollera först din Bright Data Web Unlocker-token och zoninställningarna i Bright Data-dashboarden.
- Om du använder Wait-noder eller extern bearbetning varierar bearbetningstiderna. Öka väntetiden om nedströms extraktionsnoder fallerar på tomma eller delvisa svar.
- Standardprompter i OpenAI-extraktornoder är generiska. Lägg in dina kolumndefinitioner och varumärkesspecifika regler tidigt, annars kommer du att korrigera ”nästan rätt” fält varje gång du kör det.
Vanliga frågor
Cirka 45 minuter om dina credentials är redo.
Nej. Du kommer mest att klistra in API-tokens och välja vilka fält du vill ha i arket.
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 med OpenAI API-användning (ofta några dollar i månaden vid lätt skrapning) och Bright Data-användning baserat på hur många sidor du låser upp.
Två alternativ: n8n Cloud (hanterat, enklast uppsättning) eller self-hosting på en VPS. För self-hosting är Hostinger VPS prisvärt och hanterar n8n bra. Self-hosting ger dig obegränsade körningar men kräver grundläggande serverhantering.
Ja, och det är en av de bästa uppgraderingarna. Du kan ersätta det enskilda indata-steget ”Assign Source URL & Zone” med en lista med stads-URL:er, loopa igenom dem och mata in varje URL i Bright Data API Request. Vanliga anpassningar är att extrahera extra fält som sovrum/badrum, dagar på marknaden och närliggande skolor, samt skicka en ”ny deal”-avisering via noden Dispatch Webhook Summary.
Oftast beror det på en ogiltig eller utgången Web Unlocker-token i din header auth credential. Dubbelkolla Bearer-tokenvärdet och bekräfta att zonnamnet matchar det du skapade i Bright Data. Om tokenen är korrekt är nästa misstänkta mål-URL:en (omdirigeringar, geo-blockeringar eller en ändrad sidmall). Hårt skyddade sajter stryper också trafiken, så sänk tempot i körningen eller batcha URL:er i stället för att slå på med dussintals på en gång.
På n8n Cloud Starter kan du bekvämt köra några tusen exekveringar per månad; om du self-hostar finns ingen plattformsgräns för exekveringar och det beror mest på din server och hastigheten i Bright Data + OpenAI. I praktiken processar många team några dussin annonser per körning och schemalägger det dagligen.
Ofta, ja. Zapier och Make är bra för enkla ”A till B”-uppgifter, men det här workflowet drar nytta av n8n:s flexibilitet: flera extraktionsvägar, merge-/aggregate-logik och att spara filer på disk för granskning. Du slipper också betala extra för varje gren och formatteringssteg, vilket snabbt blir dyrt i skrapningsjobb. Den ärliga nackdelen är underhåll: när annonslayouten ändras kommer du att justera prompter eller valideringsregler, oavsett plattform. Vill du att någon rimlighetskontrollerar din setup, prata med en automationsexpert.
När det här väl rullar blir ditt kalkylark en källa till sanning i stället för ett dokument som är ”så gott det går”. Sätt upp det, håll fälten konsekventa och gå vidare till besluten.
Kontakta oss
Hör av dig, så diskuterar vi hur just din verksamhet kan dra nytta av alla fantastiska möjligheter som AI skapar.