# Shopee Price Tracker (`lergassy/shopee-price-tracker`) Actor

\[$0.40/1K products] Track Shopee prices in 11 marketplaces: current price, original price, discount, and the change since your last run — previous price, % change, lowest and highest seen. Product links or searches. No run fee.

- **URL**: https://apify.com/lergassy/shopee-price-tracker.md
- **Developed by:** [Matvey](https://apify.com/lergassy) (community)
- **Categories:** E-commerce, Automation, Agents
- **Stats:** 7 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.28 / 1,000 products

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

**Shopee Price Tracker** watches Shopee prices for you. Give it product links or search keywords on any of the **11 Shopee marketplaces** (Indonesia, Singapore, Malaysia, Philippines, Thailand, Vietnam, Taiwan, Brazil, Mexico, Colombia, Chile) and every run returns the **current price, original price and discount** — and, from the second run on, **what changed since the last run**: previous price, change in money and percent, up/down trend, and the lowest and highest price seen so far. Put it on a schedule and you have a daily Shopee price history without a database. No browser, no login, no Shopee API key.

> This is the price-tracking edition of **[Shopee Scraper](https://apify.com/lergassy/shopee-scraper)** — same engine and the same per-product price, plus a price memory that compares every run with the previous one.

### How price tracking works

1. Each run remembers the price of every product it saw in a **price memory** — a small key-value store in **your own** Apify account, named in the field **Price memory name** (`shopee-prices` by default).
2. The next run with the same name compares each product with what the memory holds and fills in the comparison fields.
3. Turn on **Only price changes** and a scheduled run writes — and charges — only products whose price went up or down, plus products it sees for the first time. Unchanged products are skipped free of charge.

Use a different memory name for each watch list (for example `competitor-phones-my` and `my-shop-id`). Clear the field to switch tracking off.

### What data does it return?

| Field | Example (iPhone 15 on Shopee Indonesia, 6 October 2026) |
|---|---|
| `title`, `url`, `shopId`, `itemId` | Apple iPhone 15 · shopee.co.id/Apple-iPhone-15-i.255563049.23157471408 |
| `price`, `originalPrice`, `discountPercent`, `currency` | 13999000 · 16999000 · 18 · IDR |
| `previousPrice`, `priceChange`, `priceChangePercent` | price on the last run and the difference (empty on the first run) |
| `priceTrend` | `new`, `down`, `up`, `same` or `no-price` |
| `lowestPrice`, `highestPrice`, `timesChecked` | lowest and highest price this memory has seen, number of runs |
| `firstSeenAt`, `previousCheckedAt` | when the product was first and last priced |
| `rating`, `ratingCount` | 5 · 23894 |
| `shopName`, `shopRating`, `shopRatingCount` | Digimap Official Shop · 4.94 · 161125 |
| `country`, `marketplace`, `labels`, `imageUrl`, `position`, `searchTerm` | ID · Indonesia · \["Murah Mantap"] · image · 1 · iphone 15 |

Product links give a `product_detail` row: Shopee publishes the full record (description, brand, seller) only for some products; for the rest the price, discount and rating come from the product's own search card and the row says so in `note` — it is billed as a card, not as a detail.

### How much does it cost?

Pay per result, **no fee per run**. Error rows and skipped unchanged products are free.

| Event | Price (Free plan) | Per 1,000 |
|---|---|---|
| Product (search card, or a product page rebuilt from its card) | $0.0004 | **$0.40** |
| Product detail (full product record, when Shopee publishes it) | $0.0007 | $0.70 |

Higher Apify plans pay less (down to $0.28 per 1,000 products). Watching 100 products once a day costs about $1.20 a month.

### How to track Shopee prices

1. Click **Try for free**.
2. Paste Shopee **product links** into **Shopee URLs**, or type **Search keywords** and pick the **Country / marketplace**.
3. Keep **Price memory name** (or type your own) and click **Start**. The first run records the prices.
4. Click **Schedule** (for example daily at 09:00) with the same input. From the second run on, the **Prices** view of the Output tab shows the previous price, the change and the trend.
5. Want only the movers? Turn on **Only price changes**.

### ⬇️ Input example

```json
{
  "startUrls": [
    "https://shopee.co.id/Apple-iPhone-15-i.255563049.23157471408",
    "https://shopee.co.id/Apple-iPhone-15-128GB-Pink-i.241308147.22982495280"
  ],
  "priceHistoryStore": "iphone-watch-id",
  "onlyPriceChanges": true
}
```

Price-watch a whole search instead — the 25 best-rated power banks between ₱500 and ₱1,500 in the Philippines:

```json
{ "country": "PH", "searchTerms": ["powerbank 20000mah"], "minPrice": 500, "maxPrice": 1500, "minRating": 4.5, "maxItems": 25 }
```

An empty input (`{}`) is a demo: 40 results for `iphone 15` on Shopee Indonesia.

### ⬆️ Output example (second run)

```json
{
  "type": "product",
  "title": "Apple iPhone 15",
  "itemId": "23157471408",
  "country": "ID",
  "currency": "IDR",
  "price": 13999000,
  "originalPrice": 16999000,
  "discountPercent": 18,
  "previousPrice": 13999000,
  "priceChange": 0,
  "priceChangePercent": 0,
  "priceTrend": "same",
  "lowestPrice": 13999000,
  "highestPrice": 13999000,
  "timesChecked": 2,
  "shopName": "Digimap Official Shop"
}
```

### Use cases

#### Sellers watching competitors

Track the listings that compete with yours and get only the ones that changed price today.

#### Shoppers and deal sites

Watch a product until it drops below a price; `lowestPrice` tells you whether today's "sale" is really the lowest.

#### Brands and analysts

Monitor resellers' prices across Shopee countries and keep a dated price history for MAP or market reports.

### Limits, honestly

- The price memory compares runs **with the same memory name** in the same Apify account; it does not know prices from before your first run.
- A search returns whatever Shopee ranks first at that moment, so a product can drop out of a search between runs. For a fixed watch list, use product links.
- Shopee changes prices during flash sales within hours; a daily schedule sees the price at the time of the run.
- A search Shopee answers with unrelated products (a typo, a made-up word) gives one free explanation row instead of random products.

### ❓ FAQ

#### Is it legal to scrape Shopee prices?

The Actor reads only public product pages that anyone can open without logging in. Use the data in line with Shopee's terms and the law of your country.

#### Do I need a proxy or a Shopee account?

No. Requests go out on the cheapest route that works and switch to residential proxies only when Shopee refuses; that is included in the price. No account or cookies are used.

#### Where is my price history stored?

In a named key-value store in your Apify account (Storage → Key-value stores → your memory name, record `price-history`). You can download or delete it at any time.

### Your feedback

A price that does not match the page, or a field you need? Open an issue in the **Issues** tab.

# Actor input Schema

## `mode` (type: `string`):

Choose the data type. <b>Products from search</b> – product cards from keyword search, category or listing URLs. <b>Product details</b> – full product pages with description, brand, gallery and seller. <b>Shop</b> – shop profile and its products. <b>Auto</b> decides by the URL you paste.

## `country` (type: `string`):

Shopee marketplace for keyword searches. URLs keep their own country.

## `searchTerms` (type: `array`):

Keywords whose search results you want to price-watch, one per line, e.g. <code>iphone 15</code>. Each is searched in the selected marketplace. Give this or <code>startUrls</code>.

## `startUrls` (type: `array`):

Shopee product links to watch (<code>.../Name-i.123.456</code>), or search, category and shop links. Give this or <code>searchTerms</code>; with neither, the run tracks the search <code>iphone 15</code> on Shopee Indonesia as a demo.

## `maxItems` (type: `integer`):

Stop after this many products per keyword or URL.

## `priceHistoryStore` (type: `string`):

Name of the memory (a key-value store in your own Apify account) that keeps the last price of every product. Each row is compared with it: <code>previousPrice</code>, <code>priceChange</code>, <code>priceChangePercent</code>, <code>priceTrend</code>, lowest and highest price seen. Use one name per watch list; clear the field to switch tracking off.

## `onlyPriceChanges` (type: `boolean`):

Write (and charge) only products whose price went up or down since the last run with the same price memory, plus products seen for the first time. Unchanged products are skipped free of charge. Turn on for a scheduled price-drop alert.

## `enrichProducts` (type: `boolean`):

Open each product page for description, brand, image gallery, category path and seller reputation. Slower and billed per product detail.

## `includeShopAndReviews` (type: `boolean`):

Search results: add the seller's shop name and rating, the product's review count, brand and price range to every card. Read from each product's page — one extra request per card, no extra charge. Turn off for the fastest possible runs.

## `sortBy` (type: `string`):

Order of search results.

## `minPrice` (type: `integer`):

Minimum price in the marketplace's own currency.

## `maxPrice` (type: `integer`):

Maximum price in the marketplace's own currency.

## `minRating` (type: `number`):

Keep only products rated at least this (0–5 stars). Applied to the rating shown on the card; products without a rating are dropped when this is set.

## `proxyConfiguration` (type: `object`):

Shopee serves pages per region. Residential proxies in the marketplace country give the most stable results.

## `maxConcurrency` (type: `integer`):

Parallel requests.

## Actor input object example

```json
{
  "mode": "auto",
  "country": "ID",
  "searchTerms": [
    "iphone 15"
  ],
  "startUrls": [],
  "maxItems": 40,
  "priceHistoryStore": "shopee-prices",
  "onlyPriceChanges": false,
  "enrichProducts": false,
  "includeShopAndReviews": true,
  "sortBy": "relevancy",
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  },
  "maxConcurrency": 3
}
```

# Actor output Schema

## `products` (type: `string`):

One row per Shopee listing: title, price, original price and discount, currency, rating, units sold, seller location, category path and image. Enriched rows add brand, description, stock and the seller block; shop rows summarise a store.

## `runSummary` (type: `string`):

JSON counters for the run: rows delivered, filtered out, errors and request statistics.

## `notAttempted` (type: `string`):

JSON list of inputs the run did not reach (time limit or "Max cost per run"). Not charged — pass them as input to a new run to continue. Present only when the run stopped early.

# 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 = {
    "searchTerms": [
        "iphone 15"
    ],
    "startUrls": []
};

// Run the Actor and wait for it to finish
const run = await client.actor("lergassy/shopee-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 = {
    "searchTerms": ["iphone 15"],
    "startUrls": [],
}

# Run the Actor and wait for it to finish
run = client.actor("lergassy/shopee-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 '{
  "searchTerms": [
    "iphone 15"
  ],
  "startUrls": []
}' |
apify call lergassy/shopee-price-tracker --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,lergassy/shopee-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/C9nN9o5vV3xTAZzES/builds/KcQzI2GXzEMjXbc2G/openapi.json
