# 1688 Sourcing Profit Analyzer — Landed Cost, Margin & ROI (`haketa/1688-sourcing-profit-analyzer`) Actor

Search 1688.com wholesale products and calculate landed cost, unit profit, margin, ROI, break-even price and maximum sourcing cost. Combine live product, demand and supplier signals with your exchange rate, freight, duty, marketplace fee and target-margin assumptions.

- **URL**: https://apify.com/haketa/1688-sourcing-profit-analyzer.md
- **Developed by:** [Haketa](https://apify.com/haketa) (community)
- **Categories:** E-commerce
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.00 / 1,000 results

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

## 📦 1688 Sourcing Profit Analyzer

### Landed Cost, Margin & ROI Intelligence

![1688](https://img.shields.io/badge/1688-Wholesale-FF6000)
![Output](https://img.shields.io/badge/output-Decision--ready_data-16A34A)
![Speed](https://img.shields.io/badge/prefill-under_5_minutes-2563EB)
![Automation](https://img.shields.io/badge/automation-API_%7C_Schedules_%7C_Integrations-7C3AED)

**Find 1688 products that can actually support your target margin.** Search the Chinese wholesale marketplace, add your real-world cost assumptions, and receive product data enriched with landed cost, unit profit, net margin, ROI, break-even price, maximum sourcing price, a sourcing score, and clear risk flags.

No spreadsheet setup. No manual formula work. One run turns wholesale listings into a shortlist you can evaluate.

***

### ✨ What you get

| Layer | Included data |
|---|---|
| 🔎 Product | Title, displayed CNY price, image, product URL, result position |
| 📈 Demand | Sales signal and repurchase rate when displayed |
| 🏭 Supplier | Location, years active, factory and verification signals when displayed |
| 🚢 Landed cost | Converted product cost, freight, duty/tax, other costs |
| 💰 Profitability | Total unit cost, profit, margin, ROI and break-even price |
| 🎯 Buying target | Maximum source price that supports your target margin |
| 🚦 Decision support | 0–100 sourcing score and machine-readable risk flags |

### 🎯 Use cases

#### Amazon FBA and private label

Compare product ideas using one cost model, identify margin headroom, and eliminate offers priced above your maximum viable sourcing cost.

#### Shopify and dropshipping research

Test potential retail prices against source cost, freight, payment or marketplace fees, and target margin before adding a product to your store.

#### Wholesale importing

Create a purchasing shortlist with supplier-age, location, demand and repurchase signals beside landed-cost estimates.

#### Procurement and sourcing agencies

Export consistent opportunity data for client reports, supplier screening, dashboards, and internal review workflows.

#### Market and competitor research

Track displayed wholesale price ranges across English or Chinese product keywords and compare consumer with industrial searches.

***

### 🚀 Start in 3 steps

1. Add one or more product keywords.
2. Enter your selling price and cost assumptions.
3. Click **Start** and open the **Dataset** when the run finishes.

The prefilled example searches for `wireless earbuds` and returns 20 analyzed products.

#### Recommended input

```json
{
  "keywords": ["wireless earbuds", "蓝牙耳机"],
  "maxItems": 100,
  "sortBy": "relevance",
  "searchType": "pcmarket",
  "targetSellingPrice": 29.99,
  "cnyExchangeRate": 0.14,
  "freightPerUnit": 2.5,
  "dutyPercent": 5,
  "marketplaceFeePercent": 15,
  "otherCostPerUnit": 1,
  "targetMarginPercent": 25
}
```

All monetary outputs use the same **target currency** you choose through `cnyExchangeRate`. For USD, for example, enter the current USD value of CNY 1 and keep selling price, freight, and other costs in USD.

### ⚙️ Input options

| Field | What it controls | Default |
|---|---|---:|
| `keywords` | English or Chinese product searches | `wireless earbuds` |
| `maxItems` | Maximum unique products across all keywords | `100` |
| `sortBy` | Relevance, lowest price, or highest price | `relevance` |
| `priceMin`, `priceMax` | Optional displayed source-price range in CNY | — |
| `minOrderQuantity` | Optional quantity filter applied to search | `0` |
| `searchType` | Consumer wholesale or industrial products | `pcmarket` |
| `targetSellingPrice` | Planned unit selling price | `29.99` |
| `cnyExchangeRate` | Target-currency value of CNY 1 | `0.14` |
| `freightPerUnit` | Freight and forwarding per unit | `2.50` |
| `dutyPercent` | Duty/tax on product cost plus freight | `5` |
| `marketplaceFeePercent` | Marketplace and payment fees | `15` |
| `otherCostPerUnit` | Packaging, inspection, labeling, etc. | `1.00` |
| `targetMarginPercent` | Desired margin for maximum buy-price calculation | `25` |

> Exchange rates, freight, taxes, and platform fees change. Use values that match your destination, sales channel, shipment, and product category.

***

### 🧮 How the calculations work

```text
Product cost        = 1688 price CNY × target currency per CNY
Duty and tax        = (product cost + freight) × duty rate
Landed cost         = product cost + freight + duty/tax + other unit costs
Marketplace fees    = target selling price × marketplace fee rate
Total unit cost     = landed cost + marketplace fees
Unit profit         = target selling price − total unit cost
Net margin          = unit profit ÷ target selling price
ROI                 = unit profit ÷ total unit cost
Break-even price    = landed cost ÷ (1 − marketplace fee rate)
```

`maximumSourcePriceCny` solves the model in reverse: it estimates the highest displayed source price that still supports your chosen target margin.

#### Sourcing score

The `sourcingScore` is a 0–100 comparison aid. It combines modeled margin with visible demand, repurchase, supplier history, factory, and verification signals. It is designed for sorting and triage—not as a guarantee of supplier quality or future sales.

#### Risk flags

| Flag | Meaning |
|---|---|
| `MISSING_SOURCE_PRICE` | A usable displayed price was unavailable |
| `MISSING_DEMAND_SIGNAL` | No sales signal was visible |
| `LOW_RECENT_SALES` | The visible sales signal was below 10 |
| `LOW_REPURCHASE_RATE` | Visible repurchase rate was below 10% |
| `NEW_SUPPLIER` | Visible supplier history was below two years |
| `NO_VISIBLE_VERIFICATION` | No factory or verification badge appeared |
| `NEGATIVE_MODELED_PROFIT` | Your assumptions produce a unit loss |
| `ABOVE_MAXIMUM_SOURCE_PRICE` | Source price exceeds your target-margin ceiling |

***

### 📄 Example result

```json
{
  "offerId": "642586902675",
  "searchKeyword": "wireless earbuds",
  "title": "I12 Tws BT 5.0 Wireless Headphones Macaron inpod I12 Earbuds",
  "priceCny": 12,
  "currency": "CNY",
  "sales": 86,
  "returnRatePercent": 30,
  "supplierLocation": "深圳市",
  "supplierYears": 7,
  "targetSellingPrice": 29.99,
  "landedCost": 5.39,
  "totalCostPerUnit": 9.89,
  "unitProfit": 20.1,
  "netMarginPercent": 67.03,
  "roiPercent": 203.31,
  "breakEvenSellingPrice": 6.34,
  "maximumSourcePriceCny": 97.75,
  "sourcingScore": 94.3,
  "riskFlags": ["NO_VISIBLE_VERIFICATION"],
  "url": "https://detail.1688.com/offer/642586902675.html"
}
```

The dataset has two views:

- **Sourcing opportunities** — a compact decision table for rapid comparison.
- **Full sourcing data** — every collected field, cost assumption, calculation, and timestamp.

Export results as JSON, CSV, Excel, XML, or RSS from Apify.

### 🔌 API example

```bash
curl -X POST \
  "https://api.apify.com/v2/acts/YOUR_USERNAME~1688-sourcing-profit-analyzer/runs?token=YOUR_APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "keywords": ["phone case", "手机壳"],
    "maxItems": 100,
    "targetSellingPrice": 19.99,
    "cnyExchangeRate": 0.14,
    "freightPerUnit": 1.5,
    "dutyPercent": 5,
    "marketplaceFeePercent": 15,
    "otherCostPerUnit": 0.75,
    "targetMarginPercent": 30
  }'
```

You can also call the Actor through the Apify JavaScript or Python client and connect its dataset to Make, Zapier, Google Sheets, webhooks, cloud storage, databases, or your own application.

***

### ✅ Data quality and coverage

- Duplicate offer IDs are removed across pages and keywords.
- Numeric calculations use normalized numbers, not formatted text.
- Monetary outputs are rounded to two decimals and visible totals reconcile.
- Missing source fields stay missing; the Actor does not invent supplier facts.
- Original Chinese text is preserved when the source provides it.
- Each record includes its keyword, result page, position, direct URL, and collection timestamp.

1688 search cards can vary by keyword, category, session, and region. A displayed card price may be a starting or promotional price rather than the final price for a specific SKU, quantity tier, customization, or shipping agreement. Confirm specifications, MOQ, tier pricing, compliance, supplier identity, and final quotation directly with the supplier before purchasing.

For broader coverage, use several focused keyword variants instead of one very large generic search. Chinese keywords often provide better category precision.

### ⚡ Performance

The Actor uses lightweight collection rather than a full browser, balancing speed and cost. Validation runs produced **150 unique analyzed products in 3 minutes 14 seconds**, while the default prefill is intentionally limited to 20 results for a fast first success.

Actual time depends on result availability, selected filters, keyword count, and source response conditions.

### 🤝 Responsible use

Use the Actor in accordance with applicable laws, 1688 terms, and Apify policies. Avoid collecting personal data, respect intellectual-property rights, and independently verify commercial, legal, customs, tax, product-safety, and supplier information. Calculations are estimates for research and are not financial, tax, customs, or legal advice.

***

**From wholesale search to a margin-aware sourcing shortlist—in one run.**

# Actor input Schema

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

Search terms in English or Chinese.

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

Global number of unique products to save.

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

Choose how 1688 ranks search results. Relevance is the most reliable mode.

## `priceMin` (type: `number`):

Optional lower product-price filter.

## `priceMax` (type: `number`):

Optional upper product-price filter.

## `minOrderQuantity` (type: `integer`):

Optional MOQ filter sent to 1688 search.

## `searchType` (type: `string`):

Consumer products or industrial procurement.

## `targetSellingPrice` (type: `number`):

Planned selling price per unit in your target currency.

## `cnyExchangeRate` (type: `number`):

How much one Chinese yuan costs in your target currency. Example: 0.14 for USD.

## `freightPerUnit` (type: `number`):

International freight and forwarding cost per unit in target currency.

## `dutyPercent` (type: `number`):

Duty and import tax applied to product cost plus freight.

## `marketplaceFeePercent` (type: `number`):

Marketplace and payment fees as percentage of selling price.

## `otherCostPerUnit` (type: `number`):

Packaging, inspection, labeling, domestic delivery and other unit costs.

## `targetMarginPercent` (type: `number`):

Desired net profit margin used to calculate maximum sourcing price.

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

1688 search requires a China residential session.

## Actor input object example

```json
{
  "keywords": [
    "wireless earbuds"
  ],
  "maxItems": 20,
  "sortBy": "relevance",
  "minOrderQuantity": 0,
  "searchType": "pcmarket",
  "targetSellingPrice": 29.99,
  "cnyExchangeRate": 0.14,
  "freightPerUnit": 2.5,
  "dutyPercent": 5,
  "marketplaceFeePercent": 15,
  "otherCostPerUnit": 1,
  "targetMarginPercent": 25,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "CN"
  }
}
```

# Actor output Schema

## `offerId` (type: `string`):

No description

## `title` (type: `string`):

No description

## `priceCny` (type: `string`):

No description

## `landedCost` (type: `string`):

No description

## `unitProfit` (type: `string`):

No description

## `netMarginPercent` (type: `string`):

No description

## `sourcingScore` (type: `string`):

No description

## `url` (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": [
        "wireless earbuds"
    ],
    "maxItems": 20,
    "sortBy": "relevance",
    "searchType": "pcmarket",
    "targetSellingPrice": 29.99,
    "cnyExchangeRate": 0.14,
    "freightPerUnit": 2.5,
    "dutyPercent": 5,
    "marketplaceFeePercent": 15,
    "otherCostPerUnit": 1,
    "targetMarginPercent": 25,
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ],
        "apifyProxyCountry": "CN"
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("haketa/1688-sourcing-profit-analyzer").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": ["wireless earbuds"],
    "maxItems": 20,
    "sortBy": "relevance",
    "searchType": "pcmarket",
    "targetSellingPrice": 29.99,
    "cnyExchangeRate": 0.14,
    "freightPerUnit": 2.5,
    "dutyPercent": 5,
    "marketplaceFeePercent": 15,
    "otherCostPerUnit": 1,
    "targetMarginPercent": 25,
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
        "apifyProxyCountry": "CN",
    },
}

# Run the Actor and wait for it to finish
run = client.actor("haketa/1688-sourcing-profit-analyzer").call(run_input=run_input)

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

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

```

## CLI example

```bash
echo '{
  "keywords": [
    "wireless earbuds"
  ],
  "maxItems": 20,
  "sortBy": "relevance",
  "searchType": "pcmarket",
  "targetSellingPrice": 29.99,
  "cnyExchangeRate": 0.14,
  "freightPerUnit": 2.5,
  "dutyPercent": 5,
  "marketplaceFeePercent": 15,
  "otherCostPerUnit": 1,
  "targetMarginPercent": 25,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "CN"
  }
}' |
apify call haketa/1688-sourcing-profit-analyzer --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=haketa/1688-sourcing-profit-analyzer",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/fvFWksbAC1fT73t6V/builds/otWXfoRzs08oRG61S/openapi.json
