# 1688 Scraper - Wholesale Products, Prices, MOQ & Suppliers (`piotrv1001/1688-listings-scraper`) Actor

Scrape 1688.com wholesale products and suppliers by keyword, search link or offer ID. Filter by price, MOQ, supplier city and type; sort by price. Get tiered prices, sales, supplier rating and service scores, factory inspection, manufacturer vs wholesaler, stock, SKU options, attributes and images.

- **URL**: https://apify.com/piotrv1001/1688-listings-scraper.md
- **Developed by:** [FalconScrape](https://apify.com/piotrv1001) (community)
- **Categories:** E-commerce, Automation, Developer tools
- **Features:** Limited permissions
- **Stats:** 325 total users, 36 monthly users, 93.6% runs succeeded, 3 bookmarks
- **User rating**: 5.00 out of 5 stars

## Pricing

from $2.00 / 1,000 product listings

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 Scraper: Wholesale Prices, MOQ and Chinese Suppliers

Export **1688.com search results** as clean JSON, CSV or Excel: wholesale prices, MOQ, tiered price ladders, sales and a full supplier profile on every row. This **1688 scraper** searches 1688, Alibaba's domestic China wholesale marketplace and the original source of many products sold on Alibaba.com, by English or Chinese keyword or search link, or fetches known offers by ID or link. Use it as a 1688 API alternative for sourcing, dropshipping research and finding Chinese suppliers and factories.

### 🎯 1688 Wholesale Use Cases

- **Find China wholesale suppliers**: search a product and get every 1688 supplier with its city, years on 1688, rating, repurchase rate and badges.
- **1688 dropshipping and samples**: set the maximum MOQ to 1 to keep only suppliers that sell single units.
- **Compare 1688 vs Alibaba prices**: run the same keywords here and on Alibaba.com to see domestic wholesale prices next to export prices.
- **Find the factory behind a product**: keep manufacturers with an on-site factory inspection and skip the resellers.
- **Sourcing agent workflows**: build shortlists for clients by price range, MOQ and supplier city (Shenzhen, Yiwu, Guangzhou …).
- **1688 wholesale price monitoring**: schedule the same search and track prices, MOQs and sales volumes over time.

### ✨ Features

- **Search filters**: sort by price, set a price range in CNY, cap the minimum order quantity, pick the supplier's city (Shenzhen, Yiwu, Guangzhou …) or province (Guangdong, Zhejiang …) and the supplier type (manufacturer, wholesaler, inspected factory, verified merchant).
- **Supplier data on every row**: manufacturer vs wholesaler, factory and business inspection, 1688 supplier rating with five service sub-scores, years on 1688, repurchase rates and buyer protections, with no detail page needed.
- **Sales signals**: orders, total units sold, units sold in the last 30 days and 30-day sales value, plus a flag on paid (sponsored) placements.
- **Tiered wholesale prices**: the volume-discount ladder, straight from the search card when it shows one.
- **English or Chinese keywords**: `wireless earbuds` and `蓝牙耳机` both work; each keyword is searched on its own.
- **Paste links or IDs**: offer links or IDs skip search, and a 1688 search link runs its keyword with the price, MOQ, city and sort filters set in the link. Several keywords or IDs pasted on one line are split (`yoga mat, dog leash`).
- **Full offer pages on demand**: attribute matrix, stock, SKU options, every image, video, after-sales guarantees and logistics with `includeDetails`.
- **Fair billing**: an offer found twice in one run is saved once, and rows outside your price or MOQ filter are dropped before saving, so you never pay for them.
- **Stops at your budget**: the run ends cleanly at your maximum cost per run and tells you so.

### 🛠️ How It Works

1. **Enter keywords or offers**: Chinese (`蓝牙耳机`) or English (`wireless earbuds`), or offer links and IDs.
2. **Narrow the search (optional)**: price sort, price range, maximum MOQ, supplier city and type, and whether to open each offer page.
3. **Run it** and download the results as JSON, CSV or Excel, or pull them through the API.

### ⚙️ Input

| Field | Type | Default | Description |
|---|---|---|---|
| `keywords` | string\[] | `["iphone case"]` | Search terms in Chinese or English, or 1688 search links (their price, MOQ, city and price-sort filters are kept). One per line; `a, b` on one line is two keywords. Each keyword is paginated on its own and searched once, whatever its case. An offer ID or offer link here opens that offer. Shop and category pages are not supported. |
| `offerIds` | string\[] | `[]` | Specific 1688 offers, as an ID (`1095091629248`) or a link (`detail.1688.com/offer/1095091629248.html`). Skips search; filters do not apply. |
| `maxItems` | integer | `50` | Cap on rows saved across all keywords. `0` = no cap of ours (up to 2,000 per keyword, billed per row). |
| `maxPagesPerKeyword` | integer | none | Optional limit of search pages per keyword (50 offers each). Empty = continue until `maxItems` or 1688's limit of 2,000 results per keyword. |
| `includeDetails` | boolean | `false` | Open each offer page for the attribute matrix, images, after-sales guarantees and logistics. |
| `sortBy` | string | `relevance` | `relevance`, `price-asc` or `price-desc`. |
| `minPrice` / `maxPrice` | number | none | Price range in CNY, e.g. `10` and `20`. |
| `maxMoq` | integer | none | Only offers you can order in this quantity or less, e.g. `1` for single-unit suppliers (dropshipping, samples). |
| `supplierCity` | string | none | Supplier's city. English names of the main sourcing hubs work (Shenzhen, Guangzhou, Dongguan, Yiwu, Ningbo, Shantou, Quanzhou …); any other city in Chinese, e.g. `深圳`. A province typed here filters on the province instead. |
| `supplierProvince` | string | none | Supplier's province, in English or Chinese (`Zhejiang`, `浙江`). Checked on each row: only matching rows are saved and charged, and the run reads more pages to reach `maxItems`. |
| `supplierType` | string | `any` | `manufacturer`, `wholesaler`, `inspected-factory` (深度验厂) or `verified-merchant` (实商). Checked on each row: only matching rows are saved and charged. |

Example: earbuds from Shenzhen suppliers, 10–30 CNY, buyable from 2 units, cheapest first:

```json
{
    "keywords": ["wireless earbuds", "蓝牙耳机"],
    "sortBy": "price-asc",
    "minPrice": 10,
    "maxPrice": 30,
    "maxMoq": 2,
    "supplierCity": "Shenzhen",
    "maxItems": 200,
    "includeDetails": false
}
```

**How the filters behave:** 1688 applies them on its side, using the price at the minimum order quantity. Because of that, a row can have a `priceFrom` (bulk tier) or `promoPrice` below `minPrice` and still match. The Actor re-checks every row against `minPrice`, `maxPrice` and `maxMoq` and drops anything outside them before saving. A row is kept when its price range, from `promoPrice` or `priceFrom` up to `priceTo`, overlaps your range. That way you are never charged for an off-filter row. The run may scan a few more pages to reach `maxItems`. The city filter is also checked on each row: 1688 lets other cities through (and, for a city it cannot match, returns a few unrelated offers), so only rows in that city, or for county-level cities such as Yiwu in the parent city (金华), are saved and charged.

**Coming from another 1688 Actor?** Their field names work too: `queries`, `query`, `startUrls` and `productUrls`, `maxResults` and `maxProducts` (per keyword), `priceMin`, `priceMax`, `minOrderQuantity` (maximum MOQ), `city`, `province`, `merchantType: verifiedMerchant` and `sortType: va_price_asc` / `va_price_desc`.

### 💰 Pricing

Pay only for the rows you get. No monthly rental and no separate compute bill.

| Event | Price | What you get |
|---|---|---|
| **Product listing** | $0.002 per row ($2.00 per 1,000) | One search row (`includeDetails: false`): prices, MOQ, tiers when shown, sales, supplier rating and scores, business type, inspections, badges, seller IDs. |
| **Item detail** | $0.004 per row ($4.00 per 1,000) | One offer row (`includeDetails: true`, or an offer ID): the search row plus the price range, attribute matrix, stock, SKU options, every image, video, after-sales guarantees and logistics. |
| **Actor start** | $0.00005 per run | Charged once when the run starts (one event per GB of memory; the default memory counts as one). |

Examples:

- 50 search rows for one keyword = $0.10 + $0.00005 start.
- 1,000 search rows across five keywords = $2.00 + $0.00005 start.
- 200 offer rows with full offer pages = $0.80 + $0.00005 start.

Rows dropped by your price, MOQ or supplier type filter and offers repeated across pages are never charged.

### 📊 Sample Output Data

A search row (`includeDetails: false`) from a real run for `iphone case`:

```json
{
    "offerId": "723844878303",
    "keyword": "iphone case",
    "title": "适用iPhone18Pro亚克力内防摔透明17手机壳苹果16大孔XR防摔壳14",
    "priceFrom": 1.8,
    "priceTo": 2,
    "unit": "个",
    "minOrderQuantity": 1,
    "soldCount": "成交8156笔",
    "location": "深圳市",
    "repurchaseRate": "34%",
    "sellerTenure": "5年",
    "sellerCompany": "深圳市金钻甲科技有限公司",
    "supplierBadges": ["诚信通5年"],
    "image": "https://cbu01.alicdn.com/img/ibank/O1CN01Dr5UXH1v7Il5Dm7UK_!!2212968606125-0-cib.jpg",
    "url": "https://m.1688.com/offer/723844878303.html",
    "scrapedAt": "2026-10-20T06:04:30.182Z",
    "orderCount": 8156,
    "unitsSold": 186634,
    "unitsSold30Days": 2636,
    "salesValue30DaysCny": 5000,
    "productRepurchaseRate": "26%",
    "tierPrices": [
        { "price": 2, "beginAmount": 1 },
        { "price": 1.9, "beginAmount": 100 },
        { "price": 1.8, "beginAmount": 1000 }
    ],
    "isSponsored": true,
    "businessType": "manufacturer",
    "factoryInspected": false,
    "businessInspected": false,
    "buyerProtections": ["7天包换", "48小时发货", "诚e赊"],
    "supplierRating": 5,
    "serviceScores": { "consultation": 4, "product": 4, "logistics": 4, "disputes": 5, "returns": 4.33 },
    "sellerYears": 5,
    "freightInsurance": false,
    "province": "广东",
    "sellerLoginId": "金钻甲科技",
    "sellerUserId": "2212968606125",
    "sellerMemberId": "b2b-22129686061252fa5d",
    "sellerWinportUrl": "https://m.1688.com/winport/b2b-22129686061252fa5d.html?__existtitle__=1"
}
```

`tierPrices` is the volume-discount ladder: here 2 CNY from 1 unit, 1.8 CNY from 1,000. `salesValue30DaysCny` is a floor, because 1688 shows ranges such as 1万+. `isSponsored` marks paid placements, so filter it out to see 1688's organic ranking.

An offer row (`includeDetails: true`) keeps the search-row fields and adds the offer page (trimmed here):

```json
{
    "offerId": "1080618692439",
    "keyword": "手机壳",
    "title": "适用苹果Duo折叠屏透明PC手机壳 iphone Duo磨砂半透防摔保护壳套",
    "priceFrom": 5,
    "priceTo": 6.5,
    "minOrderQuantity": 3,
    "attributes": [
        { "name": "材质", "value": "PC" },
        { "name": "功能", "value": "防摔" },
        { "name": "款式", "value": "透明" },
        "…"
    ],
    "images": ["https://cbu01.alicdn.com/img/ibank/O1CN01gIRcZiWY6cI3thOC_!!2215594841224-0-cib.jpg", "…"],
    "services": ["退货包运费", "晚发必赔", "极速退款"],
    "logistics": { "location": "广东深圳", "deliveryLimit": "承诺25天发货", "unitWeight": 0.03 },
    "sellerCompany": "深圳市福田区荣华数码产品商行",
    "supplierRating": 4.5
}
```

### 📋 Output Fields

A **search row** has up to 39 fields. An **offer row** adds the offer page: `attributes`, `stockQuantity`, `soldOut`, `skuOptions`, `images`, `videoUrl`, `descriptionUrl`, `services`, `servicePolicy` and `logistics`. Offers requested by `offerIds` skip search, so they carry the offer-page fields. The dataset has a view for each row type.

| Field | Type | Description |
|---|---|---|
| `offerId`, `title`, `url`, `image` | string | Offer ID, title, link and main image |
| `keyword` | string | The search term this row came from |
| `priceFrom` | number | Lowest regular price (CNY): the cheapest volume tier, or the cheapest variant on offers priced per variant. No discount applied |
| `priceTo` | number | Highest regular price (CNY): the price at the minimum order, or the dearest variant |
| `promoPrice` | number | Discounted price the search card shows when 1688 runs a promotion or buyer discount on the offer (e.g. 限时价). Only when it is below `priceFrom`; may not apply to every buyer |
| `unit` | string | Unit the price is quoted in (个, 件, 条 …) |
| `minOrderQuantity` | number | **MOQ**, the minimum you can order |
| `tierPrices` | array | Volume-discount ladder, `{ price, beginAmount }` per tier, when 1688 shows one. Offers priced per variant have no ladder: their spread is in `priceFrom` / `priceTo` |
| `soldCount` | string | Sales as 1688 renders them (成交N笔) |
| `orderCount` | number | Completed orders as a number |
| `unitsSold` | number | Total units sold, as 1688 counts them for search. The offer page's 已售 figure is a different, lower count (5 of 5 offers checked on 2026-11-11). |
| `unitsSold30Days` | number | Units sold in the last 30 days |
| `salesValue30DaysCny` | number | 30-day sales value in CNY, a floor |
| `location`, `province` | string | Supplier city and province |
| `sellerCompany` | string | Registered company name |
| `businessType` | string | `manufacturer` (生产加工) or `wholesaler` (经销批发) |
| `factoryInspected` | boolean | 1688 inspected the factory on site (深度验厂) |
| `businessInspected` | boolean | 1688 verified the business (深度验商) |
| `supplierRating` | number | 1688 composite supplier rating, 0–5 |
| `serviceScores` | object | Sub-scores 0–5: `consultation`, `product`, `logistics`, `disputes`, `returns` |
| `sellerYears` / `sellerTenure` | number / string | Years on 1688, as a number and as 1688 renders it |
| `repurchaseRate` | string | Share of the shop's buyers who ordered again |
| `productRepurchaseRate` | string | Same for this product |
| `supplierBadges` | array | Badges such as 实商, 深度验厂, 诚信通N年 |
| `buyerProtections` | array | e.g. 7天包换 (7-day exchange), 48小时发货 (ships within 48 h) |
| `freightInsurance` | boolean | Shipping insurance included |
| `isSponsored` | boolean | Paid placement |
| `sellerLoginId`, `sellerUserId`, `sellerMemberId`, `sellerWinportUrl` | string | Seller IDs and storefront link |
| `categoryId` | string | 1688 category ID |
| `supportsMixedOrders` | boolean | Supplier accepts mixed orders across products (混批) |
| `stockQuantity`, `soldOut` | number / boolean | Units available to order, and whether the offer is sold out (offer rows) |
| `skuOptions` | array | Variants shown with a picture, `{ name, image }`. 1688's offer page does not expose a price per variant to anonymous visitors (offer rows) |
| `videoUrl`, `descriptionUrl` | string | Product video and the page with the seller's full description (offer rows) |
| `attributes` | array | Specification matrix, `{ name, value }` pairs (material, model, size …), about 15 per offer (offer rows) |
| `images` | array | Every image of the offer, deduplicated (offer rows) |
| `services`, `servicePolicy` | array / object | After-sales guarantees, e.g. 晚发必赔 (compensation for late dispatch), with their full descriptions (offer rows) |
| `logistics` | object | Shipping origin, dispatch commitment, unit weight (offer rows) |
| `scrapedAt` | string | ISO 8601 timestamp |

### 💡 Tips for 1688 Sourcing

- **Find factories, not resellers**: keep `businessType` = `manufacturer` with `factoryInspected` = `true` and sort by `supplierRating`.
- **Dropshipping and samples**: set `maxMoq` to `1`.
- **Sourcing hubs**: `supplierCity` narrows a keyword to its cluster: Shenzhen for electronics, Yiwu for small commodities, Guangzhou for apparel and beauty, Dongguan for hardware, Shantou for toys.
- **Chinese keywords find more**: 1688 is a Chinese-language site, so a Chinese term (`手机壳` for phone case) usually returns a wider, better-matched set than the English one.

### 🔁 Schedule and Integrate

For price and supplier monitoring, run the same search **once a week**, or **daily** for fast-moving products: each run is a dated snapshot, and together they show price, MOQ and sales changes. Set it up in Apify **Schedules**. Send the results to **Google Sheets**, **Zapier**, **Make**, **n8n** or a webhook with Apify **integrations**, so new suppliers and prices land where your sourcing team already works.

### 🤖 Use with AI Agents (MCP)

This Actor works as a tool in Claude, ChatGPT, Cursor and other MCP clients through the Apify MCP server (`https://mcp.apify.com`). An agent can find suppliers, then translate and compare them for you. It can call the Actor with:

```json
{ "keywords": ["蓝牙耳机"], "maxMoq": 2, "maxItems": 20 }
```

### ❓ 1688 API FAQ

**Does 1688 have an official API?** 1688 runs an open platform for developers, but it requires registering an app and getting approval, and it mostly serves Chinese business accounts. This Actor needs no key, account or approval: it returns the public search data a buyer sees on 1688, including supplier ratings, service scores and sales figures, as ready-to-use rows.

**Is there a 1688 in English?** 1688 is a Chinese-language site. You can search here with English keywords, and supplier names and titles come back in Chinese. Translate them in Google Sheets or with an AI agent through the MCP server.

**How do I buy from 1688?** 1688 is built for buyers inside China (Chinese payment methods and domestic shipping), so most overseas buyers order through a 1688 sourcing agent. Use this Actor to shortlist products and suppliers (price, MOQ, rating, factory inspection) and pass the offer links to your agent.

**What is the difference between 1688 and Alibaba?** Both belong to Alibaba Group. 1688 is the domestic Chinese wholesale market, priced in CNY and often cheaper; Alibaba.com is the export site for international buyers. Pair this Actor with the Alibaba Listings Scraper on the same keywords to compare.

**Do I need a 1688 account?** No.

**Why is a field missing on some rows?** Fields appear only when 1688 shows them: `tierPrices` only when the search card has a ladder, `businessType` and `productRepurchaseRate` not for every supplier, and `salesValue30DaysCny` only when there were recent sales.

**How many results can I get?** 1688 returns at most 2,000 results per keyword (40 pages of 50). For more, split the search with more keywords, price ranges or supplier cities.

**Can I paste a shop or category link?** Not here. Search links and offer links work. To find what a supplier sells, search by keyword and filter on `sellerCompany`, or use the 1688 Supplier Scraper to list suppliers by product.

**Why did a run take long or fail?** 1688 refuses requests in bursts that last minutes. The Actor retries on new IPs for up to about 10 minutes per search page, and you are only charged for rows you get. If a run still fails, try again a little later.

### 🔗 Related Scrapers

- [1688 Product Details Scraper](https://apify.com/piotrv1001/1688-product-details-scraper): the full 1688 offer page for the IDs you find here, with tiered prices, stock, SKU options, specs and the supplier.
- [1688 Supplier Scraper](https://apify.com/piotrv1001/1688-supplier-scraper): one row per supplier for a product keyword, to shortlist factories instead of offers.
- [1688 Image Search Scraper](https://apify.com/piotrv1001/1688-image-search-scraper): find 1688 offers that match a product photo, when you have an image but no keyword.
- [Alibaba Listings Scraper](https://apify.com/piotrv1001/alibaba-listings-scraper): the same keywords on Alibaba.com, for 1688 vs Alibaba export price checks.
- [AliExpress Listings Scraper](https://apify.com/piotrv1001/aliexpress-listings-scraper): retail prices on AliExpress, to size the margin between 1688 wholesale and retail.
- [Yiwugo Listings Scraper](https://apify.com/piotrv1001/yiwugo-listings-scraper): small-commodity suppliers from the Yiwu market, a second China wholesale source.
- [Made-in-China Listings Scraper](https://apify.com/piotrv1001/made-in-china-listings-scraper): Chinese manufacturers selling for export, for more supplier options.

# Actor input Schema

## `keywords` (type: `array`):

Keywords to search on 1688.com, one per line. Chinese terms match the most products, but English also works. A 1688 search link works too (we read the keyword from it). Each keyword is searched independently.

## `offerIds` (type: `array`):

Specific 1688 offers to scrape directly, as an ID (1095091629248) or a link (detail.1688.com/offer/1095091629248.html). Skips search and always opens the offer page.

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

Maximum number of products to save across all keywords. Set 0 for unlimited (1688 itself stops at 2,000 per keyword).

## `maxPagesPerKeyword` (type: `integer`):

Optional limit of search-result pages (50 offers each) per keyword. Leave empty to continue until Max items or 1688's own limit of 2,000 results per keyword (40 pages).

## `includeDetails` (type: `boolean`):

If true, each offer found via search is followed to its detail page to capture tiered prices, attributes, MOQ, seller info, and after-sales policy. Disable for faster, lighter listing-only runs.

## `sortBy` (type: `string`):

Order of search results.

## `minPrice` (type: `number`):

Only offers priced at or above this, in Chinese yuan (CNY), e.g. 10.

## `maxPrice` (type: `number`):

Only offers priced at or below this, in Chinese yuan (CNY), e.g. 20.

## `maxMoq` (type: `integer`):

Only offers you can buy in quantities this small or smaller, e.g. 1 for suppliers that sell single units (dropshipping, samples).

## `supplierCity` (type: `string`):

Only suppliers based in this city. English names of the main sourcing hubs work (Shenzhen, Guangzhou, Yiwu, Dongguan, Ningbo, Shantou …); any other city in Chinese, e.g. 深圳 or 揭阳. A province typed here (Guangdong) filters on the province instead.

## `supplierProvince` (type: `string`):

Only suppliers in this province, in English or Chinese, e.g. Zhejiang or 浙江. Checked on each row, so only matching rows are saved and charged; the run reads more search pages to reach Max items.

## `supplierType` (type: `string`):

Only offers from this kind of supplier. Checked on each row, so only matching rows are saved and charged; the run reads more search pages to reach Max items.

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

Proxy for the first attempt of each search. Retries use other proxies automatically, so you normally do not need to change this.

## Actor input object example

```json
{
  "keywords": [
    "iphone case"
  ],
  "offerIds": [],
  "maxItems": 50,
  "includeDetails": false,
  "sortBy": "relevance",
  "supplierType": "any",
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

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

No description

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

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

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "keywords": [
        "iphone case"
    ],
    "maxItems": 50,
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("piotrv1001/1688-listings-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "keywords": ["iphone case"],
    "maxItems": 50,
    "proxyConfiguration": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("piotrv1001/1688-listings-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "keywords": [
    "iphone case"
  ],
  "maxItems": 50,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call piotrv1001/1688-listings-scraper --silent --output-dataset

```

## MCP server setup

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

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/DpBCNpkIq0DgZ8QsA/builds/26dY31OaVCNv3ipbj/openapi.json
