# 1688 Supplier Finder: Find Suppliers in China, AI-Vetted (`rich_minds/1688-supplier-finder-ai`) Actor

First 25 products free. 1688 supplier finder in English, pay per qualified product: trusted factories, supplier score, landed cost and margin at your quantity, a bilingual RFQ and the shop link. Free demo on any plan; live search on any Store-Actor plan.

- **URL**: https://apify.com/rich_minds/1688-supplier-finder-ai.md
- **Developed by:** [Rich Minds](https://apify.com/rich_minds) (community)
- **Categories:** E-commerce, Lead generation, Business
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $6.00 / 1,000 qualified product (rules only)s

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?

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

## 1688 Supplier Finder: Find Suppliers in China, AI-Vetted

**New trusted 1688 factories for your product — costed and translated, in your inbox every week.**

⚡ First **25 products free** · 💵 **$0.006** per qualified product · 🤖 **≈ $0.021** all in with AI, on plans with model access or your key · ⏱️ demo in seconds

![One row per qualified 1688 product — verdict, supplier score, supplier, MOQ, unit cost, landed cost, margin and city](https://api.apify.com/v2/key-value-stores/L5Bd4JHlXE6JADeMH/records/shortlist.svg)

> **Try it in 30 seconds.** Click **Try it** — the form is pre-filled with 6 fictional sample listings (their links
> open a real 1688 search). Listings that fail your filters cost nothing here.
> → [What a run costs](#-pricing--what-a-run-really-costs) · [What the AI adds](#-what-the-ai-tier-adds) · [Run it weekly](#-run-it-weekly)

### ⚡ At a glance

| | |
|---|---|
| **What you get** | 1688 products from trusted suppliers that fit your quantity and margin — English title, supplier score, landed cost, a supplier message |
| **You provide** | What you source, English or Chinese (硅胶手机壳), your order quantity and sell price |
| **Output** | a ranked sheet (Excel, CSV, Sheets) and an e-mail digest of what is new |
| **Typical run** | 1 search × 100 listings → ≈ 40 qualified (40 %) in ≈ 2 minutes (estimate); demo: 6 → 4 in 0.5 s |
| **Cost of that run** | $0.44 rules only · $0.84 with AI, all-in (the $0.20 scan on your account included); the first 25 are free |
| **Keys / setup** | With Apify model access: no key · Other plans: up to 5 live AI verdicts on us, then your own key — a free Gemini / Groq key gives 1–3 AI verdicts per run, a paid one every product |
| **Which plan** | Free demo and your own rows (`list` mode, [template](https://api.apify.com/v2/key-value-stores/L5Bd4JHlXE6JADeMH/records/list-template.json)): any plan · live search: a plan that runs Store Actors |
| **EU / UK sellers** | Landed cost and margin in EUR or GBP, import VAT next to duty — the "EU / UK Amazon seller" preset |
| **Agencies** | Your whole roster in one run — own searches, memory, digest and branded REPORT per customer; 10 weekly ≈ $8.40 the first week with AI |
| **Works with** | Schedules, webhooks, Sheets, Slack, Teams, Telegram, Make, n8n, Zapier, MCP |

### 🎯 What this Actor does

1688 product sourcing without the spreadsheet — find suppliers in China in English: it runs the 1688.com products
scraper on your account and keeps, and charges, only products worth contacting.

#### 🏭 1688 supplier vetting — the trust score

A 0–100 score from 1688's own signals: service scores, years, factory inspection, manufacturer, badges, repeat
buyers and orders — each reason citing the value.

#### 💰 Unit cost at your quantity, landed cost and margin

200 pieces on a 2–199 / 200–999 / 1000+ ladder cost ¥5.90, not the ¥5.20 headline. Freight, duty and import VAT
start at dated estimates, in USD, EUR or GBP. **The same product from several suppliers** is grouped, the cheapest at
your quantity marked.

#### 🈯 1688 in English — search, titles, badges, cities

Your English search goes to 1688 in Chinese (silicone phone case → 硅胶手机壳); titles, badges and places come back
in English. Off-topic listings (felt *bag* in a felt-*sheet* search) are dropped before you pay.

#### ✉️ A supplier message — and the shop to send it to

Every shortlist and maybe row gets an RFQ in Chinese and English next to the supplier's 旺旺 chat link. The Actor
never contacts anyone.

### 🚀 How to use it

1. **Click `Try it`** — the form runs the free demo on 6 fictional sample listings as is.
2. **Type your product into "Search 1688 for"**, your quantity and sell price — it replaces the sample and searches
   live on your Apify account, capped by "Max source spend". Leave "AI assessment" on.
3. **Press Start** — the Shortlist lands best first; Supplier messages has the link and the message to paste.
4. **Schedule it weekly** with your address in "E-mail me the new products" — only new products are charged.

![The Supplier messages view — the supplier, the link to contact it and the RFQ in English](https://api.apify.com/v2/key-value-stores/L5Bd4JHlXE6JADeMH/records/messages.svg)

📚 **Learn more:** [Step-by-step tutorial — how to find 1688 suppliers with this Actor](https://api.apify.com/v2/key-value-stores/L5Bd4JHlXE6JADeMH/records/tutorial.html)

### 🆚 Why this instead of running devcake's 1688 scraper?

| | [1688.com Products Scraper (`devcake/1688-com-products-scraper`)](https://apify.com/devcake/1688-com-products-scraper) | **1688 Supplier Finder** |
|---|---|---|
| **Your time per 100 products** | ≈ 13 h — translate, read tiers, check suppliers | ≈ 0 h — ranked, costed, translated |
| **Same 100 qualified products, all in** | $0.50 for 250 unsorted raw rows + those 13 h | 100 ranked, explained products: $1.10 rules only ($0.60 here + the same scan) · $2.11 with AI; junk costs $0 |
| **What you pay for** | every row, junk included · 319 users / 30 days | qualified products only, first 25 free |
| **Verdict, cost, language** | none; Chinese (its README) | supplier score, MOQ-tier landed cost, margin, RFQ |

#### vs other 1688 supplier finders

What no rival does: a supplier score, the unit cost at your MOQ tier with landed cost and margin, an RFQ per
product — and you pay only for products that pass. English titles alone are not unique (webdata_labs, crawleast).

| Option | What you get | Price | 100 clean products |
|---|---|---|---|
| **This Actor** | scored, MOQ-tier costed, RFQ, translated | $0.006 / $0.015 per qualified | $1.10 rules only · $2.11 with AI |
| `zen-studio/1688-wholesale-scraper` (1,748 users) | 50+ raw fields | $0.00499 a row + $0.0049 a run | ≈ $1.25 + vetting by hand |
| `webdata_labs/1688-scraper` (113 users) | raw rows with English titles, MOQ tiers | $0.005 a row | ≈ $1.25, unscored, no costing |
| `crawleast/1688-image-search-scraper` (233 users) | photo search; English titles, landed cost optional | $0.005 + $0.003 detail | photo only, unscored |
| `om_kh/1688-reverse-image-product-finder` · `devcake/scraper-by-image` (150 users) | 1688 matches of a photo | per result | photo matches, no costing |
| `quanmatrix/1688-supplier-sourcing-intelligence` | supplier signals | $0.006 a row | ≈ $1.50, untranslated |
| AliPrice (browser extension) | image search while browsing | free | one at a time |

**💸 A Jungle Scout (Supplier Database) alternative for 1688:** $49 a month per added seat (list price, checked
2026-10-15), Alibaba only; a weekly 3-search monitor here ≈ $2.50 the first week, all-in.

### 📦 Already scraping 1688? Vet your 1688 scraper data

Ran zen-studio's or devcake's 1688 scraper already? Set "Source" to **dataset** and paste that run's dataset ID —
no second scrape: supplier score, MOQ-tier landed cost, English titles and the RFQ are added (rules only by default),
$0.006 per product that qualifies. Chain it after every scrape: [Integrations](#-integrations-automation-and-api).

### 💵 Pricing — what a run really costs

Pay per result: **one event per qualified product, nothing else.** Your first 25 qualified products are free; up to
5 of them get a live AI verdict on us.

| Event | When it is charged | Price |
|---|---|---|
| `free-tier` | your first 25 qualified products on this Actor, in any mode | **$0.00** |
| `qualified-product-basic` | AI off — supplier score, costs, glossary title, template message | **$0.006** |
| `qualified-product-ai` | AI on — plus AI English title, relevance check, sourcing note, risk flags, AI message | **$0.015** |

**Never charged by us:** listings below the minimum score, off-topic, filtered out, excluded or received before; no
start fee. **The 1688 scan is not ours to waive:** the scraper bills your account $0.002 per listing, capped by "Max
source spend".

**How that compares** — $0.006 is the live Store median for "1688 supplier finder" (7 priced Actors, 2026-10-15),
but per qualified product: one replaces ≈ 2.5 raw rows (≈ $0.0024 per raw-row equivalent) and ≈ 8 minutes of
vetting (on 5 sample products).

**Worked example** — 1 search × 100 listings → 40 qualified: $0.20 scan + 40 × ($0.015 + ≈ $0.0011 tokens) =
**$0.84 all-in with AI, ≈ $0.021 per qualified product** (with the $0.005 scan share); $0.44 with AI off. Your first
run's first 25 are free: ≈ $0.47.

**At volume** — Sourcing agent, 10 clients in one weekly run: ≈ $8.40 all-in the first week, then only new products.
FBA seller, 3 searches weekly: ≈ $2.50 the first week.

### 🤖 What the AI tier adds

The same sample product, AI **on** (`qualified-product-ai`, $0.015, list-mode run 2026-10-15) — a better title,
a relevance check, a grounded note and the message, moving the verdict from maybe to shortlist:

<details><summary>The same product with AI off (2026-10-16) — glossary title, template message</summary>

```json
{"titleEn": "iPhone 16/16 Pro liquid silicone phone case, magnetic, solid colour, logo", "titleSource": "glossary", "keyAttributes": [], "verdict": "maybe", "ruleScore": 69, "fitScore": null, "sourcingNote": "Maybe: composite score 4.3/5; service scores average 4.2/5; manufacturer (生产厂家) — $1.05/unit at 200 pcs, landed $1.69, margin 88.7 %.", "supplierMessageEn": "Hello 东莞示例塑胶科技有限公司 (sample)! We are interested in your product \"液态硅胶手机壳适用苹果16/16Pro 磁吸纯色 支持定制LOGO\" (1688 offer 100000000003). Our first order would be 200 pieces at a target unit price of ¥7.50. Could you send a quotation, a sample and the lead time? Thank you!", "aiModel": null}
```

</details>

```json
{"titleEn": "Liquid silicone phone case for Apple 16/16Pro magnetic solid color supports custom LOGO", "titleSource": "ai", "keyAttributes": ["liquid silicone", "phone case", "for Apple 16/16Pro", "magnetic", "solid color", "supports custom LOGO"], "verdict": "shortlist", "ruleScore": 69, "fitScore": 74, "sourcingNote": "Manufacturer with 5 years on 1688 and composite score 4.3/5. MOQ of 50 pieces is within order quantity of 200 at ¥7.5/pc with 88.7% margin. Lacks 1688 factory inspection.", "supplierMessageEn": "Hello! I am interested in your liquid silicone phone case (https://detail.1688.com/offer/100000000003.html). We plan an initial order of 200 pieces at a target unit price of 7.5 CNY. Could you please provide a formal quote, a sample, and the lead time? Looking forward to your reply, thank you!", "aiModel": "google:gemini-3.6-flash"}
```

Each AI field is checked after the model answers: attributes must be characters of the Chinese title, the note and
message quote only listing values, your quantity and target price, and the fit moves at most 15 points.

By hand that is ≈ 8 minutes per product on 5 sample products (2026-10-15). Without model access the demo shows
labelled sample verdicts (`aiModel: "sample"`); your first real search gets up to 5 live AI verdicts on us.

### ⚙️ Input

| Field | Default | What it does |
|---|---|---|
| `queries` | — | What to search on 1688, English or Chinese — typing it starts the live search |
| `goalDescription` | — | Your product brief, for the relevance check and the message |
| `minScore` | `60` | Decides what you pay: suppliers below it are not charged |
| `orderQuantity` | `100` | Picks the price tier |
| `targetSellPriceUsd` · `sellCurrency` | — · `USD` | Adds `marginPct`, in USD, EUR or GBP |
| `freightUsdPerKg` · `dutyPct` · `importVatPct` | `7` · `15` · `0` | Landed cost — dated estimates, labelled on each row |
| `maxQualified` | `50` | Hard cap on output and spend |
| `maxDiscoveryChargeUsd` | `0.5` | Stops the 1688 scraper at this cost — form and API alike |
| `maxProductsPerQuery` | `100` | Listings read per search ($0.20 on your account) |
| `enableAi` | `true` | AI assessment on / off |

<details><summary>Every other input</summary>

`sourceMode` (`{}` runs the free demo), `datasetId`, `itemsList`, `minMarginPct`, `targetFlags`, `excludeTerms`,
`suppressionList`, `writeRfq`, `sendAlertsTo`, `clients`, `notifyEmail`, `advancedOptions`, `dedupeAcrossRuns`,
`dedupeTtlDays`, `historyDatasetName`, `discoveryActorId`, `preset`; API only (declared, hidden on the form):
`discoveryTimeoutSecs`, `webhookUrl`, `webhookSecret` and more — all in the [API reference](https://api.apify.com/v2/key-value-stores/L5Bd4JHlXE6JADeMH/records/api-reference.md).

</details>

### 📤 Output

One dataset item per qualified product — JSON, CSV or Excel, or a webhook. Views: `Shortlist`, `Costs & margin`,
`Supplier check`, `Supplier messages`. Sort by `score`; `ruleScore` is the supplier part, `fitScore` the AI's — trend
across runs on `ruleScore`.

<details><summary>Every field of a row</summary>

| Field | Description |
|---|---|
| `itemId`, `offerId`, `url`, `imageUrl`, `dedupeKey`, `sample` | Identity, stable across runs |
| `name`, `titleCn`, `titleEn`, `titleSource`, `productType`, `keyAttributes`, `query` | English name, Chinese original |
| `priceCny`, `priceTiers`, `moq`, `moqUnit`, `orderQuantity`, `moqFit` | Price ladder, MOQ at your quantity |
| `unitCostCny`, `unitCostUsd`, `landedCostUsd`, `landedCost`, `sellCurrency`, `marginPct`, `costAssumptions` | Costs; `landedCost` in your currency, VAT in |
| `sameProductGroup`, `sameProductOffers`, `cheapestInGroup` | Same product from other suppliers, cheapest marked |
| `supplierName`, `supplierId`, `contactRoute`, `supplierChatUrl`, `supplierShopUrl` | Supplier and how to reach it |
| `supplierType`, `supplierYearsOn1688`, `factoryInspected`, `superFactory`, `supplierScores`, `orders30d`, `repurchasePct` | Signals and demand (null when not shown) |
| `badgesCn`, `badgesEn`, `serviceTermsEn`, `provinceCn`, `cityCn`, `location`, `translated` | In English |
| `verdict`, `relevant`, `riskFlags`, `sourcingNote`, `scoreReasons`, `supplierMessage`, `supplierMessageEn` | Verdict, why, the RFQ |
| `flags`, `targetFlagsMatched`, `ruleScore`, `fitScore`, `score`, `label`, `assessedBy` | Supplier score, AI fit (± 15), ranking score; no twin fields |
| `aiAssessed`, `aiModel`, `client`, `chargedEvent`, `billedAs`, `source`, `scrapedAt`, `firstSeenAt` | Provenance, client, billing |

</details>

**Upsert key:** `dedupeKey` — `offer:<1688 offer id>`: one product is one row however many runs find it. Records:
`OUTPUT` (= `RUN_SUMMARY`: the funnel, charges, `sameProductGroups`, `skipped`), a `DIGEST` and a client-ready
`REPORT` page.

⭐ **Found it useful? A review on the Store helps others find it** — it takes a minute on the Actor's page.

### 🔁 Run it weekly

1. **Open the saved task and click Schedule** after your first real run (`OUTPUT.scheduleTaskUrl`), your address in
   `notifyEmail`: each run with new products e-mails the digest with **the trend vs the last run**.
2. Keep `dedupeAcrossRuns: true` — only new products are charged; adding a search term keeps the memory.
3. Or a Slack, Teams, Google Chat, Discord or Telegram URL in `sendAlertsTo` — start from the
   [ready tracker sheet](https://api.apify.com/v2/key-value-stores/L5Bd4JHlXE6JADeMH/records/tracker.csv).

Weekly cost is new products only: 3 searches ≈ $2.50 the first week with AI; week 2 (not measured yet) delivers
less. **Price-change alerts** on your shortlist: roadmap 2026-11-15; rolling discovery 2026-11-05; **supplier
replies** (a pasted 旺旺 quote → price, MOQ, lead time in the row) 2026-11-12.

#### 🏢 Agency in 3 steps

Pick **Sourcing agency** in "Start from a ready niche search" (2 example clients), replace them with yours (`name`,
`queries`, optionally quantity, sell price, `notifyEmail`), start and schedule the saved task: each client gets only
its new products, its own e-mail and a `REPORT-<client>` page with its name.

#### 🎯 Try it for your niche

Pick it in **Start from a ready niche search** (`preset`) and press Start — its first run is capped at $0.15 (35
listings per search) until a live run has measured its yield.

| Niche | What it looks for | Start |
|---|---|---|
| Amazon FBA phone accessories | magnetic cases + stands, 300 pcs, $19.99, factories | `fba-phone-accessories` ([input](https://api.apify.com/v2/key-value-stores/L5Bd4JHlXE6JADeMH/records/preset-fba-phone-accessories.json)) |
| Pet store | dog chew toys + cat scratchers, 200 pcs, $12.99 | `pet-supplies` ([input](https://api.apify.com/v2/key-value-stores/L5Bd4JHlXE6JADeMH/records/preset-pet-supplies.json)) |
| Fitness brand | yoga mats + resistance bands, 500 pcs, sea freight | `yoga-fitness` ([input](https://api.apify.com/v2/key-value-stores/L5Bd4JHlXE6JADeMH/records/preset-yoga-fitness.json)) |
| EU / UK Amazon seller | baking mats + spatulas, €14.99, 19 % VAT | `eu-amazon-seller` ([input](https://api.apify.com/v2/key-value-stores/L5Bd4JHlXE6JADeMH/records/preset-eu-amazon-seller.json)) |
| Sourcing agency | 2 example clients, each its own search and REPORT | `agency-roster` ([input](https://api.apify.com/v2/key-value-stores/L5Bd4JHlXE6JADeMH/records/preset-agency-roster.json)) |

### 🔌 Integrations, automation and API

Every run writes `OUTPUT.mode` (`demo`, `live`, `list`, `dataset`) and `OUTPUT.ok` / `outcome` — branch on those.

- **After every `zen-studio/1688-wholesale-scraper` or `devcake/1688-com-products-scraper` run:** in its
  Integrations tab add "Run succeeded → start this Actor" with `sourceMode: dataset`, `datasetId` = the run's
  `resource.defaultDatasetId`, `enableAi: false` — every scrape is vetted, rules only until you switch AI on.
- **Webhook** — any https URL in `sendAlertsTo` gets each product as JSON. **Sheets / Slack** — the Integrations
  tab. **Airtable / HubSpot** — a Make / Zapier step, upsert on `dedupeKey` (native push: roadmap 2026-11-30).

<details><summary>Webhook payloads, retries and signature</summary>

`{"event": "product.qualified", "product": {…}, "runId": "…"}` per product, `"products.qualified"` with `products`
per batch (`webhookBatchSize`); a 429 / 5xx is retried once and a failure never fails the run — failed units are in
`OUTPUT.webhook.failedKeys` and not re-sent next run. `X-Signature: sha256=<HMAC-SHA256 of the raw body>`.

</details>

#### Run outcomes

<details><summary>Status, <code>OUTPUT.outcome</code>, charged?, what to do</summary>

| Outcome | Run status · `OUTPUT` | Charged? | What to do |
|---|---|---|---|
| Free demo / success | SUCCEEDED · `ok: true`, `outcome: ok` | demo no · else per qualified product | — |
| Nothing matched | SUCCEEDED · `outcome: empty` | not by us | loosen filters |
| Demo text still in place | SUCCEEDED · `inputNeeded` | no | replace the field the status names |
| Invalid input | FAILED | no | fix the field the status names |
| Plan cannot run the scraper | SUCCEEDED — check `OUTPUT.ok`: `ok: false`, `outcome: source_refused`, `sourceRefused: "plan"` | no | paste list-mode rows (any plan) |
| Source failed (crash, timeout) | FAILED · `ok: false`, `outcome: source_failed` | no | follow the status |
| Source partial | SUCCEEDED · `sourceStatus.partial` | per qualified product | raise `discoveryTimeoutSecs` (API) or lower "Listings per search" |
| AI unavailable | SUCCEEDED · `aiError` | free, then basic | `llmProvider: byok` |

</details>

<details><summary>Python and JavaScript</summary>

```python
from apify_client import ApifyClient

client = ApifyClient("<YOUR_API_TOKEN>")
run = client.actor("rich_minds/1688-supplier-finder-ai").call(
    run_input={
        # free first call: {} (the demo) or {"sourceMode": "list", "itemsList": [...]} (your rows)
        "queries": ["silicone phone case"],
        "goalDescription": "Soft silicone iPhone 16 cases for Amazon at $14.99, factory-direct",
        "orderQuantity": 200,
        "targetSellPriceUsd": 14.99,
        "maxQualified": 50,
        "maxDiscoveryChargeUsd": 0.5,  # spend cap on your account for the 1688 scan
    },
    timeout_secs=3600,  # the AI path with your own key — "How long does a run take?"
    # build="0.1.5",  # pin the build your pipeline was tested with (Changelog); omit for the latest
)
out = client.key_value_store(run["defaultKeyValueStoreId"]).get_record("OUTPUT")["value"]
if out.get("sourceError"):  # a refused or failed source — never read it as "nothing new"
    raise RuntimeError(out["sourceError"])
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item["url"], item["score"], item["label"], item["landedCostUsd"])
```

```javascript
import { ApifyClient } from 'apify-client';

const client = new ApifyClient({ token: '<YOUR_API_TOKEN>' });
const run = await client.actor('rich_minds/1688-supplier-finder-ai').call({
    // free first call instead: {} (the demo)
    queries: ['silicone phone case'],
    goalDescription: 'Soft silicone iPhone 16 cases for Amazon at $14.99, factory-direct',
    orderQuantity: 200,
    targetSellPriceUsd: 14.99,
    maxQualified: 50,
    maxDiscoveryChargeUsd: 0.5, // spend cap on your account for the 1688 scan
}, { timeout: 3600 /* , build: '0.1.5' — pin the build you tested with */ });
const out = (await client.keyValueStore(run.defaultKeyValueStoreId).getRecord('OUTPUT')).value;
if (out.sourceError) throw new Error(out.sourceError); // a refused or failed source, not "nothing new"
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items.map((i) => [i.url, i.score, i.label, i.landedCostUsd]));
```

</details>

**MCP** (Claude, ChatGPT, any client) — `https://mcp.apify.com/?actors=rich_minds/1688-supplier-finder-ai`.

<details><summary>MCP config and the minimal agent input</summary>

`{"mcpServers": {"apify": {"url": "https://mcp.apify.com/?actors=rich_minds/1688-supplier-finder-ai"}}}` —
**Minimal agent input** (memory off, so a repeated question gets the same products; `{}` = the free demo):

```json
{"queries": ["silicone phone case"], "goalDescription": "Soft silicone iPhone 16 cases for Amazon at $14.99", "orderQuantity": 200, "targetSellPriceUsd": 14.99, "maxQualified": 10, "maxDiscoveryChargeUsd": 0.2, "dedupeAcrossRuns": false}
{"sourceMode": "list", "itemsList": [{"offer_id": "123", "title": "硅胶手机壳", "price_cny": 5.9}]}
```

</details>

#### List-mode rows — what a pasted record needs

<details><summary>The fields a pasted 1688 row needs (either scraper's format) — every optional one in the <a href="docs/img/api-reference.md">API reference</a></summary>

| Field (devcake · zen-studio) | Needed? | What it enables |
|---|---|---|
| `title` | required | `titleCn`, the English title, the relevance check |
| `offer_id` · `offerId` (or `detail_url`) | required | `offerId`, `url`, the dedupe key |
| `price_cny` · `price.min` (or the tiers) | required | `priceCny`, the unit cost |
| `price_tiers`, `minimum_order_quantity`, supplier scores, years, badges, city, shop | optional | the tier, `moqFit`, the supplier score, English badges, the contact links |

</details>

### 👥 Who is it for?

| You are… | You run it to… | Start with |
|---|---|---|
| An Amazon FBA, TikTok Shop or Shopify seller | find factories that accept your quantity and leave your margin | `queries`, `orderQuantity`, `targetSellPriceUsd` |
| An EU / UK Amazon seller | the same, with landed cost in EUR / GBP and import VAT | the `eu-amazon-seller` preset |
| A sourcing agent or buying office | each Monday's *new* trusted suppliers per client | the `agency-roster` preset, weekly |
| A dropshipper | factory direct products with single-piece dropshipping | `targetFlags: ["dropshipping"]` |
| An AI agent or automation | a brief → a typed, costed shortlist with an RFQ | the minimal agent input |

### 🧠 How the AI works

- **Grounded:** one listing at a time, only the rule shortlist (up to `maxQualified`).
- **No keys required where your Apify plan includes model access** — otherwise your own key (`llmProvider: "byok"`).
  Default `google/gemini-2.5-flash-lite` (a short JSON verdict, ≈ $0.0011 of tokens per product); with your key its
  vendor picks the model (Gemini: `google:gemini-3.6-flash`, as in the sample), its thinking capped.
- **Fallback:** a model failure keeps the rule score, title, note and message — billed as basic.

### 🔒 Data, compliance and limits

- Public 1688 offer and company data only — no login, no personal data; 1688's terms apply.
- Landed cost is an estimate (freight, duty, VAT, the CNY rate), not a freight quote.

### ❓ FAQ

**How much will one run cost me?** One search × 100 listings → ≈ 40 qualified: $0.44 rules only, $0.84 all-in with
AI ($0.20 of it the scan). Your first 25 qualified products are free.

**What will my first real search cost?** The $0.20 scan, 15 products past the free 25 and tokens: ≈ $0.47 with AI.

**Is this a 1688.com products scraper?** It runs one on your account and adds vetting, costing, translation and the
message — or vets 1688 scraper data you have (`datasetId`).

**Can I search 1688 in English?** Yes — it is sent to 1688 in Chinese (`OUTPUT.queriesLocalized`); Chinese finds
most.

**Does it work for EU / UK Amazon sellers?** Yes: pick EUR or GBP in "Sell currency", add your import VAT and duty —
landed cost and margin come in your currency (the `eu-amazon-seller` preset).

**How do I verify chinese suppliers with it?** The score reads 1688's verified signals (service scores, 验厂, years,
repeat buyers), each reason citing the value. Order samples first: it ranks, it does not certify.

<details><summary>More questions: AliPrice, Jungle Scout, translation, photo search, factory direct, small orders</summary>

**An AliPrice alternative?** For bulk work; AliPrice wins at a free one-off image search while you browse.

**A Jungle Scout alternative?** For 1688, yes: its $49-a-month seat covers Alibaba, not 1688.

**Why not 1688.com with the browser's page translation?** Free, and where you chat (旺旺) — use it for the final
check; it cannot export, schedule, score or cost.

**Can I search 1688 by photo?** Not yet (roadmap, 2026-11-13). Today: paste a photo-search scraper's rows (crawleast,
om_kh) into `itemsList` with `sourceMode: list` — vetted, costed and translated here.

**Can it find factory direct products only?** Yes: the *manufacturer* flag in `targetFlags`; its precision on known
listings is measured next (roadmap, 2026-10-29).

**Small orders?** Yes — your quantity picks the tier; a higher MOQ is `below_moq`.

</details>

**Which Apify plan do I need?** Any plan runs the demo and your own rows; the live search needs a plan that runs Store
Actors. AI per plan: [At a glance → Keys / setup](#-at-a-glance).

**How long does a run take?** The demo 0.5 s; a live search of 100 listings ≈ 2 minutes (estimate).

<details><summary>Run time per mode and the <code>timeoutSecs</code> to pass</summary>

| Mode | Time | `timeoutSecs` to pass |
|---|---|---|
| Free demo (6 sample listings) | 0.5 s, measured 2026-10-15 | 120 |
| Your own rows, rules only | ≈ 1 s per 100 (estimate) | 300 |
| Live search, rules only | ≈ 1–2 min per search of 100 (estimate) | 900 |
| AI via Apify's model access | ≈ 10–25 s per product, 8 at a time (estimate) | 1800 |
| AI with a free own key (`byok`) | measured 2026-10-15: ≈ 47.2 s per product with a free google:gemini-3.6-flash key; 1–3 AI verdicts per run, the rest rule-scored | 2540 (50 products) |
| AI with a paid own key | ≈ 10–25 s per product, 2 at a time (estimate) | 3600 |

A rate-limited run stops the AI after 2 minutes of backoff (worst case, a slow own key: ≈ 40 min per 100
products); every row is pushed before the timeout.

</details>

**Will I be charged for the same product twice?** No, with `dedupeAcrossRuns` on — adding a search term keeps the
memory.

**What does "qualified" mean?** Every free filter passed, at least your minimum score, on-topic, a verdict you asked
for; what the AI drops is named in `OUTPUT.skipped`.

<details><summary>More: the free products while the AI is off, sending messages safely</summary>

**Do rule-scored products use my free ones?** Yes. While the AI cannot run, the last 5 free products wait for your
first AI-assessed ones — the details are in the [API reference](https://api.apify.com/v2/key-value-stores/L5Bd4JHlXE6JADeMH/records/api-reference.md).

**How do I send the openers safely?** Send the supplier messages by hand in 1688 chat (旺旺), a few a day; the message
carries only the listing link. Pay through 1688's trade assurance.

</details>

### 🧩 More Actors from the same developer

Not quite your use case? The same pay-per-qualified-result model, closest to this Actor's buyers first:

- **[Amazon Bestsellers Scraper + AI](https://apify.com/rich_minds/amazon-product-finder-ai)** — find the Amazon products worth sourcing, then their factory here.
- **[Facebook Ad Library Winning Ads Finder](https://apify.com/rich_minds/fb-ad-library-winning-ads)** — see which products competitors advertise longest.
- **[Xiaohongshu KOL Finder](https://apify.com/rich_minds/xiaohongshu-kol-finder-ai)** — reach Chinese consumers on RedNote.

### 🆘 Support

Something missing or wrong? Open an issue on the Actor's page — buyers' requests ship first.

### 📝 Changelog

One line per build, newest first — what changed for you.

- **0.1.5** (2026-10-16) — AI vetting ≈ $0.021 per product all in (was $0.034); costs in EUR / GBP with import VAT; the same product from several suppliers grouped; vet a 1688 dataset you already scraped.
- **0.1.4** (2026-10-16) — agencies run every client in one go; demo rows marked as samples; a message on every shortlist and maybe row.
- **0.1.1–0.1.3** (2026-10-15) — first release: supplier score, landed cost, English titles and searches, a bilingual message.

# Actor input Schema

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

What to source, one product per line — English or Chinese (<code>silicone phone case</code>, <code>硅胶手机壳</code>); English is searched in Chinese. Typing a search next to the free sample starts the live search on your Apify account (a plan that runs Store Actors). <b>Affects what you pay</b>: 100 listings ≈ $0.20, capped by <b>Max source spend</b>.

## `goalDescription` (type: `string`):

Describe what you are sourcing in plain words (product, models, material, where you sell it, your price). The AI judges every listing against it, drops a search term's second meaning (felt <i>sheet</i> vs felt <i>bag</i>) and writes the supplier message from it. Rewording it never resets the weekly memory.

## `preset` (type: `string`):

Pick a niche and press Start: it fills the search fields you left empty (searches, brief, order quantity, sell price) and runs the live 1688 search (spend-capped by <b>Max source spend</b>). Your own values always win. <b>Custom</b> = fill the fields yourself.

## `minScore` (type: `integer`):

The field that decides what you pay: products whose supplier score (1688 service scores, years, factory inspection, manufacturer vs trader, repeat buyers, orders — AI-adjusted by at most 15 points) is below this are skipped and <b>not charged</b>. 60 keeps solid suppliers; 75+ keeps only the strongest.

## `orderQuantity` (type: `integer`):

How many pieces you plan to order. The unit cost is read from the price tier that holds this quantity; a quantity below the supplier's MOQ is costed at the MOQ tier and marked <code>below_moq</code>.

## `maxQualified` (type: `integer`):

Hard cap on results — and the ceiling of what <b>this Actor</b> charges: at most this many × $0.015 with AI on (× $0.006 with AI off), e.g. 50 × $0.015 = $0.75; the source's own spend has its cap right below. The best products are output first.

## `maxDiscoveryChargeUsd` (type: `number`):

Hard cap on what the 1688 scraper run may charge your account in the live search — $0.50 in the form and for an API or agent call that leaves it out (≈ 250 listings at $0.002), so a first real search can never cost more. Raise it for bigger searches. <b>Affects what you pay.</b>

## `enableAi` (type: `boolean`):

English title, relevance check, sourcing note with risk flags, bilingual supplier message. <b>On = $0.015 per qualified product + AI tokens; off = $0.006</b> (rule score, costs, glossary title, template message). First 5 products: live AI verdicts on any plan; all 25 free ones with Apify model access or a paid own key.

## `notifyEmail` (type: `string`):

After every run with at least one new product, the digest (how many are new, the top 10 with verdict, supplier score and landed cost) is e-mailed here through Apify's send-mail Actor. Schedule the run weekly (Actions → Schedule) and only new suppliers reach your inbox — no Slack or Zapier needed. Never sent for the free demo.

## `targetSellPriceUsd` (type: `number`):

What you will sell one piece for (Amazon / Shopify / TikTok Shop price), in the <b>Sell currency</b> below (USD unless you pick EUR or GBP; the field keeps its 0.1 name). With it every product gets <code>marginPct</code> = (sell price − landed cost) ÷ sell price. Empty = no margin.

## `minMarginPct` (type: `number`):

Skip products whose margin at your sell price is below this — free, never charged. 0 = off. Needs <b>Your sell price</b>.

## `freightUsdPerKg` (type: `number`):

Your shipping rate China → your warehouse, per kg. Default 7 = an estimate for consolidated air / express from South China (2026-10 quotes ≈ $6–8; sea LCL ≈ $1–2) — every row labels it an estimate in <code>costAssumptions.freightSource</code>. Landed cost adds rate × unit weight; set your forwarder's rate.

## `dutyPct` (type: `number`):

Duty and tariffs on the unit cost, in %. Default 15 = a rough estimate for US imports of consumer goods from China (2026-10), labelled an estimate in <code>costAssumptions.dutySource</code> — set your product's real rate (0 for none).

## `sellCurrency` (type: `string`):

The currency you sell in: <code>landedCost</code>, <code>marginPct</code> and <b>Your sell price</b> use it (<code>landedCostUsd</code> stays in USD). EU / UK sellers: pick EUR or GBP and set <b>Import VAT</b> and your duty rate. CNY rates: dated 2026-10 estimates (<code>advancedOptions.fxCnyEur</code> 0.12, <code>fxCnyGbp</code> 0.105 replace them).

## `importVatPct` (type: `number`):

Import VAT added on top of goods, freight and duty in <code>landedCost</code> — e.g. 19 (Germany), 20 (UK, France). Leave 0 when you reclaim it or sell in the US.

## `targetFlags` (type: `array`):

Only deliver products that carry at least one of these flags (manufacturer, factory inspected, Super Factory, trust badge, high repeat buyers, best seller, dropshipping, customisation …). Empty = keep everything. An API call passes the names from the README's flag table, e.g. <code>factory_inspected</code> (<code>factoryInspected</code> works too); an unknown name stops the run at once with the list.

## `excludeTerms` (type: `array`):

Words that mark the wrong product, English or Chinese (<code>包</code> to drop felt bags from a felt-sheet search). Badge phrases like 包邮 are ignored when matching.

## `advancedOptions` (type: `object`):

The knobs few buyers set, as JSON keys — all optional. Filters: <code>factoryOnly</code> (<code>true</code> = manufacturers only, skip traders 经销批发 — or pick the <i>manufacturer</i> flag above), <code>maxMoq</code>, <code>minYearsOnPlatform</code>, <code>minCompositeScore</code> (0–5), <code>minMonthlyOrders</code>, <code>minRepurchasePct</code>, <code>provinces</code> (<code>\["Guangdong", "Yiwu"]</code>), <code>priceMinCny</code> / <code>priceMaxCny</code>, <code>maxUnitCostUsd</code>, <code>bestOfferPerSupplier</code>, <code>verdicts</code> (<code>\["shortlist"]</code>). Search: <code>sortType</code> (best_selling, relevance, price_asc, price_desc). Costs: <code>fxCnyUsd</code> (0.14), <code>fxCnyEur</code> (0.12), <code>fxCnyGbp</code> (0.105), <code>defaultUnitWeightKg</code> (0.3). Message: <code>buyerName</code>, <code>company</code>. The 0.1 top-level names (<code>maxMoq</code>, <code>provinces</code>, <code>fxCnyUsd</code> …) still work; an unknown key stops the run with the list.

## `suppressionList` (type: `array`):

Offer ids, product URLs, supplier names or member ids to never output (suppliers you already work with). Skipped before any processing and never charged.

## `writeRfq` (type: `boolean`):

For every shortlisted product, a polite RFQ / sample request in Chinese (to paste into 1688 chat, 旺旺) with its English translation — quantity, target price and the listing only. The Actor never contacts suppliers.

## `llmProvider` (type: `string`):

<b>Apify (no keys)</b> — the AI runs through Apify's built-in OpenRouter proxy; tokens are billed to your Apify account at OpenRouter's rates. <b>My own key</b> — use your OpenAI / Anthropic / Gemini / Groq key instead; a free-tier key assesses only a few products per run — expect 1–3 AI checks (2 calls at a time, one after a rate limit, then the 3 borderline products retried one by one) — and the rest keep their rule score; a paid Groq / Gemini key (billing on) assesses every product. Own-key pace measured 2026-10-15: ≈ 47.2 s per product with a free google:gemini-3.6-flash key — pass a run timeout of ≈ 2540 s for 50 products.

## `llmModel` (type: `string`):

Leave empty for the default: <code>google/gemini-2.5-flash-lite</code> in Apify mode; in own-key mode your key's vendor model (a Gemini or unrecognised key → <code>google:gemini-3.6-flash</code>, Anthropic → <code>anthropic:claude-haiku-4-5-20251001</code>, OpenAI → <code>openai:gpt-4.1-mini</code>, Groq → <code>groq:openai/gpt-oss-20b</code>). Apify mode takes an OpenRouter slug such as <code>openai/gpt-4.1-mini</code>; own-key mode takes <code>provider:model</code>.

## `llmApiKey` (type: `string`):

Required when <b>AI model access</b> is <i>My own API key</i>. Stored encrypted by Apify, never logged.

## `sendAlertsTo` (type: `string`):

Paste one or more URLs, one per line — the service is detected from the address: a Slack or Discord channel webhook, a Teams Workflows or Google Chat space webhook, your Telegram bot's send link (<code>https://api.telegram.org/bot\<token>/sendMessage?chat_id=@yourchannel</code>) or any other https URL (Zapier, Make, n8n, your CRM), which gets the products as JSON. After every run with at least one new product, the digest (how many are new, the top 10 with links) is posted there. Never sent for the free demo. API callers can also send <code>slackWebhookUrl</code>, <code>discordWebhookUrl</code>, <code>teamsWebhookUrl</code>, <code>googleChatWebhookUrl</code>, <code>telegramUrl</code>, <code>webhookUrl</code> with <code>webhookHeaders</code>, <code>webhookBatchSize</code> and <code>webhookSecret</code> (signed body) — see the README's Integrations section.

## `clients` (type: `array`):

Sourcing for several clients? One entry per client — <code>name</code>, <code>queries</code> (what to source for them, English or Chinese) and optionally <code>goalDescription</code>, <code>orderQuantity</code>, <code>targetSellPriceUsd</code>, <code>minMarginPct</code>, <code>notifyEmail</code>, <code>logoUrl</code>. Each client gets its own 1688 search, its own memory (only new products), its own DIGEST and a REPORT page with the client's name — the filters, AI and caps above apply to all; <b>Send alerts to</b> gets every client's digest, named. Affects what you pay: each client's search is a live search on your Apify plan (capped by Max source spend per client) and its qualified products are charged as usual. The two examples are never searched unless you pick the <i>Sourcing agency</i> preset — replace them with your clients.

## `dedupeAcrossRuns` (type: `boolean`):

Remembers every 1688 offer you were charged for (in a named key-value store on your account) and skips it in future runs — a weekly schedule delivers and charges only new products.

## `dedupeTtlDays` (type: `integer`):

How long a delivered product stays remembered. 0 = never deliver or charge it again. A number of days lets a product that comes back (a seasonal peak, a relisted item) reach you again after that many days — charged again as a new product.

## `historyDatasetName` (type: `string`):

Optional. Type a name (e.g. <code>1688-sourcing-log</code>) and every run appends its new products with the date to that named dataset on your account — one list across months to connect to Google Sheets once. Empty = off. Costs nothing extra.

## `sourceMode` (type: `string`):

<b>actor</b> — search 1688 live with the source scraper on your account, billed separately. <b>dataset</b> — an existing dataset of either 1688 scraper. <b>list</b> — 1688 rows you paste in. <b>Bring your own data:</b> rows or a dataset ID — no scraper runs, so our per-product charge is the whole bill. The mode you choose always runs as chosen; only the untouched sample records next to a search you typed switch to the live search (spend-capped). <code>{}</code> over the API runs the free demo — nothing charged.

## `autoSwitchToLive` (type: `boolean`):

On (default): search terms typed next to the untouched sample records start the live search (spend-capped; <code>OUTPUT.switchedToLive</code> names them). Off: the mode you send is the mode that runs — the sample stays the free demo and the status names the terms it did not search. API pipelines that must never start a paid read on their own: send <code>false</code>.

## `discoveryActorId` (type: `string`):

<b>devcake</b> (default): $0.002 per listing + $0.00005 per run, 0.5 % failed runs, no Free-plan cap. <b>zen-studio</b>: 50+ fields incl. unit weight, $0.00499 per listing + $0.0049 per run; its Free plan returns at most 20 results per run (its README). Both run on your Apify account.

## `maxProductsPerQuery` (type: `integer`):

How many 1688 listings the scraper reads per search. <b>Affects what you pay</b> on your account: 100 × $0.002 = $0.20 per search with devcake (× $0.00499 with zen-studio). A scheduled run of a search reads 2× when you leave it at 100.

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

Only for <b>dataset</b> mode: a dataset of devcake/1688-com-products-scraper or zen-studio/1688-wholesale-scraper (either schema is detected). Pick it so the Actor is granted read access.

## `itemsList` (type: `array`):

Only for <b>list</b> mode. JSON array of 1688 offers in either scraper's format — at least <code>title</code> and <code>offer_id</code> (or <code>offerId</code> / a <code>detail_url</code>) plus a price; the README's List-mode rows table names every field read. Prefilled with 6 fictional sample offers (the free demo, <code>"sample": true</code>): their rows link to the live 1688 search for the product instead of a listing that does not exist.

## `discoveryInput` (type: `object`):

API only — hidden on the form. Only for the live search. Extra keys passed to the 1688 scraper as-is (they win over the form), e.g. <code>{"maxProducts": 200}</code>. Leave empty — <b>Search 1688 for</b> fills the scraper's own <code>queries</code> / <code>keywords</code>. The live search runs that Store Actor on your Apify plan — if your plan cannot run Store Actors, paste 1688 rows in <b>list</b> mode (any plan).

## `maxToProcess` (type: `integer`):

API only — hidden on the form. Upper bound on how many products are scored in one run (controls run time). Default = 3 × max qualified.

## `dedupeStoreName` (type: `string`):

Key-value store used for the cross-run memory. Left at the default, the memory is kept per search (source and scraper; adding a search term keeps it): rewording the brief keeps it, so a scheduled run never re-delivers what you already have. Sourcing for several clients on one account: type one name per client.

## `discoveryTimeoutSecs` (type: `integer`):

API only — hidden on the form. How long the 1688 scraper may run before its partial results are used. Raise it when the status says the source stopped early.

## `aiCandidateMultiplier` (type: `integer`):

API only — hidden on the form. How many rule-ranked products the AI reads per product you asked for (<b>Max qualified</b>). 1 = only the rule shortlist (fewer tokens on your bill).

## `webhookUrl` (type: `string`):

API only — hidden on the form, where <code>sendAlertsTo</code> takes it. Any https URL that gets each product as JSON.

## `webhookHeaders` (type: `object`):

API only — hidden on the form. Extra HTTP headers for the webhook, e.g. <code>{"Authorization": "Bearer …"}</code>. Stored encrypted.

## `webhookBatchSize` (type: `integer`):

API only — hidden on the form. 1 = one POST per product; more = one POST per batch.

## `webhookSecret` (type: `string`):

API only — hidden on the form. Signs every POST: <code>X-Signature: sha256=\<HMAC-SHA256 of the raw body></code>.

## `slackWebhookUrl` (type: `string`):

API only — hidden on the form, where <code>sendAlertsTo</code> takes it. Slack incoming-webhook URL for the digest.

## `discordWebhookUrl` (type: `string`):

API only — hidden on the form, where <code>sendAlertsTo</code> takes it. Discord channel webhook URL for the digest.

## `teamsWebhookUrl` (type: `string`):

API only — hidden on the form, where <code>sendAlertsTo</code> takes it. Teams Workflows webhook URL for the digest.

## `googleChatWebhookUrl` (type: `string`):

API only — hidden on the form, where <code>sendAlertsTo</code> takes it. Google Chat space webhook URL for the digest.

## `telegramUrl` (type: `string`):

API only — hidden on the form, where <code>sendAlertsTo</code> takes it. The bot's sendMessage link with its chat_id.

## Actor input object example

```json
{
  "queries": [
    "silicone phone case"
  ],
  "goalDescription": "Soft silicone phone cases for iPhone 15 / 16 to sell on Amazon at $14.99 — factory-direct, 200 pieces per colour to start",
  "preset": "custom",
  "minScore": 60,
  "orderQuantity": 100,
  "maxQualified": 50,
  "maxDiscoveryChargeUsd": 0.5,
  "enableAi": true,
  "minMarginPct": 0,
  "freightUsdPerKg": 7,
  "dutyPct": 15,
  "sellCurrency": "USD",
  "importVatPct": 0,
  "advancedOptions": {},
  "writeRfq": true,
  "llmProvider": "apify",
  "clients": [
    {
      "name": "Acme Pets",
      "queries": [
        "dog chew toy"
      ],
      "orderQuantity": 200,
      "targetSellPriceUsd": 12.99,
      "notifyEmail": "acme-team@example.com"
    },
    {
      "name": "Bloom Kitchen",
      "queries": [
        "silicone spatula"
      ],
      "orderQuantity": 500,
      "targetSellPriceUsd": 9.99,
      "notifyEmail": "bloom-team@example.com"
    }
  ],
  "dedupeAcrossRuns": true,
  "dedupeTtlDays": 0,
  "historyDatasetName": "",
  "sourceMode": "list",
  "autoSwitchToLive": true,
  "discoveryActorId": "devcake/1688-com-products-scraper",
  "maxProductsPerQuery": 100,
  "itemsList": [
    {
      "offer_id": "100000000001",
      "sample": true,
      "title": "适用iPhone15/16液态硅胶手机壳 全包防摔软壳 工厂直销",
      "image_url": "https://example.com/sample/1688-silicone-case-factory-photo.jpg",
      "price_cny": 5.2,
      "price_tiers": [
        {
          "min_quantity": 2,
          "max_quantity": 199,
          "price_cny": 6.8,
          "unit": "个"
        },
        {
          "min_quantity": 200,
          "max_quantity": 999,
          "price_cny": 5.9,
          "unit": "个"
        },
        {
          "min_quantity": 1000,
          "max_quantity": null,
          "price_cny": 5.2,
          "unit": "个"
        }
      ],
      "minimum_order_quantity": 2,
      "minimum_order_unit": "个",
      "booked_count": 2300,
      "repurchase_rate_percent": 34,
      "supplier_company_name": "深圳市示例硅胶制品有限公司 (sample)",
      "member_id": "b2b-sample0001",
      "supplier_business_type": "生产厂家",
      "supplier_years_on_platform": 9,
      "supplier_factory_inspected": true,
      "supplier_is_super_factory": false,
      "composite_score": "4.6",
      "goods_score": "4.7",
      "logistics_score": "4.5",
      "dispute_score": "4.8",
      "return_score": "4.4",
      "consultation_score": "4.6",
      "product_badges": [
        "认证工厂",
        "实力商家"
      ],
      "service_tags": [
        "退货包运费",
        "48小时发货"
      ],
      "province": "广东",
      "city": "深圳市",
      "query": "silicone phone case",
      "login_id": "示例硅胶制品 (sample)"
    },
    {
      "offer_id": "100000000002",
      "sample": true,
      "title": "iPhone16ProMax液态硅胶手机壳 镜头全包亲肤 跨境专供 一件代发",
      "image_url": "https://example.com/sample/1688-silicone-case-factory-photo.jpg",
      "price_cny": 8.9,
      "price_tiers": [
        {
          "min_quantity": 100,
          "max_quantity": 999,
          "price_cny": 9.8,
          "unit": "件"
        },
        {
          "min_quantity": 1000,
          "max_quantity": null,
          "price_cny": 8.9,
          "unit": "件"
        }
      ],
      "minimum_order_quantity": 100,
      "minimum_order_unit": "件",
      "booked_count": 5200,
      "repurchase_rate_percent": 41,
      "supplier_company_name": "广州示例数码配件厂 (sample)",
      "member_id": "b2b-sample0002",
      "supplier_business_type": "生产厂家",
      "supplier_years_on_platform": 12,
      "supplier_factory_inspected": true,
      "supplier_is_super_factory": true,
      "composite_score": "4.8",
      "goods_score": "4.8",
      "logistics_score": "4.7",
      "dispute_score": "4.9",
      "return_score": "4.6",
      "consultation_score": "4.8",
      "product_badges": [
        "超级工厂",
        "认证工厂"
      ],
      "service_tags": [
        "先采后付",
        "7天无理由退货"
      ],
      "province": "广东",
      "city": "广州市",
      "query": "silicone phone case",
      "login_id": "示例数码配件 (sample)"
    },
    {
      "offer_id": "100000000003",
      "sample": true,
      "title": "液态硅胶手机壳适用苹果16 磁吸纯色 支持定制LOGO",
      "price_cny": 6.6,
      "price_tiers": [
        {
          "min_quantity": 50,
          "max_quantity": 499,
          "price_cny": 7.5,
          "unit": "个"
        },
        {
          "min_quantity": 500,
          "max_quantity": null,
          "price_cny": 6.6,
          "unit": "个"
        }
      ],
      "minimum_order_quantity": 50,
      "minimum_order_unit": "个",
      "booked_count": 860,
      "repurchase_rate_percent": 22,
      "supplier_company_name": "东莞示例塑胶科技有限公司 (sample)",
      "member_id": "b2b-sample0003",
      "supplier_business_type": "生产厂家",
      "supplier_years_on_platform": 5,
      "supplier_factory_inspected": false,
      "supplier_is_super_factory": false,
      "composite_score": "4.3",
      "goods_score": "4.3",
      "logistics_score": "4.1",
      "dispute_score": "4.4",
      "return_score": "4.0",
      "consultation_score": "4.2",
      "product_badges": [
        "源头工厂",
        "支持定制"
      ],
      "service_tags": [
        "48小时发货"
      ],
      "province": "广东",
      "city": "东莞市",
      "query": "silicone phone case"
    },
    {
      "offer_id": "100000000004",
      "sample": true,
      "title": "厂家直供硅胶手机壳 适用iPhone15 清仓价",
      "price_cny": 1,
      "price_tiers": [
        {
          "min_quantity": 1,
          "max_quantity": null,
          "price_cny": 1,
          "unit": "个"
        }
      ],
      "minimum_order_quantity": 1,
      "minimum_order_unit": "个",
      "booked_count": 3000,
      "repurchase_rate_percent": 18,
      "supplier_company_name": "金华示例日用品厂 (sample)",
      "member_id": "b2b-sample0004",
      "supplier_business_type": "生产厂家",
      "supplier_years_on_platform": 6,
      "supplier_factory_inspected": false,
      "supplier_is_super_factory": false,
      "composite_score": "4.1",
      "goods_score": "4.0",
      "logistics_score": "4.0",
      "dispute_score": "4.1",
      "return_score": "3.9",
      "consultation_score": "4.0",
      "product_badges": [
        "工厂直销"
      ],
      "service_tags": [
        "包邮"
      ],
      "province": "浙江",
      "city": "金华市",
      "query": "silicone phone case"
    },
    {
      "offer_id": "100000000005",
      "sample": true,
      "title": "跨境爆款手机壳硅胶 适用iPhone 批发",
      "price_cny": 3.8,
      "price_tiers": [
        {
          "min_quantity": 10,
          "max_quantity": 99,
          "price_cny": 4.2,
          "unit": "个"
        },
        {
          "min_quantity": 100,
          "max_quantity": null,
          "price_cny": 3.8,
          "unit": "个"
        }
      ],
      "minimum_order_quantity": 10,
      "minimum_order_unit": "个",
      "booked_count": 120,
      "repurchase_rate_percent": 9,
      "supplier_company_name": "义乌市示例贸易商行 (sample)",
      "member_id": "b2b-sample0005",
      "supplier_business_type": "经销批发",
      "supplier_years_on_platform": 3,
      "supplier_factory_inspected": false,
      "supplier_is_super_factory": false,
      "composite_score": "3.6",
      "goods_score": "2.8",
      "logistics_score": "3.2",
      "dispute_score": "3.5",
      "return_score": "3.4",
      "consultation_score": "3.6",
      "product_badges": [],
      "service_tags": [
        "7天无理由退货"
      ],
      "province": "浙江",
      "city": "义乌市",
      "query": "silicone phone case"
    },
    {
      "offer_id": "100000000006",
      "sample": true,
      "title": "硅胶手机支架 桌面懒人支架 可折叠",
      "price_cny": 2.9,
      "price_tiers": [
        {
          "min_quantity": 20,
          "max_quantity": 199,
          "price_cny": 3.3,
          "unit": "个"
        },
        {
          "min_quantity": 200,
          "max_quantity": null,
          "price_cny": 2.9,
          "unit": "个"
        }
      ],
      "minimum_order_quantity": 20,
      "minimum_order_unit": "个",
      "booked_count": 1500,
      "repurchase_rate_percent": 25,
      "supplier_company_name": "宁波示例家居用品有限公司 (sample)",
      "member_id": "b2b-sample0006",
      "supplier_business_type": "生产厂家",
      "supplier_years_on_platform": 7,
      "supplier_factory_inspected": true,
      "supplier_is_super_factory": false,
      "composite_score": "4.4",
      "goods_score": "4.5",
      "logistics_score": "4.3",
      "dispute_score": "4.5",
      "return_score": "4.2",
      "consultation_score": "4.4",
      "product_badges": [
        "认证工厂"
      ],
      "service_tags": [
        "退货包运费"
      ],
      "province": "浙江",
      "city": "宁波市",
      "query": "silicone phone case"
    }
  ],
  "discoveryInput": {},
  "dedupeStoreName": "1688-supplier-finder-seen",
  "discoveryTimeoutSecs": 3600,
  "aiCandidateMultiplier": 1,
  "webhookBatchSize": 1
}
```

# Actor output Schema

## `qualified` (type: `string`):

All qualified products as JSON, best-scoring first.

## `sheet` (type: `string`):

The same products as a spreadsheet.

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

JSON record with the funnel (loaded -> filtered -> AI-assessed -> qualified), per-reason skip counts, charged events by type, free-tier products used and remaining, whether a budget limit was reached, webhook delivery counts and the dedupe store size.

# 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 = {
    "queries": [
        "silicone phone case"
    ],
    "goalDescription": "Soft silicone phone cases for iPhone 15 / 16 to sell on Amazon at $14.99 — factory-direct, 200 pieces per colour to start",
    "maxDiscoveryChargeUsd": 0.5,
    "advancedOptions": {},
    "clients": [
        {
            "name": "Acme Pets",
            "queries": [
                "dog chew toy"
            ],
            "orderQuantity": 200,
            "targetSellPriceUsd": 12.99,
            "notifyEmail": "acme-team@example.com"
        },
        {
            "name": "Bloom Kitchen",
            "queries": [
                "silicone spatula"
            ],
            "orderQuantity": 500,
            "targetSellPriceUsd": 9.99,
            "notifyEmail": "bloom-team@example.com"
        }
    ],
    "sourceMode": "list",
    "maxProductsPerQuery": 100,
    "itemsList": [
        {
            "offer_id": "100000000001",
            "sample": true,
            "title": "适用iPhone15/16液态硅胶手机壳 全包防摔软壳 工厂直销",
            "image_url": "https://example.com/sample/1688-silicone-case-factory-photo.jpg",
            "price_cny": 5.2,
            "price_tiers": [
                {
                    "min_quantity": 2,
                    "max_quantity": 199,
                    "price_cny": 6.8,
                    "unit": "个"
                },
                {
                    "min_quantity": 200,
                    "max_quantity": 999,
                    "price_cny": 5.9,
                    "unit": "个"
                },
                {
                    "min_quantity": 1000,
                    "max_quantity": null,
                    "price_cny": 5.2,
                    "unit": "个"
                }
            ],
            "minimum_order_quantity": 2,
            "minimum_order_unit": "个",
            "booked_count": 2300,
            "repurchase_rate_percent": 34,
            "supplier_company_name": "深圳市示例硅胶制品有限公司 (sample)",
            "member_id": "b2b-sample0001",
            "supplier_business_type": "生产厂家",
            "supplier_years_on_platform": 9,
            "supplier_factory_inspected": true,
            "supplier_is_super_factory": false,
            "composite_score": "4.6",
            "goods_score": "4.7",
            "logistics_score": "4.5",
            "dispute_score": "4.8",
            "return_score": "4.4",
            "consultation_score": "4.6",
            "product_badges": [
                "认证工厂",
                "实力商家"
            ],
            "service_tags": [
                "退货包运费",
                "48小时发货"
            ],
            "province": "广东",
            "city": "深圳市",
            "query": "silicone phone case",
            "login_id": "示例硅胶制品 (sample)"
        },
        {
            "offer_id": "100000000002",
            "sample": true,
            "title": "iPhone16ProMax液态硅胶手机壳 镜头全包亲肤 跨境专供 一件代发",
            "image_url": "https://example.com/sample/1688-silicone-case-factory-photo.jpg",
            "price_cny": 8.9,
            "price_tiers": [
                {
                    "min_quantity": 100,
                    "max_quantity": 999,
                    "price_cny": 9.8,
                    "unit": "件"
                },
                {
                    "min_quantity": 1000,
                    "max_quantity": null,
                    "price_cny": 8.9,
                    "unit": "件"
                }
            ],
            "minimum_order_quantity": 100,
            "minimum_order_unit": "件",
            "booked_count": 5200,
            "repurchase_rate_percent": 41,
            "supplier_company_name": "广州示例数码配件厂 (sample)",
            "member_id": "b2b-sample0002",
            "supplier_business_type": "生产厂家",
            "supplier_years_on_platform": 12,
            "supplier_factory_inspected": true,
            "supplier_is_super_factory": true,
            "composite_score": "4.8",
            "goods_score": "4.8",
            "logistics_score": "4.7",
            "dispute_score": "4.9",
            "return_score": "4.6",
            "consultation_score": "4.8",
            "product_badges": [
                "超级工厂",
                "认证工厂"
            ],
            "service_tags": [
                "先采后付",
                "7天无理由退货"
            ],
            "province": "广东",
            "city": "广州市",
            "query": "silicone phone case",
            "login_id": "示例数码配件 (sample)"
        },
        {
            "offer_id": "100000000003",
            "sample": true,
            "title": "液态硅胶手机壳适用苹果16 磁吸纯色 支持定制LOGO",
            "price_cny": 6.6,
            "price_tiers": [
                {
                    "min_quantity": 50,
                    "max_quantity": 499,
                    "price_cny": 7.5,
                    "unit": "个"
                },
                {
                    "min_quantity": 500,
                    "max_quantity": null,
                    "price_cny": 6.6,
                    "unit": "个"
                }
            ],
            "minimum_order_quantity": 50,
            "minimum_order_unit": "个",
            "booked_count": 860,
            "repurchase_rate_percent": 22,
            "supplier_company_name": "东莞示例塑胶科技有限公司 (sample)",
            "member_id": "b2b-sample0003",
            "supplier_business_type": "生产厂家",
            "supplier_years_on_platform": 5,
            "supplier_factory_inspected": false,
            "supplier_is_super_factory": false,
            "composite_score": "4.3",
            "goods_score": "4.3",
            "logistics_score": "4.1",
            "dispute_score": "4.4",
            "return_score": "4.0",
            "consultation_score": "4.2",
            "product_badges": [
                "源头工厂",
                "支持定制"
            ],
            "service_tags": [
                "48小时发货"
            ],
            "province": "广东",
            "city": "东莞市",
            "query": "silicone phone case"
        },
        {
            "offer_id": "100000000004",
            "sample": true,
            "title": "厂家直供硅胶手机壳 适用iPhone15 清仓价",
            "price_cny": 1,
            "price_tiers": [
                {
                    "min_quantity": 1,
                    "max_quantity": null,
                    "price_cny": 1,
                    "unit": "个"
                }
            ],
            "minimum_order_quantity": 1,
            "minimum_order_unit": "个",
            "booked_count": 3000,
            "repurchase_rate_percent": 18,
            "supplier_company_name": "金华示例日用品厂 (sample)",
            "member_id": "b2b-sample0004",
            "supplier_business_type": "生产厂家",
            "supplier_years_on_platform": 6,
            "supplier_factory_inspected": false,
            "supplier_is_super_factory": false,
            "composite_score": "4.1",
            "goods_score": "4.0",
            "logistics_score": "4.0",
            "dispute_score": "4.1",
            "return_score": "3.9",
            "consultation_score": "4.0",
            "product_badges": [
                "工厂直销"
            ],
            "service_tags": [
                "包邮"
            ],
            "province": "浙江",
            "city": "金华市",
            "query": "silicone phone case"
        },
        {
            "offer_id": "100000000005",
            "sample": true,
            "title": "跨境爆款手机壳硅胶 适用iPhone 批发",
            "price_cny": 3.8,
            "price_tiers": [
                {
                    "min_quantity": 10,
                    "max_quantity": 99,
                    "price_cny": 4.2,
                    "unit": "个"
                },
                {
                    "min_quantity": 100,
                    "max_quantity": null,
                    "price_cny": 3.8,
                    "unit": "个"
                }
            ],
            "minimum_order_quantity": 10,
            "minimum_order_unit": "个",
            "booked_count": 120,
            "repurchase_rate_percent": 9,
            "supplier_company_name": "义乌市示例贸易商行 (sample)",
            "member_id": "b2b-sample0005",
            "supplier_business_type": "经销批发",
            "supplier_years_on_platform": 3,
            "supplier_factory_inspected": false,
            "supplier_is_super_factory": false,
            "composite_score": "3.6",
            "goods_score": "2.8",
            "logistics_score": "3.2",
            "dispute_score": "3.5",
            "return_score": "3.4",
            "consultation_score": "3.6",
            "product_badges": [],
            "service_tags": [
                "7天无理由退货"
            ],
            "province": "浙江",
            "city": "义乌市",
            "query": "silicone phone case"
        },
        {
            "offer_id": "100000000006",
            "sample": true,
            "title": "硅胶手机支架 桌面懒人支架 可折叠",
            "price_cny": 2.9,
            "price_tiers": [
                {
                    "min_quantity": 20,
                    "max_quantity": 199,
                    "price_cny": 3.3,
                    "unit": "个"
                },
                {
                    "min_quantity": 200,
                    "max_quantity": null,
                    "price_cny": 2.9,
                    "unit": "个"
                }
            ],
            "minimum_order_quantity": 20,
            "minimum_order_unit": "个",
            "booked_count": 1500,
            "repurchase_rate_percent": 25,
            "supplier_company_name": "宁波示例家居用品有限公司 (sample)",
            "member_id": "b2b-sample0006",
            "supplier_business_type": "生产厂家",
            "supplier_years_on_platform": 7,
            "supplier_factory_inspected": true,
            "supplier_is_super_factory": false,
            "composite_score": "4.4",
            "goods_score": "4.5",
            "logistics_score": "4.3",
            "dispute_score": "4.5",
            "return_score": "4.2",
            "consultation_score": "4.4",
            "product_badges": [
                "认证工厂"
            ],
            "service_tags": [
                "退货包运费"
            ],
            "province": "浙江",
            "city": "宁波市",
            "query": "silicone phone case"
        }
    ],
    "discoveryInput": {}
};

// Run the Actor and wait for it to finish
const run = await client.actor("rich_minds/1688-supplier-finder-ai").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 = {
    "queries": ["silicone phone case"],
    "goalDescription": "Soft silicone phone cases for iPhone 15 / 16 to sell on Amazon at $14.99 — factory-direct, 200 pieces per colour to start",
    "maxDiscoveryChargeUsd": 0.5,
    "advancedOptions": {},
    "clients": [
        {
            "name": "Acme Pets",
            "queries": ["dog chew toy"],
            "orderQuantity": 200,
            "targetSellPriceUsd": 12.99,
            "notifyEmail": "acme-team@example.com",
        },
        {
            "name": "Bloom Kitchen",
            "queries": ["silicone spatula"],
            "orderQuantity": 500,
            "targetSellPriceUsd": 9.99,
            "notifyEmail": "bloom-team@example.com",
        },
    ],
    "sourceMode": "list",
    "maxProductsPerQuery": 100,
    "itemsList": [
        {
            "offer_id": "100000000001",
            "sample": True,
            "title": "适用iPhone15/16液态硅胶手机壳 全包防摔软壳 工厂直销",
            "image_url": "https://example.com/sample/1688-silicone-case-factory-photo.jpg",
            "price_cny": 5.2,
            "price_tiers": [
                {
                    "min_quantity": 2,
                    "max_quantity": 199,
                    "price_cny": 6.8,
                    "unit": "个",
                },
                {
                    "min_quantity": 200,
                    "max_quantity": 999,
                    "price_cny": 5.9,
                    "unit": "个",
                },
                {
                    "min_quantity": 1000,
                    "max_quantity": None,
                    "price_cny": 5.2,
                    "unit": "个",
                },
            ],
            "minimum_order_quantity": 2,
            "minimum_order_unit": "个",
            "booked_count": 2300,
            "repurchase_rate_percent": 34,
            "supplier_company_name": "深圳市示例硅胶制品有限公司 (sample)",
            "member_id": "b2b-sample0001",
            "supplier_business_type": "生产厂家",
            "supplier_years_on_platform": 9,
            "supplier_factory_inspected": True,
            "supplier_is_super_factory": False,
            "composite_score": "4.6",
            "goods_score": "4.7",
            "logistics_score": "4.5",
            "dispute_score": "4.8",
            "return_score": "4.4",
            "consultation_score": "4.6",
            "product_badges": [
                "认证工厂",
                "实力商家",
            ],
            "service_tags": [
                "退货包运费",
                "48小时发货",
            ],
            "province": "广东",
            "city": "深圳市",
            "query": "silicone phone case",
            "login_id": "示例硅胶制品 (sample)",
        },
        {
            "offer_id": "100000000002",
            "sample": True,
            "title": "iPhone16ProMax液态硅胶手机壳 镜头全包亲肤 跨境专供 一件代发",
            "image_url": "https://example.com/sample/1688-silicone-case-factory-photo.jpg",
            "price_cny": 8.9,
            "price_tiers": [
                {
                    "min_quantity": 100,
                    "max_quantity": 999,
                    "price_cny": 9.8,
                    "unit": "件",
                },
                {
                    "min_quantity": 1000,
                    "max_quantity": None,
                    "price_cny": 8.9,
                    "unit": "件",
                },
            ],
            "minimum_order_quantity": 100,
            "minimum_order_unit": "件",
            "booked_count": 5200,
            "repurchase_rate_percent": 41,
            "supplier_company_name": "广州示例数码配件厂 (sample)",
            "member_id": "b2b-sample0002",
            "supplier_business_type": "生产厂家",
            "supplier_years_on_platform": 12,
            "supplier_factory_inspected": True,
            "supplier_is_super_factory": True,
            "composite_score": "4.8",
            "goods_score": "4.8",
            "logistics_score": "4.7",
            "dispute_score": "4.9",
            "return_score": "4.6",
            "consultation_score": "4.8",
            "product_badges": [
                "超级工厂",
                "认证工厂",
            ],
            "service_tags": [
                "先采后付",
                "7天无理由退货",
            ],
            "province": "广东",
            "city": "广州市",
            "query": "silicone phone case",
            "login_id": "示例数码配件 (sample)",
        },
        {
            "offer_id": "100000000003",
            "sample": True,
            "title": "液态硅胶手机壳适用苹果16 磁吸纯色 支持定制LOGO",
            "price_cny": 6.6,
            "price_tiers": [
                {
                    "min_quantity": 50,
                    "max_quantity": 499,
                    "price_cny": 7.5,
                    "unit": "个",
                },
                {
                    "min_quantity": 500,
                    "max_quantity": None,
                    "price_cny": 6.6,
                    "unit": "个",
                },
            ],
            "minimum_order_quantity": 50,
            "minimum_order_unit": "个",
            "booked_count": 860,
            "repurchase_rate_percent": 22,
            "supplier_company_name": "东莞示例塑胶科技有限公司 (sample)",
            "member_id": "b2b-sample0003",
            "supplier_business_type": "生产厂家",
            "supplier_years_on_platform": 5,
            "supplier_factory_inspected": False,
            "supplier_is_super_factory": False,
            "composite_score": "4.3",
            "goods_score": "4.3",
            "logistics_score": "4.1",
            "dispute_score": "4.4",
            "return_score": "4.0",
            "consultation_score": "4.2",
            "product_badges": [
                "源头工厂",
                "支持定制",
            ],
            "service_tags": ["48小时发货"],
            "province": "广东",
            "city": "东莞市",
            "query": "silicone phone case",
        },
        {
            "offer_id": "100000000004",
            "sample": True,
            "title": "厂家直供硅胶手机壳 适用iPhone15 清仓价",
            "price_cny": 1,
            "price_tiers": [{
                    "min_quantity": 1,
                    "max_quantity": None,
                    "price_cny": 1,
                    "unit": "个",
                }],
            "minimum_order_quantity": 1,
            "minimum_order_unit": "个",
            "booked_count": 3000,
            "repurchase_rate_percent": 18,
            "supplier_company_name": "金华示例日用品厂 (sample)",
            "member_id": "b2b-sample0004",
            "supplier_business_type": "生产厂家",
            "supplier_years_on_platform": 6,
            "supplier_factory_inspected": False,
            "supplier_is_super_factory": False,
            "composite_score": "4.1",
            "goods_score": "4.0",
            "logistics_score": "4.0",
            "dispute_score": "4.1",
            "return_score": "3.9",
            "consultation_score": "4.0",
            "product_badges": ["工厂直销"],
            "service_tags": ["包邮"],
            "province": "浙江",
            "city": "金华市",
            "query": "silicone phone case",
        },
        {
            "offer_id": "100000000005",
            "sample": True,
            "title": "跨境爆款手机壳硅胶 适用iPhone 批发",
            "price_cny": 3.8,
            "price_tiers": [
                {
                    "min_quantity": 10,
                    "max_quantity": 99,
                    "price_cny": 4.2,
                    "unit": "个",
                },
                {
                    "min_quantity": 100,
                    "max_quantity": None,
                    "price_cny": 3.8,
                    "unit": "个",
                },
            ],
            "minimum_order_quantity": 10,
            "minimum_order_unit": "个",
            "booked_count": 120,
            "repurchase_rate_percent": 9,
            "supplier_company_name": "义乌市示例贸易商行 (sample)",
            "member_id": "b2b-sample0005",
            "supplier_business_type": "经销批发",
            "supplier_years_on_platform": 3,
            "supplier_factory_inspected": False,
            "supplier_is_super_factory": False,
            "composite_score": "3.6",
            "goods_score": "2.8",
            "logistics_score": "3.2",
            "dispute_score": "3.5",
            "return_score": "3.4",
            "consultation_score": "3.6",
            "product_badges": [],
            "service_tags": ["7天无理由退货"],
            "province": "浙江",
            "city": "义乌市",
            "query": "silicone phone case",
        },
        {
            "offer_id": "100000000006",
            "sample": True,
            "title": "硅胶手机支架 桌面懒人支架 可折叠",
            "price_cny": 2.9,
            "price_tiers": [
                {
                    "min_quantity": 20,
                    "max_quantity": 199,
                    "price_cny": 3.3,
                    "unit": "个",
                },
                {
                    "min_quantity": 200,
                    "max_quantity": None,
                    "price_cny": 2.9,
                    "unit": "个",
                },
            ],
            "minimum_order_quantity": 20,
            "minimum_order_unit": "个",
            "booked_count": 1500,
            "repurchase_rate_percent": 25,
            "supplier_company_name": "宁波示例家居用品有限公司 (sample)",
            "member_id": "b2b-sample0006",
            "supplier_business_type": "生产厂家",
            "supplier_years_on_platform": 7,
            "supplier_factory_inspected": True,
            "supplier_is_super_factory": False,
            "composite_score": "4.4",
            "goods_score": "4.5",
            "logistics_score": "4.3",
            "dispute_score": "4.5",
            "return_score": "4.2",
            "consultation_score": "4.4",
            "product_badges": ["认证工厂"],
            "service_tags": ["退货包运费"],
            "province": "浙江",
            "city": "宁波市",
            "query": "silicone phone case",
        },
    ],
    "discoveryInput": {},
}

# Run the Actor and wait for it to finish
run = client.actor("rich_minds/1688-supplier-finder-ai").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 '{
  "queries": [
    "silicone phone case"
  ],
  "goalDescription": "Soft silicone phone cases for iPhone 15 / 16 to sell on Amazon at $14.99 — factory-direct, 200 pieces per colour to start",
  "maxDiscoveryChargeUsd": 0.5,
  "advancedOptions": {},
  "clients": [
    {
      "name": "Acme Pets",
      "queries": [
        "dog chew toy"
      ],
      "orderQuantity": 200,
      "targetSellPriceUsd": 12.99,
      "notifyEmail": "acme-team@example.com"
    },
    {
      "name": "Bloom Kitchen",
      "queries": [
        "silicone spatula"
      ],
      "orderQuantity": 500,
      "targetSellPriceUsd": 9.99,
      "notifyEmail": "bloom-team@example.com"
    }
  ],
  "sourceMode": "list",
  "maxProductsPerQuery": 100,
  "itemsList": [
    {
      "offer_id": "100000000001",
      "sample": true,
      "title": "适用iPhone15/16液态硅胶手机壳 全包防摔软壳 工厂直销",
      "image_url": "https://example.com/sample/1688-silicone-case-factory-photo.jpg",
      "price_cny": 5.2,
      "price_tiers": [
        {
          "min_quantity": 2,
          "max_quantity": 199,
          "price_cny": 6.8,
          "unit": "个"
        },
        {
          "min_quantity": 200,
          "max_quantity": 999,
          "price_cny": 5.9,
          "unit": "个"
        },
        {
          "min_quantity": 1000,
          "max_quantity": null,
          "price_cny": 5.2,
          "unit": "个"
        }
      ],
      "minimum_order_quantity": 2,
      "minimum_order_unit": "个",
      "booked_count": 2300,
      "repurchase_rate_percent": 34,
      "supplier_company_name": "深圳市示例硅胶制品有限公司 (sample)",
      "member_id": "b2b-sample0001",
      "supplier_business_type": "生产厂家",
      "supplier_years_on_platform": 9,
      "supplier_factory_inspected": true,
      "supplier_is_super_factory": false,
      "composite_score": "4.6",
      "goods_score": "4.7",
      "logistics_score": "4.5",
      "dispute_score": "4.8",
      "return_score": "4.4",
      "consultation_score": "4.6",
      "product_badges": [
        "认证工厂",
        "实力商家"
      ],
      "service_tags": [
        "退货包运费",
        "48小时发货"
      ],
      "province": "广东",
      "city": "深圳市",
      "query": "silicone phone case",
      "login_id": "示例硅胶制品 (sample)"
    },
    {
      "offer_id": "100000000002",
      "sample": true,
      "title": "iPhone16ProMax液态硅胶手机壳 镜头全包亲肤 跨境专供 一件代发",
      "image_url": "https://example.com/sample/1688-silicone-case-factory-photo.jpg",
      "price_cny": 8.9,
      "price_tiers": [
        {
          "min_quantity": 100,
          "max_quantity": 999,
          "price_cny": 9.8,
          "unit": "件"
        },
        {
          "min_quantity": 1000,
          "max_quantity": null,
          "price_cny": 8.9,
          "unit": "件"
        }
      ],
      "minimum_order_quantity": 100,
      "minimum_order_unit": "件",
      "booked_count": 5200,
      "repurchase_rate_percent": 41,
      "supplier_company_name": "广州示例数码配件厂 (sample)",
      "member_id": "b2b-sample0002",
      "supplier_business_type": "生产厂家",
      "supplier_years_on_platform": 12,
      "supplier_factory_inspected": true,
      "supplier_is_super_factory": true,
      "composite_score": "4.8",
      "goods_score": "4.8",
      "logistics_score": "4.7",
      "dispute_score": "4.9",
      "return_score": "4.6",
      "consultation_score": "4.8",
      "product_badges": [
        "超级工厂",
        "认证工厂"
      ],
      "service_tags": [
        "先采后付",
        "7天无理由退货"
      ],
      "province": "广东",
      "city": "广州市",
      "query": "silicone phone case",
      "login_id": "示例数码配件 (sample)"
    },
    {
      "offer_id": "100000000003",
      "sample": true,
      "title": "液态硅胶手机壳适用苹果16 磁吸纯色 支持定制LOGO",
      "price_cny": 6.6,
      "price_tiers": [
        {
          "min_quantity": 50,
          "max_quantity": 499,
          "price_cny": 7.5,
          "unit": "个"
        },
        {
          "min_quantity": 500,
          "max_quantity": null,
          "price_cny": 6.6,
          "unit": "个"
        }
      ],
      "minimum_order_quantity": 50,
      "minimum_order_unit": "个",
      "booked_count": 860,
      "repurchase_rate_percent": 22,
      "supplier_company_name": "东莞示例塑胶科技有限公司 (sample)",
      "member_id": "b2b-sample0003",
      "supplier_business_type": "生产厂家",
      "supplier_years_on_platform": 5,
      "supplier_factory_inspected": false,
      "supplier_is_super_factory": false,
      "composite_score": "4.3",
      "goods_score": "4.3",
      "logistics_score": "4.1",
      "dispute_score": "4.4",
      "return_score": "4.0",
      "consultation_score": "4.2",
      "product_badges": [
        "源头工厂",
        "支持定制"
      ],
      "service_tags": [
        "48小时发货"
      ],
      "province": "广东",
      "city": "东莞市",
      "query": "silicone phone case"
    },
    {
      "offer_id": "100000000004",
      "sample": true,
      "title": "厂家直供硅胶手机壳 适用iPhone15 清仓价",
      "price_cny": 1,
      "price_tiers": [
        {
          "min_quantity": 1,
          "max_quantity": null,
          "price_cny": 1,
          "unit": "个"
        }
      ],
      "minimum_order_quantity": 1,
      "minimum_order_unit": "个",
      "booked_count": 3000,
      "repurchase_rate_percent": 18,
      "supplier_company_name": "金华示例日用品厂 (sample)",
      "member_id": "b2b-sample0004",
      "supplier_business_type": "生产厂家",
      "supplier_years_on_platform": 6,
      "supplier_factory_inspected": false,
      "supplier_is_super_factory": false,
      "composite_score": "4.1",
      "goods_score": "4.0",
      "logistics_score": "4.0",
      "dispute_score": "4.1",
      "return_score": "3.9",
      "consultation_score": "4.0",
      "product_badges": [
        "工厂直销"
      ],
      "service_tags": [
        "包邮"
      ],
      "province": "浙江",
      "city": "金华市",
      "query": "silicone phone case"
    },
    {
      "offer_id": "100000000005",
      "sample": true,
      "title": "跨境爆款手机壳硅胶 适用iPhone 批发",
      "price_cny": 3.8,
      "price_tiers": [
        {
          "min_quantity": 10,
          "max_quantity": 99,
          "price_cny": 4.2,
          "unit": "个"
        },
        {
          "min_quantity": 100,
          "max_quantity": null,
          "price_cny": 3.8,
          "unit": "个"
        }
      ],
      "minimum_order_quantity": 10,
      "minimum_order_unit": "个",
      "booked_count": 120,
      "repurchase_rate_percent": 9,
      "supplier_company_name": "义乌市示例贸易商行 (sample)",
      "member_id": "b2b-sample0005",
      "supplier_business_type": "经销批发",
      "supplier_years_on_platform": 3,
      "supplier_factory_inspected": false,
      "supplier_is_super_factory": false,
      "composite_score": "3.6",
      "goods_score": "2.8",
      "logistics_score": "3.2",
      "dispute_score": "3.5",
      "return_score": "3.4",
      "consultation_score": "3.6",
      "product_badges": [],
      "service_tags": [
        "7天无理由退货"
      ],
      "province": "浙江",
      "city": "义乌市",
      "query": "silicone phone case"
    },
    {
      "offer_id": "100000000006",
      "sample": true,
      "title": "硅胶手机支架 桌面懒人支架 可折叠",
      "price_cny": 2.9,
      "price_tiers": [
        {
          "min_quantity": 20,
          "max_quantity": 199,
          "price_cny": 3.3,
          "unit": "个"
        },
        {
          "min_quantity": 200,
          "max_quantity": null,
          "price_cny": 2.9,
          "unit": "个"
        }
      ],
      "minimum_order_quantity": 20,
      "minimum_order_unit": "个",
      "booked_count": 1500,
      "repurchase_rate_percent": 25,
      "supplier_company_name": "宁波示例家居用品有限公司 (sample)",
      "member_id": "b2b-sample0006",
      "supplier_business_type": "生产厂家",
      "supplier_years_on_platform": 7,
      "supplier_factory_inspected": true,
      "supplier_is_super_factory": false,
      "composite_score": "4.4",
      "goods_score": "4.5",
      "logistics_score": "4.3",
      "dispute_score": "4.5",
      "return_score": "4.2",
      "consultation_score": "4.4",
      "product_badges": [
        "认证工厂"
      ],
      "service_tags": [
        "退货包运费"
      ],
      "province": "浙江",
      "city": "宁波市",
      "query": "silicone phone case"
    }
  ],
  "discoveryInput": {}
}' |
apify call rich_minds/1688-supplier-finder-ai --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,rich_minds/1688-supplier-finder-ai"
        }
    }
}
```

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/AWPXzs0F9jcG13jDt/builds/c5kbt81RUn5nZ3ScM/openapi.json
