# China Car Price Cuts: Dealer Discounts & Registrations by City (`sinodata/china-car-price-cuts`) Actor

Track car price cuts in China, no login: dealer discounts for 600+ models per city from Dongchedi (懂车帝), with the biggest-cut trim, guide vs dealer price per trim, local new-car registrations, and change tracking between runs.

- **URL**: https://apify.com/sinodata/china-car-price-cuts.md
- **Developed by:** [SinoData](https://apify.com/sinodata) (community)
- **Categories:** E-commerce
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.90 / 1,000 price cuts

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

## China Car Price Cuts: Dealer Discounts & Registrations by City

Track **how much car dealers in China are cutting prices**, city by city, in one clean dataset. Data comes from the public local price lists of **Dongchedi (懂车帝)**, one of China's biggest car platforms. No login, no browser.

- **Dealer price cuts (降价)**: 600-730 models per city, each with the biggest discount (% off the guide price), the trim it applies to, the cut in 万 and the local dealer price range
- **Every trim's prices** (optional): guide price, local dealer price, cut, discount % and the price owners report paying
- **Local new-car registrations (上牌量)**: the best-selling models in each city, 300-420 models in a big city
- **Any city**: 北京, 上海, 广州, 深圳, 成都, 苏州, 三亚, 拉萨 and hundreds more
- **Monitoring**: every record says whether it is new, changed or unchanged since your last run, or save only the changes

China's car price war is one of the biggest stories in the auto industry. This Actor turns it into data you can chart.

### Use cases

- **Price-war tracking** for analysts, investors and journalists: which brands are cutting hardest, in which cities, this week.
- **Carmakers and dealers**: competitor discounts by model and trim, city by city.
- **EV market research**: battery EV, plug-in hybrid and range-extender discounts.
- **Regional demand**: which models people actually register in Shenzhen vs Beijing vs Chengdu.
- **Alerts**: schedule a daily run with "Only new or changed models" and send the results to Slack, email or Google Sheets.

### Example input

```json
{
  "cities": ["北京", "上海", "深圳"],
  "lists": ["priceCuts", "registrations"],
  "energyType": "all",
  "maxModelsPerCity": 200,
  "includeTrimPrices": true,
  "onlyChanges": false
}
```

### Output

One record per model per city. A price cut:

```json
{
  "type": "priceCut",
  "city": "北京",
  "rank": 1,
  "model": "奔驰EQE",
  "brand": "奔驰",
  "maxDiscountPct": 50,
  "maxDiscountCutWan": 23.9,
  "maxDiscountTrim": "2026款 EQE 500 4MATIC 先锋版",
  "dealerPriceMinWan": 23.9,
  "dealerPriceMaxWan": 38.6,
  "dealerPriceText": "23.90-38.60万",
  "changeStatus": "changed",
  "previousMaxDiscountPct": 46,
  "changeMaxDiscountPct": 4,
  "trims": [
    { "trim": "2026款 EQE 500 4MATIC 先锋版", "guidePriceWan": 47.8, "dealerPriceWan": 23.9, "cutWan": 23.9, "discountPct": 50, "ownerPaidPriceWan": null }
  ],
  "url": "https://www.dongchedi.com/auto/series/5813"
}
```

A local registration ranking entry:

```json
{
  "type": "registration",
  "city": "深圳",
  "rank": 1,
  "model": "小米SU7",
  "brand": "小米汽车",
  "registrations": 843,
  "priceText": "21.99-30.39万"
}
```

Prices are in 万 (10,000 CNY), so 23.9 means ¥239,000. Model and brand names are kept in Chinese as published.

`maxDiscountPct` is the biggest discount of any trim; `maxDiscountTrim` and `maxDiscountCutWan` belong to that trim. Turn on **Include every trim's guide and dealer price** to see all trims.

### Monitoring

With **Compare with the last run** (on by default) each record gets `changeStatus` (`new`, `changed`, `unchanged`, or `first run`) plus the previous value and the change: the max discount % for price cuts, and registrations for the registration ranking. The memory is kept in your Apify account between runs.

Turn on **Only new or changed models** to save, and pay for, only what moved since the last run. Use a different **Memory name** for each scheduled task.

### Pricing

**$0.001 per record** (one model in one city). All price cuts in one big city (about 700 models) cost about $0.70; the top 100 cost $0.10. Trim prices are included at no extra charge.

### Notes and limits

- Prices are local dealer quotes published by Dongchedi; actual prices at the dealer can differ.
- The registration ranking is Dongchedi's local new-car registration (上牌) ranking. Dongchedi does not state its time window; it is updated regularly.
- Use Chinese city names, or common English names like Beijing, Shanghai, Shenzhen. A city Dongchedi doesn't know is skipped with a warning.
- Only public data is collected.

### Related

- [China Car Sales Rankings](https://apify.com/sinodata/china-car-sales): monthly national sales by model.

### Feedback

Need another field, city list or source? Open an issue on the Issues tab.

# Actor input Schema

## `cities` (type: `array`):

Chinese cities to check, e.g. 北京, 上海, 广州, 深圳, 成都, 苏州. Prices and registrations are local, so each city is a separate list. Common English names (Beijing, Shanghai, Shenzhen...) also work.

## `lists` (type: `array`):

priceCuts = local dealer price cuts (降价榜); registrations = local new-car registrations ranking (本地上牌量).

## `energyType` (type: `string`):

All cars, or only battery EVs, plug-in hybrids or range-extender EVs. Applies to the price-cut list.

## `maxModelsPerCity` (type: `integer`):

How many models to save from each list. A big city has about 650-730 models with price cuts and 300-400 in the registration ranking.

## `includeTrimPrices` (type: `boolean`):

For each price-cut model, also fetch all trims on sale with guide price, local dealer price, cut and owner-reported price (one extra request per model, no extra charge).

## `compareWithLastRun` (type: `boolean`):

Add the previous value, the change and a status (new / changed / unchanged) to every record, using a memory kept in your account between runs.

## `onlyChanges` (type: `boolean`):

Save (and pay for) only models whose price cut or registrations changed, or that are new in the list, since the last run. The first run saves everything.

## `memoryName` (type: `string`):

Use different names to keep separate monitoring histories (for example one per scheduled task).

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

Not needed for normal use.

## Actor input object example

```json
{
  "cities": [
    "北京",
    "上海"
  ],
  "lists": [
    "priceCuts"
  ],
  "energyType": "all",
  "maxModelsPerCity": 100,
  "includeTrimPrices": false,
  "compareWithLastRun": true,
  "onlyChanges": false,
  "memoryName": "default",
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

## `overview` (type: `string`):

No description

## `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 = {
    "cities": [
        "北京",
        "上海"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("sinodata/china-car-price-cuts").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 = { "cities": [
        "北京",
        "上海",
    ] }

# Run the Actor and wait for it to finish
run = client.actor("sinodata/china-car-price-cuts").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 '{
  "cities": [
    "北京",
    "上海"
  ]
}' |
apify call sinodata/china-car-price-cuts --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,sinodata/china-car-price-cuts"
        }
    }
}
```

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/P4uu8xKGh9HOCHL0L/builds/R9vhFProKg4YI224C/openapi.json
