Bright Data to Telegram, best deals flagged fast
Price checks start out simple. Then you’re juggling eight tabs, copying numbers into a sheet, and still missing the one deal that actually mattered. That’s how “quick research” turns into an afternoon.
Affiliate marketers feel it when promos go out late. A reseller feels it when margins vanish because they didn’t see a price drop. And marketing teams running deal channels hit the same wall. This Bright Data Telegram automation is built to surface the lowest offer fast, then put a ready-to-post message in your hands.
You’ll see how the workflow pulls real prices from multiple marketplaces, logs everything in Google Sheets, picks the best deal, and sends a Telegram alert that doesn’t sound like a robot wrote it.
How This Automation Works
The full n8n workflow, from trigger to final output:
n8n Workflow Template: Bright Data to Telegram, best deals flagged fast
flowchart LR
subgraph sg0["On form submission Flow"]
direction LR
n0["<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/>On form submission"]
n1@{ icon: "mdi:database", form: "rounded", label: "Google Sheets", 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/>Extracting Data from snapshort"]
n3@{ icon: "mdi:robot", form: "rounded", label: "AI Agent", pos: "b", h: 48 }
n4@{ icon: "mdi:brain", form: "rounded", label: "Anthropic Chat Model", 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/telegram.svg' width='40' height='40' /></div><br/>Telegram"]
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/>Clean AI Output"]
n7@{ icon: "mdi:swap-horizontal", form: "rounded", label: "If", pos: "b", h: 48 }
n8@{ icon: "mdi:swap-horizontal", form: "rounded", label: "If1", 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/code.svg' width='40' height='40' /></div><br/>Code1"]
n10@{ icon: "mdi:database", form: "rounded", label: "Google Sheets1", 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/merge.svg' width='40' height='40' /></div><br/>Merge"]
n12@{ icon: "mdi:swap-horizontal", form: "rounded", label: "Filter1", pos: "b", h: 48 }
n13@{ icon: "mdi:swap-horizontal", form: "rounded", label: "If3", pos: "b", h: 48 }
n14@{ icon: "mdi:database", form: "rounded", label: "Google Sheets2", pos: "b", h: 48 }
n15@{ icon: "mdi:swap-horizontal", form: "rounded", label: "If4", pos: "b", h: 48 }
n16@{ icon: "mdi:database", form: "rounded", label: "Google Sheets3", pos: "b", h: 48 }
n17@{ icon: "mdi:swap-horizontal", form: "rounded", label: "If5", pos: "b", h: 48 }
n18@{ icon: "mdi:database", form: "rounded", label: "Google Sheets4", pos: "b", h: 48 }
n19@{ icon: "mdi:swap-horizontal", form: "rounded", label: "If6", pos: "b", h: 48 }
n20@{ icon: "mdi:database", form: "rounded", label: "Google Sheets5", pos: "b", h: 48 }
n21["<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/>HTTP Request14"]
n22@{ icon: "mdi:swap-horizontal", form: "rounded", label: "If7", pos: "b", h: 48 }
n23["<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/>HTTP Request15"]
n24@{ icon: "mdi:database", form: "rounded", label: "Google Sheets6", pos: "b", h: 48 }
n25["<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/>HTTP Request16"]
n26@{ icon: "mdi:swap-horizontal", form: "rounded", label: "If8", pos: "b", h: 48 }
n27["<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/>HTTP Request17"]
n28@{ icon: "mdi:database", form: "rounded", label: "Google Sheets7", pos: "b", h: 48 }
n29["<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/>lowes"]
n30["<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/>wayfair"]
n31@{ icon: "mdi:swap-horizontal", form: "rounded", label: "If9", pos: "b", h: 48 }
n32@{ icon: "mdi:swap-horizontal", form: "rounded", label: "If10", pos: "b", h: 48 }
n33@{ icon: "mdi:swap-horizontal", form: "rounded", label: "If11", pos: "b", h: 48 }
n34@{ icon: "mdi:swap-horizontal", form: "rounded", label: "If12", pos: "b", h: 48 }
n35@{ icon: "mdi:swap-horizontal", form: "rounded", label: "If13", pos: "b", h: 48 }
n36@{ icon: "mdi:swap-horizontal", form: "rounded", label: "If14", pos: "b", h: 48 }
n37@{ icon: "mdi:swap-horizontal", form: "rounded", label: "If15", pos: "b", h: 48 }
n38@{ icon: "mdi:swap-horizontal", form: "rounded", label: "If16", pos: "b", h: 48 }
n39@{ icon: "mdi:swap-horizontal", form: "rounded", label: "If18", pos: "b", h: 48 }
n40@{ icon: "mdi:swap-horizontal", form: "rounded", label: "If19", pos: "b", h: 48 }
n41@{ icon: "mdi:swap-horizontal", form: "rounded", label: "If20", pos: "b", h: 48 }
n42@{ icon: "mdi:swap-horizontal", form: "rounded", label: "If21", pos: "b", h: 48 }
n43@{ icon: "mdi:swap-horizontal", form: "rounded", label: "If22", pos: "b", h: 48 }
n44@{ icon: "mdi:swap-horizontal", form: "rounded", label: "If24", pos: "b", h: 48 }
n45@{ icon: "mdi:swap-horizontal", form: "rounded", label: "If25", pos: "b", h: 48 }
n46@{ icon: "mdi:swap-horizontal", form: "rounded", label: "If26", pos: "b", h: 48 }
n47@{ icon: "mdi:swap-horizontal", form: "rounded", label: "Filter8", pos: "b", h: 48 }
n48@{ icon: "mdi:swap-horizontal", form: "rounded", label: "Filter", pos: "b", h: 48 }
n49@{ icon: "mdi:swap-horizontal", form: "rounded", label: "Filter2", pos: "b", h: 48 }
n50@{ icon: "mdi:swap-horizontal", form: "rounded", label: "Filter3", pos: "b", h: 48 }
n51@{ icon: "mdi:swap-horizontal", form: "rounded", label: "Filter4", pos: "b", h: 48 }
n52@{ icon: "mdi:swap-horizontal", form: "rounded", label: "Filter5", pos: "b", h: 48 }
n53@{ icon: "mdi:swap-horizontal", form: "rounded", label: "Filter6", pos: "b", h: 48 }
n54@{ icon: "mdi:cog", form: "rounded", label: "Wait", pos: "b", h: 48 }
n55@{ icon: "mdi:cog", form: "rounded", label: "Wait1", pos: "b", h: 48 }
n56@{ icon: "mdi:cog", form: "rounded", label: "Wait2", pos: "b", h: 48 }
n57@{ icon: "mdi:cog", form: "rounded", label: "Wait3", pos: "b", h: 48 }
n58@{ icon: "mdi:cog", form: "rounded", label: "Wait4", pos: "b", h: 48 }
n59@{ icon: "mdi:cog", form: "rounded", label: "Wait5", pos: "b", h: 48 }
n60@{ icon: "mdi:cog", form: "rounded", label: "Wait6", pos: "b", h: 48 }
n61@{ icon: "mdi:cog", form: "rounded", label: "Wait7", pos: "b", h: 48 }
n62["<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/>Triggers Bright Data scrapin.."]
n63["<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/>Checks scrape status for Ama.."]
n64["<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/>Fetches final scraped data f.."]
n65["<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/>Triggers Bright Data scrapin.."]
n66["<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/>Checks scrape status for eBay"]
n67["<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/>Triggers Bright Data scrapin.."]
n68["<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/>Checks scrape status for Etsy"]
n69["<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/>Fetches final scraped data f.."]
n70["<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/>Triggers Bright Data scrapin.."]
n71["<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/>Checks scrape status for Bes.."]
n72["<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/>Fetches final scraped data f.."]
n73["<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/>Triggers Bright Data scrapin.."]
n74["<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/>Checks scrape status for Tar.."]
n75["<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/>Fetches final scraped data f.."]
n76["<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/>Triggers Bright Data scrapin.."]
n77["<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/>Checks scrape status for Hom.."]
n78["<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/>Fetches final scraped data f.."]
n7 --> n46
n7 --> n54
n8 --> n45
n8 --> n55
n13 --> n44
n13 --> n56
n15 --> n39
n15 --> n57
n17 --> n40
n17 --> n58
n19 --> n41
n19 --> n59
n22 --> n42
n22 --> n60
n26 --> n43
n26 --> n61
n31 --> n10
n32 --> n1
n33 --> n14
n34 --> n16
n35 --> n18
n36 --> n20
n37 --> n28
n38 --> n24
n39 --> n72
n40 --> n75
n41 --> n78
n42 --> n23
n43 --> n27
n44 --> n69
n45 --> n2
n46 --> n64
n54 --> n63
n9 --> n3
n11 --> n9
n55 --> n66
n56 --> n68
n57 --> n71
n58 --> n74
n59 --> n77
n60 --> n21
n61 --> n25
n29 --> n25
n48 --> n33
n12 --> n31
n49 --> n34
n50 --> n35
n51 --> n36
n52 --> n38
n53 --> n37
n47 --> n32
n30 --> n21
n3 --> n6
n1 --> n11
n10 --> n11
n14 --> n11
n16 --> n11
n18 --> n11
n20 --> n11
n24 --> n11
n28 --> n11
n21 --> n22
n23 --> n52
n25 --> n26
n27 --> n53
n6 --> n5
n0 --> n62
n0 --> n65
n0 --> n67
n0 --> n70
n0 --> n73
n0 --> n76
n0 --> n30
n0 --> n29
n4 -.-> n3
n68 --> n13
n66 --> n8
n2 --> n47
n74 --> n17
n71 --> n15
n77 --> n19
n67 --> n68
n65 --> n66
n73 --> n74
n70 --> n71
n76 --> n77
n69 --> n48
n63 --> n7
n64 --> n12
n75 --> n50
n72 --> n49
n78 --> n51
n62 --> n63
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 ai
class n4 aiModel
class n7,n8,n12,n13,n15,n17,n19,n22,n26,n31,n32,n33,n34,n35,n36,n37,n38,n39,n40,n41,n42,n43,n44,n45,n46,n47,n48,n49,n50,n51,n52,n53 decision
class n1,n10,n14,n16,n18,n20,n24,n28 database
class n2,n21,n23,n25,n27,n29,n30,n62,n63,n64,n65,n66,n67,n68,n69,n70,n71,n72,n73,n74,n75,n76,n77,n78 api
class n6,n9 code
classDef customIcon fill:none,stroke:none
class n0,n2,n5,n6,n9,n11,n21,n23,n25,n27,n29,n30,n62,n63,n64,n65,n66,n67,n68,n69,n70,n71,n72,n73,n74,n75,n76,n77,n78 customIcon
The Problem: Deal tracking is slow, noisy, and easy to mess up
Tracking prices across Amazon, eBay, Etsy, BestBuy, Target, Home Depot, Wayfair, and Lowe’s sounds straightforward until you do it every day. Each site formats prices differently, listings aren’t consistent, and one “sponsored” result can throw you off. Then you copy it all into a spreadsheet, try to compare apples to apples, and rewrite the promo message anyway because your last post didn’t convert. It’s not just time. It’s the mental load of verifying, double-checking, and still wondering if you missed the best price.
The friction compounds. Here’s where it breaks down most often.
- Manual checks across several marketplaces can easily eat about 1–2 hours per keyword when you include searching, sorting, and verifying listings.
- You end up with messy data because one platform returns “$1,199.00” and another returns “1199,” so comparisons become unreliable.
- Even when you find a deal, writing a Telegram-ready promo message becomes another mini-task you repeat all week.
- When you scale from one product to ten, you lose track of what was checked, what changed, and what you already posted.
The Solution: Scrape multi-store prices, choose the winner, and alert Telegram
This workflow starts with a simple form input in n8n. You type a keyword (like “iPhone 15 Pro Max” or “Dyson V15”), and the automation triggers Bright Data dataset scrapes across multiple marketplaces in parallel. It then polls each scraping job until results are ready, pulls back the structured JSON, and cleans the fields so price, title, and URL are consistent. Those results are appended into Google Sheets as a running price log, then merged into one combined stream. Finally, custom logic identifies the lowest-price listing, sends that “best deal” to an AI agent to generate a punchy promo message, sanitizes the text, and posts the alert to Telegram.
The workflow kicks off from an n8n form trigger. Bright Data handles the heavy lifting of structured product snapshots per marketplace. After the lowest price is chosen, Telegram gets a ready-to-share deal alert (title, price, link, and promo copy) without you rewriting it from scratch.
What You Get: Automation vs. Results
| What This Workflow Automates | Results You’ll Get |
|---|---|
|
|
Example: What This Looks Like
Say you track 5 products each morning across 8 marketplaces. If you spend about 10 minutes per marketplace to search, validate, and copy data, that’s roughly 6–7 hours of work before you even write a promo post. With this workflow, you can drop 5 keywords into the form in about 5 minutes total, wait while Bright Data returns snapshots (often around 10–20 minutes in the background), and then skim the best-deal row before the Telegram alert goes out. That’s most of your morning back.
What You’ll Need
- n8n instance (try n8n Cloud free)
- Self-hosting option if you prefer (Hostinger works well)
- Bright Data to fetch structured marketplace snapshots
- Google Sheets to store and review price history
- Telegram to deliver deal alerts to a channel
- Bright Data API key (get it from your Bright Data dashboard)
Skill level: Intermediate. You’ll connect credentials, set dataset IDs per marketplace, and do light prompt editing for your brand voice.
Don’t want to set this up yourself? Talk to an automation expert (free 15-minute consultation).
How It Works
You submit a product keyword. The workflow begins with an n8n Form Trigger where you enter a search term (the workflow uses it to query multiple datasets).
Bright Data runs scrapes across marketplaces. n8n fires HTTP requests to trigger dataset snapshots for Amazon, eBay, Etsy, BestBuy, Target, Home Depot, Wayfair, and Lowe’s, then polls each one until the status is ready.
Results are cleaned, merged, and compared. Each platform’s snapshot is fetched as JSON, filtered for non-empty results, normalized so fields match, appended into Google Sheets, then merged into a single list where a “lowest price” logic picks the best option.
Telegram gets a promo-ready alert. An AI agent generates a short deal message using the winning title, price, and URL, the text is sanitized to avoid weird formatting, and the final alert is sent to your Telegram channel.
You can easily modify the marketplaces being scraped to add a new store or remove one that doesn’t matter to your audience. See the full implementation guide below for customization options.
Step-by-Step Implementation Guide
Step 1: Configure the Form Trigger
This workflow starts with a form submission so you can enter the keyword to search across all stores.
- Add the Form Input Trigger node as the workflow trigger.
- Set Form Title to
Keywords. - Add a form field with Field Label set to
SearchHere. - Confirm the execution flow: Form Input Trigger outputs to Trigger Amazon Scrape, Trigger eBay Scrape, Trigger Etsy Scrape, Trigger BestBuy Scrape, Trigger Target Scrape, Trigger HomeDepot Scrape, Trigger Wayfair Scrape, and Trigger Lowes Scrape in parallel.
SearchHere to reduce irrelevant results before filtering.Step 2: Configure the Bright Data Trigger Requests
Each store starts a Bright Data dataset scrape using HTTP requests with the keyword from the form.
- In Trigger Amazon Scrape, set URL to
https://api.brightdata.com/datasets/v3/triggerand Method toPOST. - Set JSON Body to the expression-backed payload, including
{{ $json.SearchHere }}for keyword input. - Repeat similar settings for Trigger eBay Scrape, Trigger Etsy Scrape, Trigger BestBuy Scrape, Trigger Target Scrape, Trigger HomeDepot Scrape, Trigger Wayfair Scrape, and Trigger Lowes Scrape.
- Ensure all trigger nodes include the Authorization header with the value
[CONFIGURE_YOUR_TOKEN].
ready status.Step 3: Configure Polling and Ready Checks
The workflow polls each snapshot until it is ready, using a repeating wait-check loop.
- For each polling node (Poll Amazon Status, Poll eBay Status, Poll Etsy Status, Poll BestBuy Status, Poll Target Status, Poll HomeDepot Status, Poll Snapshot G, Poll Snapshot H), set URL to
=https://api.brightdata.com/datasets/v3/progress/{{ $json.snapshot_id }}. - Ensure each poll request has the Authorization header set to
[CONFIGURE_YOUR_TOKEN]. - Set all wait nodes (Delay Check A through Delay Check H) to Unit
minutesand Amount1. - In each readiness gate (Check Ready A through Check Ready H), confirm the condition uses
={{ $json.status }}equalsready.
limit_per_input thresholds in the trigger nodes.Step 4: Fetch Snapshots and Filter by Keyword
When a dataset is ready, the workflow fetches results and filters them to only include items that match the keyword.
- In snapshot fetch nodes (Get Amazon Snapshot, Retrieve Snapshot Results, Get Etsy Snapshot, Get BestBuy Snapshot, Get Target Snapshot, Get HomeDepot Snapshot, Fetch Snapshot G, Fetch Snapshot H), set URL to
=https://api.brightdata.com/datasets/v3/snapshot/{{ $json.snapshot_id }}. - For each Nonempty Amazon through Nonempty Lowes node, confirm the condition checks
={{ $json.records }}not equals0. - In every filter node (Filter Keywords A through Filter Keywords H), confirm the left expression is
={{ $json.title.toLowerCase().replace(/[^\\w\\s]/g, '').replace(/\\s+/g, ' ').trim() }}and the right expression references the form input={{ $('Form Input Trigger').item.json.SearchHere.toLowerCase().replace(/[^\\w\\s]/g, '').replace(/\\s+/g, ' ').trim() }}. - Keep Has Records A through Has Records H set to
={{ $items.length }}greater than0.
Step 5: Connect Google Sheets Storage
Each store’s filtered results are appended to a Google Sheet before the listings are combined.
- Connect Google Sheets credentials to all sheet nodes: Append Price Sheet A, Append Price Sheet B, Update Price Sheet C, Append Price Sheet D, Append Price Sheet E, Append Price Sheet F, Append Price Sheet G, and Append Price Sheet H. Credential Required: Connect your
googleSheetsOAuth2Apicredentials. - Verify each sheet node has Operation set correctly (e.g.,
appendfor Append Price Sheet A andappendOrUpdatefor Update Price Sheet C). - Map columns like URL, Title, and price using expressions such as
={{ $json.url }},={{ $json.title }}, and={{ $json.price }}. - Set each Document ID and Sheet Name to your target spreadsheet.
Step 6: Combine and Analyze Prices
All store listings are merged and the lowest price product is identified before generating the promotional message.
- In Combine Listings, set Number of Inputs to
8to match the eight sheet outputs. - Confirm that Append Price Sheet A through Append Price Sheet H all feed into Combine Listings (as per the connection indices).
- Keep the code in Find Lowest Price Logic unchanged to parse a variety of product field formats and return the lowest price item.
title, price, or url, update the field-mapping logic in Find Lowest Price Logic.Step 7: Set Up AI Promo Generation and Sanitization
An AI agent generates promotional copy and cleans formatting before sending it to Telegram.
- In Compose Promo Copy, keep the Text prompt with expressions like
{{ $json.title }},{{ $json.price }}, and{{ $json.url }}. - Ensure Anthropic Chat Engine is connected as the language model for Compose Promo Copy. Credential Required: Connect your
anthropicApicredentials in Anthropic Chat Engine. - Leave the cleanup code in Sanitize AI Text as-is to strip bold tags and escape HTML before sending to Telegram.
Step 8: Configure Telegram Alerts
The sanitized promo message is delivered to your Telegram chat.
- In Send Telegram Alert, set Text to
={{ $json.body }}. - Replace Chat ID value
[YOUR_ID]with your actual Telegram chat ID. - Credential Required: Connect your
telegramApicredentials to Send Telegram Alert.
Step 9: Test and Activate Your Workflow
Run a manual test to validate end-to-end scraping, filtering, lowest price logic, AI generation, and Telegram delivery.
- Click Execute Workflow and submit the Form Input Trigger with a keyword in
SearchHere. - Confirm each scrape branch progresses through its polling loop until Check Ready A through Check Ready H return
ready. - Verify that sheets are updated via Append Price Sheet A through Append Price Sheet H, and that Find Lowest Price Logic outputs a single lowest price item.
- Check that Send Telegram Alert delivers a clean promo message.
- When everything works, toggle the workflow to Active for production use.
Common Gotchas
- Bright Data credentials can expire or need specific permissions. If things break, check your Bright Data dashboard API key and dataset access first.
- If you’re using Wait nodes or external rendering, processing times vary. Bump up the wait duration if downstream nodes fail on empty responses.
- Default prompts in AI nodes are generic. Add your brand voice early or you’ll be editing outputs forever.
Frequently Asked Questions
Plan for about 45 minutes if you already have your Bright Data datasets picked.
No. You’ll mostly connect accounts and paste in API keys. The only “code” piece is already included for lowest-price selection and text cleanup.
Yes. n8n has a free self-hosted option and a free trial on n8n Cloud. Cloud plans start at $20/month for higher volume. You’ll also need to factor in Bright Data usage costs and your AI model costs (often just a few cents per message).
Two options: n8n Cloud (managed, easiest setup) or self-hosting on a VPS. For self-hosting, Hostinger VPS is affordable and handles n8n well. Self-hosting gives you unlimited executions but requires basic server management.
Yes, and it’s pretty practical. You clone an existing marketplace branch (an HTTP Request trigger, polling request, “ready” check, snapshot fetch, then keyword filtering), then update the Bright Data dataset_id and the expected output fields. Common tweaks include adding a niche store, changing how many results you keep per platform, and editing the AI Agent prompt so the Telegram message matches your channel tone. If you don’t want AI copy at all, you can skip the AI step and send a template message using the chosen title, price, and URL.
Usually it’s an expired API key or the dataset ID doesn’t match the dataset you’re calling. Regenerate your Bright Data API key, confirm the dataset is accessible to that account, and re-check the headers in your HTTP Request nodes. If the scrape triggers but never becomes “ready,” it can also be a polling cadence issue, so increasing the wait time helps.
If you self-host, it mainly depends on your server and Bright Data limits.
Often, yes, for this specific use case. Zapier and Make can struggle (or get expensive) when you’re running parallel scraping jobs, polling for completion, merging multi-source results, and then applying custom “pick the winner” logic. n8n is comfortable with branching, wait/poll patterns, and custom logic in the middle, which is exactly what Bright Data workflows tend to need. The tradeoff is setup: you’ll spend a bit longer configuring it the first time. If you want someone to sanity-check it with you, Talk to an automation expert.
Once this is running, you stop babysitting tabs and spreadsheets. Deals surface, get logged, and hit Telegram while they’re still worth posting.
Need Help Setting This Up?
Our automation experts can build and customize this workflow for your specific needs. Free 15-minute consultation—no commitment required.