# Weidian Scraper: 微店 Product & Shop Data (`getascraper/weidian-scraper`) Actor

Scrape Weidian (微店) product listings and merchant shop data by item URL or shop URL. Get price, sales count, stock, images, SKU variants, and shop rating for cross-border sourcing and competitive intelligence.

- **URL**: https://apify.com/getascraper/weidian-scraper.md
- **Developed by:** [GetAScraper](https://apify.com/getascraper) (community)
- **Categories:** E-commerce, Lead generation, Automation
- **Stats:** 1 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $3.00 / 1,000 product records

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/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/docs.md):

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

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python/docs.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/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

## 🛍️ Weidian Scraper: 微店 Product & Shop Data

<table width="100%">
<tr>
<td style="padding:24px 28px;background:#FDF0F1;border:1px solid #F5C6CE;border-top:4px solid #C81E3A;border-radius:12px">
<span style="font-size:23px;font-weight:800;color:#1C1917;line-height:1.3">Get Weidian product prices, stock, and shop trust data ready for your spreadsheet in seconds.</span><br>
<span style="font-size:15px;color:#57534E;line-height:1.6">Turn any Weidian (微店) item or shop link into structured sourcing data: price, stock, sales count, images, SKU variants, and shop credit rating, no login or browser required.</span>
</td>
</tr>
</table>

<table width="100%">
<tr>
<td style="padding:14px 12px;width:25%;background:#FFFFFF;border:1px solid #F5C6CE;border-radius:10px 0 0 10px;vertical-align:top">
<span style="font-size:15px;font-weight:800;color:#A3172F">🔗 No login, no browser</span><br>
<span style="font-size:12px;color:#57534E">Reads any item or shop link straight from Weidian's own page, sub-second per request</span>
</td>
<td style="padding:14px 12px;width:25%;background:#FFFFFF;border:1px solid #F5C6CE;border-left:none;vertical-align:top">
<span style="font-size:15px;font-weight:800;color:#A3172F">🏪 Shop trust built in</span><br>
<span style="font-size:12px;color:#57534E">Every shop link returns credit rating, repurchase rate, and followers alongside its products</span>
</td>
<td style="padding:14px 12px;width:25%;background:#FFFFFF;border:1px solid #F5C6CE;border-left:none;vertical-align:top">
<span style="font-size:15px;font-weight:800;color:#A3172F">🔁 Track only what's new</span><br>
<span style="font-size:12px;color:#57534E">Recurring runs remember what you've already seen, so scheduled checks return just the changes</span>
</td>
<td style="padding:14px 12px;width:25%;background:#FFFFFF;border:1px solid #F5C6CE;border-left:none;border-radius:0 10px 10px 0;vertical-align:top">
<span style="font-size:15px;font-weight:800;color:#A3172F">🧾 Full product record</span><br>
<span style="font-size:12px;color:#57534E">Price, stock, sales count, images, and SKU variants in one row per item</span>
</td>
</tr>
</table>

Get structured product and shop data from **微店 (Weidian)**, one of China's largest social-commerce platforms for small independent merchant storefronts. Give this Actor a Weidian item link or shop link and it returns clean, structured rows: product name, price, stock, sales count, images, SKU variants, and shipping-fee text, plus shop-level credit rating, repurchase rate, follower count, and location. Built for cross-border sourcing agents, dropshipping catalog sync, and competitive shop monitoring, without opening a single page by hand. Runs on the Apify platform with scheduling, integrations (Make, Zapier, Google Sheets), and run monitoring built in.

### 🔍 What does Weidian Scraper do?

This Actor reads public Weidian item and shop pages directly and returns structured data in seconds.

Give it a Weidian item URL or numeric item ID and it returns the product name, price in CNY, stock level, sales count, sellable status, full image set, and per-SKU price and stock breakdown. Give it a shop URL or numeric shop ID and it returns the shop's name, seller nickname, credit tier, repurchase rate, follower count, and province and city, then attempts to enumerate the shop's product catalog so you get every listing in one run. Weidian has no public keyword-search page, so this Actor works from known item and shop links rather than open-ended search, the same reliable pattern used by this portfolio's other seller and marketplace Actors.

