# E-Commerce Price Tracker — Amazon & Shopify (`ramsford/ecommerce-price-tracker`) Actor

Monitor any Amazon ASIN or Shopify product URL. Get current price, stock, category rank, ratings, review velocity, and an AI narrative of what changed since last run. One scan per product. Perfect for repricing, MAP enforcement, and competitor monitoring.

- **URL**: https://apify.com/ramsford/ecommerce-price-tracker.md
- **Developed by:** [Don Johnson](https://apify.com/ramsford) (community)
- **Categories:** E-commerce
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, NaN bookmarks
- **User rating**: No ratings yet

## Pricing

$900.00 / 1,000 e-commerce product scans

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

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

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
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.
Actors are written with capital "A".

## 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.
The best way to integrate Actors is as follows.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).

If your project is in a different language, use the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).


# README

## E-Commerce Price Tracker — Amazon & Shopify Price, Rank & Review Velocity

**One scan per product. Tracks the four signals every e-commerce operator monitors daily: price, stock, category rank, and review velocity. Works on Amazon ASINs and any Shopify store.**

If you sell on Amazon, run a brand on Shopify, do MAP enforcement, run a repricer, or watch competitors — you already check these four signals every morning. This actor does it for you, returns structured JSON plus a markdown report, and tells you what changed since your last scan.

### What this scan returns per product

**Amazon products (ASIN-based):**
- Current price (deal price, sale price, or buy-box price)
- List / strike-through price + computed discount %
- Availability + Buy Box seller + Prime eligibility
- Star rating and total review count
- **Review velocity** — new reviews in the last 30 and 90 days (sampled from recent reviews sort)
- **Best Sellers Rank** for primary and sub-categories
- Variations (color/size), image count, top feature bullets, breadcrumb category path
- **Delta vs your last scan**: price change, BSR change, new reviews, availability flips

**Shopify products (any Shopify-powered store, custom domain or `.myshopify.com`):**
- Current price + compare-at price + discount %
- Stock status, vendor, product type, tags
- All variants with prices and stock state
- Image count, creation/update timestamps, description body
- **Delta vs your last scan**: price moves, new variants, stock changes

**Bonus**: an AI-written executive narrative for each product, plus a fully formatted markdown intelligence report — ready to paste into Slack, a spreadsheet, or a client deliverable.

---

### Who uses this

- **Amazon sellers** — monitor your own listings + competitor ASINs in the same run
- **Brand owners doing MAP enforcement** — alert when a reseller drops below your floor
- **Repricer feeds** — pipe the JSON dataset directly into your repricing logic
- **Investors** — track BSR drift on the products driving a portfolio company's revenue
- **Competitive intel teams** — watch 200 SKUs across Amazon and Shopify in one run
- **Agencies** — sell a "price + rank + review velocity dashboard" deliverable without building the scraper

---

### Why this is different

Most price scrapers only return *price*. This one returns the **operating dashboard for a product**:

- *Price* tells you where you are. *Rank delta* tells you whether you're winning.
- *Review count* tells you total volume. *Review velocity* tells you whether the listing is **gaining or losing momentum right now**.
- *Stock status* tells you availability. *Stock change vs last scan* tells you whether a competitor just sold out or restocked.

Run on a schedule (daily or weekly) and you have a full e-commerce intelligence feed — at $0.90 per product scan.

---

### Input

