# HKTDC Sourcing Scraper: Products & Suppliers (`rastriq/hktdc-scraper`) Actor

Extract products and suppliers from HKTDC Sourcing: prices, MOQ, specs, certifications, verified level. Fast API-based scraper, no browser or login. Export JSON, CSV or Excel.

- **URL**: https://apify.com/rastriq/hktdc-scraper.md
- **Developed by:** [Rastriq — Structured data from the world](https://apify.com/rastriq) (community)
- **Categories:** Lead generation, E-commerce, Business
- **Stats:** 3 total users, 2 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.50 / 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/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

## HKTDC Sourcing Scraper: Products & Suppliers

Extract **products and suppliers from HKTDC Sourcing** (sourcing.hktdc.com), the Hong Kong Trade Development Council's B2B marketplace. Get prices, minimum order quantities, specifications, certifications and supplier verification levels as clean JSON, CSV or Excel.

The Actor calls HKTDC's public API directly over HTTP. No browser, no login, no cookies.

### Why use this HKTDC scraper?

- **Products and suppliers in one Actor.** Choose products, suppliers or both in a single run, from one input.
- **Optional deep product details.** One extra API call per product adds all specifications, rich description, lead time and shipping origin. Same price per item either way.
- **Real sourcing filters.** Supplier type, country/region, factory location, product and company certification, online purchase, sort order.
- **Three ways to search.** Keyword, category URL or direct URL.
- **Predictable cost.** You pay per result, and you can set a maximum spend on the run. The Actor stops cleanly when the budget is reached.
- **Lightweight.** HTTP only, runs on 512 MB.

### Use cases

- Sourcing and procurement: build shortlists of verified Hong Kong and mainland China manufacturers.
- Price and MOQ benchmarking across suppliers.
- Lead generation for trade, logistics and compliance services.
- Market research on product categories, certifications and OEM/ODM capacity.
- Feeding supplier data into a CRM, spreadsheet or AI agent.

### How to use

1. Open the Actor and keep **Search mode** on *Keyword search*.
2. Enter a keyword, for example `LED light`.
3. Choose **Scrape products**, **Scrape suppliers**, or both.
4. Set **Max results** (start with 10).
5. Click **Start** and download the dataset as JSON, CSV, Excel or HTML, or read it through the API.

For larger jobs enable **Scrape full product details** and raise **Max results**. HKTDC limits each search to roughly 10,000 items, so split big jobs by keyword, category or filters.

### Input example

```json
{
  "searchType": "keyword",
  "keyword": "LED light",
  "scrapeProducts": true,
  "scrapeSuppliers": false,
  "maxResults": 10,
  "scrapeProductDetails": false,
  "sortType": "BEST_MATCH"
}
```

Category mode takes URLs such as `https://sourcing.hktdc.com/en/Categories/Electronics/c/06000000`.

### Output example

Product (listing level; with full details enabled you also get `specifications`, `categoryPath`, `descriptionHtml`, `processLeadTime`, `shippingOption`, `modelNo`):

```json
{
  "type": "product",
  "title": "Solar LED Street Light",
  "url": "https://sourcing.hktdc.com/en/product/Solar-LED-Street-Light/EXAMPLEURN1",
  "urn": "EXAMPLEURN1",
  "images": ["https://example.com/image1.webp"],
  "currency": "USD",
  "priceMin": 24.55,
  "priceMax": 30,
  "price": "USD 24.55 - 30",
  "unit": "set(s)",
  "minOrder": "100 set(s)",
  "hasOnlinePurchase": false,
  "productCertifications": ["CE", "RoHS"],
  "tags": ["LED", "Solar"],
  "supplierName": "Example Lighting Co., Ltd.",
  "supplierUrn": "EXAMPLESUP1",
  "supplierCountry": "China",
  "supplierVerifiedLevel": "gold",
  "supplierSkills": ["OEM", "ODM"],
  "scrapedAt": "2026-10-10T10:00:00.000Z"
}
```

Supplier:

```json
{
  "type": "supplier",
  "title": "Example Lighting Co., Ltd.",
  "url": "https://sourcing.hktdc.com/en/Supplier-Store/Home/Example-Lighting-Co-Ltd/EXAMPLESUP1",
  "urn": "EXAMPLESUP1",
  "countryRegion": "China",
  "verifiedLevel": "gold",
  "natureOfBusiness": ["Manufacturer", "Exporter"],
  "skillAndTech": ["OEM", "ODM"],
  "isExhibitor": true,
  "majorCategories": ["Lighting"],
  "supplierCertifications": ["ISO 9001"],
  "scrapedAt": "2026-10-10T10:00:00.000Z"
}
```

(Values above are illustrative. Fields appear only when HKTDC provides them.)

### Output fields

| Field | Applies to | Description |
|---|---|---|
| `type` | all | `product` or `supplier` |
| `title`, `url`, `urn` | all | Name, HKTDC URL, unique reference |
| `images` | all | Image URLs (limited by Max images) |
| `price`, `priceMin`, `priceMax`, `currency`, `unit` | product | Price range and unit |
| `minOrder` | product | Minimum order quantity |
| `brand`, `modelNo`, `specifications` | product | Specs (full details mode for the complete set) |
| `category`, `categoryPath` | product | Category hierarchy (full details mode) |
| `processLeadTime`, `shippingOption` | product | Lead time and shipping origin (full details mode) |
| `productCertifications`, `tags`, `hasOnlinePurchase` | product | Certifications, tags, online purchase flag |
| `supplierName`, `supplierUrl`, `supplierCountry`, `supplierVerifiedLevel`, `supplierSkills` | product | Supplier summary |
| `countryRegion`, `verifiedLevel`, `natureOfBusiness`, `skillAndTech` | supplier | Company profile |
| `isExhibitor`, `factoryCountry`, `majorCategories`, `avgResponseTime`, `rating` | supplier | Capabilities and activity |
| `supplierCertifications` | supplier | Company certifications |
| `scrapedAt` | all | ISO 8601 timestamp |

### Pricing

Pay per result: each product or supplier saved to the dataset is one billable result. Lower prices apply on higher Apify plans.

| Plan | Price per 1,000 results |
|---|---|
| Free | $4.00 |
| Bronze | $3.50 |
| Silver | $3.00 |
| Gold | $2.50 |

Example: 500 products on the Free plan cost about $2.00. Platform usage is included. Set the maximum charge in the run options to cap spend.

### FAQ

**Is it legal to scrape HKTDC?** The Actor reads data that HKTDC publishes openly through its public API, without logging in. You are responsible for using the data in line with HKTDC's terms and applicable law, including data protection rules for any personal data.

**Does it return supplier contact details?** No. Supplier detail pages require authentication and are not accessed. You get the public company profile from the discovery listing.

**How many results can I get?** About 10,000 items per search. Use several keywords, categories or filters to go beyond that.

**How often should I run it?** Weekly or monthly is enough for most sourcing and price-tracking uses. Use Apify schedules.

**Can I integrate it?** Yes: Apify API, webhooks, Make, Zapier, n8n, Google Sheets, and MCP for AI agents.

**The run returned fewer items than expected.** The API may return fewer results for narrow filters, or its structure may change without notice. Enable debug mode and report the issue.

### Support

Questions or problems? Open an issue on the Actor page. Include the run URL and your input.

# Actor input Schema

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

How to find items.<br><br><b>Keyword search</b>: search terms such as <code>LED light</code>.<br><b>Category browsing</b>: HKTDC category URLs.<br><b>Direct URLs</b>: HKTDC product pages or search/category URLs.

## `keyword` (type: `string`):

Search term for products and suppliers. Used in <b>Keyword search</b> mode. Example: <code>LED light</code>, <code>GPS tracker</code>. Leave empty to list everything (up to ~10,000 items).

## `categoryUrls` (type: `array`):

One or more HKTDC category page URLs. Only used when Search mode is <b>category</b>.<br><br>Example: <code>https://sourcing.hktdc.com/en/Categories/Electronics/c/06000000</code>

## `startUrls` (type: `array`):

HKTDC product detail pages, category pages or other sourcing.hktdc.com URLs. Used in <b>Direct URLs</b> mode. Supplier profile URLs are not supported; use keyword search with suppliers enabled instead.

## `scrapeProducts` (type: `boolean`):

Extract product listings with details, images, specifications, and pricing info.

## `scrapeSuppliers` (type: `boolean`):

Extract supplier profiles: country, verified level, business type, OEM/ODM skills, exhibitor status, major categories, certifications and rating.

## `maxResults` (type: `integer`):

Maximum number of items (products + suppliers combined). Each item is billed once. HKTDC caps each search at ~10,000 items. Start with 10 for a test.

## `sortType` (type: `string`):

How to order search results.

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

Filter by supplier type. Leave on 'All' for no filter.

## `countryRegion` (type: `string`):

Filter by supplier country or region, e.g. <code>Hong Kong</code>. Leave empty for all.

## `factoryLocation` (type: `string`):

Filter by factory location (e.g. 'Guangdong', 'Shenzhen').

## `productCertification` (type: `string`):

Filter by product certification (e.g. 'CE', 'UL', 'RoHS').

## `companyCertification` (type: `string`):

Filter by company certification (e.g. 'ISO 9001', 'BSCI').

## `onlinePurchase` (type: `boolean`):

Only show products available for online purchase.

## `scrapeProductDetails` (type: `boolean`):

Fetch full product details (all specifications, rich description, lead time, shipping) with one extra API call per product. Disabled = listing data only (faster). Items are billed the same either way.

## `maxImages` (type: `integer`):

Maximum number of image URLs to extract per product. Set to 0 to skip images.

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

Select proxies. The Actor calls HKTDC's public API directly (no browser). Datacenter proxies from the US work well. Residential proxies are NOT needed.

## `maxConcurrency` (type: `integer`):

Concurrent API requests. Start with 5; raise only if you see no blocking.

## `maxRequestRetries` (type: `integer`):

Number of times to retry a failed request before giving up.

## `debugMode` (type: `boolean`):

Verbose logging and raw unexpected API responses saved to the key-value store. Not needed for normal runs.

## `requestTimeoutSecs` (type: `integer`):

Maximum time in seconds to wait for an API response.

## Actor input object example

```json
{
  "searchType": "keyword",
  "keyword": "phone",
  "categoryUrls": [
    {
      "url": "https://sourcing.hktdc.com/en/Categories/Electronics/c/06000000"
    }
  ],
  "startUrls": [
    {
      "url": "https://sourcing.hktdc.com/en/Products"
    }
  ],
  "scrapeProducts": true,
  "scrapeSuppliers": true,
  "maxResults": 10,
  "sortType": "BEST_MATCH",
  "supplierType": "",
  "onlinePurchase": false,
  "scrapeProductDetails": false,
  "maxImages": 5,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyCountry": "US"
  },
  "maxConcurrency": 5,
  "maxRequestRetries": 3,
  "debugMode": false,
  "requestTimeoutSecs": 30
}
```

# Actor output Schema

## `dataset` (type: `string`):

Dataset with all scraped products and suppliers.

# 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 = {
    "keyword": "phone",
    "categoryUrls": [
        {
            "url": "https://sourcing.hktdc.com/en/Categories/Electronics/c/06000000"
        }
    ],
    "startUrls": [
        {
            "url": "https://sourcing.hktdc.com/en/Products"
        }
    ],
    "scrapeProducts": true,
    "scrapeSuppliers": false,
    "maxResults": 10,
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyCountry": "US"
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("rastriq/hktdc-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 = {
    "keyword": "phone",
    "categoryUrls": [{ "url": "https://sourcing.hktdc.com/en/Categories/Electronics/c/06000000" }],
    "startUrls": [{ "url": "https://sourcing.hktdc.com/en/Products" }],
    "scrapeProducts": True,
    "scrapeSuppliers": False,
    "maxResults": 10,
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyCountry": "US",
    },
}

# Run the Actor and wait for it to finish
run = client.actor("rastriq/hktdc-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 '{
  "keyword": "phone",
  "categoryUrls": [
    {
      "url": "https://sourcing.hktdc.com/en/Categories/Electronics/c/06000000"
    }
  ],
  "startUrls": [
    {
      "url": "https://sourcing.hktdc.com/en/Products"
    }
  ],
  "scrapeProducts": true,
  "scrapeSuppliers": false,
  "maxResults": 10,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyCountry": "US"
  }
}' |
apify call rastriq/hktdc-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,rastriq/hktdc-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/JMRxIT7mnPJgOJWOW/builds/trLHTgxpJxMDo3LSj/openapi.json
