# Taobao & 1688 Checker: Fake Brand Flag, Landed Cost & Sizes (`nerolabs/china-buy-check`) Actor

Buy, check or avoid verdict for Taobao, Tmall and 1688 products from any scraper dataset, CSV or Sheet: counterfeit brand flag, seller trust score, English summary, US/UK/EU sizes and estimated delivered cost. No scraping. Charged per product checked. Agent-ready: MCP.

- **URL**: https://apify.com/nerolabs/china-buy-check.md
- **Developed by:** [Adam Pearce](https://apify.com/nerolabs) (community)
- **Categories:** E-commerce, AI, Automation
- **Stats:** 2 total users, 1 monthly users, 0.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $7.00 / 1,000 product checkeds

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 & 1688 Checker: Fake Brand Flag, Landed Cost & Sizes

**You scraped 200 Taobao or 1688 listings. Which ones are fakes, which sellers are safe, and what will each one really cost once it lands at your door?**

China Buy Check reads the dataset your Taobao, Tmall or 1688 scraper already made and adds a **BUY / CHECK / AVOID** verdict to every product, with the reasons. It does no scraping of its own, so it never fails on a blocked page: point it at your scraper's run and get the answer in seconds.

For each product you get:

- **Verdict: BUY, CHECK or AVOID**, with every reason written out
- **Counterfeit brand flag**: replica slang (原单, 莆田, 公司级, 1:1, 复刻, 高仿), lookalike spellings ("Beat.s", "ApplyBeats", "Inpods"), famous brands sold by shops that are not the brand's official store, and luxury names at pocket-money prices
- **Seller trust score (0 to 100)** with the reasons: official or Tmall store, shop age, credit level, shop ratings, good-review rate, units sold, and on 1688 the supplier's years, factory inspection and repeat-buyer rate
- **English title and summary** of the Chinese listing
- **Size chart in US, UK and EU sizes** for shoes and clothes (Chinese clothing usually runs a size small, and the chart says so)
- **Estimated delivered cost to the US, UK and EU**: item, shopping-agent fee, China shipping, international shipping, duty and VAT, with every assumption on the row
- **Questions to ask the seller or your agent** before you pay

### Who it is for

- **Resellers and dropshippers** sourcing from 1688 or Taobao who need to bin the knockoffs and price the rest
- **Shopping-agent users** (Superbuy, CSSBuy, Sugargoo and similar) who want to know the real landed price before ordering
- **Brand-protection teams** scanning marketplace listings for counterfeits of their brand
- **AI agents** comparing Chinese listings on a user's behalf

### How to use it

1. Run any Taobao, Tmall or 1688 scraper (for example pizani/taobao-product-scraper, scrapesage/taobao-scraper, zen-studio/taobao-detail-scraper, memo23/taobao-scraper or zen-studio/1688-wholesale-scraper). Turn on its "details" option if it has one: shop ratings and sales make the trust score sharper.
2. Open China Buy Check, pick that run's dataset in **Dataset**, and press Start.
3. Read the **Buy check** table, or download it as CSV or Excel.

**Run it automatically after every scrape:** on your scraper's **Integrations** tab, add China Buy Check. The Dataset field is filled with `{{resource.defaultDatasetId}}` for you, so every new scrape gets its verdicts.

You can also give it a **CSV, Excel or Google Sheet link** (your own sourcing sheet works), or **product rows as JSON** from an agent or n8n.

### Example output

From a real run on mixed scraper output (shop names in the public example are made up):

| Product | Verdict | Fake risk | Seller trust | Delivered US | Delivered UK | Delivered EU | Main reason |
|---|---|---|---|---|---|---|---|
| Nike Court Vision Low sneakers | BUY | low | 100 | $128.59 | £89.99 | €112.71 | Sold by the brand's own official store |
| Clip-on Bluetooth 5.4 open-ear earbuds | BUY | none | 73 | $11.20 | £8.20 | €14.06 | No counterfeit signs found |
| ApplyBeats Studio Buds+ earbuds | AVOID | high | 39 | $34.17 | £24.09 | €33.23 | The title spells Beats in a lookalike way |
| Pro3 TWS "Inpods3" earbuds | AVOID | high | 69 | $10.99 | £8.09 | €13.93 | ¥10.9 is far below any genuine AirPods price |
| Lululemon Groove leggings | CHECK | medium | 57 | $102.04 | £71.53 | €90.45 | Named by a buying-agent (代购) shop, not Lululemon's store |
| Retro football fan jersey | CHECK | none | unknown | $21.33 | £15.41 | €22.77 | Too little seller data for a trust score |

Every original column from your scraper is kept, and these columns are added: `verdict`, `verdictReasons`, `englishTitle`, `englishSummary`, `productKind`, `counterfeitRisk`, `counterfeitBrand`, `counterfeitReasons`, `sellerTrustScore`, `sellerTrustReasons`, `deliveredCostUsUsd`, `deliveredCostUkGbp`, `deliveredCostEuEur`, `costBreakdown`, `costAssumptions`, `costQuantity`, `priceRead`, `priceCurrencyRead`, `sizeChart`, `sizeNote`, `watchOuts`, `buyerQuestions`, `platformDetected`, `shopNameRead`, `checkStatus`, `checkDetail`, `checkedAt`.

### How the verdict is decided

The rules are fixed and run in code, so every verdict can be explained:

- **AVOID**: counterfeit risk is high, or seller trust is under 35.
- **CHECK**: counterfeit risk is medium (a famous brand sold by a shop that is not its official store), the listing looks like it imitates a brand, seller trust is unknown or 35 to 64, or there is no price.
- **BUY**: everything else: no counterfeit concern, seller trust 65 or more, price known.

**Never invented:** prices, sales, ratings, weights and shop details are read from your own columns. An AI model (OpenAI) only translates the listing, describes the product and names a brand it imitates; a brand claim is kept only if its words are really in the listing, and any AI sentence holding a number that is not in the listing is dropped. A counterfeit flag is a risk signal read from the listing, not a legal finding about the seller.

### Delivered cost: what is included

Each cost is an **estimate** from the row's own price, shipping fee, weight and minimum order, plus assumptions you can change in the input:

- **Shopping-agent fee**: 5% of the item price (agents charge about 0 to 10%).
- **China shipping to the agent**: from the row, or ¥8 if the row has none.
- **International shipping**: $12/kg to the US, $10/kg to the UK, $11/kg to the EU (typical agent economy lines), minimum 0.5 kg; 0.5 kg per piece when the row has no weight.
- **US**: duty on every China parcel, because the small-parcel (de minimis) exemption is suspended. Default 30% of the item price; most consumer goods fall between about 25 and 40%. Set your own rate if you know the product's HTS code.
- **UK**: no customs duty up to £135; 20% VAT on goods plus shipping.
- **EU**: since 1 July 2026, a flat €3 customs duty per item type on goods up to €150, plus import VAT (default 21%; set your country's rate).

Currency rates are the European Central Bank reference rates of the day. Above £135 (UK) or €150 (EU), normal customs duty is due on top and the row says it is not included.

### Pricing

**$0.01 per product checked** (cheaper on higher Apify plans: down to $0.007). Rows with no title and products the AI step could not read are never charged. Optional CSV or Excel file: $0.01 each.

- Checking a 50-product 1688 search before you order: **$0.50**
- A reseller checking 300 new listings a week: about **$12 a month**

### FAQ

**Which scrapers does it work with?** Any that outputs Taobao, Tmall or 1688 products. Field names are detected automatically for pizani, scrapesage, zen-studio (Taobao and 1688), memo23, tortuga and similar layouts; for anything unusual, set **Title field** and **Price field**.

**Does a CHECK mean it is fake?** No. CHECK means "look closer before paying": often a reseller of a real brand, or a shop without enough data for a trust score. Ask the seller the questions in `buyerQuestions`.

**Why is my seller trust "unknown"?** The scraper row did not include shop ratings, shop age or sales. Turn on your scraper's detail option and run again.

**Can I use my own shipping rates and duty?** Yes: every cost assumption is an input field.

**Is it agent-ready?** Yes. It runs through Apify's MCP server and API, takes rows as JSON, and charges per product only after a result comes back.

If China Buy Check saved you from a fake or a surprise customs bill, a review on the Apify Store helps a lot. Questions or a scraper layout it misreads? Open an issue on the Issues tab and it will be fixed quickly.

# Actor input Schema

## `datasetId` (type: `string`):

The dataset of a Taobao, Tmall or 1688 scraper run (pizani, scrapesage, zen-studio, memo23, tortuga, sian.agency and others all work). Every original column is kept and the verdict columns are added. Title, price, shop, ratings, sales, sizes and weight are found automatically. In an integration set it to {{resource.defaultDatasetId}}.

## `fileUrl` (type: `string`):

A public link to a CSV, Excel, JSON or JSON Lines file with one product per row (a scraper export or your own sourcing sheet). A normal Google Sheets link works when shared as 'Anyone with the link can view'.

## `fileFormat` (type: `string`):

Leave on 'Detect automatically' unless the link has no file extension.

## `sheetName` (type: `string`):

Which sheet to read from an Excel workbook. Defaults to the first sheet.

## `data` (type: `array`):

Product rows as JSON objects, for a quick run or an AI agent call, e.g. \[{"title": "...", "price": 59, "shopName": "...", "url": "https://item.taobao.com/item.htm?id=..."}].

## `destinations` (type: `array`):

Where to estimate the total delivered cost: US (in USD), UK (in GBP), EU (in EUR).

## `quantity` (type: `integer`):

How many pieces you plan to order. If the seller's minimum order is higher (common on 1688), the minimum is used and the row says so.

## `agentFeePercent` (type: `number`):

Service fee your shopping agent charges on the item price. Agents charge about 0 to 10%.

## `domesticShippingCny` (type: `number`):

Shipping from the seller to the agent's warehouse in China, used when the row has no shipping fee.

## `defaultWeightKg` (type: `number`):

Used when the row has no weight. Packed shoes are often 1 to 1.5 kg.

## `shippingUsdPerKgUS` (type: `number`):

Typical agent economy line rate to the US.

## `shippingUsdPerKgUK` (type: `number`):

Typical agent economy line rate to the UK.

## `shippingUsdPerKgEU` (type: `number`):

Typical agent economy line rate to the EU.

## `usDutyPercent` (type: `number`):

US import duty on the item price. The small-parcel exemption is suspended, so every China parcel pays duty; about 25 to 40% covers most consumer goods. Set your product's own rate if you know it.

## `ukVatPercent` (type: `number`):

UK import VAT on goods plus shipping. Goods up to £135 pay no customs duty.

## `euVatPercent` (type: `number`):

Import VAT in your EU country (17 to 27%).

## `euItemDutyEur` (type: `number`):

Flat EU customs duty on goods up to €150, in force since 1 July 2026.

## `titleField` (type: `string`):

Only if detection picks the wrong column: the field holding the product title (nested fields use a dot, e.g. 'productInfo.title').

## `priceField` (type: `string`):

Only if detection picks the wrong column: the field holding the price, e.g. 'priceCny' or 'price.min'.

## `priceCurrency` (type: `string`):

Only if the rows have no currency column: the currency of the price field (CNY for Taobao, Tmall and 1688).

## `keep` (type: `string`):

Which rows to write. 'All rows' keeps every input row, including ones that could not be checked.

## `keepOriginalFields` (type: `boolean`):

Keep every column from your scraper next to the new ones. Turn off for a compact table.

## `exportFormats` (type: `array`):

Also save the results as CSV or Excel in the run's key-value store (charged once per file).

## `outputDatasetName` (type: `string`):

Name of a dataset to append the results to, for keeping a running sourcing list across runs.

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

Stop after this many rows.

## `concurrency` (type: `integer`):

How many batches of 4 products are read at once.

## Actor input object example

```json
{
  "fileUrl": "https://nerolabs-samples.nerolabs.workers.dev/sample-china-products.json",
  "fileFormat": "auto",
  "destinations": [
    "US",
    "UK",
    "EU"
  ],
  "quantity": 1,
  "agentFeePercent": 5,
  "domesticShippingCny": 8,
  "defaultWeightKg": 0.5,
  "shippingUsdPerKgUS": 12,
  "shippingUsdPerKgUK": 10,
  "shippingUsdPerKgEU": 11,
  "usDutyPercent": 30,
  "ukVatPercent": 20,
  "euVatPercent": 21,
  "euItemDutyEur": 3,
  "keep": "all",
  "keepOriginalFields": true,
  "maxItems": 50000,
  "concurrency": 4
}
```

# Actor output Schema

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

Every original product row with the verdict, counterfeit risk, seller trust, size chart and delivered cost estimate added.

## `summary` (type: `string`):

Verdict counts, counterfeit risk counts, cost settings used, export links and warnings.

# 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 = {
    "fileUrl": "https://nerolabs-samples.nerolabs.workers.dev/sample-china-products.json"
};

// Run the Actor and wait for it to finish
const run = await client.actor("nerolabs/china-buy-check").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 = { "fileUrl": "https://nerolabs-samples.nerolabs.workers.dev/sample-china-products.json" }

# Run the Actor and wait for it to finish
run = client.actor("nerolabs/china-buy-check").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 '{
  "fileUrl": "https://nerolabs-samples.nerolabs.workers.dev/sample-china-products.json"
}' |
apify call nerolabs/china-buy-check --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,nerolabs/china-buy-check"
        }
    }
}
```

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/G824yKO8k7Lilc0eT/builds/XLxRl3UyAguhXdjTg/openapi.json
