Att kopiera recept från slumpmässiga webbplatser till ett kalkylark är den sortens jobb som ser “snabbt” ut tills du har gjort det 40 gånger. Ingredienser missas, enheter förvrängs och du slutar med att ändå kontrollera originalsidan igen.
Den här automatiseringen av receptdata drabbar matbloggare hårdast, men nutritionister som granskar måltidsplaner och ops-drivna grundare som bygger receptbibliotek känner av det också. Du kan förvandla stökiga HTML-sidor till konsekventa rader i Google Sheets utan att leva i flikar hela dagen.
Du får se vad arbetsflödet automatiserar, vad som kommer ut i andra änden och de små valen i uppsättningen som gör det driftsäkert i skala.
Så fungerar automatiseringen
Hela n8n-arbetsflödet, från trigger till slutlig output:
n8n Workflow Template: Bright Data + Google Sheets – rensad receptdata
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:cog", form: "rounded", label: "List all tools for Bright Data", pos: "b", h: 48 }
n2@{ icon: "mdi:swap-vertical", form: "rounded", label: "Set the Recipe Extract URL", pos: "b", h: 48 }
n3@{ icon: "mdi:robot", form: "rounded", label: "Paginated Data Extract", pos: "b", h: 48 }
n4@{ icon: "mdi:swap-vertical", form: "rounded", label: "Loop Over Items", pos: "b", h: 48 }
n5["<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/>Code to output the array of .."]
n6@{ icon: "mdi:robot", form: "rounded", label: "Structured Output Parser for..", pos: "b", h: 48 }
n7@{ icon: "mdi:cog", form: "rounded", label: "Bright Data MCP Client For R..", pos: "b", h: 48 }
n8@{ icon: "mdi:cog", form: "rounded", label: "Bright Data MCP Client For R..", pos: "b", h: 48 }
n9@{ icon: "mdi:robot", form: "rounded", label: "Structured Output Parser for..", pos: "b", h: 48 }
n10@{ icon: "mdi:code-braces", form: "rounded", label: "Create a binary data", 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/>Webhook Notification for Dat.."]
n12@{ icon: "mdi:cog", form: "rounded", label: "Write the structured content..", pos: "b", h: 48 }
n13@{ icon: "mdi:robot", form: "rounded", label: "Structured Recipe Data Extract", pos: "b", h: 48 }
n14@{ icon: "mdi:brain", form: "rounded", label: "OpenAI Chat Model for Pagina..", pos: "b", h: 48 }
n15@{ icon: "mdi:brain", form: "rounded", label: "OpenAI Chat Model for Struct..", pos: "b", h: 48 }
n16@{ icon: "mdi:cog", form: "rounded", label: "Wait", pos: "b", h: 48 }
n16 --> n8
n4 --> n16
n10 --> n12
n3 --> n5
n2 --> n7
n1 --> n2
n13 --> n10
n13 --> n11
n0 --> n1
n7 --> n3
n5 --> n4
n6 -.-> n3
n14 -.-> n3
n15 -.-> n13
n9 -.-> n13
n11 --> n4
n8 --> n13
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,n6,n9,n13 ai
class n14,n15 aiModel
class n11 api
class n5,n10 code
classDef customIcon fill:none,stroke:none
class n5,n11 customIcon
Problemet: receptsidor är inte kalkylarksanpassade
Receptsajter byggs för människor, inte för data. En sida gömmer ingredienser i dragspel, en annan delar upp steg i bilder och en tredje laddar allt via skript som inte går att kopiera korrekt. Så du gör samma ritual: öppna sidan, kopiera ingredienser, fixa formatering, gissa saknade enheter, klistra in i Sheets och sedan dubbelkolla eftersom du inte litar på det du just klistrade in. Det är inte bara långsamt. Det är mentalt utmattande, och felen är luriga.
Friktionen växer efter de första handfulla recepten. Här är var det oftast faller isär.
- Ingredienser och mängder separeras, vilket tvingar fram manuell städning innan du kan analysera något.
- Varje sajt har en annan struktur, så en “mallprocess” håller aldrig särskilt länge.
- Du lägger ungefär 10 minuter per recept bara på att omformatera text så att den går att använda i ett ark.
- När du skalar till dussintals eller hundratals recept blir små copy-paste-misstag till dåliga rekommendationer och bortkastade granskningar.
Lösningen: skrapa med Bright Data, strukturera med OpenAI, spara till Sheets
Det här arbetsflödet samlar in recept-URL:er, hämtar den underliggande sidans HTML med Bright Datas Web Unlocker och låter sedan OpenAI (GPT-4o mini) göra om den stökiga HTML:en till en konsekvent, strukturerad receptpost. Det stannar inte vid en sida heller. Det kan crawla paginerade listningssidor, loopa igenom varje receptlänk och processa dem en och en med en kort fördröjning så att du inte belastar sajter i onödan. Till sist levererar arbetsflödet den rensade datan på två praktiska sätt: det kan skicka en JSON-payload till en webhook (för Slack, ett internt API eller en dashboard), och det kan också skriva den strukturerade responsen till disk för tillförlitlig lagring och spårbarhet.
Arbetsflödet startar med en URL till en receptkälla och dina Bright Data-uppgifter. Därifrån extraherar det paginering, bygger en array av sidor att besöka, skrapar varje receptsida och använder AI för att tolka ut de fält du faktiskt vill ha i Google Sheets. Du får standardiserade rader som du kan filtrera, sortera och granska snabbt.
Det du får: automatisering vs. resultat
| Vad det här arbetsflödet automatiserar | Resultat du får |
|---|---|
|
|
Exempel: så här ser det ut
Säg att du bygger ett bibliotek med 50 trendande recept från en paginerad “senaste recept”-sida. Manuellt, om det tar cirka 10 minuter per recept att kopiera, rensa och klistra in i Google Sheets, är det ungefär 8 timmar av monotont arbete. Med det här arbetsflödet lägger du cirka 10 minuter på att ställa in käll-URL:en och dina målfält, och låter sedan det köra medan det skrapar och strukturerar varje sida. Även om bearbetningen tar ett par minuter per recept i bakgrunden, sjunker din mänskliga tid till snabb granskning och korrigeringar, inte datainmatning.
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)
- Bright Data för skrapåtkomst via Web Unlocker
- OpenAI för att strukturera receptdata från HTML
- Bright Data Web Unlocker-token (hämtas i Bright Data zone-inställningar)
Svårighetsnivå: Mellan. Du kopplar autentiseringsuppgifter, ändrar några fält och bekräftar din webhook- eller Google Sheets-destination.
Vill du inte sätta upp det här själv? Prata med en automationsexpert (gratis 15-minuters konsultation).
Så fungerar det
Du anger en URL till en receptkälla. Arbetsflödet startar från en manuell körning (eller en annan trigger du lägger till senare) och använder din “receptlista” eller “sökresultat”-sida som startpunkt.
Bright Data hämtar det riktiga sidinnehållet. Det skrapar startsidan, läser sedan pagineringsdetaljer och bygger en lista med sidlänkar att besöka. En kort väntan läggs in mellan batcher så att körningar blir stabilare och mindre benägna att misslyckas på långsamma sidor.
OpenAI strukturerar varje recept. För varje receptsida skickar arbetsflödet den råa HTML:en genom en extraktionsprompt och tolkar den till ett förutsägbart schema (tänk titel, ingredienser, steg, tid, portioner, taggar). Det är den del som förvandlar “webbkaos” till kalkylarksklar data.
Dina system tar emot resultatet. Arbetsflödet skapar en payload, postar den till din webhook-endpoint och sparar en strukturerad fil till disk så att du alltid har en källa att lita på för revisioner eller ombearbetning.
Du kan enkelt justera de extraherade fälten så att de matchar dina Google Sheets-kolumner 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 och iterera säkert innan ni aktiverar någon schemaläggning.
- Lägg till noden Manual Workflow Starter för att starta körningen vid behov.
- Lämna alla parametrar som standard i Manual Workflow Starter.
Steg 2: anslut BrightData och definiera käll-URL:en
Dessa noder laddar scraping-verktygen och ställer in sök-URL och webhook-destinationen som används genom hela flödet.
- Öppna Retrieve BrightData Tools och anslut autentiseringsuppgifter. Credential Required: Anslut era mcpClientApi-uppgifter.
- I Define Recipe Source URL, ställ in url till
https://realfood.tesco.com/search.html?search=tomato%20pasta&sortby=Rating. - Ställ in webhook_url till er endpoint, t.ex.
https://webhook.site/[YOUR_ID]. - Ställ in base_url till
https://realfood.tesco.com/search.html.
Tips: Säkerställ att base_url matchar domänen för pagineringslänkarna, annars kan URL:erna för nästa sida bli felaktiga.
Steg 3: skrapa första sidan och extrahera paginering
Det här steget skrapar den första sidan med sökresultat och använder AI för att extrahera pagineringslänkarna.
- I MCP Recipe Page Scraper, behåll toolName som
scrape_as_htmloch toolParameters som={ "url": "{{ $json.url }}" }. Credential Required: Anslut era mcpClientApi-uppgifter. - I Extract Pagination Details, ställ in text till
=Extract the paginated data from the provided content. Here's the content : {{ $json.result.content[0].text }} Append the link with the Base URL as {{ $('Define Recipe Source URL').item.json.base_url }}. - Anslut OpenAI Pager Model som språkmodell för Extract Pagination Details. Credential Required: Anslut era openAiApi-uppgifter.
- Anslut Parse Pagination Schema som output parser för Extract Pagination Details och ställ in jsonSchemaExample till
[{ "page_number": "page number in int", "link": "link to the web content" }].
⚠️ Vanlig fallgrop: Parse Pagination Schema är en AI output parser—lägg inte till några autentiseringsuppgifter här. Autentiseringsuppgifter ska ställas in på OpenAI Pager Model.
Steg 4: bygg och iterera pagineringsloopen
Pagineringsresultat omvandlas till en array och itereras med en fördröjning mellan sidorna.
- I Build Pagination Array, ställ in jsCode till
return $input.first().json.output. - Använd Iterate Page Links för att bearbeta varje sida i batchar (standardvärden fungerar bra).
- I Delay Before Next Page, ställ in amount till
10för att begränsa anropsfrekvensen. - I MCP Loop Page Scraper, behåll toolName som
scrape_as_htmloch toolParameters som={ "url": "{{ $json.link }}" }. Credential Required: Anslut era mcpClientApi-uppgifter.
Steg 5: extrahera receptdata med AI
Varje skrapad sida skickas till en AI-kedja för att extrahera strukturerad receptdata baserat på ett definierat schema.
- I Extract Recipe Structure, ställ in text till
=Extract search data. Here's the content : Output the data in JSON. - Anslut OpenAI Recipe Model som språkmodell för Extract Recipe Structure. Credential Required: Anslut era openAiApi-uppgifter.
- Anslut Parse Recipe Schema som output parser och behåll schemaType som
manualmed det angivna JSON-schemat.
⚠️ Vanlig fallgrop: Parse Recipe Schema är en sub-node output parser—autentiseringsuppgifter ska ställas in på OpenAI Recipe Model, inte på parsern.
Steg 6: konfigurera parallella utdata (webhook + fil)
Efter extraheringen skickar arbetsflödet data till en webhook och skriver samtidigt en strukturerad fil.
- Observera att Extract Recipe Structure skickar utdata parallellt till både Generate Binary Payload och Send Webhook Payload.
- I Generate Binary Payload, behåll functionCode som
items[0].binary = { data: { data: new Buffer(JSON.stringify(items[0].json, null, 2)).toString('base64') } }; return items;. - I Write Structured File, ställ in operation till
writeoch fileName till=d:\Recipe-Structured-Data-{{ $('Iterate Page Links').item.json.page_number }}.json. - I Send Webhook Payload, ställ in url till
={{ $('Define Recipe Source URL').item.json.webhook_url }}, aktivera sendBody, och behåll contentType sommultipart-form-data. - I Send Webhook Payload, lägg till en body-parameter med namnet recipe_content med värdet
={{ $json.output.toJsonString() }}.
Tips: Säkerställ att er webhook-endpoint accepterar multipart-form-data eller anpassa content type vid behov.
Steg 7: testa och aktivera ert arbetsflöde
Verifiera hela körningen med en enskild exekvering innan ni aktiverar det för produktionsbruk.
- Klicka på Execute Workflow från Manual Workflow Starter för att köra flödet.
- Bekräfta att Iterate Page Links går igenom sidorna och att Delay Before Next Page pausar i
10sekunder mellan anropen. - Verifiera att Send Webhook Payload postar data till er webhook och att Write Structured File skapar filer som
d:\Recipe-Structured-Data-1.json. - När ni är nöjda, växla arbetsflödet till Active för produktionsbruk.
Vanliga fallgropar
- Bright Data-uppgifter kan löpa ut, eller så kanske din Web Unlocker-zone inte matchar vad arbetsflödet förväntar sig. Om något slutar fungera, kontrollera först din Bright Data zone-token och n8n-credentialn för Header Auth.
- Om du använder Wait-noder eller extern rendering varierar processtider. Öka väntetiden om noder längre ned misslyckas på tomma svar.
- Standardprompter i AI-noder är generiska. Lägg in din tonalitet och dina riktlinjer tidigt, annars kommer du att redigera output i all evighet.
Vanliga frågor
Cirka 30 minuter om du redan har dina Bright Data- och OpenAI-konton.
Ingen kodning krävs. Du klistrar mest in autentiseringsuppgifter, anger käll-URL:en och väljer vart den strukturerade outputen ska skickas.
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 API och Bright Data-användning baserat på hur många sidor du skrapar.
Två alternativ: n8n Cloud (hanterat, enklast att komma igång) eller self-hosting på en VPS. För self-hosting är Hostinger VPS prisvärt och klarar n8n bra. Self-hosting ger dig obegränsade körningar men kräver grundläggande serveradministration.
Ja, och det är en av de enklaste justeringarna. Ändra värdena i “Define Recipe Source URL” så att de pekar på en vegansk kategori-/söksida och justera sedan prompten i “Extract Recipe Structure” så att den lägger till fält som allergener, protein per portion eller “diet tags”. Om du vill ha en annan AI-leverantör byter du ut noden “OpenAI Recipe Model” mot en annan chat-modellnod och behåller samma schemaparsare. Du kan också styra om noden “Send Webhook Payload” till Slack eller ett internt API samtidigt som du fortfarande skriver filer till disk.
Oftast är det en ogiltig eller utgången Web Unlocker-token i Header Auth-credentialn. Det kan också vara fel zone-namn i dina indatafält, eller att Bright Data blockerar anropet eftersom zonen inte är konfigurerad för Web Unlocker API. Om fel bara uppstår på vissa sajter, prova att lägga in en längre fördröjning mellan batcher så att du ser mindre ut som en skrapare som kör i full fart.
Hundratals per körning är normalt om dina Bright Data- och OpenAI-gränser stödjer det.
Ofta, ja, eftersom den här typen av skrapning + schematolkning snabbt blir komplex. n8n hanterar loopning, förgrening och strukturerad tolkning i ett och samma arbetsflöde, och self-hosting gör att du inte betalar per liten delsteg på samma sätt som många no-code-verktyg. Zapier eller Make kan fungera bra för “ny rad i Sheets → skicka meddelande”, men de är inte byggda för paginerad crawling och HTML-till-JSON-extraktion i skala. Dessutom är community-noder (som MCP-verktyg) enklare att använda på self-hostad n8n, vilket spelar roll här. Prata med en automationsexpert om du vill ha hjälp att välja.
När det här väl rullar blir receptinsamling en granskningsuppgift, inte ett datainmatningsjobb. Ärligt talat är det hela poängen.
Kontakta oss
Hör av dig, så diskuterar vi hur just din verksamhet kan dra nytta av alla fantastiska möjligheter som AI skapar.