Douyin trend-index keyword audience API

Get who is behind a keyword on Douyin over a date range, from the platform's own keyword tool: the share and TGI of each age group, gender, province, city, city tier and interest. One object a call; $0.0020 per call. Errors, timeouts and objects that do not exist are not charged.

GEThttps://api.dataxapi.com/v1/douyin/index/keywords/audience/get
Also known asdouyin keyword demographicsdouyin keyword portraitwho searches a keyword on douyinIn Chinese: 抖音巨量算数关键词人群画像 API
Price$0.0020/ call · Errors and timeouts are not charged
Returns1 objectone keyword audience object
When an upstream failsRetried for youon the same route, or a backup route; never charged

Try it

Change a value and the request on the right follows.
Run · $0.0020

Sign in to run it; it runs on your own balance. New accounts can try this endpoint free, up to 50 calls.

Used to call POST /v1/douyin/index/keyword-audience? It is this address now. What changed for old endpoints

The first 8 rows of a response recorded 2026-10-12 21:50 UTC for 咖啡.
Fieldlabelsharetgi
age18-2319.7%174.17
age24-3022.3%173.72
gender男47.0%98.27
gender女53.0%101.59
province北京2.2%120.01
province天津1.2%105.43
city上海2.5%125.4
city广州2.4%117.79
curl -G "https://api.dataxapi.com/v1/douyin/index/keywords/audience/get" \
  --data-urlencode "keyword=咖啡" \
  --data-urlencode "since=2026-09-01T00:00:00Z" \
  --data-urlencode "until=2026-09-30T00:00:00Z" \
  -H "Authorization: Bearer $DATAXAPI_API_KEY"
{
  "code": "ok",
  "request_id": "e05f9d23-d8dd-4f0f-9084-3f4ca55d0dbb",
  "data": {
    "item": {
      "keyword": "咖啡",
      "age": [
        { "label": "18-23", "share": 0.1968, "tgi": 174.17389307762207 },
        { "label": "24-30", "share": 0.2233, "tgi": 173.71695132383041 },
        // … 3 more
      ],
      "gender": [
        { "label": "男", "share": 0.47, "tgi": 98.27023904973254 },
        { "label": "女", "share": 0.53, "tgi": 101.58569115669054 }
      ],
      "province": [
        { "label": "北京", "share": 0.0221, "tgi": 120.01085780496312 },
        { "label": "天津", "share": 0.0121, "tgi": 105.42964416985868 },
        // … 32 more
      ],
      "city": [
        { "label": "上海", "share": 0.0245, "tgi": 125.4042968127423 },
        { "label": "广州", "share": 0.0237, "tgi": 117.79286978677968 },
        // … 28 more
      ],
      "city_tier": [
        {
          "label": "一线城市",
          "share": 0.08856723771604946,
          "tgi": 114.35574144488798
        },
        {
          "label": "新一线城市",
          "share": 0.19688659709388875,
          "tgi": 103.66957853814951
        },
        // … 5 more
      ],
      "interest": [
        {
          "label": "时尚",
          "share": 0.15486799847286528,
          "tgi": 111.80033780828992
        },
        {
          "label": "美食",
          "share": 0.10207902382205732,
          "tgi": 113.58111661037135
        },
        // … 23 more
      ]
    }
  },
  "warnings": [],
  "meta": {
    "capability": "douyin.index.keywords.audience.get",
    "result_status": "complete",
    "fetched_at": "2026-10-12T21:50:52.000Z",
    "cached": false,
    "replayed": false,
    "unavailable": {},
    "billing": {
      "amount": "0.002",
      "currency": "USD",
      "balance_after": "9.998"
    }
  }
}