```json
{
    "products": [
        { "url": "https://www.amazon.com/dp/B08N5WRWNW", "label": "Echo Dot 4th gen" },
        { "url": "https://www.amazon.co.uk/dp/B07YH8E4SV" },
        { "url": "https://shop.example.com/products/blue-widget", "label": "Competitor Blue Widget" }
    ],
    "maxReviewsForVelocity": 25,
    "reportStyle": "full"
}
````

| Field | Required | Default | Description |
|---|---|---|---|
| `products[].url` | Yes | — | Product URL. Amazon `/dp/ASIN` or any Shopify `/products/handle` |
| `products[].label` | No | — | Your internal name for the product (echoed back in output) |
| `products[].platform` | No | auto | `amazon` or `shopify` — auto-detected from URL if omitted |
| `maxReviewsForVelocity` | No | 25 | Amazon-only: how many recent reviews to scan for velocity (5–100) |
| `reportStyle` | No | `full` | `full` (detailed markdown) or `brief` (one-liner) |

***

### Output — one record per product

#### Amazon record (excerpt)

```jsonc
{
    "platform": "amazon",
    "asin": "B08N5WRWNW",
    "title": "Echo Dot (4th Gen)",
    "brand": "Amazon",
    "price": 29.99,
    "currency": "$",
    "listPrice": 49.99,
    "discountPct": 40,
    "availability": "In Stock",
    "stars": 4.7,
    "reviewCount": 612843,
    "buyboxSeller": "Amazon.com",
    "prime": true,
    "bsr": [ { "rank": 12, "category": "Smart Home" } ],
    "reviewVelocity": { "reviewsLast30d": 8, "reviewsLast90d": 22, "recentSampled": 25 },
    "changeSinceLastRun": {
        "priceDelta": -3.00, "pricePctChange": -9,
        "reviewCountDelta": 142,
        "bsrPrimaryDelta": -4,
        "availabilityChanged": null
    },
    "aiNarrative": "Echo Dot (4th Gen) is currently at $29.99 (In Stock). Discount of 40% off list price. Rated 4.7/5 across 612,843 reviews. Price moved down by 3.00 (-9% vs last run). Picked up 142 new reviews since last run. Category rank improved: #16 → #12 (-4). Review velocity: 8 in last 30 days, 22 in last 90 days. Best Sellers Rank: #12 in Smart Home.",
    "intelligenceReport": "## Product Scan Report — Echo Dot…\n…"
}
```

#### Shopify record (excerpt)

```jsonc
{
    "platform": "shopify",
    "title": "Blue Widget",
    "brand": "ExampleBrand",
    "handle": "blue-widget",
    "price": 24.00, "listPrice": 30.00, "discountPct": 20,
    "availability": "in_stock",
    "variants": [
        { "title": "Default", "price": 24.00, "available": true }
    ],
    "changeSinceLastRun": { "priceDelta": -3.00, "pricePctChange": -11 },
    "aiNarrative": "Blue Widget is currently at $24.00 (in_stock). Discount of 20% off list price. Price moved down by 3.00 (-11% vs last run).",
    "intelligenceReport": "## Product Scan Report — Blue Widget…\n…"
}
```

***

### Pricing

**$0.90 per product scan** (pay-per-event). One product in `products` = one scan = one charge.

That is cheaper than every Amazon-only price tracker on the market and includes Shopify, review velocity, BSR tracking, and the delta-since-last-run feature.

***

### Common workflows

- **Daily MAP enforcement**: schedule daily across 50 reseller URLs → filter `price < your_map` → push to Slack
- **Repricer feed**: schedule every 6 hours on your competitor ASINs → consume `price` field via webhook
- **BSR drift alert**: weekly schedule → alert when `bsrPrimaryDelta > 500` (rank worsening fast)
- **Launch velocity tracker**: scan your new launch + 3 competitors daily for 30 days → graph `reviewVelocity.reviewsLast30d`
- **Cross-channel pricing audit**: scan your own product on Amazon AND your Shopify in one input → flag pricing inconsistency

***

### Tips

- **Amazon multi-region**: works on amazon.com, amazon.co.uk, amazon.de, amazon.ca, amazon.com.au, amazon.co.jp etc — the actor uses the request host to fetch reviews from the matching domain
- **Shopify `.json` endpoint**: the actor uses `<url>.json` first (no scraping, no rate-limit risk). If the store has disabled the JSON endpoint, it falls back to DOM scraping
- **Review velocity is sampled** — set `maxReviewsForVelocity: 50+` for higher-traffic listings where you need a stable 30-day count

***

### Limits & honesty

- **Amazon shows different prices to different users.** This actor scrapes the page-as-served — most often the standard logged-out US price. For per-region or per-cart pricing, run multiple scans with the relevant regional URL.
- **BSR is read from the page text** — Amazon occasionally omits BSR for some categories. When absent, the field returns `[]`.
- **Shopify stock**: the JSON endpoint reports per-variant availability boolean — the actor reports the first variant's state in `availability`, and the full list in `variants`.

Built and maintained by **Johnson AI Consulting** — see also our **Amazon Product Intelligence** actor, **Review Intelligence Agent**, **LinkedIn Company Monitor**, and **Competitor Intelligence Monitor**.

# Actor input Schema

## `products` (type: `array`):

List of product objects. Each needs: url. Optionally: label (your internal name) and platform ('amazon' or 'shopify'). Platform is auto-detected if omitted.

## `maxReviewsForVelocity` (type: `integer`):

How many recent reviews to scan when computing review velocity (only for Amazon).

## `reportStyle` (type: `string`):

'full' produces a detailed markdown report. 'brief' produces a one-liner summary.

## Actor input object example

```json
{
  "products": [
    {
      "url": "https://www.amazon.com/dp/B08N5WRWNW",
      "label": "Echo Dot 4th gen"
    },
    {
      "url": "https://shop.example.com/products/blue-widget",
      "label": "Competitor Blue Widget"
    }
  ],
  "maxReviewsForVelocity": 5,
  "reportStyle": "brief"
}
```

# 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 = {
    "products": [
        {
            "url": "https://www.amazon.com/dp/B08N5WRWNW",
            "label": "Echo Dot 4th gen"
        }
    ],
    "maxReviewsForVelocity": 5,
    "reportStyle": "brief"
};

// Run the Actor and wait for it to finish
const run = await client.actor("ramsford/ecommerce-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 = {
    "products": [{
            "url": "https://www.amazon.com/dp/B08N5WRWNW",
            "label": "Echo Dot 4th gen",
        }],
    "maxReviewsForVelocity": 5,
    "reportStyle": "brief",
}

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

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

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

```

