1. Test a product page
Open the product page, choose View Source (or Ctrl+U), copy everything and paste it here.
This shop publishes no price data? Add your own pattern
Paste a page's source and click the button.
2. Your watch.json
Add one entry per product. Put this file in the root of your repository.
3. Turn it on in your own repository
- Create a repository (private is fine) and add extract.mjs, watch.mjs and your
watch.json. - Save the workflow below as
.github/workflows/price-watch.yml. - Pick a hard-to-guess topic name, install the free ntfy app on your phone, subscribe to it, and add the same name as a repository secret called
NTFY_TOPIC(orDISCORD_WEBHOOKfor Discord). - Run the workflow once from the Actions tab. It records the starting prices; later runs alert on changes.
# Copy to .github/workflows/price-watch.yml in YOUR OWN repository (a private one is fine).
# Runs on your GitHub Actions minutes and your secrets; nothing passes through anyone else.
name: price-watch
on:
schedule: [{ cron: "17 */6 * * *" }]
workflow_dispatch: {}
permissions:
contents: write
jobs:
watch:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with: { node-version: 20 }
- run: node watch.mjs --config watch.json --state state.json
env:
NTFY_TOPIC: ${{ secrets.NTFY_TOPIC }}
DISCORD_WEBHOOK: ${{ secrets.DISCORD_WEBHOOK }}
- run: |
git config user.name "price-watch"; git config user.email "price-watch@users.noreply.github.com"
git add state.json && (git diff --cached --quiet || git commit -m "price-watch: update state" && git push)
Try it on your computer first: node watch.mjs --dry-run prints what it sees and sends nothing.
What you use today, and what this does differently
CamelCamelCamel, Keepa and Honey track a fixed set of big retailers on their servers and earn from affiliate links or subscriptions. Visualping and Distill watch any page but cap the free tier and keep your watch list on their service. Refreshing the page costs you the evening. This watches any shop you choose, lives in your own repository, adds no tracking links and costs nothing. It has no price history charts and no shared database of other people's prices.
Questions people actually ask
How do I get a price drop alert for free without giving an app my email?
Copy the watcher into your own GitHub repository, list the product URLs in watch.json and turn on the scheduled workflow. It checks every six hours on your own Actions minutes and sends a push through ntfy or a Discord webhook. No account here, no email list.
Will it work on any shop?
It reads the structured data most shops publish for Google (schema.org Product, Open Graph price tags, microdata). Paste a page's source into the tester above to see what it finds. If a page has none, give it a priceRegex for that page.
Is it allowed to check a shop's page?
It identifies itself, reads robots.txt first and skips any page the shop disallows, and makes one request every two seconds. It is for watching a handful of pages for yourself, not for scraping a catalogue. Check the shop's terms.
How is this different from CamelCamelCamel, Keepa or Honey?
Those track a fixed set of big retailers on their servers and earn money from affiliate links or subscriptions. This watches any page you choose, runs in your own repository, has no tracking links, and is free. It has no price history charts or shared database.