Din webbplats förändras, men dina hjälpdokument, interna wiki och din chatbots ”kunskap” gör det inte. Sedan ställer någon en enkel fråga och får ett självsäkert, inaktuellt svar. Pinsamt. Och dyrt också.
Den här Apify Supabase-automationen träffar marknadschefer först (nya landningssidor varje vecka), men supportansvariga och byråägare känner av den direkt efter. Du behöver en sökbar sanningskälla som håller sig uppdaterad utan att någon manuellt kopierar sidor in i ett dokument.
Det här arbetsflödet gör om valfri webbplats-URL till felfritt, chunkat innehåll med embeddings lagrade i Supabase. Du får se vad det automatiserar, vilka resultat du kan förvänta dig och vad du behöver se upp med när du kör det på en riktig webbplats.
Så fungerar den här automatiseringen
Hela n8n-arbetsflödet, från trigger till slutlig output:
n8n Workflow Template: Apify till Supabase, gör webbplatser sökbara
flowchart LR
subgraph sg0["Enter Website URL and Settings Flow"]
direction LR
n0@{ icon: "mdi:cube-outline", form: "rounded", label: "Supabase Vector Store", pos: "b", h: 48 }
n1@{ icon: "mdi:vector-polygon", form: "rounded", label: "Embeddings Google Gemini", 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/code.svg' width='40' height='40' /></div><br/>Improve Content Structure Qu.."]
n3@{ icon: "mdi:robot", form: "rounded", label: "Recursive Character Text Spl..", pos: "b", h: 48 }
n4@{ icon: "mdi:robot", form: "rounded", label: "Default Data Loader", pos: "b", h: 48 }
n5@{ icon: "mdi:swap-vertical", form: "rounded", label: "Clean Data", pos: "b", h: 48 }
n6["<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/form.svg' width='40' height='40' /></div><br/>Enter Website URL and Settings"]
n7@{ icon: "mdi:swap-horizontal", form: "rounded", label: "Prepare Settings for Apify W..", pos: "b", h: 48 }
n8@{ icon: "mdi:swap-vertical", form: "rounded", label: "Set Data in Correct Request ..", 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/httprequest.dark.svg' width='40' height='40' /></div><br/>Run Apify Scraper: Scrape Al.."]
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/httprequest.dark.svg' width='40' height='40' /></div><br/>Run Apify Scraper: Scrape 1 .."]
n11@{ icon: "mdi:swap-horizontal", form: "rounded", label: "No Limit to Number of Scrape..", pos: "b", h: 48 }
n12["<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: Scrape Al.."]
n5 --> n2
n4 -.-> n0
n1 -.-> n0
n6 --> n8
n2 --> n0
n3 -.-> n4
n8 --> n7
n11 --> n12
n11 --> n9
n10 --> n5
n7 --> n11
n7 --> n10
n9 --> n5
n12 --> n5
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 n6 trigger
class n3,n4 ai
class n0 ai
class n1 ai
class n7,n11 decision
class n9,n10,n12 api
class n2 code
classDef customIcon fill:none,stroke:none
class n2,n6,n9,n10,n12 customIcon
Problemet: din ”kunskapsbas” blir snabbt inaktuell
Att hålla information korrekt låter enkelt tills du försöker göra det i stor skala. En produktsida ändras. Priser uppdateras. En ny FAQ läggs till. Någon i teamet tar en skärmdump av den gamla versionen och klistrar in den i ett dokument, och plötsligt flyter två sanningar runt. Lägg en chatbot ovanpå så höjs insatsen, eftersom boten glatt svarar utifrån gammal text med total självsäkerhet. Tidskostnaden är också lömsk: folk slutar lita på interna dokument och börjar i stället avbryta kollegor. Det där fram-och-tillbaka blir den verkliga skatten.
Det växer snabbt. Här brukar det oftast fallera.
- Att manuellt kopiera webbplatstext till en kunskapsbas blir en veckouppgift som ingen äger.
- De flesta sidor innehåller navigation, cookie-banners och sidfötter, så din chatbot lär sig en massa meningslöst skräp.
- När du väl laddar upp innehåll är det sällan sökbart på ett meningsfullt sätt, så folk ställer ändå samma frågor i Slack.
- Så fort du går bortom ett fåtal sidor smyger fel in och ”snabba uppdateringar” börjar ta ungefär 2 timmar.
Lösningen: skrapa, rensa, skapa embeddings och lagra i Supabase automatiskt
Det här arbetsflödet startar med ett enkelt inmatningsformulär där du klistrar in en URL och väljer hur djupt du vill skrapa. n8n anropar sedan Apify för att hämta sidinnehållet i ett av tre lägen: enstaka sida, hela webbplatsen med sidbegränsning eller hela webbplatsen utan begränsningar. När crawlningen är klar tar arbetsflödet bort de brusiga delar som förstör sökkvaliteten (navigation, sidfötter, annonser, cookie-banners) och formar om kvarvarande innehåll så att det läser som riktig dokumentation. Därefter delas texten upp i rimliga chunks (cirka 800 tecken, markdown-medvetet), vector embeddings skapas med Google Gemini (768 dimensioner) och varje chunk skrivs till en Supabase-tabell med pgvector aktiverat. Slutresultatet är en strukturerad, sökbar kunskapsbas som din app eller chatbot kan använda för semantisk sök och RAG-frågor & svar.
Arbetsflödet startar när du skickar in en webbplats-URL via formuläret. Det styr begäran till rätt Apify-skrapalternativ och bearbetar sedan varje skrapad post till felfria chunks med embeddings. Till sist gör det en upsert av allt till din Supabase-vektortabell så att sök och hämtning blir snabb och konsekvent.
Det du får: automatisering vs. resultat
| Det här arbetsflödet automatiserar | Resultat du får |
|---|---|
|
|
Exempel: så här ser det ut
Säg att du behöver hålla ett hjälpcenter med 25 sidor uppdaterat för en chatbot. Manuellt blir även en snabb kopiera/klistra-in-runda och rensning på cirka 10 minuter per sida ungefär 4 timmar, och dessutom måste du senare formatera om för sök. Med det här arbetsflödet klistrar du in URL:en en gång, väljer ”hela webbplatsen med begränsning” (börja med cirka 10 sidor) och låter det köra. Efter en kort crawl- och embeddingtid landar chunks i Supabase automatiskt. Du granskar främst resultatet i stället för att göra rutinjobb.
Det här behöver du
- n8n-instans (prova n8n Cloud gratis)
- Alternativ för egen hosting om du föredrar det (Hostinger fungerar bra)
- Apify för att skrapa webbplatsinnehåll i stor skala
- Supabase för att lagra vektorer med pgvector aktiverat
- Google Gemini API-nyckel (hämta den via Google AI Studio / Gemini API)
Svårighetsnivå: Medel. Du kopplar in autentiseringsuppgifter och gör en liten SQL-setup i Supabase, men du kommer inte att bygga en app.
Vill du inte sätta upp detta själv? Prata med en automatiseringsexpert (gratis 15-minuters konsultation).
Så fungerar det
Du skickar in URL och omfång. Arbetsflödet startar från ett enkelt formulär (”Website Input Form”) där du klistrar in webbplatsen och väljer skrapläge: enstaka URL, hela webbplatsen med begränsning eller hela webbplatsen utan begränsningar.
Det styr till rätt Apify-crawl. En switch-nod använder ditt val, och sedan triggar ett HTTP-anrop rätt Apify actor-körning. Om du valde en fullständig webbplatscrawl kontrollerar arbetsflödet din sidbegränsning innan det väljer mellan den begränsade respektive obegränsade vägen.
Skrapade sidor rensas och formas om. Arbetsflödet sanerar posterna och kör sedan ett steg för att förfina innehållsstrukturen och ta bort sådant du inte vill embeda (sidhuvuden, sidfötter, cookie-promptar och annat brus). Det här är skillnaden mellan ”sökbara svar” och ”en databas full av navigationsetiketter”, helt ärligt.
Texten chunkas, får embeddings och lagras. Det rensade innehållet delas upp i chunks (ungefär 800 tecken), Gemini skapar embeddings med 768 dimensioner och Supabase vector store-noden skriver allt till din documents-tabell så att din chatbot eller ditt söklager kan hämta rätt passager senare.
Du kan enkelt justera chunkstorlek eller vilka sidelement som tas bort utifrån dina behov. Se hela implementationsguiden nedan för alternativ för anpassning.
Steg-för-steg-guide för implementering
Steg 1: konfigurera formulärtriggern
Det här arbetsflödet börjar med ett formulär som samlar in målwebbplatsen och inställningar för scraping.
- Lägg till och öppna Website Input Form.
- Ställ in Form Title till
Enter Website URL and Settings. - Ställ in Form Description till
Provide the full website URL you want to scrape. If you want to scrape an entire website, simply leave the "Max number of pages to scrape" field, empty. Otherwise, you can enter a number there to limit the scraped pages.. - Säkerställ att fälten matchar: Website page (URL) to scrape, Scrape all pages available on the domain, or only the page provided? (radio med två alternativ) och Max number of scraped pages to return (nummer).
Steg 2: koppla Apify-begärans mappning och routing
Mappa formulärinmatningen till normaliserade fält och routa begäran till rätt crawler-väg.
- Öppna Map Request Fields och mappa fälten som uttryck: url till
{{ $json["Website page (URL) to scrape"] }}, scrapeAll till{{ $json["Scrape all pages available on the domain, or only the page provided?"] }}, maxCrawlPages till{{ $json["Max number of scraped pages to return"] }}och maxResults till{{ $json["Max number of scraped pages to return"] }}. - I Configure Apify Options verifierar ni att de två reglerna jämför
{{ $json.scrapeAll }}med de exakta strängarnaScrape all pages on the domainochScrape only the one URL provided. - I Check Page Limit bekräftar ni att villkoret kontrollerar
{{ $json.maxCrawlPages }}med operatornltmot1för att avgöra begränsad kontra obegränsad crawl.
Configure Apify Options skickar utdata till Check Page Limit för begäranden som gäller ”scrape all” och direkt till Apify Single URL Crawl för begäranden som gäller en enskild sida.
Steg 3: konfigurera Apify-crawlers
Konfigurera HTTP-begärandena som triggar Apify-crawls, inklusive användning av API-token och payloads.
- I Apify Crawl All Unlimited ställer ni in URL till
https://api.apify.com/v2/acts/apify~website-content-crawler/run-sync-get-dataset-items, Method tillPOSToch låter Send Body vara aktiverat. - Säkerställ att JSON Body innehåller den dynamiska start-URL:en:
{{ $('Map Request Fields').item.json.url }}istartUrls. - I Apify Crawl All Limited bekräftar ni att JSON Body använder
{{ $json.maxCrawlPages }}och{{ $json.maxResults }}för begränsningar. - I Apify Single URL Crawl låter ni maxCrawlPages och maxResults vara fasta på
1. - För alla tre Apify-noder ställer ni in frågeparametern token till er Apify API-nyckel i stället för
[CONFIGURE_YOUR_API_KEY].
⚠️ Vanlig fallgrop: Om ni lämnar [CONFIGURE_YOUR_API_KEY] oförändrad i Apify-frågeparametrarna kommer det att orsaka autentiseringsfel.
Steg 4: rensa och omforma det scrapade innehållet
Förbered crawler-utdata för efterföljande vektorisering.
- I Sanitize Records behåller ni tilldelningarna för url som
{{ $json.url }}och markdown som{{ $json.markdown }}. - Öppna Refine Content Layout och behåll den angivna JavaScript-koden som mappar markdown/text till toppnivåfält och lägger till metadata som
type: 'webpage'ochcreated_at.
Steg 5: konfigurera AI-chunkning och dokumentinläsning
Dela upp innehåll i chunkar och bygg dokumentobjekt för embedding och lagring.
- Konfigurera Recursive Text Chunker med Chunk Size
800och Chunk Overlap80. - I Standard Data Loader ställer ni in JSON Data till
{{ $('Refine Content Layout').item.json.text }}och JSON Mode tillexpressionData. - I metadata-värdena för Standard Data Loader ställer ni in title, url, type, section och created_at med uttryck från Refine Content Layout.
- Säkerställ att Recursive Text Chunker är ansluten som text-splitter för Standard Data Loader.
Steg 6: konfigurera utdata till vector store
Lagra de rensade dokumenten och embeddings i Supabase.
- Öppna Supabase Vector Index och ställ in Mode till
insert. - Ställ in Table Name till
documents. - Ställ in Embedding Batch Size till
800. - Credential Required: Anslut era supabaseApi-inloggningsuppgifter i Supabase Vector Index.
- Credential Required: Anslut era googlePalmApi-inloggningsuppgifter i Gemini Embedding Generator.
- Säkerställ att Gemini Embedding Generator är ansluten som embedding-källa för Supabase Vector Index, och att Standard Data Loader är ansluten som dokumentkälla.
Tips: Om embeddings misslyckas, verifiera att Gemini API är aktiverat och att fakturering är aktiv för ert Google Palm-projekt.
Steg 7: testa och aktivera ert arbetsflöde
Validera körningen end-to-end och aktivera sedan arbetsflödet för användning i produktion.
- Klicka på Execute Workflow och skicka in Website Input Form med en test-URL och en låg sidbegränsning.
- Bekräfta att begäran flödar från Website Input Form → Map Request Fields → Configure Apify Options och sedan in i rätt Apify-crawler.
- Verifiera att poster rensas i Sanitize Records, struktureras i Refine Content Layout och lagras i Supabase Vector Index.
- När allt är bekräftat, slå på arbetsflödets Active-reglage för att aktivera produktionskörningar.
Vanliga fallgropar
- Apify-autentisering kan löpa ut eller kräva specifika behörigheter. Om saker slutar fungera, kontrollera först din Apify API-token i n8n-credentials och körloggarna i Apify-dashboarden.
- Om du använder Wait-noder eller extern rendering varierar processtiderna. Öka väntetiden om nedströmsnoder misslyckas på grund av tomma svar.
- Supabase-insert kan misslyckas utan tydliga fel om pgvector inte är aktiverat eller om embedding-kolumnen har fel storlek. Dubbelkolla schemat för din documents-tabell (vector 768) innan du skyller på skraparen.
Vanliga frågor
Cirka 45 minuter om dina Apify-, Supabase- och Gemini-konton är redo.
Nej. Du kopplar främst autentiseringsuppgifter och klistrar in en liten SQL-snutt i Supabase för att aktivera pgvector.
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 även räkna in användning av Google Gemini API samt Apify-kostnader baserat på hur många sidor som skrapas.
Två alternativ: n8n Cloud (hanterat, enklast setup) eller egen hosting på en VPS. För egen hosting är Hostinger VPS prisvärt och hanterar n8n bra. Egen hosting ger dig obegränsade körningar men kräver grundläggande serveradministration.
Ja, men du gör det på två ställen. Först justerar du indata som matar in i ”Map Request Fields” så att dina start-URL:er och include/exclude-mönster bara träffar något som /docs. Välj sedan vägen ”Configure Apify Options” som matchar hur strikt du vill vara (enstaka URL för ett snabbt test, begränsad crawl för en docs-sektion). Vanliga justeringar är att sätta en tajtare sidgräns, exkludera bloggsidor och öka chunkstorleken om ditt innehåll är väldigt strukturerat.
Oftast är det en utgången eller saknad Apify API-token i någon av HTTP request-noderna ”Run Apify Scraper”. Uppdatera token i n8n-credentials och kör sedan en liten crawl igen för att bekräfta. Om det fortfarande misslyckas, kontrollera Apify-körloggen efter blockerade sidor, omdirigeringar eller en felkonfigurerad start-URL. Rate limits och begränsningar i betalda planer kan också visa sig som ”slumpmässiga” fel när du går från 5 sidor till en fullständig webbplatscrawl.
Om du självhostar n8n finns ingen hård körningsgräns (det beror främst på din server samt Apify/Gemini-kvoter). På n8n Cloud beror din månatliga körningsgräns på din plan. I praktiken börjar de flesta team med 5–10 sidor, granskar chunkkvaliteten i Supabase och skalar sedan upp till några hundra sidor när rensningsreglerna ser rätt ut.
Ofta, ja. Det här arbetsflödet har förgreningslogik (skraplägen, kontroller av sidgränser), textbearbetning och skrivningar till vektordatabas som helt enkelt är lättare att styra i n8n. Egen hosting är också viktigt när du experimenterar mycket, eftersom du inte räknar varje litet steg som en betald task. Zapier eller Make kan fungera för lätta tvåstegszaps, men RAG-inläsning tenderar att växa. Om du vill ha en second opinion på vilken väg som är enklast för din setup, prata med en automatiseringsexpert.
När detta väl rullar slutar din webbplats vara ”innehåll” och blir i stället en sökbar tillgång. Sätt upp det, testa med en liten crawl och låt sedan Supabase bli platsen som din chatbot och ditt team faktiskt kan lita på.
Kontakta oss
Hör av dig, så diskuterar vi hur just din verksamhet kan dra nytta av alla fantastiska möjligheter som AI skapar.