### 💡 Why use Weidian Scraper?

- **I am a dropshipping sourcing agent** comparing Weidian supplier prices and stock levels across dozens of shops before I commit to a bulk order.
- **I am a cross-border sourcing manager** vetting a new Weidian shop's credit rating and repurchase rate before I wire a deposit.
- **I am a competitive-intelligence analyst** tracking a competitor's Weidian storefront for new listings and price changes on a schedule.
- **I am a catalog operations lead** syncing my own resale catalog against a Weidian supplier's live stock and pricing so my listings never go stale.

### 🚀 How to use Weidian Scraper

<table width="100%">
<tr>
<td style="padding:16px 14px;width:33%;background:#FDF0F1;border:1px solid #F5C6CE;border-radius:10px 0 0 10px;vertical-align:top">
<span style="font-size:12px;font-weight:800;color:#C81E3A;letter-spacing:1px">STEP 1</span><br>
<span style="font-size:14px;font-weight:700;color:#1C1917">Add item or shop links</span><br>
<span style="font-size:12px;color:#57534E">Paste Weidian item or shop URLs, or just their numeric IDs.</span>
</td>
<td style="padding:16px 14px;width:33%;background:#FDF0F1;border:1px solid #F5C6CE;border-left:none;vertical-align:top">
<span style="font-size:12px;font-weight:800;color:#C81E3A;letter-spacing:1px">STEP 2</span><br>
<span style="font-size:14px;font-weight:700;color:#1C1917">Run the Actor</span><br>
<span style="font-size:12px;color:#57534E">It reads each public page directly, no login or sign-in wall.</span>
</td>
<td style="padding:16px 14px;width:33%;background:#FDF0F1;border:1px solid #F5C6CE;border-left:none;border-radius:0 10px 10px 0;vertical-align:top">
<span style="font-size:12px;font-weight:800;color:#C81E3A;letter-spacing:1px">STEP 3</span><br>
<span style="font-size:14px;font-weight:700;color:#1C1917">Export your results</span><br>
<span style="font-size:12px;color:#57534E">Download one row per product or shop: price, stock, sales, and trust signals.</span>
</td>
</tr>
</table>

### ⚙️ Input

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `itemUrls` | array of strings | No | Weidian item URLs (`weidian.com/item.html?itemID=...`) or bare numeric item IDs. Use this or `shopUrls`, or both. |
| `shopUrls` | array of strings | No | Weidian shop URLs (`weidian.com/?userid=...`) or bare numeric shop IDs. |
| `fetchShopCatalog` | boolean | No | Attempt to enumerate each shop's product catalog. Falls back to shop profile only if a shop's catalog can't be read. Defaults to `true`. |
| `proxyConfiguration` | object | No | Proxy routing settings. Defaults to Apify's standard proxy network. |
| `includeSkuVariants` | boolean | No | Include the per-variant price and stock breakdown for each item. Defaults to `true`. |
| `includeShopProfile` | boolean | No | Push a shop-profile row for each shop in `shopUrls`. Defaults to `true`. |
| `enrichCatalogItems` | boolean | No | Fetch full item detail for every product found in a shop's catalog, not just the lightweight summary row. Defaults to `true`. |
| `maxItems` | integer | No | Maximum rows to collect before stopping. `0` for no limit. Defaults to `100`. |
| `maxCatalogPagesPerShop` | integer | No | Maximum catalog pages to fetch per shop. Defaults to `5`. |
| `sinceItemId` | integer | No | Skip catalog items at or below this numeric item ID, for a one-off incremental pull. Defaults to `0` (include everything). |
| `onlyNewItems` | boolean | No | For scheduled runs: only return catalog items not seen in a previous run. Ideal for price and stock monitoring. Defaults to `false`. |
| `maxConcurrency` | integer | No | Maximum parallel requests. Defaults to `5`. |

### 📦 Output

Download your results as a spreadsheet, a table, or structured data ready for your own systems. Each item is one row:

