Skip to content
Eden Engine

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.

activeper callv1

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.

agent
// 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 do

Not 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.

ChargePrice
Per call
$0.00205
Updated
Oct 14, 2026

Input and output schemas

Input schema
input_schema.json
{
  "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
output_schema.json
{
  "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."
}