主题
竞品域名分析(/v3/dataforseo_labs/google/competitors_domain/live)
接口简介
该接口用于获取目标域名在自然搜索与付费搜索中的竞品域名概览数据:
- 竞品域名的排名与流量指标
- 目标域名与竞品域名在同一 SERP 中排名的交集指标
- 基于交集计算的目标域名指标与竞品域名指标
- 可选的点击流扩展指标(如点击流估算流量、性别分布、年龄分布)
数据更新频率: 每周更新一次。最新更新时间可通过 /v3/dataforseo_labs/status/ 查询。
请求信息
- 方法:
POST - 接口地址:
https://api.seermartech.cn/v3/dataforseo_labs/google/competitors_domain/live
计费说明
该接口按请求计费。
- 参考价:以响应中的
cost字段为准 - 如启用
include_clickstream_data=true,请求费用将翻倍 - 实扣费以响应头
X-SeerMarTech-Charge-CNY为准
调用限制
- 每分钟最多
2000次 API 调用 - 最多
30个并发请求 - POST 请求体为 UTF-8 编码的 JSON 数组,格式为:
json
[
{
"target": "example.com"
}
]请求参数
| 字段名 | 类型 | 说明 |
|---|---|---|
target | string | 填。目标网站域名,不要 https:// 和 www.。可传页面 URL,但返回结果将按该 URL 所属域名统计。 |
location_name | string | 地区名。未传 location_code 时填。location_name 与 location_code 二选一。可通过 /v3/dataforseo_labs/locations_and_languages 获取可用地区。示例:United Kingdom |
location_code | integer | 地区编码。未传 location_name 时填。location_name 与 location_code 二选一。可通过 /v3/dataforseo_labs/locations_and_languages 获取可用地区编码。示例:2840 |
language_name | string | 语言名。未传 language_code 时填。language_name 与 language_code 二选一。可通过 /v3/dataforseo_labs/locations_and_languages 获取可用语言。示例:English |
language_code | string | 语言代码。未传 language_name 时填。language_name 与 language_code 二选一。示例:en |
item_types | array | 可选。指定返回的搜索结果类型。若数组中非 organic 的类型,结果会按数组中的第一个类型排序;且只能对响应中的类型进行过滤与排序。 |
include_clickstream_data | boolean | 可选。是否返回点击流指标。设为 true 后,响应中会 clickstream_etv、clickstream_gender_distribution、clickstream_age_distribution。默认值:false。启用后费用翻倍。 |
filters | array | 可选。结果过滤条件数组,最多支持 8 个过滤条件。多个条件之间需使用逻辑运算符 and / or。支持操作符:regex、not_regex、<、<=、>、>=、=、<>、in、not_in |
order_by | array | 可选。结果排序规则。支持 asc 升序、desc 降序。单次请求最多可设置 3 条排序规则。若 item_types含非 organic 类型,则结果按 item_types 第一个类型排序。 |
limit | integer | 可选。返回的最大域名数量。默认值:100;最大值:1000。 |
offset | integer | 可选。结果偏移量。默认值:0。例如设置为 10,则跳过前 10 条结果并从后续结果开始返回。 |
max_rank_group | integer | 可选。用于识别竞品时的最大排名范围。默认值:100。例如设为 10 时从 Google 前 10 名结果中提取竞品。 |
exclude_top_domains | boolean | 可选。是否排除大型站点。默认值:false。设为 true 后,可排除如 wikipedia.org、amazon.com、youtube.com、reddit.com 等头部域名,以获得更贴近业务的竞品。 |
exclude_domains | array | 可选。排除指定域名,最多支持 1000 个。 |
intersecting_domains | array | 可选。用于提升结果准确度的域名列表。若提供该参数,结果中的指标将基于 target 与这些域名同时出现在 SERP 中的计算。最多支持 20 个域名。 |
ignore_synonyms | boolean | 可选。是否忽略高度相似。设为 true 时返回核心,排除高度相似变体。默认值:false。 |
tag | string | 可选。用户自定义任务标识,最长 255 个字符。返回结果中的 data 对象会原样带回该值,便于请求与结果对应。 |
过滤与排序说明
filters 支持的操作符
regexnot_regex<<=>>==<>innot_in
filters 示例
json
[
["metrics.organic.count", ">=", 50],
"and",
["intersections", ">=", 20]
]order_by 示例
json
[
"intersections,desc",
"avg_position,asc"
]响应结构
接口返回 JSON 对象,顶层 tasks 数组。
顶层字段
| 字段名 | 类型 | 说明 |
|---|---|---|
version | string | API 当前版本 |
status_code | integer | 通用状态码 |
status_message | string | 通用状态信息 |
time | string | 执行耗时,单位秒 |
cost | float | 本次请求总费用,单位 USD |
tasks_count | integer | tasks 数组中的任务数量 |
tasks_error | integer | 返回错误的任务数量 |
tasks | array | 任务结果数组 |
tasks[] 字段
| 字段名 | 类型 | 说明 |
|---|---|---|
id | string | 任务唯一标识,UUID 格式 |
status_code | integer | 任务状态码 |
status_message | string | 任务状态信息 |
time | string | 任务执行耗时 |
cost | float | 任务费用,单位 USD |
result_count | integer | result 数组个数 |
path | array | URL 路径 |
data | object | 请求中提交的参数 |
result | array | 结果数组 |
result[] 字段
| 字段名 | 类型 | 说明 |
|---|---|---|
se_type | string | 搜索引擎类型 |
target | string | 请求中的目标域名 |
location_code | integer | 请求中的地区编码 |
language_code | string | 请求中的语言代码 |
total_count | integer | 数据库中与本次请求匹的结果总数 |
items_count | integer | 本次返回的结果数量 |
items | array | 竞品域名结果列表 |
items[] 字段说明
每个 items[]素表示一个竞品域名及指标。
| 字段名 | 类型 | 说明 |
|---|---|---|
se_type | string | 搜索引擎类型 |
domain | string | 竞品域名 |
avg_position | float | 平均排名。基于交集计算,因此同一域名在不同目标站组合下该值可能不同。 |
sum_position | integer | 排名总和。基于交集计算。 |
intersections | integer | 交集数量 |
full_domain_metrics | object | 该竞品域名在所有已排名上的完整指标概览 |
metrics | object | 目标域名在与该竞品上的指标 |
competitor_metrics | object | 竞品域名在与目标域名上的指标 |
指标对象说明
以下结构适用于:
full_domain_metricsmetricscompetitor_metrics
这些对象下可能以下结果类型:
organicpaidlocal_packfeatured_snippet
各结果类型下的通用字段
| 字段名 | 类型 | 说明 |
|---|---|---|
pos_1 | integer | 排名第 1 的 SERP 数量 |
pos_2_3 | integer | 排名第 2-3 的 SERP 数量 |
pos_4_10 | integer | 排名第 4-10 的 SERP 数量 |
pos_11_20 | integer | 排名第 11-20 的 SERP 数量 |
pos_21_30 | integer | 排名第 21-30 的 SERP 数量 |
pos_31_40 | integer | 排名第 31-40 的 SERP 数量 |
pos_41_50 | integer | 排名第 41-50 的 SERP 数量 |
pos_51_60 | integer | 排名第 51-60 的 SERP 数量 |
pos_61_70 | integer | 排名第 61-70 的 SERP 数量 |
pos_71_80 | integer | 排名第 71-80 的 SERP 数量 |
pos_81_90 | integer | 排名第 81-90 的 SERP 数量 |
pos_91_100 | integer | 排名第 91-100 的 SERP 数量 |
etv | float | 预估流量(Estimated Traffic Volume) |
count | integer | 含该域名的 SERP 总数 |
estimated_paid_traffic_cost | float | 预估流量价值/预估付费流量成本,单位 USD |
is_new | integer | 新增排名项数量 |
is_up | integer | 排名上升的项数量 |
is_down | integer | 排名下降的项数量 |
is_lost | integer | 丢失排名的项数量 |
clickstream_etv | integer | 基于点击流数据计算的预估流量在 include_clickstream_data=true 时返回 |
clickstream_gender_distribution | object | 点击流性别分布在 include_clickstream_data=true 时返回 |
clickstream_age_distribution | object | 点击流年龄分布在 include_clickstream_data=true 时返回 |
clickstream_gender_distribution
| 字段名 | 类型 | 说明 |
|---|---|---|
female | integer | 点击流数据中的女性用户数量 |
male | integer | 点击流数据中的男性用户数量 |
clickstream_age_distribution
| 字段名 | 类型 | 说明 |
|---|---|---|
18-24 | integer | 18-24 岁用户数量 |
25-34 | integer | 25-34 岁用户数量 |
35-44 | integer | 35-44 岁用户数量 |
45-54 | integer | 45-54 岁用户数量 |
55-64 | integer | 55-64 岁用户数量 |
指标对象语义区别
full_domain_metrics
返回竞品域名在所有已排名上的完整排名与流量概览。
metrics
返回目标域名在“与当前竞品域名的集合”上的表现。
也就是说,这里看到的是目标站在交集上的 organic / paid / local_pack / featured_snippet 指标。
competitor_metrics
返回当前竞品域名在“与目标域名的集合”上的表现。
适合直接与
metrics对比,衡量目标站与某个竞品在同一战场上的强弱差异。
请求示例
cURL
bash
curl --location --request POST "https://api.seermartech.cn/v3/dataforseo_labs/google/competitors_domain/live" \
--header "Authorization: Bearer smt_live_YOUR_KEY" \
--header "Content-Type: application/json" \
--data-raw '[
{
"target": "newmouth.com",
"language_name": "English",
"location_code": 2840,
"intersecting_domains": [
"dentaly.org",
"health.com",
"trysnow.com"
],
"filters": [
["metrics.organic.count", ">=", 50]
],
"limit": 3
}
]'Python
python
import requests
url = "https://api.seermartech.cn/v3/dataforseo_labs/google/competitors_domain/live"
headers = {
"Authorization": "Bearer smt_live_YOUR_KEY",
"Content-Type": "application/json"
}
data = [
{
"target": "newmouth.com",
"location_name": "United States",
"language_name": "English",
"intersecting_domains": [
"dentaly.org",
"health.com",
"trysnow.com"
],
"filters": [
["metrics.organic.count", ">=", 50]
],
"limit": 3
}
]
response = requests.post(url, headers=headers, json=data)
print(response.json)TypeScript
typescript
import axios from "axios";
const postData = [
{
target: "newmouth.com",
location_name: "United States",
language_name: "English",
intersecting_domains: [
"dentaly.org",
"health.com",
"trysnow.com"
],
filters: [
["metrics.organic.count", ">=", 50]
],
limit: 3
}
];
axios({
method: "post",
url: "https://api.seermartech.cn/v3/dataforseo_labs/google/competitors_domain/live",
headers: {
Authorization: "Bearer smt_live_YOUR_KEY",
"Content-Type": "application/json"
},
data: postData
})
.then((response) => {
console.log(response.data);
})
.catch((error) => {
console.error(error);
});响应示例
json
{
"version": "0.1.20240514",
"status_code": 20000,
"status_message": "Ok.",
"time": "0.5412 sec.",
"cost": 0.0103,
"tasks_count": 1,
"tasks_error": 0,
"tasks": [
{
"id": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status_code": 20000,
"status_message": "Ok.",
"time": "0.5123 sec.",
"cost": 0.0103,
"result_count": 1,
"path": [
"v3",
"dataforseo_labs",
"google",
"competitors_domain",
"live"
],
"data": {
"api": "dataforseo_labs",
"function": "competitors_domain",
"se_type": "google",
"target": "newmouth.com",
"intersecting_domains": [
"dentaly.org",
"health.com",
"trysnow.com"
],
"language_name": "English",
"location_code": 2840,
"limit": 3
},
"result": [
{
"se_type": "google",
"target": "newmouth.com",
"location_code": 2840,
"language_code": "en",
"total_count": 3,
"items_count": 3,
"items": [
{
"domain": "example-competitor.com",
"avg_position": 12.4,
"sum_position": 248,
"intersections": 37,
"full_domain_metrics": {
"organic": {
"pos_1": 12,
"pos_2_3": 31,
"pos_4_10": 84,
"etv": 1450.2,
"count": 560,
"estimated_paid_traffic_cost": 932.4,
"is_new": 14,
"is_up": 36,
"is_down": 18,
"is_lost": 7
}
},
"metrics": {
"organic": {
"pos_1": 3,
"pos_2_3": 7,
"pos_4_10": 11,
"etv": 188.5,
"count": 37,
"estimated_paid_traffic_cost": 126.8,
"is_new": 2,
"is_up": 4,
"is_down": 3,
"is_lost": 1
}
},
"competitor_metrics": {
"organic": {
"pos_1": 5,
"pos_2_3": 10,
"pos_4_10": 13,
"etv": 241.7,
"count": 37,
"estimated_paid_traffic_cost": 165.3,
"is_new": 1,
"is_up": 6,
"is_down": 2,
"is_lost": 0
}
}
}
]
}
]
}
]
}常见错误处理
建议在集成时同时处理顶层状态码和任务级状态码:
- 顶层
status_code:表示整个请求是否成功 tasks[].status_code:表示单个任务是否成功tasks_error:表示失败任务数量
可重点以下场景:
| 场景 | 说明 |
|---|---|
| 参数缺失 | 如未传 target,或 location_name/location_code、language_name/language_code 均未提供 |
| 参数格式错误 | 如域名不符合要求的格式 |
| 过滤条件错误 | filters 结构不合法、操作符不支持、字段路径错误 |
| 排序规则错误 | order_by过 3 条或格式不正确 |
| 频率限制 | 出每分钟调用量或并发限制 |
| 权限/认证错误 | Token 无效、缺失或没有对应接口权限 |
完整错误码体系请参考 /v3/appendix/errors。
使用建议
- 若希望得到更“业务”的竞品,建议启用
exclude_top_domains=true - 若已知一批与目标站高度重叠的站点,可通过
intersecting_domains提高竞品识别精度 - 若需要只核心词竞争,可设置
ignore_synonyms=true - 若要比较目标站与竞品在同一集合中的强弱,应优使用
metrics与competitor_metrics做对比,而非看full_domain_metrics
实用场景
- 识别核心自然搜索竞品:目标域名后快速找出在同一 SERP 中高频重叠的网站,帮助制定竞品监控名单。
- 比较目标站与竞品的战场强弱:对比
metrics和competitor_metrics,判断上谁的排名、流量与流量价值更强。 - 排除大型泛站获取真实商业竞品:开启
exclude_top_domains,过滤百科、社媒、平台型网站,获得更贴近业务的竞争对手集合。 - 挖掘付费搜索竞争压力:结合
paid指标查看哪些竞争对手在 PPC 维度与目标站重合度高,从而优化投放策略。 - 分析细分 SERP 机会:通过
local_pack、featured_snippet等结果类型识别目标站与竞品在本地、精选摘要中的争夺,支持与本地 SEO 策略制定。