# Competitor Price Tracker - Amazon, Shopify & More (`forward_workstation/competitor-price-tracker`) Actor

Track competitor product prices across Amazon, Shopify, WooCommerce, and any e-commerce site. Extracts price, currency, availability via JSON-LD, OpenGraph, and CSS heuristics.

- **URL**: https://apify.com/forward_workstation/competitor-price-tracker.md
- **Developed by:** [Forward Workstation](https://apify.com/forward_workstation) (community)
- **Categories:** E-commerce
- **Features:** Limited permissions
- **Stats:** 22 total users, 5 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: 4.83 out of 5 stars

## Pricing

from $27.00 / 1,000 results

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## Competitor Price Tracker – Amazon, Shopify, WooCommerce & Any E-Commerce Site

![Banner](https://raw.githubusercontent.com/Rohitsurwade2003/competitor-price-tracker/main/packages/actor/banner.png)

Are your competitors quietly dropping prices while you're not watching?

This actor scrapes live product prices from any e-commerce URL — Amazon listings, Shopify stores, WooCommerce shops — and returns clean, structured data you can pipe into spreadsheets, dashboards, or alerts.

- ✅ No proxies to configure
- ✅ No coding required — just paste URLs
- ✅ Results in under 60 seconds
- ✅ Works with JavaScript-rendered pages

**Who uses this:** E-commerce store owners, dropshippers, Amazon sellers, pricing analysts, and anyone who needs to monitor what competitors are charging — without doing it manually.

### What it does

This Actor takes a list of product URLs and returns structured pricing data for each. It uses a smart competitor price tracking pipeline:

1. **JSON-LD** structured data (most accurate)
2. **OpenGraph** meta tags (`og:price:amount`)
3. **CSS heuristics** as a fallback for unstructured pages

For specific platforms, specialized scrapers kick in:

| Platform | Method |
|----------|--------|
| **Amazon** | Playwright headless browser — bypasses bot detection. Works across all regional domains (`.com`, `.in`, `.co.uk`, `.de`, etc.) |
| **Shopify** | `/products/{handle}.json` API first, then DOM fallback — fastest Shopify price extractor method available |
| **WooCommerce** | JSON-LD from product pages |
| **Other sites** | Generic pipeline (JSON-LD → OpenGraph → CSS) — works as a price scraper on any e-commerce URL |

### Cost

| Scenario | Approx. cost |
|---|---|
| Track 10 products once | ~$0.30 |
| 50 products daily for a month | ~$45 |
| One-time 100-product snapshot | ~$3 |

Pricing is ~$0.03 per product URL. Amazon URLs cost slightly more due to headless browser usage.

### Input

![Input screenshot](https://raw.githubusercontent.com/Rohitsurwade2003/competitor-price-tracker/main/packages/actor/screenshot-input.png)

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `urls` | Array of strings | Yes | Product page URLs to scrape |
| `maxRetries` | Integer (0–10) | No | Retry attempts per URL (default: 3) |
| `proxyCountry` | String | No | ISO country code for proxy (default: US) |

#### Example input

```json
{
  "urls": [
    "https://yoddha.store/product/japa-mala/",
    "https://www.amazon.in/Book-Answers-Carol-Bolt/dp/0553813544/",
    "https://www.plixlife.com/product/tender-coconut-water-powder-315/315"
  ],
  "maxRetries": 3,
  "proxyCountry": "US"
}
```

### Output

![Output screenshot](https://raw.githubusercontent.com/Rohitsurwade2003/competitor-price-tracker/main/packages/actor/screenshot-output.png)

Each URL produces one result in the dataset:

| Field | Type | Description |
|-------|------|-------------|
| `url` | String | The original URL |
| `productName` | String | Detected product name |
| `price` | Number | Normalized price value |
| `currency` | String | Currency code (USD, EUR, GBP, etc.) |
| `availability` | String | Stock status (In Stock / Out of Stock) |
| `scrapedAt` | String | ISO 8601 timestamp |
| `success` | Boolean | Whether scraping succeeded |
| `error` | String | Error message if failed |

#### Example output

```json
{
  "url": "https://www.amazon.in/Book-Answers-Carol-Bolt/dp/0553813544/",
  "productName": "The Book Of Answers: The gift book that became an internet sensation, offering both enlightenment and entertainment",
  "price": 561,
  "currency": "INR",
  "availability": "In Stock",
  "scrapedAt": "2026-05-20T03:08:02.314Z",
  "success": true,
  "error": null
}
```

### Use cases

- **Competitor price tracking** — Monitor what rivals charge daily and get alerted on changes
- **Amazon price monitor** — Track Amazon listings across regions without getting blocked
- **Dropshipping price tracker** — Stay on top of supplier and competitor pricing automatically
- **Market research** — Collect e-commerce price intelligence across brands and categories
- **Dynamic pricing** — Feed competitor prices into your own pricing algorithms
- **MAP compliance** — Monitor minimum advertised price violations across resellers
- **Price comparison tool** — Aggregate prices across sellers for any product category

### Tips for best results

- **Use clean URLs** — Remove tracking parameters and referral tags. Use `https://www.amazon.in/dp/B0CYTDQ3YF` instead of long URLs with `?pd_rd_w=...` parameters. Shorter URLs are more reliable.
- **Amazon price scraper** — Always uses a headless browser (Playwright) to bypass bot detection. Works with `amazon.com`, `amazon.in`, `amazon.co.uk`, and all other regional domains.
- **Shopify stores** — Detected automatically. The Actor tries the JSON API first for fastest results, then falls back to DOM scraping.
- **Currency detection** — Extracted from structured data (JSON-LD, OpenGraph). Some smaller stores may not specify currency explicitly — verify the currency field for lesser-known sites.
- **Product price alert workflows** — Combine with Apify Schedules + Webhooks to trigger alerts when a price drops below your threshold.

### Limitations

- Sites behind login walls or Cloudflare Turnstile fingerprinting may not scrape reliably
- Amazon prices shown to logged-in users (Prime deals, regional pricing) may differ from scraped results
- Currency detection depends on structured data — some small stores omit it

### Proxy & rate limiting

- Uses Apify residential proxies by default for reliable results
- Exponential backoff retry on failures (configurable via `maxRetries`)
- Amazon requests always use a headless browser to avoid blocking

### Integration

This Actor works great with:

- **Apify Schedules** — Run daily/hourly price checks automatically
- **Webhooks** — Get notified when a run completes
- **API** — Trigger runs programmatically from your backend

# Actor input Schema

## `urls` (type: `array`):

List of competitor product page URLs to scrape prices from.

## `maxRetries` (type: `integer`):

Number of retry attempts on failure (exponential backoff).

## `proxyCountry` (type: `string`):

ISO country code for residential proxy selection (e.g. US, GB, DE).

## Actor input object example

```json
{
  "urls": [
    "https://www.allbirds.com/products/mens-wool-runners"
  ],
  "maxRetries": 3,
  "proxyCountry": "US"
}
```

# Actor output Schema

## `results` (type: `string`):

Dataset containing price, currency, availability, and product name for each URL.

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "urls": [
        "https://www.allbirds.com/products/mens-wool-runners"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("forward_workstation/competitor-price-tracker").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = { "urls": ["https://www.allbirds.com/products/mens-wool-runners"] }

# Run the Actor and wait for it to finish
run = client.actor("forward_workstation/competitor-price-tracker").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "urls": [
    "https://www.allbirds.com/products/mens-wool-runners"
  ]
}' |
apify call forward_workstation/competitor-price-tracker --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,forward_workstation/competitor-price-tracker"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/q6wd7AaGgAM81UiOw/builds/C2Q1FOSGYNHht1R90/openapi.json
