# Taobao Shop & Store Scraper 🏪 (Seller Profiles) (`tagadanar/taobao-shop-scraper`) Actor

Compare Taobao shops by ratings, opening date, seller credit and prices across their public catalogue sample. One flat seller profile per shop. $3 per 1,000 shops + $0.001/run, usage included.

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

## Pricing

from $2.10 / 1,000 shop seller profiles

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

## Taobao Shop & Store Scraper: Seller Profiles

Compare Taobao shops by public ratings, opening date, seller credit and prices across their public catalogue sample. Paste shop links or IDs and get one flat seller profile per unique shop, ready for a sourcing shortlist or spreadsheet.

$3 per 1,000 shops on the Free plan, plus $0.001 per run. Platform usage is included. No Taobao login or proxy setup.

### What you get

Each row describes a shop. It includes the shop's three ratings, its seller ID, and price statistics calculated from the products on its first public catalogue page, up to 60 products. A listed product's public page supplies seller credit, the opening date, seller inventory counts and that item's shipping origin when available.

This is a shop comparison tool. For keyword searches and individual product rows, use [Taobao & Tmall Scraper](https://apify.com/tagadanar/taobao-scraper).

| Fields | Meaning |
| --- | --- |
| `type` | Always `shop_profile` |
| `shopId`, `shopName`, `shopUrl`, `sellerId`, `logoUrl` | Public shop identity and image |
| `platform` | `taobao` or `tmall`, established from the sampled product; null when unavailable |
| `descriptionScore`, `serviceScore`, `deliveryScore` | Shop scores for description, service and delivery, out of 5 |
| `averageScore` | Arithmetic mean of the three available scores, rounded to three decimals; null if one is absent |
| `creditLevel`, `openedAt` | Seller credit level and shop opening date from a listed product's public page |
| `sellerItemCount`, `sellerNewItemCount` | Seller inventory and new-item counts from that product page |
| `catalogueTotalCount` | Total advertised by the public shop catalogue; this can differ from `sellerItemCount` |
| `sampledProducts`, `pricedSampleProducts` | Products on the fetched catalogue page, and how many have a readable numeric price |
| `sampleMinPrice`, `sampleMedianPrice`, `sampleMaxPrice`, `currency` | Minimum, median and maximum of readable sample prices in CNY |
| `samplePromotedProducts`, `sampleFreeShippingProducts` | Sample products carrying a promotion label or explicitly marked free shipping |
| `sampleCategoryCount` | Number of distinct category IDs in the sample |
| `sampleItemId`, `sampleItemUrl`, `sampleShipsFrom` | Item used to read seller fields, and that item's shipping origin. This is not the shop's registered address |
| `detailStatus` | `included` when item-derived fields were read; otherwise the reason they are absent |
| `scrapedAt` | Snapshot timestamp in UTC |

A shop with a valid seller profile and an explicit zero public catalogue count still returns one profile. Its sample counts are zero, its prices and item-derived fields are null, and `detailStatus` is `no-public-products`.

All fields are scalar, so CSV exports preserve the full row. Missing source values stay null. Counts and prices describe the public source at the time of the run.

### Try it

```json
{
  "shops": ["https://shop128593474.taobao.com/"]
}
```

Multiple shops:

```json
{
  "shops": [
    "128593474",
    "https://world.taobao.com/dianpu/67451676.htm",
    "https://www.taobao.com/list/dianpu/63978904.htm"
  ]
}
```

`shops` is the only input. Add up to 200 shop IDs or supported shop links. Duplicate IDs produce one profile. Numeric `shop_id` or `shopId` parameters on Taobao/Tmall links are also accepted. Array entries may also be objects with a `shopId` or `url` field. Seller `user_id` values, product IDs, app share links and branded addresses such as `uniqlo.tmall.com` do not identify a numeric shop and cannot be resolved. Feed the `shopUrl` or `shopId` column from the catalogue actor into this actor's `shops` input.

### Example profile

Abridged real public-source snapshot, captured on 2026-10-23:

```json
{
  "type": "shop_profile",
  "shopId": "128593474",
  "shopName": "美洋MEIYANG",
  "sellerId": "2613416167",
  "platform": "taobao",
  "descriptionScore": 4.9,
  "serviceScore": 4.9,
  "deliveryScore": 4.9,
  "creditLevel": 20,
  "openedAt": "2015-08-11 10:30:32",
  "sellerItemCount": 5121,
  "catalogueTotalCount": 2487,
  "sampledProducts": 60,
  "sampleMinPrice": 99,
  "sampleMedianPrice": 499,
  "sampleMaxPrice": 2999,
  "currency": "CNY",
  "sampleShipsFrom": "福建厦门",
  "detailStatus": "included"
}
```

### Who uses it

- Sourcing teams compare seller history, credit and service scores before contacting shops.
- Retail analysts compare the price positioning of shop catalogue samples.
- Agencies refresh seller shortlists on a schedule, then compare exported snapshots in their own system.

### Pricing

| Apify plan | Per 1,000 shop profiles |
| --- | ---: |
| Free | $3.00 |
| Bronze | $2.70 |
| Silver | $2.40 |
| Gold | $2.10 |

Each run also costs $0.001. Platform usage is included. One shop with 60 sampled products is one charged shop profile, not 61 rows. A successful one-shop run costs $0.004 at the Free price. Invalid, missing and refused shops do not incur a profile charge; the run-start fee still applies.

A profile with readable shop data but unavailable item-derived seller fields is still a charged profile. `detailStatus` names the missing enrichment, and the run status identifies partial delivery. The shop ratings and sample statistics remain available.

### Coverage and limits

The source is Taobao's public catalogue. It exposes the first shop page, up to 60 products. Page 2 returned the source's not-found redirect in the measured route matrix, despite pagination counts in the payload. The actor therefore reads one catalogue page per shop. Sample price statistics describe that page, not the entire shop's assortment. The actor does not claim that the sample is representative or sorted by sales or recency.

Seller inventory counts can differ between the catalogue and the sampled product page. Both source counts are preserved with separate names. `sampleShipsFrom` is one product's origin, not a verified business location.

This actor does not fetch full SKU tables, stock, specifications, full review history, contacts or private account data. It does not keep snapshot history or send change alerts itself. Use Apify schedules and export the rows to your own comparison workflow.

Measured Apify runs delivered one complete prefill profile in 5.474 seconds and 100 shop profiles in 308.642 seconds. Availability and latency vary by shop and exit. The batch included three seller profiles whose public catalogue explicitly contained zero products.

If every input is invalid, unavailable or refused, the run fails with a named reason and no profile charge. A run that delivers profiles can finish with partial status naming missing shops or seller fields. A time or charge limit leaves unqueried shops named in the run summary.

### FAQ

**Can it scrape Tmall stores?** A numeric Tmall shop ID can use the same public catalogue route. Branded Tmall hostnames without a shop ID are unsupported. The Taobao/Tmall flag is reported only when the sampled product establishes it; it is not guessed from the input.

**Why do the public catalogue count and seller item count differ?** They come from separate public responses. They can cover different public inventories or update at different times. Neither is used to fabricate extra catalogue pages.

**Can I get every product in a store?** The public source only served its first catalogue page in testing. This actor delivers a seller summary and statistics for that page.

**Why are opening date or credit level empty?** These fields come from a listed product's page. When that page is unavailable, the profile keeps its shop data and names the missing enrichment in `detailStatus`.

**Does a higher score mean a verified supplier?** Scores and credit are Taobao's published values. They are useful comparison fields, not a supplier verification or a guarantee.

**Does it need a proxy or login?** No configuration or login is needed. Platform usage is included in the listed price.

Keywords: Taobao shop scraper, Taobao store scraper, Taobao seller profiles, Taobao shop ratings, Taobao supplier research, 淘宝店铺采集, 淘宝卖家评分, 店铺价格对比.

# Changelog

This Actor's version history is a separate document: https://apify.com/tagadanar/taobao-shop-scraper/changelog.md

# Actor input Schema

## `shops` (type: `array`):

Paste numeric shop IDs, shop123.taobao.com addresses, or world.taobao.com/dianpu/123.htm links. One seller profile per unique shop, up to 200 per run. Seller user IDs and branded store addresses without a shop ID cannot be resolved.

## Actor input object example

```json
{
  "shops": [
    "https://shop128593474.taobao.com/"
  ]
}
```

# Actor output Schema

## `dataset` (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 = {
    "shops": [
        "https://shop128593474.taobao.com/"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("tagadanar/taobao-shop-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 = { "shops": ["https://shop128593474.taobao.com/"] }

# Run the Actor and wait for it to finish
run = client.actor("tagadanar/taobao-shop-scraper").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 '{
  "shops": [
    "https://shop128593474.taobao.com/"
  ]
}' |
apify call tagadanar/taobao-shop-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,tagadanar/taobao-shop-scraper"
        }
    }
}
```

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/gzzFwrghtvn69pE1v/builds/HKQmFVC4cfhXwi0AT/openapi.json
