E-Commerce Price Monitor — Track & Compare Prices Across Stores avatar

E-Commerce Price Monitor — Track & Compare Prices Across Stores

Pricing

Pay per usage

Go to Apify Store
E-Commerce Price Monitor — Track & Compare Prices Across Stores

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

Ricardo Akiyoshi

Maintained by Community

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

FieldTypeDescriptionDefault
productUrlsarrayList of product page URLs to monitor (required)
includeHistorybooleanTrack price changes across runsfalse
compareAcrossStoresbooleanSearch Google Shopping for competing pricesfalse
maxResultsintegerMaximum products to check (0 = unlimited)100
maxConcurrencyintegerParallel requests (1-10, lower = safer)3
alertOnPriceChangebooleanEnable price drop detection and alertsfalse
priceDropThresholdnumberMinimum % drop to trigger alert (e.g., 5 = 5%)5
webhookUrlstringURL for POST notifications on price drops (Slack, Zapier, etc.)
proxyobjectApify 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:

FieldTypeDescription
productNamestringProduct title
currentPricenumberCurrent selling price
currencystringISO currency code (USD, EUR, GBP, etc.)
storestringStore name (Amazon, eBay, Walmart, etc.)
originalPricenumberOriginal/list price before discount
discountnumberDiscount percentage
availabilitystringStock status (In Stock, Out of Stock, Low Stock, etc.)
ratingnumberProduct rating (0-5 scale)
reviewsnumberNumber of customer reviews
urlstringProduct page URL
brandstringProduct brand
skustringStore-specific product identifier (ASIN, item number, etc.)
imagestringProduct image URL
previousPricenumberPrice from previous run (when history is available)
priceChangenumberPrice change percentage vs previous run
priceChangeAbsolutenumberAbsolute price change amount
directionstringPrice movement: dropped, increased, or unchanged
lowestPriceEvernumberLowest price seen across all runs
highestPriceEvernumberHighest price seen across all runs
alertTriggeredbooleanWhether a price drop alert was sent
alertReasonstringHuman-readable alert description
priceHistoryarrayHistorical prices from previous runs (when includeHistory is enabled)
competitorsarrayPrices from other stores (when compareAcrossStores is enabled)
scrapedAtstringISO 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:

  1. 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.

  2. Amazon-Specific — Deep parsing of Amazon's complex HTML with 15+ price selector variants, deal badges, Prime detection, coupon extraction, and Best Seller rank.

  3. eBay-Specific — Handles both Buy It Now and auction listings, extracts bid count, time remaining, seller info, item condition, and shipping costs.

  4. 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.

  5. Google Shopping — Searches Google Shopping for the product name to find prices from competing stores. Used when compareAcrossStores is enabled.

Price Drop Alerts

Set up automated alerts to get notified when prices drop. Works with any webhook-compatible service.

Slack Integration

  1. Create an Incoming Webhook in Slack
  2. Set alertOnPriceChange to true
  3. Set priceDropThreshold to your desired percentage (e.g., 5)
  4. 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 ApifyClient
client = 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'));