E-Commerce Price Monitor — Track & Compare Prices Across Stores
Pricing
Pay per usage
E-Commerce Price Monitor — Track & Compare Prices Across Stores
Monitor product prices across Amazon, eBay, Walmart, Target, Best Buy, and any e-commerce site. Extract current prices, discounts, availability, ratings, and reviews using JSON-LD, Open Graph, and platform-specific selectors. Compare prices across multiple stores and track price history. Perfect for
Pricing
Pay per usage
Rating
0.0
(0)
Developer
Ricardo Akiyoshi
Actor stats
0
Bookmarked
2
Total users
1
Monthly active users
8 days ago
Last modified
Categories
Share
E-Commerce Price Monitor
Monitor and compare product prices across Amazon, eBay, Walmart, Target, Best Buy, and thousands of other e-commerce sites. Track price changes over time, find the best deals, and compare prices across multiple stores automatically.
Features
- Universal Price Extraction — Works on any e-commerce site using JSON-LD (schema.org/Product), Open Graph meta tags, and common CSS selectors
- Amazon Deep Parsing — Extracts prices from all Amazon price display variants including deals, coupons, Prime savings, and Best Seller rank
- eBay Full Support — Handles Buy It Now, auctions (bid count, time left), seller info, item condition, and shipping costs
- Walmart, Target, Best Buy — Store-specific enhancements for fulfillment options, member pricing, open box deals, and circle offers
- Shopify / WooCommerce / Magento — Automatic detection and optimized extraction for major e-commerce platforms
- Cross-Store Price Comparison — Searches Google Shopping to find the same product at competing stores with price ranges and best price identification
- Price History Tracking — Tracks prices across multiple runs to build a price timeline for trend analysis
- Price Drop Alerts — Automatically detects price changes and sends webhook notifications when prices drop beyond your threshold
- Webhook Notifications — POST alerts to Slack, Zapier, Make, n8n, or any HTTP endpoint with full price change details
- Pay-Per-Event Pricing — Only pay $0.005 per product price checked
Input
| Field | Type | Description | Default |
|---|---|---|---|
productUrls | array | List of product page URLs to monitor (required) | — |
includeHistory | boolean | Track price changes across runs | false |
compareAcrossStores | boolean | Search Google Shopping for competing prices | false |
maxResults | integer | Maximum products to check (0 = unlimited) | 100 |
maxConcurrency | integer | Parallel requests (1-10, lower = safer) | 3 |
alertOnPriceChange | boolean | Enable price drop detection and alerts | false |
priceDropThreshold | number | Minimum % drop to trigger alert (e.g., 5 = 5%) | 5 |
webhookUrl | string | URL for POST notifications on price drops (Slack, Zapier, etc.) | — |
proxy | object | Apify proxy configuration | — |
Example Input
{"productUrls": [{ "url": "https://www.amazon.com/dp/B0BSHF7WHW" },{ "url": "https://www.ebay.com/itm/123456789" },{ "url": "https://www.walmart.com/ip/123456789" },{ "url": "https://www.target.com/p/product-name/-/A-12345678" },{ "url": "https://www.bestbuy.com/site/product/1234567.p" }],"includeHistory": true,"compareAcrossStores": true,"maxResults": 100,"proxy": {"useApifyProxy": true,"apifyProxyGroups": ["RESIDENTIAL"]}}
Output
Each product record includes:
| Field | Type | Description |
|---|---|---|
productName | string | Product title |
currentPrice | number | Current selling price |
currency | string | ISO currency code (USD, EUR, GBP, etc.) |
store | string | Store name (Amazon, eBay, Walmart, etc.) |
originalPrice | number | Original/list price before discount |
discount | number | Discount percentage |
availability | string | Stock status (In Stock, Out of Stock, Low Stock, etc.) |
rating | number | Product rating (0-5 scale) |
reviews | number | Number of customer reviews |
url | string | Product page URL |
brand | string | Product brand |
sku | string | Store-specific product identifier (ASIN, item number, etc.) |
image | string | Product image URL |
previousPrice | number | Price from previous run (when history is available) |
priceChange | number | Price change percentage vs previous run |
priceChangeAbsolute | number | Absolute price change amount |
direction | string | Price movement: dropped, increased, or unchanged |
lowestPriceEver | number | Lowest price seen across all runs |
highestPriceEver | number | Highest price seen across all runs |
alertTriggered | boolean | Whether a price drop alert was sent |
alertReason | string | Human-readable alert description |
priceHistory | array | Historical prices from previous runs (when includeHistory is enabled) |
competitors | array | Prices from other stores (when compareAcrossStores is enabled) |
scrapedAt | string | ISO timestamp of extraction |
Store-Specific Fields
Amazon: amazonSpecific.prime, amazonSpecific.savings, amazonSpecific.dealBadge, amazonSpecific.coupon, amazonSpecific.bestSellersRank
eBay: ebaySpecific.condition, ebaySpecific.listingType, ebaySpecific.bids, ebaySpecific.timeLeft, ebaySpecific.seller, ebaySpecific.shipping
Walmart: walmartSpecific.savings, walmartSpecific.fulfillment
Target: targetSpecific.circleOffer
Best Buy: bestBuySpecific.openBoxPrice, bestBuySpecific.memberPrice
Example Output
{"productName": "Apple AirPods Pro (2nd Generation)","currentPrice": 189.99,"currency": "USD","store": "Amazon","originalPrice": 249.00,"discount": 23.7,"availability": "In Stock","rating": 4.7,"reviews": 85432,"url": "https://www.amazon.com/dp/B0BDHWDR12","brand": "Apple","sku": "B0BDHWDR12","image": "https://m.media-amazon.com/images/I/...","amazonSpecific": {"prime": true,"savings": "Save 24%","dealBadge": "Limited time deal"},"priceHistory": [{ "date": "2026-02-15T10:00:00Z", "price": 199.99, "currency": "USD" },{ "date": "2026-02-20T10:00:00Z", "price": 189.99, "currency": "USD" }],"competitors": [{ "store": "Best Buy", "price": 199.99, "currency": "USD", "url": "https://..." },{ "store": "Walmart", "price": 189.00, "currency": "USD", "url": "https://..." },{ "store": "Target", "price": 189.99, "currency": "USD", "url": "https://..." }],"scrapedAt": "2026-03-01T12:00:00Z"}
Extraction Strategies
The actor uses 5 extraction strategies, applied in order of reliability:
-
JSON-LD / schema.org — Structured data embedded in
<script type="application/ld+json">. Works on thousands of sites that follow schema.org Product markup. Most reliable method. -
Amazon-Specific — Deep parsing of Amazon's complex HTML with 15+ price selector variants, deal badges, Prime detection, coupon extraction, and Best Seller rank.
-
eBay-Specific — Handles both Buy It Now and auction listings, extracts bid count, time remaining, seller info, item condition, and shipping costs.
-
Generic CSS Selectors — Falls back to common e-commerce CSS patterns (
.product-price,[data-price],.price, etc.) that work on Shopify, WooCommerce, Magento, and most custom stores. -
Google Shopping — Searches Google Shopping for the product name to find prices from competing stores. Used when
compareAcrossStoresis enabled.
Price Drop Alerts
Set up automated alerts to get notified when prices drop. Works with any webhook-compatible service.
Slack Integration
- Create an Incoming Webhook in Slack
- Set
alertOnPriceChangetotrue - Set
priceDropThresholdto your desired percentage (e.g.,5) - Paste your Slack webhook URL in
webhookUrl
Zapier / Make / n8n
Use a generic Webhook trigger URL. The actor sends a JSON POST with:
{"text": "Price dropped: Apple AirPods Pro\nUSD 249.00 -> USD 189.99 (-23.7%)\nStore: Amazon | URL: https://...","product": "Apple AirPods Pro (2nd Generation)","url": "https://www.amazon.com/dp/B0BDHWDR12","store": "Amazon","currentPrice": 189.99,"previousPrice": 249.00,"changePercent": -23.7,"changeAbsolute": -59.01,"direction": "dropped","currency": "USD","timestamp": "2026-03-03T12:00:00Z"}
Example Input with Alerts
{"productUrls": [{ "url": "https://www.amazon.com/dp/B0BSHF7WHW" }],"includeHistory": true,"alertOnPriceChange": true,"priceDropThreshold": 10,"webhookUrl": "https://hooks.slack.com/services/YOUR/SLACK/WEBHOOK"}
Use Cases
- Deal Hunting — Monitor products across multiple stores to find the lowest price
- Competitive Intelligence — Track competitor pricing strategies over time
- Dynamic Pricing Research — Analyze how prices change by day, week, or season
- Dropshipping — Monitor supplier prices to maintain profit margins
- Price Alert Systems — Built-in webhook alerts notify you instantly on Slack, Zapier, or any endpoint when prices drop
- Market Research — Compare pricing across brands, categories, and regions
Proxy Recommendations
- Amazon: Residential proxies strongly recommended (Amazon aggressively blocks datacenter IPs)
- eBay: Datacenter proxies usually work, residential recommended for high volume
- Walmart/Target/Best Buy: Residential proxies recommended
- Shopify stores: Usually work without proxies for low volume
- Google Shopping: Residential proxies required
Pricing
This actor uses Pay-Per-Event pricing:
- $0.005 per product price checked
- Cross-store comparisons count as 1 additional event per product
- No charge for failed extractions
Limitations
- CheerioCrawler (HTML only, no JavaScript rendering) — some SPAs may not return full content
- Anti-bot protection may block requests without proper proxies
- Google Shopping comparison requires residential proxies
- Price history requires multiple runs of the same actor with the same URLs
Support
For issues, feature requests, or questions, please open an issue on GitHub.
Integration — Python
from apify_client import ApifyClientclient = ApifyClient("YOUR_API_TOKEN")run = client.actor("sovereigntaylor/price-monitor").call(run_input={"searchTerm": "example query","maxResults": 50})for item in client.dataset(run["defaultDatasetId"]).iterate_items():print(f"{item.get('title', item.get('name', 'N/A'))}")
Integration — JavaScript
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: 'YOUR_API_TOKEN' });const run = await client.actor('sovereigntaylor/price-monitor').call({searchTerm: 'example query',maxResults: 50});const { items } = await client.dataset(run.defaultDatasetId).listItems();items.forEach(item => console.log(item.title || item.name || 'N/A'));
