Looking for the overview — what this API returns, what it costs, and a call you can run without a key? See the Made-in-China Sourcing API page →
E-commerce & Marketplaces

Made-in-China Sourcing API & Scraper

The Made-in-China Sourcing API returns live B2B buying requests (RFQs) as clean JSON — what importers are asking to purchase right now, in their own full text.

2 actionsLive JSON1,000 free credits$0.67–$1.50 / 1,000 creditsMCP-ready
Get a free keyOpen in playground

🤖 Using an AI assistant? Copy this link into ChatGPT / Claude / Cursor — it reads every endpoint and parameter instantly and tells you if this API fits your use case.

The primary rfq_search endpoint returns rfq_id, title, the buyer's complete request description, url, quantity with its unit, the buyer's name, country and country_code plus whether their email is confirmed, posted_at and expires_at, the expired and closed flags, quotes_left and quotes_allowed, category_id and the regional site the request came in from — with a total estimate and real pagination. categories lists the 27 top-level sourcing boards so you can sweep a whole vertical without a keyword. This is a demand-side feed: inbound purchase intent rather than supplier listings, which is what makes it usable as a lead source. One ReefAPI key, one shared credit pool, the standard envelope.

Reference

Two different category id spaces, and what the buyer_country filter does and does not cover

This reads the demand side of Made-in-China: the requests importers post saying what they want to buy. Two things trip people up. The category id you filter with and the category id that comes back on a result are different id spaces, and the country filter is a short closed list while the country field on a result is not. Measured on 2026-08-27 across the open board and a 'solar panel' search.

FieldFormatMeasured
rfq_ida 12-character mixed-case token, not a numberXEWTzgRYqBeJ; all 20 rows of a measured page were exactly 12 characters
category (the filter)a 12-character token from the categories actionnOmtxmJTGEnQ; the board publishes 27 top-level categories
results[].category_ida 10-digit numeric string - a different id space2019020000. It cannot be passed back as the category filter. Filtering on the Machinery token returned 10 rows whose numeric ids all began 19
buyer.countryfree text, unrestricted14 distinct countries in 20 rows, including France, Guatemala, Malawi, Afghanistan and "HONG KONG, CHINA"
buyer_country (the filter)a closed set of 10 plus "other"united_states, india, nigeria, united_kingdom, pakistan, australia, canada, south_africa, ghana, brazil, other. Sending 'germany' returns INVALID_PARAM with the allowed list attached
posted_at / expires_atdate only, YYYY-MM-DD, no time and no timezoneposted 2026-08-15, expires 2026-11-02. The gap is not fixed: 77, 79, 88 and 89 days across four measured rows
quotes_left + quotes_allowedthe two always add up to 10true on all 20 rows: (5,5), (3,7), (4,6), (1,9), (7,3)
origin_sitewhich language edition the buyer posted through"From English Site" on 15 of 20, plus French, German, Spanish and Russian
budgeta band as a string, not a number"> 10000" alongside budget_currency "USD". 12 of 20 rows had neither budget nor currency

This is a buying-request board, not a supplier catalogue. There are no supplier profiles, no MOQ tables, no price lists and no audit or verified-supplier fields here - the only party described in a row is the buyer.

Live example

Real request and response JSON

Captured from the indexed primary action, rfq_search, on .

