Dina priser rör sig, konkurrenter justerar, och ändå får du reda på det flera timmar senare. Inte för att du missar det, utan för att det är segt, tråkigt och märkligt lätt att “ta i morgon” att kolla tio produktsidor (och sedan uppdatera ett kalkylark).
E-handelschefer känner det när marginalerna pressas. Tillväxtmarknadsförare märker det när kampanjer slutar konvertera. Och grundare som kör lean? De slutar ofta med att göra kontrollerna själva. Den här automatiseringen för Sheets Telegram alerts fångar prisförändringar åt dig och pingar dig i Telegram, oftast innan ditt nästa möte.
Nedan ser du exakt vad flödet övervakar, vad som loggas och hur det håller en korrekt “baslinje”-nivå för priset så att dina aviseringar förblir pålitliga.
Så fungerar den här automatiseringen
Hela n8n-flödet, från trigger till slutlig output:
n8n Workflow Template: Google Sheets + Telegram: prisändringar till dig
flowchart LR
subgraph sg0["Daily 8 AM Flow"]
direction LR
n0@{ icon: "mdi:play-circle", form: "rounded", label: "Daily 8 AM Trigger", pos: "b", h: 48 }
n1@{ icon: "mdi:database", form: "rounded", label: "Fetch Product List from Sheet", pos: "b", h: 48 }
n2@{ icon: "mdi:swap-vertical", form: "rounded", label: "Process Each Product in Batc..", pos: "b", h: 48 }
n3@{ icon: "mdi:cog", form: "rounded", label: "Pause Between Requests", 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/>Load Product Page HTML"]
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/html.dark.svg' width='40' height='40' /></div><br/>Extract Current Price from H.."]
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/code.svg' width='40' height='40' /></div><br/>Normalize Price Values"]
n7["<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/>Compute Price Change"]
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/code.svg' width='40' height='40' /></div><br/>Clean Up Parsed Fields"]
n9@{ icon: "mdi:swap-horizontal", form: "rounded", label: "Is Price Changed?", pos: "b", h: 48 }
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/code.svg' width='40' height='40' /></div><br/>Build Telegram Alert Message"]
n11@{ icon: "mdi:database", form: "rounded", label: "Log Price History to Sheet", pos: "b", h: 48 }
n12@{ icon: "mdi:cog", form: "rounded", label: "Pause Before Updating Sheet", pos: "b", h: 48 }
n13@{ icon: "mdi:database", form: "rounded", label: "Update Last Price in Master ..", pos: "b", h: 48 }
n14["<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/telegram.svg' width='40' height='40' /></div><br/>Send Price Alert via Telegram"]
n9 --> n10
n9 --> n11
n0 --> n1
n7 --> n8
n8 --> n9
n4 --> n5
n4 --> n2
n6 --> n7
n3 --> n4
n11 --> n12
n12 --> n13
n10 --> n14
n1 --> n2
n14 --> n2
n5 --> n6
n2 --> n3
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 n9 decision
class n1,n11,n13 database
class n4 api
class n6,n7,n8,n10 code
classDef customIcon fill:none,stroke:none
class n4,n5,n6,n7,n8,n10,n14 customIcon
Problemet: prisbevakning blir en daglig tidstjuv
Att manuellt följa konkurrentpriser låter enkelt tills du gör det i en vecka. Du öppnar ett kalkylark, klickar på en URL, väntar på att sidan laddar, letar efter priset och kopierar tillbaka det (förhoppningsvis på rätt rad). Upprepa för varje produkt. Sedan frågar någon: “När ändrades det?” och du inser att du inte sparade historik, bara senaste siffran. Eller värre: “senaste siffran” är fel eftersom ett valutasymbol eller ett kommatecken ställde till det i din copy-paste.
Det eskalerar snabbt. Här är var det går snett i riktiga team.
- Att kolla 20 produkter på flera sajter kan äta upp ungefär en timme varje morgon, och det är innan du ens hinner agera.
- Utan en baslinje och en historiklogg fastnar ni i diskussioner om vad som ändrats i stället för att agera.
- Copy-paste-fel smyger sig in, vilket gör att du börjar misstro arket du byggt.
- När du väl upptäcker en prissänkning kan fönstret för att matcha den (eller kontra) redan vara på väg att stängas.
Lösningen: dagliga priskontroller loggas i Sheets, aviseringar i Telegram
Det här n8n-flödet körs enligt schema (en gång per dag kl. 08:00 som standard), läser din produktlista från Google Sheets och kontrollerar varje produkt-URL för aktuellt pris. Det går igenom en artikel i taget och pausar kort mellan anropen, så att du minskar risken att bli blockerad av webbplatsen du bevakar. Efter att det skrapat priset från sidan normaliserar det siffran, jämför mot senast kända pris i ditt ark och beräknar procentuell prisförändring. Om en förändring upptäcks skickar det en tydlig Telegram-avisering (“Prissänkning” eller “Prishöjning”), loggar händelsen i en separat historikflik och uppdaterar sedan ditt “master”-ark så att morgondagens körning jämför mot den nya baslinjen.
Flödet utgår från ditt Google Sheet som källa till sanning. Det kontrollerar varje URL via HTTP, extraherar och rensar priset och använder sedan en If-kontroll för att avgöra vad som händer härnäst. När ett pris har ändrats får du ett Telegram-meddelande plus en rad i din spårningsflik, och master-arket uppdateras efter en kort paus.
Det du får: automatisering vs. resultat
| Vad det här flödet automatiserar | Resultat du får |
|---|---|
|
|
Exempel: så här ser det ut
Säg att du följer 25 konkurrenters produktsidor. Manuellt tar även en snabb kontroll kanske 2 minuter per sida när du räknar in laddning, att hitta rätt variant och uppdatera raden, vilket blir ungefär 50 minuter per dag. Med det här flödet består ditt “jobb” av att lägga till URL:er i master-arket (5 minuter en gång i veckan) och att läsa Telegram-aviseringar. Själva körningen tar tid i bakgrunden på grund av den inbyggda 20-sekunders fördröjningen per artikel, men det är inte du som gör det. Det är nästan en timme tillbaka de dagar du brukade kontrollera.
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)
- Google Sheets för att lagra din produktlista och baslinje.
- Telegram för att ta emot aviseringar i realtid.
- Telegram Bot token + chat_id (hämta dem via BotFather och din Telegram-chatt).
Kunskapsnivå: Nybörjare. Du kopplar konton, klistrar in ett Sheet ID och verifierar en CSS-selektor.
Vill du inte sätta upp det här själv? Prata med en automationsexpert (gratis 15-minuters konsultation).
Så fungerar det
En schemalagd körning drar igång. Flödet triggas en gång per dag kl. 08:00 server-tid (du kan ändra det så det passar din morgonrutin).
Ditt ark anger målen. n8n läser fliken “product_data” (eller “master”) som innehåller varje product_url och det senast kända priset du vill jämföra mot.
Varje produktsida kontrolleras försiktigt. Flödet hanterar en URL i taget, väntar cirka 20 sekunder mellan anropen, laddar sedan sidan via HTTP och extraherar aktuellt pris ur HTML med din CSS-selektor. Några snabba rensningssteg normaliserar talet och beräknar skillnaden.
Endast verkliga förändringar skapar brus. En If-kontroll flaggar rader där fältet price_changed är true. När det händer skriver n8n en historikrad i fliken “price_tracking” (tidsstämpel, gammalt, nytt, procentuell förändring) och skickar ett Telegram-meddelande. Efter en kort väntan uppdaterar det master-arket så att morgondagens baslinje blir korrekt.
Du kan enkelt ändra schemat för att köra oftare utifrån dina behov. Se hela implementationsguiden nedan för anpassningsalternativ.
Steg-för-steg-guide för implementering
Steg 1: konfigurera schedule-triggern
Ställ in arbetsflödet så att det körs varje morgon med schedule-triggern.
- Lägg till och öppna Scheduled Morning Start.
- Ställ in schemaregeln så att den körs dagligen kl.
8(timme) för att matcha den befintliga konfigurationen. - Koppla Scheduled Morning Start till Retrieve Product Sheet Rows.
Steg 2: anslut Google Sheets
Hämta produkt-URL:er och priser från ert kalkylark och förbered sedan uppdateringar tillbaka till era master- och historikblad.
- Öppna Retrieve Product Sheet Rows och ställ in Document till
[YOUR_ID]och Sheet tillproduct_data. - Inloggningsuppgifter krävs: Anslut era googleSheetsOAuth2Api-inloggningsuppgifter i Retrieve Product Sheet Rows.
- Öppna Append Price History och bekräfta att Operation är
append, Document är[YOUR_ID]och Sheet ärprice_tracking. - Säkerställ att kolumnmappningar använder uttryck som
{{$json.last_price}},{{$json.current_price}}och tidsstämpeluttrycket för formatering som redan finns i Append Price History. - Inloggningsuppgifter krävs: Anslut era googleSheetsOAuth2Api-inloggningsuppgifter i Append Price History och Update Master Price.
- Öppna Update Master Price och bekräfta att Operation är
update, med matchning på product_url och mappningar{{$json.current_price}}och{{$json.product_url}}.
Steg 3: konfigurera produktiteration och scraping
Loopa igenom varje produkt, lägg in fördröjning mellan anrop och hämta HTML för produktsidan för prisextrahering.
- Koppla Retrieve Product Sheet Rows till Batch Iterate Products för att starta batch-loopen.
- I Delay Between Calls ställer ni Amount till
20(sekunder) för att begränsa anropshastigheten. - Öppna Request Product Page och ställ in URL till
{{ $json.product_url }}. - Aktivera Send Headers och ställ in Headers (JSON) till den angivna webbläsarliknande user agent samt accept-headers.
- Koppla Delay Between Calls till Request Product Page för att säkerställa väntetiden mellan anrop.
- Notera parallell exekvering: Request Product Page skickar utdata till både Parse Current Price och Batch Iterate Products parallellt.
Steg 4: konfigurera prisparsning och beräkning
Extrahera pris från HTML, normalisera värden och beräkna delta för att upptäcka förändringar.
- I Parse Current Price ställer ni Operation till
extractHtmlContentoch bekräftar att CSS-selektorn.price__regular > span.price-item--regularmappar tillcurrent_price. - Öppna Normalize Price Numbers och bekräfta att den refererar till den ursprungliga raden med
$items("Delay Between Calls")[0].jsonoch tolkar det numeriska priset. - Öppna Calculate Price Delta och bekräfta att den beräknar
price_changedochprice_diff_pctbaserat pålast_pricejämfört medcurrent_price. - Öppna Sanitize Parsed Fields och behåll de rensade utdatafälten (product_url, last_price, current_price, price_changed, price_diff_pct, timestamp).
- Koppla Parse Current Price → Normalize Price Numbers → Calculate Price Delta → Sanitize Parsed Fields → Price Change Check.
Steg 5: konfigurera aviseringar och sheet-uppdateringar
Skicka Telegram-aviseringar vid prisförändringar och logga ändringar till Google Sheets med en kontrollerad uppdateringsfördröjning.
- I Price Change Check behåller ni villkoret att
{{ $json.price_changed }}är lika medtrue. - Notera parallell exekvering: Price Change Check skickar utdata till både Compose Telegram Alert och Append Price History parallellt.
- Öppna Compose Telegram Alert och bekräfta att meddelandeformateringen inkluderar URL, priser och procentuell förändring.
- Öppna Dispatch Telegram Alert och ställ in Text till
{{$json["message"]}}och Chat ID till[YOUR_ID]. - Inloggningsuppgifter krävs: Anslut era telegramApi-inloggningsuppgifter i Dispatch Telegram Alert.
- Öppna Wait Before Sheet Update och ställ in Unit till
minutesoch Amount till1. - Koppla Append Price History → Wait Before Sheet Update → Update Master Price.
- Säkerställ att Dispatch Telegram Alert kopplas tillbaka till Batch Iterate Products så att loopen fortsätter efter aviseringen.
Steg 6: testa och aktivera ert arbetsflöde
Kör ett manuellt test för att bekräfta prisparsning, aviseringar och sheet-uppdateringar innan ni aktiverar det dagliga schemat.
- Klicka på Execute Workflow för att köra ett manuellt test från Scheduled Morning Start.
- Verifiera att Request Product Page returnerar HTML och att Parse Current Price extraherar
current_price. - Bekräfta att Append Price History skriver en ny rad och att Update Master Price uppdaterar den matchande
product_url. - Trigga en känd prisförändring och verifiera att Dispatch Telegram Alert skickar ett meddelande till er Telegram-chatt.
- När allt fungerar växlar ni arbetsflödet till Active så att Scheduled Morning Start körs dagligen.
Vanliga fallgropar
- Google Sheets-inloggningar kan löpa ut eller kräva specifika behörigheter. Om något slutar fungera, kontrollera sidan Credentials i n8n och bekräfta att kontot fortfarande har åtkomst till kalkylarket.
- Om du använder Wait-noder eller extern laddning varierar processtiderna. Öka väntetiden om efterföljande noder fallerar på tomma svar, särskilt efter “Request Product Page”.
- CSS-selektorer förändras när en sajt ändrar layout. Om aviseringar slutar komma (eller ser fel ut), inspektera produktsidan igen och uppdatera selektorn i “Parse Current Price”.
Vanliga frågor
Cirka 15 minuter om dina flikar i arket redan är förberedda.
Nej. Du kopplar mest konton och klistrar in ditt Sheet ID. Den enda “tekniska” delen är att bekräfta en CSS-selektor för priset på sidan.
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å ta hänsyn till åtkomst till webbplatser (vissa sajter blockerar skrapning), men det finns inga obligatoriska betalda API:er i just det här flödet.
Två alternativ: n8n Cloud (hanterat, enklast att komma igång) eller self-hosting på en VPS. För self-hosting är Hostinger VPS prisvärd och klarar n8n bra. Self-hosting ger obegränsade körningar men kräver grundläggande serverhantering.
Ja, och det är en vanlig justering. Ändra tiden i triggern “Scheduled Morning Start” så att den kör oftare, och justera sedan väntetiden i “Delay Between Calls” så att du inte bombardera en sajt. Du kan också dela upp din produktlista i flera ark (per konkurrent eller kategori) och köra separata scheman för varje.
Oftast beror det på en felaktig bot token eller fel chat_id. Skapa om token i BotFather vid behov och bekräfta sedan att din bot har lagts till i gruppen (eller startats i en 1:1-chatt) så att den har rätt att posta. Om det fungerade tidigare och sedan slutade, kontrollera Telegram-nodens inloggningsuppgifter i n8n och spara om dem.
Dussintals per körning är realistiskt för de flesta små team.
För pris-skrapning från webbplatser plus villkorslogik är n8n oftast det mer praktiska valet eftersom du kan styra fördröjningar, tolka HTML och förgrena logiken utan att slåss med plattformsbegränsningar. Zapier och Make är utmärkta för app-till-app-synkning, men skrapning blir ofta skör eller kräver betalda tillägg. En annan skillnad är kostnadsbeteendet: med self-hosted n8n betalar du inte per “task” på samma sätt, vilket spelar roll när du bevakar många URL:er. Samtidigt, om du bara behöver ett enkelt flöde av typen “rad ändrad → skicka meddelande”, kan Zapier eller Make gå snabbare att klicka ihop. Vill du ha en second opinion för just ditt användningsfall? Prata med en automationsexpert.
När det här väl rullar slutar prisbevakning att vara en syssla du skjuter upp. Du får bara signalen, plus historiken som styrker den, och kan agera.
Kontakta oss
Hör av dig, så diskuterar vi hur just din verksamhet kan dra nytta av alla fantastiska möjligheter som AI skapar.