Price monitoring used to require a full stack: a server, a database, a cron job, and a CSS selector that breaks every time the retailer updates their page. Today, you can build a working price tracker in under 5 minutes using the WebPeel CLI — and run it on your laptop with no cloud infrastructure needed.
This guide walks through the complete setup: installation, monitoring a product URL, detecting changes, and wiring up notifications.
What You Can Monitor
Amazon products
Track prices, deals, and availability
Sneakers & apparel
GOAT, StockX, Nike, Adidas
Flight prices
Google Flights, Kayak, Expedia
Real estate
Zillow listings, rental prices
Tech & electronics
Best Buy, Newegg, B&H Photo
Games & collectibles
Steam sales, eBay listings
Step 1: Install WebPeel CLI
Install in 10 seconds
No global install required. Use npx to run WebPeel directly:
npx webpeel --version
Or install globally for faster repeat use:
npm install -g webpeel
webpeel --version # 1.x.x
Step 2: Start Monitoring a URL
Monitor a product URL
The webpeel monitor command watches a URL for changes on a schedule. Here's how to monitor an Amazon product price every hour:
webpeel monitor https://www.amazon.com/dp/B0D1XD1ZV3 \
--selector ".a-price-whole" \
--interval 3600 \
--label "Echo Dot 5th Gen"
Options explained:
--selector: CSS selector for the element to watch (optional — omit to watch the full page)--interval 3600: Check every 3600 seconds (1 hour)--label: Human-readable name for this monitor
First run output:
Step 3: Detect Changes
See what changed
When a change is detected, WebPeel shows a diff of exactly what changed:
The diff output works on any page content — not just prices. You can monitor stock availability, review counts, specification changes, or any text on the page.
Step 4: Get Notified
WebPeel monitor outputs structured JSON when a change occurs, so you can pipe it into any notification system:
Email via curl + mailgun
webpeel monitor https://www.amazon.com/dp/B0D1XD1ZV3 \
--selector ".a-price-whole" \
--interval 3600 \
--json | while IFS= read -r line; do
if echo "$line" | grep -q '"changed":true'; then
PRICE=$(echo "$line" | jq -r '.current')
curl -s -X POST https://api.mailgun.net/v3/YOUR_DOMAIN/messages \
-u "api:YOUR_MAILGUN_KEY" \
-F from="alerts@yourdomain.com" \
-F to="you@email.com" \
-F subject="Price alert: Echo Dot dropped to $PRICE" \
-F text="The price changed. Check it now: https://amazon.com/dp/B0D1XD1ZV3"
fi
done
Slack webhook notification
webpeel monitor https://www.amazon.com/dp/B0D1XD1ZV3 \
--selector ".a-price-whole" \
--interval 3600 \
--on-change "curl -s -X POST https://hooks.slack.com/services/YOUR/WEBHOOK/URL \
-H 'Content-type: application/json' \
-d '{\"text\": \"Price dropped! Echo Dot is now \$WEBPEEL_NEW_VALUE\"}'"
💡 The --on-change flag runs a shell command whenever a change is detected. WebPeel injects these env vars: $WEBPEEL_NEW_VALUE, $WEBPEEL_OLD_VALUE, $WEBPEEL_URL, $WEBPEEL_LABEL.
Discord notification
webpeel monitor https://www.amazon.com/dp/B0D1XD1ZV3 \
--extract '{"price":"string","title":"string"}' \
--interval 3600 \
--on-change 'curl -s -X POST "https://discord.com/api/webhooks/YOUR/WEBHOOK" \
-H "Content-Type: application/json" \
-d "{\"content\": \"🔔 Price alert! \\\"$WEBPEEL_LABEL\\\" is now $WEBPEEL_NEW_VALUE\"}"'
Real Example: Monitor an Amazon Product
Here's a complete, production-ready monitor script that tracks an Amazon product and sends a Slack alert when the price drops below a threshold:
#!/bin/bash
# price-monitor.sh — monitors an Amazon product and alerts on price drops
# Usage: ./price-monitor.sh
PRODUCT_URL="https://www.amazon.com/dp/B0D1XD1ZV3"
SLACK_WEBHOOK="https://hooks.slack.com/services/YOUR/WEBHOOK"
TARGET_PRICE=40 # Alert when price drops below $40
CHECK_INTERVAL=3600 # 1 hour
notify_slack() {
local message="$1"
curl -s -X POST "$SLACK_WEBHOOK" \
-H "Content-Type: application/json" \
-d "{\"text\": \"$message\"}"
}
echo "Starting price monitor for Echo Dot..."
webpeel monitor "$PRODUCT_URL" \
--render \
--extract '{"price_numeric":"number","price_display":"string","title":"string"}' \
--interval $CHECK_INTERVAL \
--json | while IFS= read -r event; do
if echo "$event" | jq -e '.changed == true' > /dev/null 2>&1; then
CURRENT_PRICE=$(echo "$event" | jq -r '.extracted.price_numeric')
DISPLAY_PRICE=$(echo "$event" | jq -r '.extracted.price_display')
TITLE=$(echo "$event" | jq -r '.extracted.title' | cut -c1-50)
echo "[$(date)] Price changed: $DISPLAY_PRICE"
# Alert if below target
if (( $(echo "$CURRENT_PRICE < $TARGET_PRICE" | bc -l) )); then
notify_slack "🔥 Price drop! \"$TITLE...\" is now $DISPLAY_PRICE (was above \$$TARGET_PRICE). Buy now: $PRODUCT_URL"
fi
fi
done
Advanced: Monitor Multiple Products
To monitor multiple products at once, use a config file:
# monitors.json
[
{
"url": "https://www.amazon.com/dp/B0D1XD1ZV3",
"label": "Echo Dot 5th Gen",
"interval": 3600,
"selector": ".a-price-whole"
},
{
"url": "https://www.amazon.com/dp/B07XJ8C8F5",
"label": "AirPods Pro",
"interval": 7200,
"selector": ".a-price-whole"
},
{
"url": "https://www.bestbuy.com/site/apple-macbook-air/6525066.p",
"label": "MacBook Air M3",
"interval": 14400,
"extract": {"price": "string"}
}
]
webpeel monitor --config monitors.json --on-change "./notify.sh"
Running the Monitor 24/7
To keep the monitor running even after you close your terminal, use a simple process manager:
# With pm2 (Node.js process manager)
npm install -g pm2
pm2 start "webpeel monitor --config monitors.json" --name price-monitor
pm2 save # Restart on system reboot
# Or as a cron job (check every hour at :00)
crontab -e
# Add:
0 * * * * webpeel fetch "https://www.amazon.com/dp/B0D1XD1ZV3" --render --extract '{"price":"string"}' >> ~/price-log.json 2>&1
WebPeel Monitor is Free
Runs locally, no server required. 2,000 fetches/month on the free tier — more than enough for personal price tracking. No credit card needed.
Try it free →