From a response recorded 2026-10-12 21:50 UTC. Names, text and IDs are examples, and so are the links: none is the recorded one (the page shows no one's personal data); the figures are as recorded. Long lists are cut. The request ID, cursor and balance are made up.

Size as sent: 6.7 KB in the standard view (6.7 KB compact, 6.7 KB full).

This example as a JSON file

curl -G "https://api.dataxapi.com/v1/douyin/index/keywords/audience/get" \
  --data-urlencode "keyword=咖啡" \
  --data-urlencode "since=2026-09-01T00:00:00Z" \
  --data-urlencode "until=2026-09-30T00:00:00Z" \
  -H "Authorization: Bearer $DATAXAPI_API_KEY"
from dataxapi import DataXAPI

dx = DataXAPI()  # reads DATAXAPI_API_KEY
result = dx.douyin.index.keywords.audience.get(keyword="咖啡", since="2026-09-01T00:00:00Z", until="2026-09-30T00:00:00Z")
print(result["data"]["item"])
import { DataXAPI } from "@dataxapi/sdk";

const dx = new DataXAPI(); // reads DATAXAPI_API_KEY
const result = await dx.douyin.index.keywords.audience.get({ keyword: "咖啡", since: "2026-09-01T00:00:00Z", until: "2026-09-30T00:00:00Z" });
console.log(result.data.item);
dataxapi call douyin.index.keywords.audience.get 'keyword=咖啡' since=2026-09-01T00:00:00Z until=2026-09-30T00:00:00Z
{
  "mcpServers": {
    "dataxapi": {
      "type": "http",
      "url": "https://api.dataxapi.com/mcp",
      "headers": {
        "Authorization": "Bearer ${DATAXAPI_API_KEY}"
      }
    }
  }
}

Add this to your MCP client, then ask your agent to call douyin.index.keywords.audience.get.

Parameters

keywordtextrequired

One keyword; letter case does not matter. Example: 咖啡.

sincetimerequired

The first day counted: the China-time (UTC+8) calendar day this moment falls on. Example: 2026-09-01T00:00:00Z.

untiltimerequired

The last day counted, read the same way; the platform publishes a day or two late. Example: 2026-09-30T00:00:00Z.

viewtext

How much of each item to return. All three cost the same. Values: compact, standard (default), full.

fieldslist of text

Return only these fields. Each by its path, such as author.name.

Known limits

  • One object per call: there is nothing to page.

Returned fields

data.item is one keyword audience object. Preview: the structure may change, announced beforehand.

keywordtextcompact

The keyword

agelist of objectcompact

By age group

age[].labeltextcompact

Name of the group, in the platform's words

age[].sharenumbercompact

Share of the audience in this group, 0 to 1

age[].tginumbercompact

TGI: how much this group leans to the keyword; 100 is the platform's average, above 100 leans more

genderlist of objectcompact

By gender

Show all 28 fields →
gender[].labeltextcompact

Name of the group, in the platform's words

gender[].sharenumbercompact

Share of the audience in this group, 0 to 1

gender[].tginumbercompact

TGI: how much this group leans to the keyword; 100 is the platform's average, above 100 leans more

provincelist of objectcompact

By province

province[].labeltextcompact

Name of the group, in the platform's words

province[].sharenumbercompact

Share of the audience in this group, 0 to 1

province[].tginumbercompact

TGI: how much this group leans to the keyword; 100 is the platform's average, above 100 leans more

citylist of objectcompact

By city: the cities with the largest shares, as the platform lists them; they do not add up to 1

city[].labeltextcompact

Name of the group, in the platform's words

city[].sharenumbercompact

Share of the audience in this group, 0 to 1

city[].tginumbercompact

TGI: how much this group leans to the keyword; 100 is the platform's average, above 100 leans more

city_tierlist of objectcompact

By city tier

city_tier[].labeltextcompact

Name of the group, in the platform's words

city_tier[].sharenumbercompact

Share of the audience in this group, 0 to 1

city_tier[].tginumbercompact

TGI: how much this group leans to the keyword; 100 is the platform's average, above 100 leans more

interestlist of objectcompact

By interest; the shares do not add up to 1

interest[].labeltextcompact

Name of the group, in the platform's words

interest[].sharenumbercompact

Share of the audience in this group, 0 to 1

interest[].tginumbercompact

TGI: how much this group leans to the keyword; 100 is the platform's average, above 100 leans more

approximatelist of objectcompact

Which numbers of this item are approximate or lower bounds; absent when all are exact

approximate[].fieldtextcompact

Path of the field, such as metrics.views

approximate[].kindtextcompact

Approximate, or a lower boundapproximatelower_bound

Typical size of one item: compact 6.4 KB, standard 6.4 KB, full 6.4 KB (measured on the response recorded 2026-10-12 21:50 UTC).

When you are charged

A result with data$0.0020, once per call
The object does not exist (404)not charged
Invalid parameters, a failure of ours or of the data source, a timeoutnot charged
CaseCharged
The most one call can cost$0.0020 (send X-Max-Price to refuse anything above your own limit)

Prices as read 2026-10-21 09:10 UTC, under price book 2, in effect since 2026-10-17 11:00 UTC; the Playground reads the price in force before a run.

If the object does not exist

The answer is 404 not_found and nothing is charged. reason says which: not_found (it does not exist) or private_or_deleted.

Errors

What this endpoint can answer with; codes all endpoints share are on the full list.

HTTPCodeMeaningCharged
400invalid_paramsA parameter is invalidRetry: After a fixNo
402insufficient_balanceThe balance is too lowRetry: After a fixNo
404not_foundThe object does not exist, is private or was deletedRetry: NoNo
502upstream_failedThe data source failedRetry: YesNo
504timeoutThe data did not arrive in time; retry with the same idempotency keyRetry: YesNo

All error codes →

Questions

How much does the Douyin trend-index keyword audience API cost?

$0.0020 per call. The most one call can cost is $0.0020.

When am I not charged?

Errors, timeouts and objects that do not exist are not charged.

What happens if the object does not exist?

The answer is 404 not_found and nothing is charged. reason says which: not_found (it does not exist) or private_or_deleted.

Where do the figures come from?

From 巨量算数 (Juliang Suanshu, the Douyin index): who is behind the keyword over the dates asked for: the share of each age group, gender, province, city, city tier and interest, each with its TGI (100 is the platform's average).

How do I use it in ChatGPT or Claude?

Connect DataXAPI once (one prompt with your key, on the agents page), then ask in plain words: "Who searches 咖啡 on Douyin? Use DataXAPI." The agent calls douyin.index.keywords.audience.get, $0.0020 a call.

All 34 Douyin endpoints

Douyin trend-index endpoints
Douyin endpoints
Douyin Xingtu endpoints

Use it in your AI

Copy this prompt

Your API key is built in, so there is nothing to configure.

Read https://dataxapi.com/agents.md and set up DataXAPI in this agent. My API key is dx_…; use it for every DataXAPI call.
Sign in to copy it with your key

No account yet? Sign-up takes an email and no card, and a failed call is never charged.

then paste

Paste it into your agent

It reads the page the prompt points to and connects itself.

Your agent
Read https://dataxapi.com/agents.md and set up DataXAPI in this agent. My API key is dx_••••; use it for every DataXAPI call.
DataXAPI connected · 5 tools ready
now try it

Now ask something

Use one of these, or your own words.

Read https://dataxapi.com/apis/douyin/index/keywords/audience/get.md and help me use the DataXAPI endpoint douyin.index.keywords.audience.get (Douyin trend-index keyword audience).
Prefer to set it up by hand?
dataxapi setupgives the agents on your machine (Claude Code, Codex, Cursor) the DataXAPI MCP server and the base skill. The key is read from DATAXAPI_API_KEY; none is written into a file.MCP server: https://api.dataxapi.com/mcp. The entry for your client is under MCP in the request examples of this page; then ask your agent to call douyin.index.keywords.audience.get.Other clients →
Ask with this pageSends the Markdown version
Brief for an AIEverything needed to call it, as text
Show the text
Use the DataXAPI endpoint douyin.index.keywords.audience.get (Douyin trend-index keyword audience). Get who is behind a keyword on Douyin over a date range, from the platform's own keyword tool: the share and TGI of each age group, gender, province, city, city tier and interest.
Call GET https://api.dataxapi.com/v1/douyin/index/keywords/audience/get with the header "Authorization: Bearer $DATAXAPI_API_KEY". Read the key from the environment variable DATAXAPI_API_KEY; never write it into code.
Parameters:
- keyword (required): One keyword; letter case does not matter. Example: 咖啡.
- since (required): The first day counted: the China-time (UTC+8) calendar day this moment falls on. Example: 2026-09-01T00:00:00Z.
- until (required): The last day counted, read the same way; the platform publishes a day or two late. Example: 2026-09-30T00:00:00Z.
- view: How much of each item to return. All three cost the same. Values: compact, standard (default), full.
- fields: Return only these fields. Each by its path, such as author.name.
Price: $0.0020 per call. Errors, timeouts and objects that do not exist are not charged.
The answer is JSON: data.item holds keyword audience; meta.billing.amount is what this call was charged.
Example:
curl -G "https://api.dataxapi.com/v1/douyin/index/keywords/audience/get" \
  --data-urlencode "keyword=咖啡" \
  --data-urlencode "since=2026-09-01T00:00:00Z" \
  --data-urlencode "until=2026-09-30T00:00:00Z" \
  -H "Authorization: Bearer $DATAXAPI_API_KEY"
Full reference in Markdown: https://dataxapi.com/apis/douyin/index/keywords/audience/get.md

Names and identifiers

In Chinese
抖音巨量算数关键词人群画像 API
Endpoint ID
douyin.index.keywords.audience.get
Endpoint
GET /v1/douyin/index/keywords/audience/get
Last checked 2026-10-21 09:10 UTC.View the Markdown versionopenapi.jsonllms.txt

Start with one key.

207 endpoints on 21 platforms, from $0.0003 a call. Errors and timeouts are not charged.

Start free