## CLI example

```bash
echo '{
  "products": [
    {
      "url": "https://www.amazon.com/dp/B08N5WRWNW",
      "label": "Echo Dot 4th gen"
    }
  ],
  "maxReviewsForVelocity": 5,
  "reportStyle": "brief"
}' |
apify call ramsford/ecommerce-price-tracker --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=ramsford/ecommerce-price-tracker",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "E-Commerce Price Tracker — Amazon & Shopify",
        "description": "Monitor any Amazon ASIN or Shopify product URL. Get current price, stock, category rank, ratings, review velocity, and an AI narrative of what changed since last run. One scan per product. Perfect for repricing, MAP enforcement, and competitor monitoring.",
        "version": "0.1",
        "x-build-id": "OyhrNjkRo5oS5B6SG"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/ramsford~ecommerce-price-tracker/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-ramsford-ecommerce-price-tracker",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/ramsford~ecommerce-price-tracker/runs": {
            "post": {
                "operationId": "runs-sync-ramsford-ecommerce-price-tracker",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/ramsford~ecommerce-price-tracker/run-sync": {
            "post": {
                "operationId": "run-sync-ramsford-ecommerce-price-tracker",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "required": [
                    "products"
                ],
                "properties": {
                    "products": {
                        "title": "Products",
                        "type": "array",
                        "description": "List of product objects. Each needs: url. Optionally: label (your internal name) and platform ('amazon' or 'shopify'). Platform is auto-detected if omitted."
                    },
                    "maxReviewsForVelocity": {
                        "title": "Max recent reviews to read",
                        "minimum": 5,
                        "maximum": 100,
                        "type": "integer",
                        "description": "How many recent reviews to scan when computing review velocity (only for Amazon).",
                        "default": 25
                    },
                    "reportStyle": {
                        "title": "Report style",
                        "enum": [
                            "full",
                            "brief"
                        ],
                        "type": "string",
                        "description": "'full' produces a detailed markdown report. 'brief' produces a one-liner summary.",
                        "default": "full"
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
