Att kontrollera konkurrentpriser manuellt låter enkelt tills det är tisdag, du jonglerar fem flikar per SKU och den ”snabba kontrollen” blir ett rörigt kalkylark du inte riktigt litar på. Missar du en prissänkning en dag märker du det den hårda vägen, oftast först efter att försäljningen börjar bromsa.
Det här med automatiserad prisbevakning slår hårdast mot e-handelschefer, men produktmarknadsförare och revenue ops-ansvariga känner av det också. Du får daglig, strukturerad prisinformation i Google Sheets, plus Slack- och e-postvarningar när en konkurrent går under ditt pris mer än din tröskel tillåter.
Nedan ser du exakt hur flödet körs, vad det ersätter och vad du behöver för att sätta upp det i n8n utan att göra det till ett tekniskt projekt.
Så här fungerar automatiseringen
Se hur detta löser problemet:
n8n Workflow Template: Bright data till Google Sheets: priserna hålls aktuella
flowchart LR
subgraph sg0["Schedule Flow"]
direction LR
n0@{ icon: "mdi:swap-vertical", form: "rounded", label: "Load Competitor URLs", pos: "b", h: 48 }
n1@{ icon: "mdi:swap-vertical", form: "rounded", label: "Loop Through Competitors", 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/>Scrape with Bright Data"]
n3@{ icon: "mdi:cog", form: "rounded", label: "Wait for Scraping", pos: "b", h: 48 }
n4["<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/>Fetch Scraped Data"]
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/>Parse Price Data"]
n6@{ icon: "mdi:database", form: "rounded", label: "Log to Google Sheets", pos: "b", h: 48 }
n7@{ icon: "mdi:swap-horizontal", form: "rounded", label: "Check If Alert Needed", pos: "b", h: 48 }
n8["<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/slack.svg' width='40' height='40' /></div><br/>Send Slack Alert"]
n9@{ icon: "mdi:message-outline", form: "rounded", label: "Send Email Alert", pos: "b", h: 48 }
n10@{ icon: "mdi:cog", form: "rounded", label: "Aggregate All Results", 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/code.svg' width='40' height='40' /></div><br/>Create Daily Summary"]
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/slack.svg' width='40' height='40' /></div><br/>Send Daily Report to Slack"]
n13@{ icon: "mdi:play-circle", form: "rounded", label: "Schedule Trigger", pos: "b", h: 48 }
n5 --> n6
n5 --> n7
n5 --> n1
n13 --> n0
n9 --> n10
n8 --> n10
n3 --> n4
n4 --> n5
n11 --> n12
n0 --> n1
n10 --> n11
n7 --> n8
n7 --> n9
n2 --> n3
n1 --> n2
n1 --> n10
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 n13 trigger
class n7 decision
class n6 database
class n2,n4 api
class n5,n11 code
classDef customIcon fill:none,stroke:none
class n2,n4,n5,n8,n11,n12 customIcon
Utmaningen: att hålla konkurrentpriser uppdaterade utan onödigt merjobb
Konkurrensanalys av prissättning faller isär på tråkiga, dyra sätt. Du öppnar en lista med konkurrenternas produktsidor, kopierar priser till ett ark och säger till dig själv att du ska ”göra det dagligen”, ända tills mötena staplas och det blir veckovis. Då reagerar du i stället för att fatta beslut. Och eftersom konkurrenters sajter formaterar priser olika (kampanjbanderoller, paket, ”från X kr”, frakt inbakad) blir datan du fångar inkonsekvent, vilket gör trendanalys meningslös. Ärligt talat är det värsta den mentala belastningen. Du är aldrig säker på om du tittar på dagens verklighet eller förra veckans.
Det blir snabbt mycket. Här är var det oftast brister i den dagliga driften.
- Manuella kontroller blir en återkommande kalenderuppgift som i tysthet stjäl cirka 2 timmar i veckan.
- En missad prisunderbud kan ligga kvar i flera dagar eftersom ingen blir notifierad i det ögonblick det faktiskt spelar roll.
- Spårning via copy-paste skapar en stökig historik, så du kan inte säkert svara på ”är det här en trend eller en engångsgrej?”
- Team bråkar om siffror eftersom källa och tidsstämpel inte fångas strukturerat.
Lösningen: automatiserad bevakning av konkurrentpriser med Bright Data och Google Sheets
Det här flödet körs på schema (som standard varje dag kl. 09.00) och gör prischeckarna åt dig. Det startar med din lista över konkurrenternas produkt-URL:er och din egen referens för ”aktuellt pris”. För varje konkurrent-sida skickar n8n ett scraping-jobb till Bright Datas Web Scraper API, väntar på att det blir klart, hämtar sedan resultatet och extraherar priset även när webbplatsens layout skiljer sig. Därefter beräknar det nyckeltalen du faktiskt bryr dig om, som skillnaden mellan ditt pris och deras, och loggar varje kontroll i Google Sheets så att du automatiskt bygger en korrekt formaterad historik. Om en konkurrent är tydligt billigare än du (utifrån din tröskel) skickas en varning till Slack och ett e-postmeddelande så att rätt personer ser det direkt. När körningen är klar genererar flödet en daglig sammanfattningsrapport och postar även den i Slack.
Flödet börjar med en tidsstyrd trigger och loopar sedan igenom varje konkurrent-URL i batchar. Bright Data hanterar scraping-livscykeln och n8n hanterar jämförelselogik, loggning och varningar. Till sist får Slack både ”något har ändrats”-varningar och den dagliga sammanfattningen.
Vad som förändras: före vs. efter
| Det här försvinner | Effekten du märker |
|---|---|
|
|
Effekt i praktiken
Säg att du följer 12 konkurrent-URL:er för en handfull viktiga SKU:er. Manuellt kan du lägga ungefär 5 minuter per URL mellan sidladdningar, rabattberäkningar och uppdatering av arket, vilket är cirka en timme per körning. Gör du det fem dagar i veckan landar du nära 5 timmar repetitivt arbete. Med den här automatiseringen är ”mänsklig tid” närmare 10 minuter: du granskar Slack-sammanfattningen och agerar bara på underbudsvarningarna, medan Google Sheets loggar resten i bakgrunden.
Krav
- n8n-instans (prova n8n Cloud gratis)
- Alternativ för egen drift om du föredrar det (Hostinger fungerar bra)
- Bright Data för API-åtkomst till web scraping.
- Google Sheets för att lagra prishistorik och tidsstämplar.
- Slack för snabba underbudsvarningar och dagliga sammanfattningar.
- SMTP-e-postleverantör för att skicka reservvarningar.
- Bright Data API-token (hämtas i Bright Data-dashboarden).
Svårighetsnivå: Medel. Du kopplar konton, klistrar in API-uppgifter och redigerar en kort lista med konkurrent-URL:er och tröskelvärden.
Behöver du hjälp att implementera detta? Prata med en automationsexpert (gratis 15-minuters konsultation).
Flödet steg för steg
Dagligt schema startar det. Kl. 09.00 (eller den tid du väljer) startar n8n en bevakningskörning automatiskt, så processen hänger inte på att någon kommer ihåg.
Din konkurrentlista laddas. Flödet hämtar en array med konkurrenternas produkt-URL:er tillsammans med ditt eget referenspris och en varningströskel (till exempel varna om de är mer än 10 % billigare).
Bright Data skrapar varje URL. n8n triggar ett scraping-jobb i Bright Data, väntar på resultatet, hämtar dataset-utdata och standardiserar sedan priset så att jämförelser inte påverkas av formateringsavvikelser.
Resultat loggas och utvärderas. Google Sheets får en ny rad för varje konkurrentkontroll, därefter avgör ett ”if”-villkor om underbudsregeln uppfylls. Om tröskeln överskrids skickas Slack- och e-postvarningar; annars fortsätter körningen i det tysta.
En daglig sammanfattning hamnar i Slack. På slutet aggregerar flödet utfall, genererar en sammanfattning (genomsnittliga skillnader, lägsta/högsta konkurrent) och publicerar en rapport så att teamet har en gemensam vy.
Du kan enkelt ändra listan med konkurrent-URL:er för att bevaka fler produkter, eller justera varningströskeln efter dina marginaler. Se den fullständiga implementationsguiden nedan för anpassningsalternativ.
Steg-för-steg-guide för implementering
Steg 1: konfigurera Schedule Trigger
Ställ in arbetsflödets schema så att prisövervakningen körs automatiskt.
- Lägg till eller öppna Timed Start Trigger.
- Definiera schemat under Rule så att det matchar önskat övervakningsintervall.
- Bekräfta att triggern är ansluten till Configure Rival Links enligt flödet.
Steg 2: anslut Google Sheets
Logga resultat till ett kalkylark för historik, uppföljning och analys.
- Öppna Record to Sheets och ställ in Operation till
appendOrUpdate. - Ställ in Document till
[YOUR_ID]och Sheet tillPrice History. - Bekräfta att kolumnmappningarna använder uttryck som
{{ $json.competitorUrl }},{{ $json.scrapedAt }}och{{ $json.priceDifference }}. - Credential Required: Anslut era Google Sheets OAuth2-uppgifter.
[YOUR_ID] oförändrat kommer noden att misslyckas. Ersätt det med ert Google Sheet-ID.Steg 3: konfigurera konkurrentinmatningar och iteration
Definiera konkurrentlistan, ert pris och larmtröskeln och iterera sedan igenom varje konkurrent.
- I Configure Rival Links ställer ni in competitors till JSON-arrayen med
[{ "name": "Competitor A", "url": "...", "productName": "..." }]. - Ställ in ourPrice till
149.99och alertThreshold till10(justera vid behov). - Öppna Iterate Rival List för att säkerställa att den är ansluten från Configure Rival Links för batchbearbetning.
- Bekräfta att Iterate Rival List skickar vidare till Trigger Data Scraper och även matar ut till Combine All Outcomes när den är klar.
Steg 4: konfigurera scraping och prisbearbetning
Trigga Bright Data-scrapern, vänta tills den är klar och beräkna sedan prismått utifrån resultaten.
- I Trigger Data Scraper ställer ni in URL till
https://api.brightdata.com/datasets/v3/triggeroch JSON Body till uttrycket{ "dataset_id": "gd_l7q7dkf244hwjntr0", "endpoint": "https://api.brightdata.com/datasets/v3/snapshot/gd_l7q7dkf244hwjntr0?format=json", "url": "{{ $json.competitors[$itemIndex].url }}", "discover_new_sites": false }. - Aktivera Send Body och Send Headers och säkerställ att Content-Type är
application/json. - Credential Required: Anslut era HTTP Header Auth-uppgifter i Trigger Data Scraper.
- I Pause for Scrape ställer ni in Amount till
10för att ge scrapingen tid att slutföras. - I Retrieve Scrape Results ställer ni in URL till
{{ $json.snapshot_id ? 'https://api.brightdata.com/datasets/v3/snapshot/' + $json.snapshot_id + '?format=json' : 'https://api.brightdata.com/datasets/v3/progress/' + $json.snapshot_id }}. - Credential Required: Anslut era HTTP Header Auth-uppgifter i Retrieve Scrape Results.
- Granska Compute Price Metrics för att säkerställa att JavaScript:et tolkar prisfälten och använder
$('Configure Rival Links').item.json.ourPriceoch$('Iterate Rival List').item.json.competitors[$itemIndex].
Steg 5: konfigurera larm, aggregering och daglig sammanfattning
Skicka larm i realtid för konkurrenter med lägre pris och publicera en daglig sammanfattningsrapport.
- I Evaluate Alert Criteria behåller ni villkoren inställda på att
{{ $json.isUnderpriced }}är true och att{{ $json.percentageDiff }}är större än{{ $('Configure Rival Links').item.json.alertThreshold }}. - Bekräfta parallell körning: Compute Price Metrics matar ut till Record to Sheets, Evaluate Alert Criteria och Iterate Rival List parallellt.
- Bekräfta parallell körning: Evaluate Alert Criteria matar ut till både Post Slack Warning och Dispatch Email Notice parallellt.
- I Post Slack Warning behåller ni larmmeddelandet med uttryck som
{{ $json.competitorName }}och{{ $json.priceDifference }}. - Credential Required: Anslut era Slack-uppgifter i Post Slack Warning.
- I Dispatch Email Notice ställer ni in Subject till
Price Alert: {{ $json.competitorName }} - {{ $json.productName }}och uppdaterar To Email och From Email från[YOUR_EMAIL]. - Credential Required: Anslut era SMTP/Email Send-uppgifter i Dispatch Email Notice.
- Säkerställ att Combine All Outcomes aggregerar utfall innan Generate Daily Summary skapar rapporten och Publish Daily Slack Report publicerar den till Slack.
- Credential Required: Anslut era Slack-uppgifter i Publish Daily Slack Report.
Steg 6: testa och aktivera ert arbetsflöde
Kör ett manuellt test för att validera scraping, larm och loggning innan ni aktiverar schemat.
- Klicka på Execute Workflow för att köra Timed Start Trigger manuellt.
- Verifiera att Record to Sheets lägger till rader i arket
Price Historyoch inkluderar värden somcompetitorPriceochpriceDifference. - Bekräfta att larm visas i Slack från Post Slack Warning och att ett mejl skickas av Dispatch Email Notice när en konkurrent underprissätter er.
- Kontrollera att Publish Daily Slack Report publicerar den dagliga sammanfattningen efter att Generate Daily Summary har körts.
- När allt är validerat växlar ni arbetsflödet till Active så att Timed Start Trigger kör enligt schema.
Se upp för
- Bright Data-inloggningar kan löpa ut eller så kan ditt dataset vara felkonfigurerat. Om scraping plötsligt returnerar tom data, kontrollera först tokenstatus och dataset-ID i Bright Data-dashboarden.
- Om du använder Wait-noder eller extern rendering varierar processtiderna. Öka väntetiden om efterföljande noder fallerar på grund av tomma svar.
- Slack-varningar kan misslyckas utan att det märks om appen tappar kanalbehörigheter. När meddelanden slutar dyka upp, bekräfta Slack-anslutningen i n8n och godkänn arbetsytan på nytt vid behov.
Vanliga frågor
Cirka 30–40 minuter om din åtkomst till Bright Data, Slack och Google redan är klar.
Ja. Du skriver ingen kod, men du kommer att klistra in API-uppgifter och underhålla en korrekt formaterad lista med konkurrent-URL:er.
Ja. n8n har ett gratis alternativ för egen drift 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 Bright Data API-användning och eventuella kostnader för e-postleverantör.
Två alternativ: n8n Cloud (hanterat, enklast att komma igång) eller egen drift på en VPS. För egen drift är Hostinger VPS prisvärd och hanterar n8n bra. Egen drift ger obegränsade körningar men kräver grundläggande serverhantering.
Börja med steget ”Configure Rival Links” där konkurrent-URL:erna, ditt referenspris och tröskeln ligger. Om du vill ha en annan datadestination kan du byta steget ”Record to Sheets” till Microsoft Excel 365 eller Airtable utan att ändra scraping-logiken. Många team justerar också formatet på Slack-meddelandet i steget ”Post Slack Warning” så att det inkluderar SKU, marginalnoteringar eller en direktlänk till konkurrentens sida.
Oftast beror det på en ogiltig eller utgången API-token, eller att dataset-ID:t har ändrats i Bright Data. Uppdatera inloggningsuppgiften i n8n och kör sedan en enskild konkurrent-URL för att bekräfta att scrapern returnerar data. Om du skrapar många sidor samtidigt kan rate limiting också visa sig som timeouts eller tomma svar.
Den skalar till dussintals eller hundratals URL:er, så länge du justerar batchning och väntetid för Bright Data-jobb.
Ofta ja, eftersom detta inte är en enkel ”om pris, då notifiera”-uppgift. Du orkestrerar scraping-jobb, väntar på resultat, tolkar priser, skriver rader, grenar på en tröskel och genererar sedan en aggregerad dagsrapport. n8n hanterar den typen av flersteglogik på ett strukturerat sätt, och egen drift gör att du inte betalar per liten delsteg som många team i slutändan gör i Zapier. Zapier eller Make kan fortfarande fungera bra om du redan har en pålitlig prisfeed och bara behöver grundläggande routing till Slack. Om du är osäker, prata med en automationsexpert och mappa det mot din volym och budget.
När detta väl rullar blir konkurrentbevakning en snabb avstämning i stället för en daglig syssla. Flödet hanterar de repetitiva kontrollerna så att teamet kan fokusera på prissättningsbeslut som faktiskt driver intäkter.
Kontakta oss
Hör av dig, så diskuterar vi hur just din verksamhet kan dra nytta av alla fantastiska möjligheter som AI skapar.