Captured request
{
  "method": "POST",
  "url": "https://api.reefapi.com/made-in-china/v1/rfq_search",
  "headers": {
    "x-api-key": "$REEF_KEY",
    "content-type": "application/json"
  },
  "body": {
    "query": "solar panel"
  }
}
Captured response
{
  "ok": true,
  "meta": {
    "api": "made-in-china",
    "endpoint": "rfq_search",
    "mode": "live",
    "latency_ms": 475.5,
    "record_count": 20,
    "bytes": 38337,
    "cache_hit": false,
    "method": "own_ajaxflag_json_bare_dc",
    "expired_dropped": 0,
    "upstream_rows": 20
  },
  "data": {
    "results": [
      {
        "rfq_id": "XEWTzgRYqBeJ",
        "title": "Complete Black Solar Panel EU 420W 430W 440W 450W Chinese Solar Panels for Sale",
        "description": "Hello,\nI am looking for solar panels equivalent to the TH 425PMB 7 - 44SCF.\nThe dimensions are important to me: 1812 X 1096 X 30 mm.\nColor: Black.\nOpen Circuit Voltage (Voc): 43.4 V.\nI need 8 panels.\nPlease provide the price including delivery to my location in France.\n\nBest regards,\nMarc Julienne.\nAfter-sales service: 12 years\nWarranty: 25 years\nNumber of cells: 305 (61 X 5)\nApplication: Solar energy system\nCertification: CB, CE, TUV\nMaterial: Monocrystalline Silicon\nDimensions: 1812 X 1096 X 30 mm\nWeight: 20.8±0.3kg\nFront glass: Tempered glass, 3.2 mm\nFrame: Anodized aluminum profile\nCells: ",
        "url": "https://sourcing.made-in-china.com/request/XEWTzgRYqBeJ/Complete-Black-Solar-Panel-EU-420W-430W-440W-450W-Chinese-Solar-Panels-for-Sale.html",
        "quantity": 8,
        "quantity_text": "8",
        "quantity_unit": "Piece(s)",
        "buyer": {
          "name": "Julienne",
          "country": "France",
          "country_code": "FR",
          "email_confirmed": true
        },
        "posted_at": "[redacted-phone]",
        "expires_at": "[redacted-phone]",
        "expired": false,
        "closed": false,
        "quotes_left": 5,
        "quotes_allowed": 5,
        "budget": null,
        "budget_currency": null,
        "category_id": "[redacted-phone]",
        "origin_site": "From French Site",
        "image": null,
        "has_attachments": false
      },
      {
        "rfq_id": "hflAcsLdEwDP",
        "title": "Solar Panels 640 W",
        "description": "Quantity: 74 panels\nPower per panel: 640 W (Watts)\nTotal System Capacity: 47.36 kWp (Kilowatt-peak) when all 74 panels are combined.",
        "url": "https://sourcing.made-in-china.com/request/hflAcsLdEwDP/Solar-Panels-640-W.html",
        "quantity": 74,
        "quantity_text": "74",
        "quantity_unit": "Piece(s)",
        "buyer": {
          "name": "[redacted-name]",
          "country": "China",
          "country_code": "CN",
          "email_confirmed": false
        },
        "posted_at": "[redacted-phone]",
        "expires_at": "[redacted-phone]",
        "expired": false,
        "closed": false,
        "quotes_left": 3,
        "quotes_allowed": 7,
        "budget": null,
        "budget_currency": null,
        "category_id": "[redacted-phone]",
        "origin_site": "From English Site",
        "image": null,
        "has_attachments": false
      },
      {
        "rfq_id": "UtlAajuChZID",
        "title": "Thin Sheet Solar Panel",
        "description": "I need that CIF to dakar port along with the details such as payment terms and specification",
        "url": "https://sourcing.made-in-china.com/request/UtlAajuChZID/Thin-Sheet-Solar-Panel.html",
        "quantity": 10,
        "quantity_text": "10",
        "quantity_unit": "Piece(s)",
        "buyer": {
          "name": "Velra",
          "country": "India",
          "country_code": "IN",
          "email_confirmed": false
        },
        "posted_at": "[redacted-phone]",
        "expires_at": "[redacted-phone]",
        "expired": false,
        "closed": false,
        "quotes_left": 7,
        "quotes_allowed": 3,
        "budget": null,
        "budget_currency": null,
        "category_id": "[redacted-phone]",
        "origin_site": "From English Site",
        "image": null,
        "has_attachments": false
      }
    ],
    "query": "solar panel",
    "page": 1,
    "page_size": 20,
    "returned": 20,
    "total_estimate": 56113,
    "pages_available": 5612,
    "has_more": true,
    "next_page": 2,
    "filters_applied": {
      "category": null,
      "buyer_country": null,
      "posted_within": null,
      "include_expired": false
    }
  }
}
Actions

What the Made-in-China Sourcing API does

