Douyin Creator Fan Demographics (by UID)
omnial/douyin-creator-fan-demographics
Returns the demographic profile of a Douyin creator's fans, given the creator's numeric UID: their split by gender, age band, province, city, city tier, phone brand, phone price band and content interest category, each also given as a TGI index. Each breakdown comes back as a JSON-encoded string of name and value pairs; most labels are in Chinese.
Price
Up to $0.00205 per call; you pay what the call used
The price shown is the price you pay. No monthly minimum. Top-ups start at $5.
Data source
Douyin
Data from Douyin.
Use it
Five steps: search, inspect, learn, run, settle. No per-tool setup; your agent reaches this tool through the meta-tools it already has.
// 1. search: find the tool
omnial_search({ query: "what you need" })
// 2. inspect: price and input schema
omnial_inspect({ tool: "omnial/douyin-creator-fan-demographics" })
// 3. learn: read the usage guide at runtime
omnial_learn({ tool: "omnial/douyin-creator-fan-demographics" })
// 4. run: price the exact call first, then run it
omnial_execute({ tool: "omnial/douyin-creator-fan-demographics", input: { /* see input_schema */ }, dry_run: true })
omnial_execute({ tool: "omnial/douyin-creator-fan-demographics", input: { /* ... */ } })
// 5. settle: the call is charged when it finishes, nothing to doNot connected yet? Point your MCP client at https://mcp.eden-engine.com/mcp, then copy a config for your client.
Pricing
Every charge this tool can incur.
| Charge | Price |
|---|---|
Per call | $0.00205 |
- Updated
- Oct 14, 2026
Input and output schemas
Input schema
{
"type": "object",
"required": [
"user_id"
],
"properties": {
"user_id": {
"type": "string",
"description": "The creator's numeric Douyin UID, as a string of digits."
}
},
"additionalProperties": false
}Output schema
{
"type": "object",
"properties": {
"Age": {
"type": "string",
"description": "The fans' split by age band, as a JSON-encoded array of {name, value} objects; value is a share from 0 to 1."
},
"City": {
"type": "string",
"description": "The fans' split by city, as a JSON-encoded array of {name, value} objects; value is a share from 0 to 1."
},
"Gender": {
"type": "string",
"description": "The fans' split by gender, as a JSON-encoded array of {name, value} objects; value is a share from 0 to 1."
},
"Age_Tgi": {
"type": "string",
"description": "The TGI index (100 is the platform average) for each age band, as a JSON-encoded array of {name, value} objects."
},
"BaseResp": {
"type": "object",
"properties": {
"StatusCode": {
"type": "number"
},
"StatusMessage": {
"type": "string"
}
}
},
"City_Tgi": {
"type": "string",
"description": "The TGI index (100 is the platform average) for each city, as a JSON-encoded array of {name, value} objects."
},
"FirstTag": {
"type": "string",
"description": "The fans' split by content interest category, as a JSON-encoded array of {name, value} objects; value is a share from 0 to 1."
},
"Province": {
"type": "string",
"description": "The fans' split by province, as a JSON-encoded array of {name, value} objects; value is a share from 0 to 1."
},
"CityLabel": {
"type": "string",
"description": "The fans' split by city tier, as a JSON-encoded array of {name, value} objects; value is a share from 0 to 1."
},
"Gender_Tgi": {
"type": "string",
"description": "The TGI index (100 is the platform average) for each gender, as a JSON-encoded array of {name, value} objects."
},
"DeviceBrand": {
"type": "string",
"description": "The fans' split by phone brand, as a JSON-encoded array of {name, value} objects; value is a share from 0 to 1."
},
"DevicePrice": {
"type": "string",
"description": "The fans' split by phone price band, as a JSON-encoded array of {name, value} objects; value is a share from 0 to 1."
},
"FirstTag_Tgi": {
"type": "string",
"description": "The TGI index (100 is the platform average) for each content interest category, as a JSON-encoded array of {name, value} objects."
},
"Province_Tgi": {
"type": "string",
"description": "The TGI index (100 is the platform average) for each province, as a JSON-encoded array of {name, value} objects."
},
"CityLabel_Tgi": {
"type": "string",
"description": "The TGI index (100 is the platform average) for each city tier, as a JSON-encoded array of {name, value} objects."
},
"DeviceBrand_Tgi": {
"type": "string",
"description": "The TGI index (100 is the platform average) for each phone brand, as a JSON-encoded array of {name, value} objects."
},
"DevicePrice_Tgi": {
"type": "string",
"description": "The TGI index (100 is the platform average) for each phone price band, as a JSON-encoded array of {name, value} objects."
}
},
"description": "The creator's fan demographics. Every breakdown is a string holding JSON text, not a nested object: parse it to read the buckets."
}