Guazi API & Scraper
Guazi API returns live Guazi data as clean JSON for guazi The primary endpoint, search, returns cars records including clue id, title, year, city and mileage km.
🤖 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.
Developers reach for it when they need to read a retailer's own catalogue with full product detail, variants, price and stock without maintaining one-off scraping code or separate API contracts. If you were about to build or fix a Guazi scraper, this API is the maintained alternative — it returns the same data as clean JSON, with the proxies, rotation and anti-bot handling already solved. This page covers the live example, request shape, response shape and available actions: search, detail, brands, series. Every request uses the same ReefAPI envelope, one API key and one shared credit pool, so it fits alongside the rest of your data stack.
Real request and response JSON
Captured from the indexed primary action, search, on .
{
"method": "POST",
"url": "https://api.reefapi.com/guazi/v1/search",
"headers": {
"x-api-key": "$REEF_KEY",
"content-type": "application/json"
},
"body": {
"city": "bj"
}
}{
"ok": true,
"meta": {
"api": "guazi",
"endpoint": "search",
"mode": "live",
"latency_ms": 1804.4,
"record_count": 40,
"bytes": 167916,
"cache_hit": false,
"completeness_pct": 0.09,
"stop_reason": "complete",
"result_pool_total": 20439,
"page": 1,
"total_pages": 20,
"max_page": 20,
"rows_per_page": 40,
"facet": {
"city": "bj",
"brand": null,
"series": null,
"price_band": null
},
"city_is_market": true,
"total_results": 43258,
"charged_credits": 1,
"version": "1.0.0",
"request_id": "6ecf22ed82684fee",
"fetched_at": "2026-10-11T12:01:24.953Z"
},
"data": {
"cars": [
{
"id": "c173380464124787",
"clue_id": "173380464124787",
"title": "捷达VS5 2024款 280TSI 手动悦享版",
"year": 2025,
"city": "北京",
"mileage_km": 8400,
"mileage_display": "0.84万公里",
"price_cny": 46900,
"price_display": "4.69万",
"discount_cny": 30000,
"new_car_price_cny": null,
"inspected": true,
"tags": [
"已检测"
],
"thumbnail": "https://image-public.guazistatic.com/qnbdp7206xd200bb4b38694e5683a948e9da4aa5311791545942.jpg?x-bce-process=image/quality,q_88/resize,m_fill,w_280,h_210",
"url": "https://www.guazi.com/car-detail/c173380464124787.html"
},
{
"id": "c173299333296403",
"clue_id": "173299333296403",
"title": "宝骏KiWi EV 2022款 设计师轻享版 磷酸铁锂",
"year": 2022,
"city": "北京",
"mileage_km": 34800,
"mileage_display": "3.48万公里",
"price_cny": 34600,
"price_display": "3.46万",
"discount_cny": 26900,
"new_car_price_cny": null,
"inspected": true,
"tags": [
"已检测",
"纯电动"
],
"thumbnail": "https://image-public.guazistatic.com/qnbdp7206x9d129d3de8f5457fb37e4b9482096d721791354386.jpg?x-bce-process=image/quality,q_88/resize,m_fill,w_280,h_210",
"url": "https://www.guazi.com/car-detail/c173299333296403.html"
},
{
"id": "c169801598214978",
"clue_id": "169801598214978",
"title": "奔驰 Sprinter 2009款 增配版",
"year": 2013,
"city": "北京",
"mileage_km": 99800,
"mileage_display": "9.98万公里",
"price_cny": 68400,
"price_display": "6.84万",
"discount_cny": 30000,
"new_car_price_cny": null,
"inspected": true,
"tags": [
"已检测"
],
"thumbnail": "https://image-public.guazistatic.com/qnbdp7206xf8a3aef42a784d3892f6dcd6558cdee81786368350.jpg?x-bce-process=image/quality,q_88/resize,m_fill,w_280,h_210",
"url": "https://www.guazi.com/car-detail/c169801598214978.html"
}
],
"query": {
"city": "bj",
"brand": null,
"series": null,
"price_band": null,
"page": 1
},
"total_results": 43258,
"result_pool_total": 20439,
"total_pages": 20,
"max_page": 20,
"url": "https://www.guazi.com/bj/"
}
}What the Guazi API does
| Action | Description | Concrete use case | Key params |
|---|---|---|---|
| search | Search live guazi listings. `city` is the market (a guazi city slug like `bj`, `sh`, `sz` — or the Chinese city name), optionally narrowed by `brand` (e.g. `benz`, `bmw`, `byd`, `tesila`), `series` (e.g. `benz-e`, `bmw-5`, `model-3-60`) and `price_band` (`price0`…`price15`, the bands guazi itself publishes — see the `price_bands` action for their CNY ranges). 40 cars per page, pages 1–20 (guazi serves no page 21 for any facet, so one facet URL reaches at most 800 cars — narrow by brand/series/price_band to go deeper). ⚠️ `city` is a MARKET, not a location filter: guazi sells nationwide into each city, so rows legitimately carry other cities. Each row's own `city` is where that car physically is. | Pricing and assortment teams call search to search live guazi listings. | city, brand, series, price_band, page |
| detail | Everything guazi publishes about one car by `id` (a `c…` listing id from `search` or `listing_ids`): price in CNY and the original new-car guide price, registration month, odometer, brand/series/trim, manufacturer, engine, gearbox, emission standard, drive layout, colour, body class, the city the car is actually in, whether the seller is a dealer (商家) or a private owner (个人), the ownership-transfer count and insurance-claim count, guazi's own inspection grade + whether an official 200-point report exists, and every listing photo grouped by category. ⚠️ `vin` is always null: guazi publishes no VIN or chassis number for any car. When guazi publishes only its short record for a listing, the response carries the core fields (price, mileage, registration, condition, city) without photos, seller type or colour, and says so: `field_set` is `core` instead of `full` and `partial_fields` is set. | Brand-protection teams call detail to get everything guazi publishes about one car by `id` (a `c…` listing id from `search` or `listing…. | id |
| brands | Every car brand guazi carries, with its guazi slug (`value`) for `search`'s `brand` filter, Chinese name and logo. Pass `letter` (A–Z, by the brand's pinyin initial) for one cheap page; omit it to sweep all 26 letters in one call. Read live, never from a hardcoded list. | Retail analysts call brands to get every car brand guazi carries, with its guazi slug (`value`) for `search`'s `brand` filter, C…. | letter |
| series | Every series (车系) guazi lists for one brand, with the slug for `search`'s `series` filter — e.g. brand `benz` → 奔驰C级 `benz-c`, 奔驰E级 `benz-e`, …. Read live, so a newly listed series appears the day guazi lists it. | Catalog enrichment teams call series to get every series (车系) guazi lists for one brand, with the slug for `search`'s `series` filter. | brand, city |
| cities | All 300+ cities guazi operates in, each with the slug `search`'s `city` takes, the Chinese name, the pinyin and guazi's own city id — plus which cities guazi itself marks as hot. Read live. | Pricing and assortment teams call cities to get all 300+ cities guazi operates in, each with the slug `search`'s `city` takes, the Chinese na…. | none |
| price_bands | Guazi's 16 price bands with their real CNY ranges and the slug `search`'s `price_band` takes. Read live, so the ranges are guazi's current ones rather than a copy. | Brand-protection teams call price_bands to get guazi's 16 price bands with their real CNY ranges and the slug `search`'s `price_band` takes. | city |
| listing_ids | Bulk id feed: up to 10,000 live listing ids per page, each with the date guazi last updated it. 13 pages cover the whole live inventory (~127,000 cars). Built for backfills and change detection: pull ids here, then `detail` only the ones that changed. | Retail analysts call listing_ids to get bulk id feed. | page |
| export_search | Search guazi's China used-car EXPORT & auction marketplace — a different inventory from `search`: ~180,000 cars listed for overseas buyers with English titles, FOB prices in US dollars, A–D condition grades, accident/water/fire damage flags, dealer-vs-private seller type and live auctions. ⚠️ On an auction row guazi publishes the CURRENT BID, not an asking price, so that number comes back as `current_bid_usd` with `price_usd` null and `price_kind` = `auction_bid` — a fixed-price row is the other way round. Narrow by `brand` (e.g. `audi`, `bmw`, `toyota`), `series` (e.g. `q8`, `x1`, `camry`) or `body_type` (sedan, suv, mini-van, hatchback, wagon, pick-up, van, truck). Returns the 20 cars guazi puts on that facet's first page plus the facet's own live total. ⚠️ Only 20 cars per facet are reachable: guazi serves no second page of this marketplace to anyone who is not running its JavaScript, so narrow by brand → series instead of paging. Use `export_brands` for the brand list and `export_detail` with a returned `id` for the full record. | Catalog enrichment teams call export_search to search guazi's China used-car EXPORT & auction marketplace. | brand, series, body_type |
| export_detail | Everything guazi publishes about one car on its export marketplace: the masked VIN (first 3 + last 4 characters, which is what guazi itself shows), the A–D condition grade, explicit accident / water-damage / fire-damage flags, whether an official Guazi inspection report exists, the FOB price in USD with guazi's own CNY exchange rate, model year, manufacture and first-registration dates, odometer, engine, horsepower, gearbox, drive train, body style, seats, doors, colour, exterior dimensions, which side the steering wheel is on, the Chinese city the car is in, the full options/config sheet and every photo. Takes the `id` from `export_search` (a listing slug such as `audi-q8-2019-30l-blue-142800km-at-4wd-5-seats-lz3kf79f3f.html`); a full en.guazi.com product URL is accepted too. | Pricing and assortment teams call export_detail to get everything guazi publishes about one car on its export marketplace. | id |
| export_brands | Every brand guazi carries on its export marketplace, with the slug `export_search`'s `brand` takes, the English name, guazi's brand id and the logo. Read live. | Brand-protection teams call export_brands to get every brand guazi carries on its export marketplace, with the slug `export_search`'s `brand`…. | none |
Call search from your stack
curl -X POST https://api.reefapi.com/guazi/v1/search \
-H "x-api-key: $REEF_KEY" \
-H "content-type: application/json" \
-d '{"city":"bj"}'import requests
r = requests.post(
"https://api.reefapi.com/guazi/v1/search",
headers={"x-api-key": REEF_KEY},
json={
"city": "bj"
},
)
print(r.json()["data"])const res = await fetch("https://api.reefapi.com/guazi/v1/search", {
method: "POST",
headers: {
"x-api-key": process.env.REEF_KEY,
"content-type": "application/json",
},
body: JSON.stringify({
"city": "bj"
}),
});
const { ok, data, meta, error } = await res.json();Ask your MCP-connected assistant: call reefapi.guazi.search with {"city":"bj"}.Who uses this API and why
- Pricing and assortment teams use Guazi to search live guazi listings.
- Brand-protection teams use Guazi to get everything guazi publishes about one car by `id` (a `c…` listing id from `search` or `listing….
- Retail analysts use Guazi to get every car brand guazi carries, with its guazi slug (`value`) for `search`'s `brand` filter, C….
- Catalog enrichment teams use Guazi to get every series (车系) guazi lists for one brand, with the slug for `search`'s `series` filter.
- Pricing and assortment teams use Guazi to get all 300+ cities guazi operates in, each with the slug `search`'s `city` takes, the Chinese na….
Questions developers ask before integrating
What is the Guazi API?
Guazi API is a ReefAPI endpoint group for guazi It returns live JSON through POST requests under /guazi/v1.
Is the Guazi API free to try?
Yes. ReefAPI starts with 1,000 free credits, no card required. Guazi calls use the same shared credit balance as every other ReefAPI engine.
Do I need a Guazi login or account?
No login to Guazi 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 Guazi data?
The page example is captured from a live search call, and production requests fetch live data through ReefAPI rather than a static sample.
How many credits does the Guazi API use?
Guazi actions currently cost 1-3 credits per successful call. Failed or blocked calls are free. All APIs draw from one credit pool.
Can I call Guazi from an AI assistant or MCP client?
Yes. Connect ReefAPI once through MCP and your assistant can call guazi actions with the same key, credit pool and JSON envelope used by normal REST requests.
Is the Guazi API a Guazi scraper?
It is the managed alternative to a DIY Guazi scraper. Instead of building and maintaining your own scraper — proxies, headless browsers, captcha and constant breakage — you call one ReefAPI endpoint and get the same guazi back as clean JSON.
Why does my Guazi scraper keep getting blocked?
Most Guazi scrapers break on anti-bot defenses, rate limits and IP bans that need rotating residential proxies and browser fingerprinting to clear. ReefAPI handles all of that for you — no proxies, no captchas, no maintenance — and returns live JSON. Blocked calls are free.