ActionDescriptionConcrete use caseKey params
rfq_searchSearch live buying requests posted by Made-in-China buyers — the demand side of the marketplace. Each row is a purchase someone is asking for right now: their FULL request text (this board does not truncate it), how many they want, which country they are buying from, the day they posted and the day the request expires. Filter by keyword, category, buyer country and recency; page through up to 100 requests per call. Omit `query` to browse the whole open board.Pricing teams call rfq_search to search live buying requests posted by Made-in-China buyers.query, category, buyer_country, posted_within, page, ...
categoriesThe 27 top-level sourcing categories of the buying-request board, with the ids that `rfq_search`'s `category` parameter takes. Read live from the board's own category rail, so a new or renamed category appears without a code change.Marketplace operators call categories to get the 27 top-level sourcing categories of the buying-request board, with the ids that `rfq_sear….query
Code samples

Call rfq_search from your stack

curl -X POST https://api.reefapi.com/made-in-china/v1/rfq_search \
  -H "x-api-key: $REEF_KEY" \
  -H "content-type: application/json" \
  -d '{"query":"solar panel"}'
MCP one-liner
Ask your MCP-connected assistant: call reefapi.made-in-china.rfq_search with {"query":"solar panel"}.
Use cases

Who uses this API and why

  • B2B sales teams call rfq_search to find importers actively requesting a product and read the quantity and buyer country before quoting.
  • Lead-generation pipelines filter on quotes_left and expires_at to prioritise requests still open to new suppliers.
  • Trade analysts use categories to sweep a whole sourcing board and measure demand by product line and buyer country.
  • Market-entry researchers track posted_at volume by buyer country to see where purchase intent is coming from.
FAQ

Questions developers ask before integrating

Is this supplier data or buyer data?

Buyer data. Every row is a purchase request an importer posted: what they want, how many, which country they are buying from, when it was posted and when it expires. There is no supplier catalogue behind this endpoint, so if you are after factory profiles, MOQ tables or verified-supplier badges, this is the other side of the marketplace. What it is good for is demand - 2,182 new requests were posted board-wide in the 24 hours before the measurement.

Why can I only filter by ten buyer countries when the results show many more?

Because the site publishes a fixed facet of ten countries plus a catch-all, while the country on each request is whatever the buyer actually entered. A single page of 20 solar-panel requests spanned 14 countries including France, Guatemala, Malawi and Afghanistan, none of which are in the facet. If you need one of those, pull the wider result set and filter on buyer.country yourself.

What happens if I pass a country that is not on the list?

It is rejected with INVALID_PARAM and the allowed values come back in the error detail. That is deliberate: the site itself silently treats an unrecognized region as "other" and would hand you a plausible-looking list of the wrong buyers, which is worse than an error. A measured call with buyer_country 'germany' returned INVALID_PARAM rather than German requests.

Can I use the category_id from a result as the category filter?

No, they are separate id spaces. The filter takes a 12-character token like nOmtxmJTGEnQ, which you get from the categories action, while a result row carries a 10-digit numeric category_id like 2019020000. The two do correspond: filtering on the Machinery token returned 10 rows whose numeric category_ids all started with 19. But you cannot substitute one for the other, so call categories for the 27 valid filter tokens.

Is the request text truncated?

No, and that is the main reason to read this board through an API. description carries the buyer's complete message. A measured page had a median length of 259 characters and one request over 900, running through panel dimensions, open-circuit voltage, certifications, glass thickness and container packing counts. Most of what a quote needs is already in there.

What do quotes_left and quotes_allowed mean?

They describe the request's quote budget, and they always add up to 10 - verified on all 20 rows of a measured page, with pairs like (5,5), (3,7), (1,9) and (7,3). A request with a low remaining count has already drawn suppliers; a full one is untouched. Combine that with posted_at to find requests that are both fresh and uncontested.

Does every request have a budget?

No. On a measured page of 20, one row had a budget value, seven more had a currency with no amount, and 12 had neither. When a budget is present it is a band expressed as a string, such as "> 10000", with budget_currency alongside - not a number you can sum. Quantity is the more reliable size signal: it came back as an integer on 18 of the 20 rows, with quantity_unit spelling out the unit.

What is origin_site telling me?

Which language edition of the site the buyer posted through, which is a rough proxy for their working language. A measured page split 15 English, 2 French, 1 German, 1 Spanish and 1 Russian. It is worth reading before you draft a reply, since a request tagged "From Russian Site" arrived written in English but came from someone browsing the Russian storefront.

What is the Made-in-China Sourcing API?

Made-in-China Sourcing API is a ReefAPI endpoint group for live b2b buying requests from importers, with quantity, country and expiry. It returns live JSON through POST requests under /made-in-china/v1.

Is the Made-in-China Sourcing API free to try?

Yes. ReefAPI starts with 1,000 free credits, no card required. Made-in-China Sourcing calls use the same shared credit balance as every other ReefAPI engine.

Do I need a Made-in-China Sourcing login or account?

No login to Made-in-China Sourcing is needed for the API response. You call ReefAPI with your x-api-key header, and the playground can run live examples before you create a production key.

How fresh is the Made-in-China Sourcing data?

The page example is captured from a live rfq_search call, and production requests fetch live data through ReefAPI rather than a static sample.

How many credits does the Made-in-China Sourcing API use?

Made-in-China Sourcing actions currently cost 1 credit per successful call. Failed or blocked calls are free, and all APIs draw from one credit pool.

Can I call Made-in-China Sourcing from an AI assistant or MCP client?

Yes. Connect ReefAPI once through MCP and your assistant can call made-in-china actions with the same key, credit pool and JSON envelope used by normal REST requests.

docs / made-in-china

Made-in-China Sourcing

Live B2B buying requests from importers, with quantity, country and expiry.

base /made-in-china/v12 endpoints
post/made-in-china/v1/categories1 credit

The 27 top-level sourcing categories of the buying-request board, with the ids that `rfq_search`'s `category` parameter takes. Read live from the board's own category rail, so a new or renamed category appears without a code change.

ParameterAllowed / rangeDescription
queryoptionalFilter categories whose name contains this text (case-insensitive). Omit for all 27.
Try in playground →