Blog/教程//更新于

抖音用户搜索API教程:按关键词查找创作者

抖音用户搜索 API 教程:通过 SandBase Model API 按关键词查找创作者,附 curl、Python 示例和 2026-10-01 实测结果,适用于 KOL 发现和监控。

douyin-user-search-api-tutorial-2026 cover

抖音用户搜索API教程:按关键词查找创作者

先说结论 — douyin/search/user-search-v2 通过 POST /v1/api/douyin/search/user-search-v2 按关键词搜索抖音公开创作者账号,请求体只有 keyword 和 cursor。2026-10-01 实测每页返回 30 个账号,翻页结果可能重复,所以在 has_more 为真时沿 cursor 翻页,并按 user_id 去重。截至 2026-10-01,目录把这个端点标为 Free。

想通过API查找特定领域的抖音创作者?无论你是在构建KOL发现工具、监控竞品账号,还是自动化社交媒体研究,SandBase的抖音用户搜索API都能让你在自己的代码里按关键词搜索抖音公开创作者账号。

本教程将教你如何调用接口、解析响应数据,并将其集成到实际工作流中,附带 2026-10-01(UTC)实测过的curl和Python示例。

为什么需要通过API搜索抖音用户?

抖音的创作者规模很大,通过App手动搜索创作者既费时又无法规模化。基于API的方案让你能够:

  • 发现KOL(关键意见领袖):通过搜索相关关键词,找到美妆、科技、美食、健身等任何垂类的达人。
  • 监控竞品:定期重跑关键词搜索,看你的品牌或品类下出现了哪些账号。
  • 构建社交聆听工具:自动化发现讨论你品牌或行业的创作者。
  • 驱动营销自动化:将创作者数据接入你的CRM或商务合作工具。
  • 进行市场调研:了解抖音上各品类中较活跃的声音。

SandBase是什么?

SandBase是一个统一API网关,将众多社交媒体和数据API聚合在一个一致的接口下。你不需要处理每个平台不同的认证方式和响应格式,只需调用一个端点、使用一个API密钥。

针对抖音,截至 2026-10-01,SandBase 抖音目录列出 262 个端点,包括用户搜索、视频搜索、创作者主页等,全部通过 POST https://api.sandbase.ai/v1/api/<model>、使用同一个API密钥调用。

SandBase 抖音 API 目录页,Douyin Endpoints 显示 262 SHOWN,选中的端点标为 Available 和 Free

截图:SandBase 抖音目录显示“262 SHOWN”,上文的端点数量即出自这里(2026-10-02 截取)。

适用范围:公开、只读数据

本教程的工作流只返回抖音公开、只读数据。调用需要 SandBase API 密钥,SandBase 不是抖音官方合作方。它不提供私密账号数据、私信、账号所有者专属分析,也不支持发布、私信或任何账号操作。

SandBase user-search-v2抖音开放平台(open.douyin.com)
认证一个 SandBase API 密钥开发者应用加用户/账号授权
访问范围公开的创作者搜索结果经授权、绑定账号的工作流
典型用途关键词发现创作者、调研代表已授权抖音用户操作的应用

准备工作

开始之前,你需要:

  1. SandBase账号:在 sandbase.ai 注册
  2. API密钥:在SandBase控制台生成
  3. 额度:SandBase采用额度系统;截至 2026-10-01,目录里 douyin/search/user-search-v2 标的是 Free

调用这个端点不需要注册抖音开发者应用,也不需要实现抖音 OAuth 流程;请求里唯一的凭证是 SandBase API 密钥。

API概览

按关键词搜索抖音创作者的关键信息:

参数值
端点https://api.sandbase.ai/v1/api/douyin/search/user-search-v2
方法POST
模型douyin/search/user-search-v2
认证Bearer token(你的SandBase API密钥)
输入keyword(字符串)、cursor(整数,首页传 0)
输出一页匹配的创作者账号

完整请求 schema 见 user-search-v2 API 参考。这里用的是端点参考里的 Model API POST /v1/api/... 路由,不是目录页展示的 GET /apis/v1/...。请求 schema 只有 keyword 和 cursor 两个参数,没有控制返回条数的参数,需要条数限制就在本地截取。

SandBase 的 douyin/search/user-search-v2 API 参考页,显示 POST /v1/api/douyin/search/user-search-v2 以及可选的 cursor、keyword 字段

截图:user-search-v2 参考页写明 POST /v1/api/douyin/search/user-search-v2,请求体只有 cursor(首页传 0)和 keyword 两个字段(2026-10-02 截取)。

如果你已经知道创作者的名字或抖音号,douyin/creator/user-search(必填 user_name)是更轻量的查找方式。我在 2026-10-01 用 {"user_name": "人民日报"}(人民日报媒体账号)调用了一次(run id db1e6236-5baf-43b4-824e-d14c557ce9de),返回的 user_infos[] 只有 avatar、nick_name、short_id 和数字字符串形式的 user_id(第一条:人民日报,short_id 为 rmrbxmt),没有粉丝数。所以本教程用 user-search-v2 做关键词发现。

