Every 6 hours
Track competitor prices from a sheet
List competitor product pages in a sheet and get a Telegram message whenever one of their prices changes, with the latest price recorded in the sheet.
- Runs
- Every 6 hours
- Apps
- Google Sheets, Telegram
- AI
- Not needed
- Access
- Sheets read+write; Telegram bot token
Send this to your assistant
Create a ClickRuntime automation: every 6 hours, check the price on each product URL in my Competitors sheet, record it, and message me on Telegram if it changed.
First time? Adding ClickRuntime to your assistant takes about two minutes.
Why use it
Why teams use this automation
A small online shop selling coffee equipment competes with a handful of other stores on the same grinders and kettles. Prices move without warning: a rival drops a grinder by 15% for a weekend and sales stall before anyone notices. Checking a dozen product pages by hand every day is the sort of job that slips first in a busy week.
A sheet of competitor URLs becomes a price watch. Every 6 hours each page is checked, the current price and date are written next to the URL, and you get a Telegram message only when a price actually moves.
What you get out of it
React to price cuts the same day
You hear about a competitor's discount within hours, not when your sales report looks odd at the end of the week. That leaves time to match it, bundle something or decide to hold.
The latest price always in the sheet
Each check writes the current price and date next to the URL. The sheet becomes a single place to compare your prices with the market.
Quiet unless something changes
Unchanged prices produce no message. When your phone buzzes, there is something to look at.
Your list, your products
You choose exactly which products to watch by adding rows. Adding a new rival or a new product line takes a minute.
How it works
What happens, step by step
Every 6 hours, ClickRuntime reads the product URLs from your Competitors sheet.
It opens each page and reads the current price.
It compares the price with the last one it saw for that page, so you are only told about real changes.
The new price and date are written into the sheet, and any change is sent to you on Telegram.
Before it runs live
- Connect your Google Sheets account and pick the spreadsheets it may use
- Connect Telegram
What you get
Build your own
Need it to work differently?
Your own rules
Conditions, thresholds, filters and exceptions, written the way you'd explain them to a colleague.
Any number of apps
One automation can read from one app and update several others. Over 248 apps are ready, and anything with an API works too.
AI where it helps
Summaries, classification, extraction and drafts use ClickRuntime's built-in AI, with no extra key.
On a schedule or on each event
Runs as often as every 5 minutes, or the moment an app sends an event, and keeps track of what it already handled.
Changes you can ask for
- Run it at a different time, more or less often, or only on weekdays
- Add an AI step, for example to summarize, sort or draft a reply
- Add another app, for example also send it to Slack
- Combine it with other Google Sheets and Telegram steps into one automation
Under the hood
The code that runs this automation
import re
from datetime import date
from bs4 import BeautifulSoup
from google.oauth2.credentials import Credentials
from googleapiclient.discovery import build
from clickruntime import on_trigger, credentials, http, state, log
SHEET_ID = "your-spreadsheet-id"
CHAT_ID = "your-telegram-chat-id"
def read_price(url):
soup = BeautifulSoup(http.get(url, timeout=15).text, "lxml")
tag = soup.find("meta", itemprop="price") or soup.find("meta", property="product:price:amount")
if tag:
return float(tag["content"])
m = re.search(r"\d+[.,]\d{2}", soup.get_text(" "))
return float(m.group().replace(",", ".")) if m else None
@on_trigger
def run(event):
values = build("sheets", "v4", credentials=Credentials(credentials.connection("google", "work")), cache_discovery=False).spreadsheets().values()
urls = [r[0] for r in values.get(spreadsheetId=SHEET_ID, range="Competitors!A2:A").execute().get("values", []) if r]
last, changes = state.get("prices") or {}, []
for n, url in enumerate(urls, start=2):
try:
price = read_price(url)
except Exception as e:
log.warning("Could not read price", {"url": url, "error": str(e)[:200]})
continue
if price is None:
continue
if url in last and last[url] != price:
changes.append(f"{url}: {last[url]} -> {price}")
last[url] = price
values.update(spreadsheetId=SHEET_ID, range=f"Competitors!B{n}:C{n}", valueInputOption="USER_ENTERED",
body={"values": [[price, date.today().isoformat()]]}).execute()
state.set("prices", last)
if changes:
http.post(f"https://api.telegram.org/bot{credentials.secret('TELEGRAM_BOT_TOKEN')}/sendMessage",
json={"chat_id": CHAT_ID, "text": "Price changes:\n" + "\n".join(changes)})
return {"checked": len(urls), "changed": len(changes)}FAQ
Common questions
How does it find the price on a page?
What if a page is down or the product is removed?
Can I track prices in different currencies?
What permissions does it need?
Does it need AI?
How many runs does it use?
Can I change how it works?
Related
You might also like
Send a weekly Telegram message to every chat in a sheet
Write your announcement once in a sheet and every Telegram chat on your list gets it on Monday morning, with each one marked as sent.
See how it worksGet Telegram alerts when a site in your sheet goes down
Every site in your sheet is checked every 5 minutes, its status is kept up to date, and you get a Telegram message when one goes down or recovers.
See how it worksGet Telegram warnings before SSL certificates expire
Each day the domains in your sheet are checked, the days left on each certificate are written next to them, and you get a Telegram message for any under 14 days.
See how it worksKeep exploring
Set up “Track competitor prices from a sheet” from your assistant
Copy the prompt above, or connect your assistant first. Free plan, no credit card.