```json
{
  "recordType": "item",
  "itemId": "8823014502",
  "itemName": "Wireless Bluetooth Earbuds V5",
  "priceYuan": 89,
  "priceDisplayRaw": "89",
  "soldText": "销量 320",
  "soldCount": 320,
  "stock": 540,
  "isSellable": true,
  "images": ["https://si.geilicdn.com/example-image-1_800_800.jpg"],
  "skuVariants": [
    { "skuId": "100234567", "title": "Black", "priceYuan": 89, "stock": 210 },
    { "skuId": "100234568", "title": "White", "priceYuan": 89, "stock": 330 }
  ],
  "deliveryFeeText": "Express from 8.0 yuan",
  "shopId": "60218845",
  "shopName": "Fujian Home Goods Co",
  "shopUrl": "https://weidian.com/?userid=60218845",
  "itemUrl": "https://weidian.com/item.html?itemID=8823014502",
  "scrapedAt": "2026-07-19T13:03:06.275Z"
}
````

### 📊 Output data fields

| Field | Type | Description |
| --- | --- | --- |
| `recordType` | string | `item`, `shop`, or `catalogItem`. |
| `itemId` / `shopId` | string | Weidian's own numeric item or shop ID. |
| `itemName` | string | Product name. |
| `priceYuan` | number | Price in CNY (yuan). |
| `soldCount` | number | Best-effort parsed sales count. |
| `stock` | number | Units in stock. |
| `isSellable` | boolean | Whether the item currently accepts orders. |
| `images` | array of strings | Full-resolution product image URLs. |
| `skuVariants` | array of objects | Per-variant price and stock breakdown, when enabled. |
| `deliveryFeeText` | string | Raw shipping-fee text from the item page. |
| `shopName` | string | Shop display name. |
| `creditLevel` | number | Shop credit tier (shop-profile rows). |
| `repurchaseRatePct` | number | Shop repurchase rate percentage (shop-profile rows). |
| `followerCount` | number | Number of shop followers. |
| `locationProvince` / `locationCity` | string | Shop's registered province and city, as shown on the platform. |
| `catalogFetchOk` | boolean | Whether the shop's catalog could be enumerated for this run. |
| `catalogItemCount` | number | Number of catalog items found, when the catalog call succeeded. |
| `itemUrl` / `shopUrl` | string | Canonical link back to the source page. |
| `scrapedAt` | string | Timestamp when this row was collected. |

### 💰 Pricing

This Actor uses pay-per-result pricing: you pay for the rows you actually get back, and nothing for an empty run. There are no subscriptions and no minimum spend. Use `maxItems` to control how many results a run returns.

### ⭐ Enjoying Weidian Scraper: 微店 Product & Shop Data?

<table width="100%">
<tr>
<td style="padding:20px 24px 14px;background:#FDF0F1;border:1px solid #F5C6CE;border-left:5px solid #C81E3A;border-radius:10px 10px 0 0">
<span style="font-size:20px;letter-spacing:4px">⭐ ⭐ ⭐ ⭐ ⭐</span><br>
<span style="font-size:17px;font-weight:800;color:#1C1917">Turning a Weidian link into sourcing-ready data before you commit to an order?</span><br>
<span style="font-size:14px;color:#57534E">A 5-star rating takes 10 seconds and helps other sourcing agents and researchers find it. Your feedback also tells us what to build next.</span>
</td>
</tr>
<tr>
<td style="padding:0;background:#C81E3A;border:1px solid #F5C6CE;border-top:none;border-radius:0 0 10px 10px;text-align:center">
<a href="https://apify.com/getascraper/weidian-scraper/reviews" style="display:block;padding:13px 16px;color:#FFFFFF;text-decoration:none;font-weight:800;font-size:15px;letter-spacing:0.3px">★&nbsp;&nbsp;Rate this Actor on Apify</a>
</td>
</tr>
</table>

### ✨ Tips

- Paste a full item or shop URL, or just the numeric ID, both work the same way.
- Turn on `onlyNewItems` for a shop you check on a schedule, so repeat runs only return items you haven't seen before.
- Turn off `enrichCatalogItems` for a faster, lighter first pass across many shops, then re-run with it on for the shops worth a closer look.
- Keep `includeSkuVariants` on when you need exact per-size or per-color stock, off when you just need headline pricing.
- Combine `shopUrls` for discovery with a saved list of `itemUrls` for the specific products you re-check most often.

### ❓ FAQ, disclaimers, and support

##### Does this Weidian scraper get blocked?

No CAPTCHA, login wall, or bot-detection challenge stands between this Actor and Weidian's public item and shop pages. It reads each page the same way a browser does and runs reliably one link after another.

##### Does it extract private seller contact details?

No. Weidian itself masks each seller's WeChat handle on the page, and this Actor never attempts to unmask or reconstruct it. Only publicly shown shop data, name, credit rating, repurchase rate, and followers, is collected.

##### How fresh is the data?

Every run fetches the current item or shop page directly from Weidian at run time. There is no cached or stale data. For price and stock monitoring, schedule the Actor with `onlyNewItems` enabled to track changes over time.

##### Does it support keyword search across Weidian?

Not yet. Weidian has no public keyword-search page, so this Actor works from known item and shop links, the same reliable, low-block-risk pattern used across this portfolio's other marketplace Actors. Provide the specific items or shops you want to track.

##### Does it scrape a shop's entire product catalog?

For most shops, yes, it enumerates the full catalog automatically. A small number of shop layouts don't expose a readable catalog; for those, you still get the full shop profile, and you can add the specific item URLs you need directly for guaranteed full detail.

##### Is scraping Weidian data legal?

This Actor collects publicly available product and shop data. You are responsible for complying with Weidian's Terms of Service and applicable laws in your use of the data.

##### Found a bug or need a field added?

Open an issue on the Actor's **Issues** tab. Custom solutions are available on request.

### 🔗 Other actors

- [Avito Seller Profile Scraper: Профили продавцов Авито](https://apify.com/getascraper/avito-seller-profile-scraper) ↗ - vets a Russian classifieds seller's rating, verification badges, and active listings before you buy.
- [Mercari US Scraper: Sold Prices, Conditions & Sellers](https://apify.com/getascraper/mercari-us-scraper) ↗ - pulls sold listing prices and seller data from Mercari's US marketplace.
- [Wildberries Seller Scraper: Supplier Intel & Stats](https://apify.com/getascraper/wildberries-seller-scraper) ↗ - profiles a Wildberries supplier's registered company and catalog stats.
- [Poizon Scraper: China Sneaker Catalog](https://apify.com/getascraper/poizon-scraper) ↗ - scrapes China's largest authentication-verified resale catalog for sneakers and apparel.

# Actor input Schema

## `itemUrls` (type: `array`):

One or more Weidian product URLs (weidian.com/item.html?itemID=...) or bare numeric item IDs. Each returns full product data: name, price, stock, sales count, images, and SKU variants.

## `shopUrls` (type: `array`):

One or more Weidian shop URLs (weidian.com/?userid=...) or bare numeric shop IDs. Returns the shop profile (name, rating, repurchase rate, followers) and attempts to enumerate the shop's product catalog.

## `fetchShopCatalog` (type: `boolean`):

For each shop, attempt to enumerate its product catalog via Weidian's shop-category API. This call is best-effort: some shop layouts may not return catalog data, in which case the shop profile is still returned on its own. Disable to only fetch shop profile data (faster, fewer requests).

## `includeSkuVariants` (type: `boolean`):

Include the per-variant breakdown (size/color/style options with their own price and stock) for each item.

## `includeShopProfile` (type: `boolean`):

Push a shop-profile row (name, rating, repurchase rate, followers, location) for each shop in Shop URLs or IDs. Disable if you only want catalog/item rows.

## `enrichCatalogItems` (type: `boolean`):

When a shop's catalog is enumerated, fetch the full item-detail page for each product found (adds images, SKU variants, and delivery info) instead of only the lightweight catalog row (name, price, stock, thumbnail). Uses more requests.

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

Maximum number of rows (items, shops, and catalog rows combined) to push before stopping. Set to 0 for no limit.

## `maxCatalogPagesPerShop` (type: `integer`):

Maximum number of catalog pages (20 items per page) to fetch per shop when Fetch Shop Catalog is enabled.

## `sinceItemId` (type: `integer`):

Skip catalog items with a numeric item ID at or below this value. Useful for one-off incremental pulls when you already know the highest item ID from a previous run. Leave at 0 to include everything.

## `onlyNewItems` (type: `boolean`):

For scheduled/recurring runs: remember which catalog item IDs were already returned for each shop (persisted in the Actor's key-value store) and only push items not seen in a previous run. Ideal for price/stock-churn monitoring without re-downloading the whole catalog every time.

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

Maximum number of parallel requests.

## `requestDelayMs` (type: `integer`):

Extra delay before each request, on top of normal crawler pacing. Increase if you plan to scrape many shops in one run and want to stay conservative against Weidian's soft bot-tracking signals.

## `debugLogging` (type: `boolean`):

Enable verbose per-step logging, including raw catalog API responses when they don't parse as expected.

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

Proxy settings. Datacenter Apify Proxy is the default and was sufficient for every endpoint tested during feasibility recon (no IP-reputation gating observed). Switch to residential only if you see blocks at high volume.

## Actor input object example

```json
{
  "itemUrls": [
    "https://weidian.com/item.html?itemID=1234567890"
  ],
  "shopUrls": [
    "https://weidian.com/?userid=1234567890"
  ],
  "fetchShopCatalog": true,
  "includeSkuVariants": true,
  "includeShopProfile": true,
  "enrichCatalogItems": true,
  "maxItems": 50,
  "maxCatalogPagesPerShop": 5,
  "sinceItemId": 0,
  "onlyNewItems": false,
  "maxConcurrency": 5,
  "requestDelayMs": 0,
  "debugLogging": false,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# 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 = {
    "itemUrls": [
        "https://weidian.com/item.html?itemID=1234567890"
    ],
    "shopUrls": [
        "https://weidian.com/?userid=1234567890"
    ],
    "fetchShopCatalog": true,
    "includeSkuVariants": true,
    "includeShopProfile": true,
    "enrichCatalogItems": true,
    "maxItems": 50,
    "maxCatalogPagesPerShop": 5,
    "sinceItemId": 0,
    "onlyNewItems": false,
    "maxConcurrency": 5,
    "requestDelayMs": 0,
    "debugLogging": false,
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("getascraper/weidian-scraper").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 = {
    "itemUrls": ["https://weidian.com/item.html?itemID=1234567890"],
    "shopUrls": ["https://weidian.com/?userid=1234567890"],
    "fetchShopCatalog": True,
    "includeSkuVariants": True,
    "includeShopProfile": True,
    "enrichCatalogItems": True,
    "maxItems": 50,
    "maxCatalogPagesPerShop": 5,
    "sinceItemId": 0,
    "onlyNewItems": False,
    "maxConcurrency": 5,
    "requestDelayMs": 0,
    "debugLogging": False,
    "proxyConfiguration": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("getascraper/weidian-scraper").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 '{
  "itemUrls": [
    "https://weidian.com/item.html?itemID=1234567890"
  ],
  "shopUrls": [
    "https://weidian.com/?userid=1234567890"
  ],
  "fetchShopCatalog": true,
  "includeSkuVariants": true,
  "includeShopProfile": true,
  "enrichCatalogItems": true,
  "maxItems": 50,
  "maxCatalogPagesPerShop": 5,
  "sinceItemId": 0,
  "onlyNewItems": false,
  "maxConcurrency": 5,
  "requestDelayMs": 0,
  "debugLogging": false,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call getascraper/weidian-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Weidian Scraper: 微店 Product & Shop Data",
        "description": "Scrape Weidian (微店) product listings and merchant shop data by item URL or shop URL. Get price, sales count, stock, images, SKU variants, and shop rating for cross-border sourcing and competitive intelligence.",
        "version": "0.1",
        "x-build-id": "jiLieLPPiILQt49o1"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/getascraper~weidian-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-getascraper-weidian-scraper",
                "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/getascraper~weidian-scraper/runs": {
            "post": {
                "operationId": "runs-sync-getascraper-weidian-scraper",
                "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/getascraper~weidian-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-getascraper-weidian-scraper",
                "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",
                "properties": {
                    "itemUrls": {
                        "title": "Item URLs or IDs",
                        "type": "array",
                        "description": "One or more Weidian product URLs (weidian.com/item.html?itemID=...) or bare numeric item IDs. Each returns full product data: name, price, stock, sales count, images, and SKU variants.",
                        "default": [],
                        "items": {
                            "type": "string"
                        }
                    },
                    "shopUrls": {
                        "title": "Shop URLs or IDs",
                        "type": "array",
                        "description": "One or more Weidian shop URLs (weidian.com/?userid=...) or bare numeric shop IDs. Returns the shop profile (name, rating, repurchase rate, followers) and attempts to enumerate the shop's product catalog.",
                        "default": [],
                        "items": {
                            "type": "string"
                        }
                    },
                    "fetchShopCatalog": {
                        "title": "Fetch Shop Catalog",
                        "type": "boolean",
                        "description": "For each shop, attempt to enumerate its product catalog via Weidian's shop-category API. This call is best-effort: some shop layouts may not return catalog data, in which case the shop profile is still returned on its own. Disable to only fetch shop profile data (faster, fewer requests).",
                        "default": true
                    },
                    "includeSkuVariants": {
                        "title": "Include SKU Variants",
                        "type": "boolean",
                        "description": "Include the per-variant breakdown (size/color/style options with their own price and stock) for each item.",
                        "default": true
                    },
                    "includeShopProfile": {
                        "title": "Include Shop Profile",
                        "type": "boolean",
                        "description": "Push a shop-profile row (name, rating, repurchase rate, followers, location) for each shop in Shop URLs or IDs. Disable if you only want catalog/item rows.",
                        "default": true
                    },
                    "enrichCatalogItems": {
                        "title": "Enrich Catalog Items with Full Detail",
                        "type": "boolean",
                        "description": "When a shop's catalog is enumerated, fetch the full item-detail page for each product found (adds images, SKU variants, and delivery info) instead of only the lightweight catalog row (name, price, stock, thumbnail). Uses more requests.",
                        "default": true
                    },
                    "maxItems": {
                        "title": "Max Items",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Maximum number of rows (items, shops, and catalog rows combined) to push before stopping. Set to 0 for no limit.",
                        "default": 100
                    },
                    "maxCatalogPagesPerShop": {
                        "title": "Max Catalog Pages per Shop",
                        "minimum": 1,
                        "maximum": 50,
                        "type": "integer",
                        "description": "Maximum number of catalog pages (20 items per page) to fetch per shop when Fetch Shop Catalog is enabled.",
                        "default": 5
                    },
                    "sinceItemId": {
                        "title": "Since Item ID",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Skip catalog items with a numeric item ID at or below this value. Useful for one-off incremental pulls when you already know the highest item ID from a previous run. Leave at 0 to include everything.",
                        "default": 0
                    },
                    "onlyNewItems": {
                        "title": "Only New Items (Recurring Runs)",
                        "type": "boolean",
                        "description": "For scheduled/recurring runs: remember which catalog item IDs were already returned for each shop (persisted in the Actor's key-value store) and only push items not seen in a previous run. Ideal for price/stock-churn monitoring without re-downloading the whole catalog every time.",
                        "default": false
                    },
                    "maxConcurrency": {
                        "title": "Max Concurrency",
                        "minimum": 1,
                        "maximum": 20,
                        "type": "integer",
                        "description": "Maximum number of parallel requests.",
                        "default": 5
                    },
                    "requestDelayMs": {
                        "title": "Request Delay (ms)",
                        "minimum": 0,
                        "maximum": 10000,
                        "type": "integer",
                        "description": "Extra delay before each request, on top of normal crawler pacing. Increase if you plan to scrape many shops in one run and want to stay conservative against Weidian's soft bot-tracking signals.",
                        "default": 0
                    },
                    "debugLogging": {
                        "title": "Debug Logging",
                        "type": "boolean",
                        "description": "Enable verbose per-step logging, including raw catalog API responses when they don't parse as expected.",
                        "default": false
                    },
                    "proxyConfiguration": {
                        "title": "Proxy Configuration",
                        "type": "object",
                        "description": "Proxy settings. Datacenter Apify Proxy is the default and was sufficient for every endpoint tested during feasibility recon (no IP-reputation gating observed). Switch to residential only if you see blocks at high volume.",
                        "default": {
                            "useApifyProxy": true
                        }
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