SandBase 的 douyin/creator/user-search API 参考页:按名称/抖音号查找,只有一个必填的 User Name 输入

截图:douyin/creator/user-search 参考页只有一个必填的 user_name,即上文提到的按名称/抖音号的轻量查找;这张图早于 2026-10-02 这批截图。

在我 2026-10-01 的 user-search-v2 调用里,每条结果带有(不限于):

  • nick_name:昵称
  • fans_cnt:粉丝数
  • like_cnt:获赞总数
  • publish_cnt:作品数
  • avatar_url:头像
  • user_id:sec_user_id 格式的值(MS4wLjABAAAA...),可用于主页和作品列表接口

这些字段名来自实测观察,不是文档保证。结果里没有出现简介和认证标签。

第一步:发起第一个API调用(curl)

让我们搜索与”咖啡”相关的抖音创作者:

curl -X POST https://api.sandbase.ai/v1/api/douyin/search/user-search-v2 \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $SANDBASE_API_KEY" \
  -d '{"keyword": "咖啡", "cursor": 0}'

理解响应数据

实测于 2026-10-01(UTC),使用通用关键词”咖啡”:上面的请求返回 HTTP 200、status: completed,一页共 30 个账号(run id c3e55399-822e-4fa4-83ac-42aba82f93b2)。端点参考把负载记录在 outputs[0].data。在负载内部,这个端点又包了一层 data,与 code、message 并列。以下是真实返回,只保留第一条结果和其中六个字段:

{
  "id": "c3e55399-822e-4fa4-83ac-42aba82f93b2",
  "status": "completed",
  "model": "douyin/search/user-search-v2",
  "outputs": [
    {
      "data": {
        "code": 0,
        "message": "",
        "data": {
          "cursor": 30,
          "has_more": true,
          "user_list": [
            {
              "nick_name": "咖啡",
              "fans_cnt": 2803302,
              "like_cnt": 20239511,
              "publish_cnt": 381,
              "avatar_url": "https://p26.douyinpic.com/aweme/100x100/aweme-avatar/...",
              "user_id": "MS4wLjABAAAA..."
            }
          ]
        }
      }
    }
  ]
}

负载字段来自这次实测,不是文档化的 schema。翻页时,我在 has_more 为 true 时把返回的 cursor 作为下一次请求的 cursor。2026-10-01 我用”护肤”测试,第一页(cursor: 0)和第二页(cursor: 30)各返回 30 个账号,其中有 1 个账号两页都出现了(runs be6a6551-9d72-4c38-b629-5ac1cf2ed33c、7edbfcce-79ca-45d6-a911-374351ffdd84)。合并多页时请按 user_id 去重。

第二步:Python集成

以下是适用于生产环境的Python实现:

import requests


class DouyinUserSearch:
    """通过 SandBase Model API 搜索抖音创作者。"""

    def __init__(self, api_key: str):
        self.api_key = api_key
        self.endpoint = "https://api.sandbase.ai/v1/api/douyin/search/user-search-v2"

    def search_page(self, keyword: str, cursor: int = 0) -> dict:
        """拉取一页结果,返回内层负载
        (我的调用里是 {"cursor", "has_more", "user_list"})。"""
        headers = {
            "Content-Type": "application/json",
            "Authorization": f"Bearer {self.api_key}",
        }
        payload = {"keyword": keyword, "cursor": cursor}

        response = requests.post(self.endpoint, headers=headers, json=payload, timeout=60)
        response.raise_for_status()
        body = response.json()

        outputs = body.get("outputs") or []
        if body.get("status") != "completed" or not outputs:
            raise RuntimeError(f"SandBase call did not complete: {body.get('status')} {body.get('error')}")
        data = outputs[0].get("data") or {}
        return data.get("data") or {}

    def search(self, keyword: str, count: int = 10) -> list[dict]:
        """返回最多 count 个不重复的创作者;has_more 为 true 时按 cursor 继续翻页。"""
        users, seen, cursor = [], set(), 0
        while len(users) < count:
            page = self.search_page(keyword, cursor)
            for user in page.get("user_list") or []:
                if user.get("user_id") not in seen:
                    seen.add(user.get("user_id"))
                    users.append(user)
            if not page.get("has_more") or page.get("cursor") is None:
                break
            cursor = page["cursor"]
        return users[:count]


# 使用示例
api_key = "your_sandbase_api_key_here"
client = DouyinUserSearch(api_key)

# 搜索咖啡相关创作者
users = client.search("咖啡", count=10)

for user in users:
    print(f"昵称: {user.get('nick_name')}")
    print(f"粉丝数: {user.get('fans_cnt', 0):,}")
    print(f"作品数: {user.get('publish_cnt')}")
    print(f"sec_user_id: {user.get('user_id')}")
    print("---")

添加错误处理

生产系统中建议加入重试逻辑和错误处理:

import time
from typing import Optional

