# TikTok Shop Store Monitor Pro  💾 (`deepmine/tiktok-shop-store-monitor-pro`) Actor

Monitor TikTok Shop seller stores and detect catalog changes across runs. Track matched products, price changes, additions, removals, and store-level snapshots for competitive ecommerce intelligence.

- **URL**: https://apify.com/deepmine/tiktok-shop-store-monitor-pro.md
- **Developed by:** [DeepMine](https://apify.com/deepmine) (community)
- **Categories:** E-commerce, Automation, Developer tools
- **Stats:** 14 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: 5.00 out of 5 stars

## Pricing

from $25.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.

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

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — 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

## TikTok Shop Store Monitor Pro

**TikTok Shop Store Monitor Pro** is a production-ready **TikTok Shop scraper** for teams that need continuous **seller monitoring**, **catalog change detection**, and **price intelligence**.

If you are searching for a **TikTok Shop store monitor**, **TikTok Shop competitor tracker**, **TikTok Shop product change tracker**, or **TikTok Shop price tracker**, this actor is built for that exact workflow.

It helps you monitor one or many TikTok Shop stores, detect listing changes between runs, and export clean, structured TikTok Shop ecommerce data you can use in reports, dashboards, and automations.

### Why This TikTok Shop Scraper Is Useful

Most TikTok Shop tools focus on one-off scraping. This actor is built for repeatable monitoring.

You can:

- Track target sellers over time
- Detect newly added products quickly
- Detect products that disappeared from the tracked snapshot window
- Detect price movement and merchandising changes
- Build historical store intelligence for strategy and operations

This makes it ideal for **ecommerce operators**, **agencies**, **competitive intelligence teams**, and **research workflows** that need durable, recurring data.

### High-Value Use Cases

#### 1) TikTok Shop Competitor Monitoring

Monitor competitor stores daily and identify what they add, remove, or repriced.

#### 2) TikTok Shop Product Research

Discover which products persist, which rotate out, and where catalog focus is shifting.

#### 3) TikTok Shop Price Change Intelligence

Track min/max/average price movements across seller catalogs and identify promotional cycles.

#### 4) Seller Assortment Tracking

Measure catalog breadth and product turnover by store for niche-level market mapping.

#### 5) Agency Reporting and Client Deliverables

Create recurring store-change reports with clear product-level proof.

#### 6) Trend Discovery for Merchandising

Spot early shifts in product mix and pricing strategy before they become obvious.

### What Data You Get

This actor outputs structured rows with fields designed for analytics.

#### Core Product Fields

- `product_id`
- `product_name`
- `product_url`
- `seller`
- `brand_name`
- `min_price`, `max_price`, `avg_price`
- `currency_symbol`
- `product_rating`
- `review_count`
- `rank_global`
- `source_url`
- `scraped_at`

#### Store Context Fields

- `monitor_store_name`
- `monitor_store_key`
- `monitor_store_input`
- `monitor_query`

#### Change Tracking Fields

- `row_type`
- `change_type`
- `previous_min_price`, `previous_max_price`, `previous_avg_price`
- `current_min_price`, `current_max_price`, `current_avg_price`
- `changes_added`, `changes_removed`, `changes_price_changed`

### Output Row Types (Important)

This actor emits multiple row types so you can analyze both current state and changes.

- `store_product`
  Current matched listings captured in this run.

- `store_change`
  Snapshot delta rows:
  - `added`
  - `removed`
  - `price_changed`

- `store_summary`
  Store-level rollup for operational monitoring.

### Inputs (Practical Configuration)

#### Required

- `stores`
  List of store names and/or TikTok Shop store URLs.

#### Optional Discovery Control

- `queries`
  Optional query hints. If omitted, store names are used.

#### Scope and Coverage

- `searchRegion`
- `maxPagesPerStore`
- `maxProductsPerStore`
- `maxQueriesPerStore`

#### Change Detection and State

- `enableSnapshotDiff`
- `emitChangeRows`
- `emitStoreSummary`
- `maxChangeRowsPerStore`
- `snapshotKeyPrefix`
- `stateStoreName`

#### Reliability and Stability

- `requestTimeoutSec`
- `maxFetchRetries`
- `queryRetryAttempts`
- `allowDirectRescueOnSoftBlock`
- `enableBrowserFallback`
- `browserFallbackWaitMs`
- `failOnZeroAfterRetries`

#### Proxy

- `proxyConfiguration`
  Use Apify proxy selector (residential/datacenter/custom) according to your reliability needs.

### Recommended Settings (Most Users)

For stable recurring TikTok Shop monitoring:

- `maxPagesPerStore`: `3`
- `maxProductsPerStore`: `200`
- `maxQueriesPerStore`: `2`
- `enableSnapshotDiff`: `true`
- `emitChangeRows`: `true`
- `emitStoreSummary`: `true`
- `compactNullFields`: `true`
- `maxFetchRetries`: `3`
- `queryRetryAttempts`: `3`

If you want stronger removal confidence, increase `maxPagesPerStore`.

### Example Input

```json
{
  "stores": [
    "Sweet Furniture",
    "https://www.tiktok.com/shop/store/dowinx"
  ],
  "searchRegion": "US",
  "maxPagesPerStore": 3,
  "maxProductsPerStore": 200,
  "maxQueriesPerStore": 2,
  "enableSnapshotDiff": true,
  "emitStoreSummary": true,
  "emitChangeRows": true,
  "stateStoreName": "tiktok-shop-store-monitor-state"
}
```

### Who Should Use This

- TikTok Shop brands and operators
- Ecommerce analysts
- Product researchers
- Competitive intelligence teams
- Marketing agencies
- Automation and BI teams

### FAQ

#### Why do I see both `store_product` and `store_change` rows?

`store_product` is current-run state. `store_change` is the diff versus previous snapshot.

#### Does `removed` always mean permanently deleted?

Not always. It means missing from current tracked snapshot versus prior run. Increase coverage depth for stricter confidence.

#### Can this run on a schedule for daily monitoring?

Yes. This actor is designed for recurring runs and longitudinal analysis.

#### Is this useful for TikTok Shop competitor research?

Yes. That is one of the primary workflows.

### SEO Search Intent Coverage

This actor is optimized for high-intent search terms including:

- TikTok Shop scraper
- TikTok Shop store scraper
- TikTok Shop store monitor
- TikTok Shop seller monitor
- TikTok Shop competitor tracker
- TikTok Shop product tracker
- TikTok Shop product change tracker
- TikTok Shop catalog monitor
- TikTok Shop catalog tracker
- TikTok Shop price tracker
- TikTok Shop price change monitor
- TikTok Shop competitor analysis tool
- TikTok Shop seller intelligence scraper
- TikTok Shop ecommerce data scraper
- TikTok Shop market research scraper
- TikTok Shop monitoring API alternative

If your objective is repeatable, actionable **TikTok Shop seller intelligence**, this actor gives you the data model needed for operations, reporting, and strategic decision-making.

# Actor input Schema

## `stores` (type: `array`):

TikTok Shop store names or store URLs. The actor tracks matching products and detects catalog changes per store.

## `queries` (type: `array`):

Optional search terms used for discovery. If empty, each store name is used as its own query hint.

## `searchRegion` (type: `string`):

Region parameter sent to TikTok Shop search pages (for example: US, GB).

## `maxPagesPerStore` (type: `integer`):

Maximum number of search-result pages scanned per store query path.

## `maxProductsPerStore` (type: `integer`):

Maximum number of unique matched products emitted per store in one run.

## `maxQueriesPerStore` (type: `integer`):

How many query hints are used per store during a run.

## `includeRawProduct` (type: `boolean`):

Include the full raw product object in each product row.

## `compactNullFields` (type: `boolean`):

If true, null/undefined fields are omitted from output rows.

## `enableSnapshotDiff` (type: `boolean`):

Store per-store snapshots in key-value storage and detect additions/removals/price changes against the previous run.

## `emitStoreSummary` (type: `boolean`):

Push one store\_summary row per monitored store.

## `emitChangeRows` (type: `boolean`):

Push store\_change rows for added/removed/price\_changed products.

## `emitRemovedChanges` (type: `boolean`):

Emit removed change rows after confirmation thresholds are met.

## `maxChangeRowsPerStore` (type: `integer`):

Safety cap for emitted change rows per change type per store.

## `minConsecutiveMissesForRemoved` (type: `integer`):

Emit a removed change only after a product is missing for this many consecutive runs (reduces false removals).

## `minPresenceRunsForRemoved` (type: `integer`):

Product must be seen in at least this many runs before it can emit a removed change.

## `snapshotKeyPrefix` (type: `string`):

KVS key prefix used to store per-store snapshots.

## `stateStoreName` (type: `string`):

Named key-value store used to persist snapshots across runs for change detection.

## `requestTimeoutSec` (type: `integer`):

HTTP request timeout for each page request.

## `maxFetchRetries` (type: `integer`):

How many HTTP fetch attempts to try per page before giving up.

## `queryRetryAttempts` (type: `integer`):

How many full retries to run per store query when blocked/failure signals produce zero matched products.

## `allowDirectRescueOnSoftBlock` (type: `boolean`):

When proxy pages are soft-blocked, try one direct (no-proxy) fetch rescue before giving up that page.

## `enableBrowserFallback` (type: `boolean`):

If blocked/challenged and extraction is empty, try a lightweight Playwright fallback.

## `browserFallbackWaitMs` (type: `integer`):

How long browser fallback waits after page load before reading HTML.

## `failOnZeroAfterRetries` (type: `boolean`):

If true, fail run when all monitored stores return zero matched products after retries under blocked conditions.

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

Choose proxy type and settings (Apify Proxy residential/datacenter or custom proxies).

## Actor input object example

```json
{
  "stores": [
    "Sweet Furniture",
    "https://www.tiktok.com/shop/store/dowinx"
  ],
  "searchRegion": "US",
  "maxPagesPerStore": 3,
  "maxProductsPerStore": 200,
  "maxQueriesPerStore": 2,
  "includeRawProduct": true,
  "compactNullFields": true,
  "enableSnapshotDiff": true,
  "emitStoreSummary": true,
  "emitChangeRows": true,
  "emitRemovedChanges": true,
  "maxChangeRowsPerStore": 250,
  "minConsecutiveMissesForRemoved": 2,
  "minPresenceRunsForRemoved": 2,
  "snapshotKeyPrefix": "STORE_MONITOR_SNAPSHOT",
  "stateStoreName": "tiktok-shop-store-monitor-state",
  "requestTimeoutSec": 30,
  "maxFetchRetries": 3,
  "queryRetryAttempts": 3,
  "allowDirectRescueOnSoftBlock": true,
  "enableBrowserFallback": false,
  "browserFallbackWaitMs": 8000,
  "failOnZeroAfterRetries": false,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "countryCode": "US",
    "apifyProxyCountry": "US",
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "groups": [
      "RESIDENTIAL"
    ]
  }
}
```

# Actor output Schema

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

No description

# 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 = {
    "stores": [
        "Sweet Furniture",
        "https://www.tiktok.com/shop/store/dowinx"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("deepmine/tiktok-shop-store-monitor-pro").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 = { "stores": [
        "Sweet Furniture",
        "https://www.tiktok.com/shop/store/dowinx",
    ] }

# Run the Actor and wait for it to finish
run = client.actor("deepmine/tiktok-shop-store-monitor-pro").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 '{
  "stores": [
    "Sweet Furniture",
    "https://www.tiktok.com/shop/store/dowinx"
  ]
}' |
apify call deepmine/tiktok-shop-store-monitor-pro --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,deepmine/tiktok-shop-store-monitor-pro"
        }
    }
}

```

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/MTwERknGMhw084JeA/builds/FGdhoduTfCyKR2aNs/openapi.json
