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
22 minutes 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
- 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 |
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 |
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.
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 — Feed data into alerting pipelines to notify on price drops
- 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'));