Din prissättning ska inte hänga på att någon kommer ihåg att ”kolla konkurrenterna” varje morgon. Men det är ofta så det blir. Flikar överallt, siffror som kopieras in i ett kalkylark, och sedan det där ”vänta… var det 49 $ i går eller 59 $?”-ögonblicket.
Det är här prisvarningar i Sheets räddar dig: e-handelsansvariga märker det först, men prisanalyser och byråteam som hanterar kundkataloger hamnar i samma röra. Du får strukturerade ändringsloggar i Google Sheets plus en Gmail-varning när en konkurrent rör priset, så du kan agera innan marginalen tar stryk.
Nedan ser du hur automationen körs i n8n, vilka resultat du kan förvänta dig och vad du behöver för att sätta upp den utan att det blir ett ”nytt löpande projekt”.
Så fungerar den här automationen
Hela n8n-workflowen, från trigger till slutresultat:
n8n Workflow Template: Google sheets + Gmail: prisvarningar på konkurrenter
flowchart LR
subgraph sg0["Check Pricing Every Day Flow"]
direction LR
n0@{ icon: "mdi:play-circle", form: "rounded", label: "Check Pricing Every Day", pos: "b", h: 48 }
n1["<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 Page via Bright Data"]
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/html.dark.svg' width='40' height='40' /></div><br/>Extract HTML Content"]
n3["<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/>Format & Isolate Price Block"]
n4@{ icon: "mdi:database", form: "rounded", label: "Read Last Saved Price", pos: "b", h: 48 }
n5@{ icon: "mdi:swap-horizontal", form: "rounded", label: "Has Price Changed?", pos: "b", h: 48 }
n6@{ icon: "mdi:cog", form: "rounded", label: "No Change Detected – Stop", pos: "b", h: 48 }
n7@{ icon: "mdi:database", form: "rounded", label: "Update Stored Price", pos: "b", h: 48 }
n8@{ icon: "mdi:message-outline", form: "rounded", label: "Send Price Change Alert Email", pos: "b", h: 48 }
n5 --> n6
n5 --> n7
n7 --> n8
n2 --> n3
n4 --> n5
n0 --> n1
n1 --> n2
n3 --> n4
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 n5 decision
class n4,n7 database
class n1 api
class n3 code
classDef customIcon fill:none,stroke:none
class n1,n2,n3 customIcon
Problemet: Konkurrentpriser ändras medan du är upptagen
Konkurrentbevakning låter enkelt tills du faktiskt gör det. En person kollar en produktsida, en annan uppdaterar ett kalkylark, och när du väl ser en sänkning har du redan tappat en dags försäljning på fel pris. Eller värre: du matchar ett pris som var en tillfällig kampanj och det är du som blir kvar med tunnare marginaler. Sen kommer det stökiga: sidor byter layout, priser visas som ”från X $”, och plötsligt är ditt ark fullt av halvsanningar som du inte kan lita på.
Det växer snabbt. Här är var det brukar fallera.
- Någon måste manuellt öppna samma konkurrentsidor varje dag, och det blir i det tysta cirka 2 timmar i veckan.
- Prishistorik loggas inkonsekvent, vilket gör att du inte kan avgöra om en förändring är en trend eller bara brus.
- Du får reda på det för sent eftersom du bara upptäcker ändringar när du råkar komma ihåg att titta.
- Ett enda copy-paste-misstag (eller komma-/decimalstrul) kan trigga ett dåligt prissättningsbeslut.
Lösningen: Daglig scraping + ändringsdetektering + Gmail-varningar
Den här n8n-workflowen övervakar konkurrenters produktsidor enligt ett schema, extraherar aktuellt pris, jämför det med senast registrerat värde och agerar bara när något faktiskt har ändrats. Den startar med en daglig trigger, hämtar konkurrentsidan (via en HTTP-begäran som kan routas genom en scraping-leverantör som Bright Data för att undvika blockeringar) och tolkar HTML-markupen för att hitta priset. Därefter standardiserar den värdet (så att ”$49.00” och ”49” inte behandlas som olika) och laddar föregående pris från Google Sheets. Om siffran har rört sig skriver den tillbaka det nya värdet till arket och skickar en Gmail-varning med detaljer. Om inget har ändrats stoppar den direkt.
Workflowen startar enligt schema, scrapar och tolkar prisdata från en konkurrent-URL. Efter en snabb jämförelse mot din sparade baslinje i Google Sheets loggar den antingen uppdateringen och mejlar dig, eller så avslutas den utan onödigt brus.
Det du får: Automation vs. resultat
| Det den här workflowen automatiserar | Resultat du får |
|---|---|
|
|
Exempel: Så här ser det ut
Säg att du följer 10 produkter hos 3 konkurrenter. Manuellt tar även en snabb kontroll kanske 3 minuter per sida, vilket blir cirka 90 minuter varje dag (och det är om inget går fel). Med den här workflowen lägger du ungefär 10 minuter en gång på att lägga in URL:er och mappa pris-selektorn, och sedan är den dagliga körningen helt hands-off. Du rör den bara när Gmail pingar dig, vilket för många kataloger betyder några varningar i veckan, inte 30 sidkontroller per dag.
Det här behöver du
- n8n-instans (prova n8n Cloud gratis)
- Självhosting-alternativ om du föredrar det (Hostinger fungerar bra)
- Google Sheets för att lagra prishistorik och baslinjer.
- Gmail för att skicka prisändringsvarningar till teamet.
- Bright Data-uppgifter (hämta dem i din Bright Data-dashboard) om konkurrentsajter blockerar scraping.
Kunskapsnivå: Medel. Du kopierar workflowen till n8n, kopplar konton och justerar hur priset detekteras på dina specifika sidor.
Vill du inte sätta upp det här själv? Prata med en automationsexpert (gratis 15-minuters konsultation).
Så fungerar det
Ett dagligt schema startar kontrollen. Workflowen körs från en Schedule Trigger (till exempel varje morgon innan första orderruschen), så du slipper förlita dig på en kalenderpåminnelse.
Konkurrentsidan hämtas och tolkas. n8n hämtar prissidan via HTTP Request, sedan läser ett HTML-tolkningssteg markupen och skickar relevanta delar vidare till ett litet kodsteg som isolerar det faktiska prisvärdet.
Dagens pris jämförs med ditt senast registrerade pris. Google Sheets används som ”minnet”. Workflowen laddar föregående värde och en If-villkorsgren avgör om priset har ändrats tillräckligt för att vara relevant (utifrån din logik).
Uppdateringar loggas och varningar skickas. Om priset skiljer sig skrivs den nya posten till Google Sheets och en Gmail-varning skickas med produkten och gammalt vs. nytt pris. Om inget har ändrats stannar den där.
Du kan enkelt justera schemat och varningsreglerna efter dina behov. Se hela implementationsguiden nedan för anpassningsalternativ.
Steg-för-steg-guide för implementation
Steg 1: Konfigurera Schedule Trigger
Ställ in arbetsflödet att köras dagligen vid angiven timme med den schemabaserade triggern.
- Lägg till och öppna Daily Pricing Trigger.
- Ställ in Rule så att den kör vid
triggerAtHour: 9. - Koppla Daily Pricing Trigger till Retrieve Pricing Page.
Steg 2: Anslut Google Sheets
Konfigurera kalkylbladsnoderna som läser och uppdaterar er prishistorik.
- Öppna Load Prior Prices och välj kalkylbladet
Competitor price analyzeroch flikenSheet1. - Referens krävs: Anslut era googleSheetsOAuth2Api-referenser.
- Öppna Write Updated Prices och bekräfta att Operation är satt till
update. - Verifiera att mappningen för Columns använder uttryck som
{{ $json.Basic }},{{ $json.Grow }},{{ $json.Advanced }},{{ $json.Plus }}och{{ $json.row_number }}. - Referens krävs: Anslut era googleSheetsOAuth2Api-referenser.
Steg 3: Konfigurera hämtning och parsning av prissidan
Hämta konkurrentens prissida och extrahera relevant HTML-innehåll.
- Öppna Retrieve Pricing Page och sätt URL till
https://api.brightdata.com/requestoch Method tillPOST. - Sätt Specify Body till
jsonoch aktivera Send Body och Send Headers. - Klistra in JSON Body exakt som
{ "zone": "n8n_unblocker", "url": "https://www.shopify.com/uk/pricing", "country": "us", "format": "raw", "headers": { "User-Agent": "Mozilla/5.0", "Accept": "text/html" } }. - Sätt headern Authorization till
Bearer [CONFIGURE_YOUR_TOKEN]. - Öppna Parse Page Markup och sätt Operation till
extractHtmlContent. - Lägg till extraktionsvärden: Plan name med CSS Selector
h3(return array) och Pricing med CSS Selectorspan(return array).
[CONFIGURE_YOUR_TOKEN] i Retrieve Pricing Page kommer det att orsaka auktoriseringsfel.Steg 4: Konfigurera prisbearbetning
Normalisera extraherad data till en strukturerad plan-till-pris-mappning.
- Öppna Isolate Price Details och behåll den medföljande JavaScript-koden intakt för att mappa priserna för
Basic,Grow,AdvancedochPlus. - Bekräfta att regex-logiken finns med:
/\$[\d,]+USD\/month/och att rensningssteget tar bort$och kommatecken. - Koppla Parse Page Markup till Isolate Price Details, och därefter till Load Prior Prices.
Steg 5: Konfigurera villkorslogik och uppdateringar
Jämför aktuella priser med lagrade värden och avgör om ni ska uppdatera och avisera.
- Öppna Detect Pricing Changes och verifiera att villkoren jämför aktuella och tidigare värden med uttryck som
{{ $('Isolate Price Details').item.json.Basic }}equals{{ $json.Basic }}, och upprepa förGrow,AdvancedochPlus. - Koppla true-utgången från Detect Pricing Changes till Halt When Unchanged.
- Koppla false-utgången från Detect Pricing Changes till Write Updated Prices så att endast ändringar triggar uppdateringar.
- Säkerställ att Write Updated Prices är kopplad till Email Price Alert.
Steg 6: Konfigurera e-postaviseringar
Skicka en avisering när prisändringar upptäcks.
- Öppna Email Price Alert och sätt Send To till er aviseringadress och ersätt
[YOUR_EMAIL]. - Behåll Subject som
Competitor Pricing Page Has Changed. - Säkerställ att Message innehåller tidsstämpeluttrycket
{{ $now }}för spårbarhet. - Referens krävs: Anslut era gmailOAuth2-referenser.
Steg 7: Testa och aktivera ert arbetsflöde
Validera flödet från början till slut och aktivera därefter daglig övervakning.
- Kör Daily Pricing Trigger manuellt för att köra arbetsflödet en gång.
- Bekräfta att Retrieve Pricing Page returnerar HTML-innehåll och att Parse Page Markup ger arrayer för
Plan nameochPricing. - Verifiera att Isolate Price Details ger numeriska värden och att Detect Pricing Changes routar korrekt till Halt When Unchanged eller Write Updated Prices.
- Kontrollera att Write Updated Prices uppdaterar rätt rad och att Email Price Alert skickar meddelandet när ändringar sker.
- Aktivera arbetsflödet för att möjliggöra daglig övervakning.
Vanliga fallgropar
- Google Sheets-inloggningar kan löpa ut eller kräva specifika behörigheter. Om något går sönder, kontrollera sidan Credentials i n8n och bekräfta att det anslutna Google-kontot fortfarande har redigeringsåtkomst till arket.
- Om du använder Wait-noder eller extern rendering varierar processtiderna. Öka väntetiden om nedströmsnoder fallerar på tomma svar.
- Bright Data eller målsajten kan strypa förfrågningar, vilket syns som slumpmässiga 403/429-fel i HTTP Request-noden. Kontrollera körloggen för svarskoder och sänk sedan schematakten eller rotera proxyinställningar.
Vanliga frågor
Cirka 30 minuter om du redan har URL:erna och dina Google-anslutningar redo.
Nej. Du kan behöva justera en liten snippet eller selektor, men det är mest copy-paste och testning.
Ja. n8n har ett gratis självhostat alternativ och en gratis provperiod på n8n Cloud. Cloud-planer börjar på 20 $/månad för högre volym. Du behöver också räkna in kostnader för Bright Data om du använder det för scraping.
Två alternativ: n8n Cloud (hanterat, enklast att komma igång) eller självhosting på en VPS. För självhosting är Hostinger VPS prisvärd och hanterar n8n bra. Självhosting ger dig obegränsade körningar men kräver grundläggande serveradministration.
Ja, men du ändrar sista steget. Behåll samma logik för scraping och jämförelse och byt sedan ut Gmail-noden mot en ”daglig sammanställning”-gren som skriver ändringar till en sammanfattningsflik och mejlar en gång i veckan. Vanliga anpassningar är olika scheman per konkurrent, att bara larma när förändringen är större än din tröskel samt att spåra flera SKU:er per sida.
Oftast handlar det om behörigheter eller en utgången OAuth-anslutning. Återanslut Google Sheets i n8n-credentials och bekräfta sedan att samma Google-konto kan redigera målarket. Kontrollera också att ditt arknamn och kolumnrubriker fortfarande matchar det workflowen förväntar sig. Om du har bytt namn på flikar kan steget ”Load Prior Prices” inte hitta rätt ställe att läsa från.
På n8n Cloud Starter kan du köra några tusen körningar per månad, vilket räcker gott för en liten katalog. Om du självhostar finns ingen körningsgräns (det beror främst på din server och hur ofta du scrapar). I praktiken börjar de flesta team med 20–50 URL:er, säkerställer att extraktionen är stabil och skalar sedan därifrån.
Ofta, ja, eftersom scraping + parsing + villkorslogik snabbt blir krångligt (och dyrt) i enklare automationverktyg. n8n hanterar grenar, kodstädning och logik för ”stoppa när oförändrat” utan att fakturan blir en obehaglig överraskning. Självhosting är också en stor grej om du vill bevaka många URL:er dagligen. Zapier eller Make kan fortfarande fungera för enkla ”sheet ändrat → mejl”-flöden, men de är inte byggda för HTML-extraktion. Om du vill ha en second opinion: Prata med en automationsexpert så får du en rak rekommendation.
När det här väl rullar slutar du ”kolla priser” och börjar reagera på riktiga signaler. Workflowen tar hand om det repetitiva, och ditt kalkylark blir äntligen pålitligt.
Kontakta oss
Hör av dig, så diskuterar vi hur just din verksamhet kan dra nytta av alla fantastiska möjligheter som AI skapar.