def search_with_retry(
    client: DouyinUserSearch,
    keyword: str,
    count: int = 10,
    max_retries: int = 3
) -> Optional[list]:
    """带指数退避的搜索重试。"""
    for attempt in range(max_retries):
        try:
            return client.search(keyword, count)
        except requests.exceptions.HTTPError as e:
            if e.response.status_code == 429:
                wait_time = 2 ** attempt
                print(f"触发速率限制,{wait_time}秒后重试...")
                time.sleep(wait_time)
            else:
                raise
        except requests.exceptions.RequestException as e:
            print(f"请求失败: {e}")
            if attempt < max_retries - 1:
                time.sleep(2 ** attempt)
    return None

第三步:实际应用场景

场景一:营销活动的KOL发现

查找护肤垂类的创作者并按粉丝数筛选:

users = client.search("护肤", count=60)

# 筛选腰部达人(10万-50万粉丝)
mid_tier_kols = [
    user for user in users
    if 100_000 <= user.get("fans_cnt", 0) <= 500_000
]

print(f"找到 {len(mid_tier_kols)} 位腰部护肤达人")
for kol in mid_tier_kols:
    print(f"  {kol.get('nick_name')} — {kol.get('fans_cnt', 0):,} 粉丝")

场景二:竞品监控

追踪与你品牌或竞品相关的账号:

competitors = ["品牌A", "品牌B", "品牌C"]

for brand in competitors:
    users = client.search(brand, count=5)
    print(f"\n{brand}: 找到 {len(users)} 个相关账号")
    for user in users:
        print(f"  @{user.get('nick_name')} ({user.get('fans_cnt', 0):,} 粉丝)")

场景三:构建社交监控Agent

将创作者关键词搜索与AI Agent框架结合,构建自动化社交情报系统:

# AI Agent工作流伪代码
keywords = ["你的品牌名", "行业关键词", "竞品名称"]

for keyword in keywords:
    creators = client.search(keyword, count=10)

    # 将结果存入数据库
    for creator in creators:
        save_to_db(creator)  # 以 creator["user_id"] 作为主键

    # 发现新的高粉账号时告警
    new_accounts = filter_new_accounts(creators)
    if new_accounts:
        send_alert(f"关键词'{keyword}'发现新账号: {new_accounts}")

与其他SandBase API组合使用

你可以组合几个搜索端点做跨平台研究。下表只列关键字段,完整请求 schema 请看各自的参考页:

平台API模型关键字段用途
抖音用户搜索douyin/search/user-search-v2keyword、cursor查找创作者
抖音视频搜索douyin/search/video-search-v2keyword、cursor(另有可选筛选项)按关键词查找内容
小红书笔记搜索xiaohongshu/app-v2/search-noteskeyword、page(另有可选字段)跨平台研究
微博用户搜索weibo/web-v2/user-searchquery、page(另有可选筛选项)查找相关微博账号

在我 2026-10-01 的调用里,这几个接口用”咖啡”都返回了非空结果(runs a102bf5b-61bf-42ac-803a-da55633a38e6、846c4b40-b260-401c-ac2f-254175315626、4e4e6cf4-9170-49f2-aa42-efd1e0be090d)。它们的负载结构各不相同,解析前请先看各自的参考文档。

搜索结果里的 user_id 是 sec_user_id,douyin/web/user-profile 和 douyin/web/user-post-videos 都接受它。这些下游端点有各自的条件(作品列表的参考注明 Web 接口可能不稳定,并可选传入用户 cookie),请逐个查看参考,不要默认它们和 user-search-v2 表现一致。

更多关于抖音数据API的详情,请查看我们的指南:SandBase上的抖音数据API。如果你正在构建消费社交数据的AI Agent,请阅读2026年社交媒体数据API与AI Agent。

定价与速率限制

SandBase 按调用次数从额度余额中计费,可以在控制台查看额度使用情况。截至 2026-10-01,目录里 douyin/search/user-search-v2 标的是 Free,模型页也一样:

SandBase 的 douyin/search/user-search-v2 模型页,显示 Base price Free、sync 执行、2 个输入字段

截图:douyin/search/user-search-v2 模型页标注 Base price 为 Free、执行方式 sync、输入字段 2 个(2026-10-02 截取)。

当前套餐请查看 SandBase定价页面。遇到 HTTP 429 时,按上文的方式退避重试。

最佳实践

  1. 优先试中文关键词:抖音用户以中文为主,中文关键词是合理的起点;也可以和你所在垂类的英文词对比一下。
  2. 关键词要具体:“精品咖啡”这类更窄的关键词,通常比”咖啡”得到更有针对性的列表。
  3. 组合多次搜索:使用相关关键词多次搜索,构建更全面的创作者列表。
  4. 缓存结果:如果不需要每次都拿最新数字,就缓存结果,按适合你场景的频率刷新。
  5. 遵守速率限制:实现退避逻辑以优雅处理429响应。

总结

SandBase 的 user-search-v2 端点让你可以用简单的方式按关键词搜索抖音公开创作者账号。每页一次API调用,你就能:

  • 为营销活动找到相关KOL
  • 监控竞品关键词下出现的账号
  • 构建自动化社交聆听工具
  • 为AI Agent提供公开创作者数据

立即注册SandBase,然后打开 user-search-v2 API 参考,开始你的第一次调用。