Build a Price Monitoring Bot in 5 Minutes with WebPeel

Track product prices on any e-commerce site and get notified the moment they drop. Runs locally, no server required, completely free.

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

1

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

2

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:

[2026-03-22 14:00:00] ✓ Monitor started: Echo Dot 5th Gen [2026-03-22 14:00:02] ✓ Baseline captured: "$49" [2026-03-22 14:00:02] ✓ Next check in 3600s (15:00:02)

Step 3: Detect Changes

3

See what changed

When a change is detected, WebPeel shows a diff of exactly what changed:

[2026-03-22 16:00:05] ⚡ CHANGE DETECTED: Echo Dot 5th Gen URL: https://www.amazon.com/dp/B0D1XD1ZV3 - $49 + $34.99 Price dropped: $49.00 → $34.99 (-28.6%)

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 →