主题
按分类查询域名指标对比(实时)
POST /v3/dataforseo_labs/google/domain_metrics_by_categories/live
接口概述
该接口用于返回与指定产品/服务分类的域名指标变化趋势。您可以获取来自 Google SERP 的历史排名数据,以及当前和历史域名指标,例如:
- ETV(预估流量)
- impressions ETV
- 预估付费流量成本 -含该域名的 SERP 总数量
- 排名新增、上涨、下降、丢失
接口适合用于比较两个时间点之间,某些行业分类下域名整体表现的变化。
- 数据更新频率:每周
- 最新更新时间:可通过
/v3/dataforseo_labs/status/查询
请求信息
POST https://api.seermartech.cn/v3/dataforseo_labs/google/domain_metrics_by_categories/live
计费说明
该接口按请求计费。 扣费以响应头 X-SeerMarTech-Charge-CNY 为准。
调用限制
- 每分钟最多 2000 次 API 调用
- 同时并发请求上限 30
请求体格式
所有 POST 数据使用 UTF-8 编码的 JSON。 请求体为 JSON 数组 格式:
json
[
{
"category_codes": [13418, 10004],
"location_code": 2840,
"language_name": "English",
"first_date": "2021-06-01",
"second_date": "2021-10-01",
"limit": 3
}
]请求参数
| 字段名 | 类型 | 说明 |
|---|---|---|
category_codes | array | 填。产品和服务分类代码数组。最多可指定 5 个分类。可通过参考文档获取分类列表。 |
first_date | string | 填。第一个对比日期,格式:yyyy-mm-dd,例如:2021-06-01。可用日期可通过 /v3/dataforseo_labs/google/available_history/live/ 获取。不能大于当前日期;且不能与 second_date 处于同一年同一月。最小值:2020-10-01。 |
second_date | string | 填。第二个对比日期,格式:yyyy-mm-dd,例如:2021-10-01。可用日期可通过 /v3/dataforseo_labs/google/available_history/live/ 获取。不能大于当前日期;且不能与 first_date 处于同一年同一月。最小值:2020-10-01。 |
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 中二选一。可通过 /v3/dataforseo_labs/locations_and_languages 获取可用语言。示例:en |
item_types | array | 可选。指定响应中的搜索结果类型。**注意:**如果 item_types 中的首个类型不是 organic,结果将按数组中的第一个类型排序;且无法对未在响应中的结果类型进行过滤和排序。 |
top_categories_count | integer | 可选。返回额外分类中的域名数量。通过该参数,除了 category_codes 指定的分类外,还可获取属于分类的域名。默认值等于 category_codes 中指定的分类数量;不能小于 category_codes 中的分类数;最大值:5。 |
include_subdomains | boolean | 可选。是否在响应中返回子域名。false:返回 main_domain;true:返回主域名及子域名(如有)。默认值:true |
etv_min | integer | 可选。域名当前自然流量 ETV 最小值。设置后返回 organic_etv 大于该值的域名。 |
etv_max | integer | 可选。域名当前自然流量 ETV 最大值。设置后返回 organic_etv 小于该值的域名。 |
correlate | boolean | 可选。是否与之前获取的数据集进行校准。默认值:true。用于减轻数据库变化带来的数据不一致问题。不建议设为 false。 |
limit | integer | 可选。返回结果中域名数量上限。默认值:100,最大值:1000。 |
offset | integer | 可选。结果偏移量。默认值:0。例如设置为 10 时,将跳过前 10 个域名,从后续域名开始返回。 |
filters | array | 可选。结果过滤条件数组。最多支持 8 个过滤条件。条件之间应使用逻辑运算符 and / or 连接。支持的运算符:regex、not_regex、<、<=、>、>=、=、<>、in、not_in、match、not_match、ilike、not_ilike、like、not_like。like / not_like / ilike / not_ilike 支持使用 % 匹任意长度字符串。更多说明可参考 /v3/dataforseo_labs/filters。 |
order_by | array | 可选。结果排序规则。可使用与 filters 相同的字段路径。默认按系统默认规则排序。排序方式:asc 升序,desc 降序。单次请求最多可设置 3 条排序规则。 |
tag | string | 可选。自定义任务标识,最大长度 255 字符。可用于在响应中识别该任务,返回时会出现在 data 对象中。 |
响应结构
接口返回 JSON 编码数据,顶层 tasks 数组。
顶层字段
| 字段名 | 类型 | 说明 |
|---|---|---|
version | string | 当前 API 版本 |
status_code | integer | 通用状态码。完整错误码见 /v3/appendix/errors |
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 | 请求路径 |
data | object | 请求中提交的参数 |
result | array | 获取结果 |
result[] 字段
| 字段名 | 类型 | 说明 |
|---|---|---|
se_type | string | 搜索引擎类型 |
categories | array | 请求中的分类 |
location_code | integer | 请求中的地点代码 |
language_code | string | 请求中的语言代码 |
total_count | integer | 数据库中符合条件的总结果数 |
items_count | integer | items 数组返回的结果数 |
items | array | 历史排名与流量数据 |
items[] 字段说明
| 字段名 | 类型 | 说明 |
|---|---|---|
se_type | string | 搜索引擎类型 |
top_categories | array | 采集该域名时的分类 |
organic_etv | float | 域名当前自然搜索 ETV |
organic_count | integer | 当前该域名的自然搜索 SERP 总数 |
organic_is_lost | integer | 当前丢失的已排名数量 |
organic_is_new | integer | 当前新增的已排名数量 |
domain | string | 命中的域名 |
main_domain | string | 主域名 |
metrics_history | object | 该域名的历史排名与流量数据 |
metrics_difference | object | 两个日期之间的指标差值 |
metrics_history 结构说明
metrics_history 以年月作为键,例如 202110、202106。 说明:
- 较大的日期对应
first_date与second_date中较晚的月份 - 较小的日期对应较早的月份
每个月份对象下可以下类型的数据:
organicpaidfeatured_snippetlocal_pack
上述每种对象均可能以下字段:
| 字段名 | 类型 | 说明 |
|---|---|---|
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 | 预估流量。按指定日期该域名所有已排名的 CTR 与搜索量乘积估算。 |
count | integer | 含该域名的对应类型 SERP 总数 |
estimated_paid_traffic_cost | float | 预估流量成本。用于估算若通过付费广告获取同等流量所需成本。 |
is_new | integer | 新增排名数量 |
is_up | integer | 排名上升的数量 |
is_down | integer | 排名下降的数量 |
is_lost | integer | 丢失排名数量 |
说明:
organic表示自然搜索数据paid表示付费搜索数据featured_snippet表示精选摘要数据local_pack表示本地结果数据 某些类型在特定月份可能为null。
metrics_difference 结构说明
metrics_difference 表示 first_date 与 second_date 之间的指标差值。 计算方式为:较晚日期的指标值减去较早日期的指标值。
支持以下对象:
organicpaidfeatured_snippetlocal_pack
各对象字段与 metrics_history 中对应结构一致,含义为该指标在两个时间点之间的变化量。例如:
pos_1:排名第 1 的 SERP 数量变化etv:预估流量变化count:该域名的 SERP 数量变化estimated_paid_traffic_cost:等价流量成本变化is_new/is_up/is_down/is_lost:对应状态数量变化
请求示例
cURL
bash
curl --location --request POST "https://api.seermartech.cn/v3/dataforseo_labs/google/domain_metrics_by_categories/live" \
--header "Authorization: Bearer smt_live_YOUR_KEY" \
--header "Content-Type: application/json" \
--data-raw '[
{
"category_codes": [13418, 10004],
"location_code": 2840,
"language_name": "English",
"first_date": "2021-06-01",
"second_date": "2021-10-01",
"filters": [
["metrics_history.202106.organic.pos_1", ">", 0],
"and",
["organic_etv", ">", 10000]
],
"limit": 3
}
]'Python
python
import requests
url = "https://api.seermartech.cn/v3/dataforseo_labs/google/domain_metrics_by_categories/live"
headers = {
"Authorization": "Bearer smt_live_YOUR_KEY",
"Content-Type": "application/json"
}
data = [
{
"category_codes": [13418, 10004],
"location_code": 2840,
"language_name": "English",
"first_date": "2021-06-01",
"second_date": "2021-10-01",
"filters": [
["metrics_history.202106.organic.pos_1", ">", 0],
"and",
["organic_etv", ">", 10000]
],
"limit": 3
}
]
response = requests.post(url, headers=headers, json=data)
print(response.json)TypeScript
typescript
import axios from "axios";
const postData = [
{
category_codes: [13418, 10004],
location_code: 2840,
language_name: "English",
first_date: "2021-06-01",
second_date: "2021-10-01",
filters: [
["metrics_history.202106.organic.pos_1", ">", 0],
"and",
["organic_etv", ">", 10000]
],
limit: 3
}
];
axios({
method: "post",
url: "https://api.seermartech.cn/v3/dataforseo_labs/google/domain_metrics_by_categories/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.20220216",
"status_code": 20000,
"status_message": "Ok.",
"time": "1.8991 sec.",
"cost": 0.103,
"tasks_count": 1,
"tasks_error": 0,
"tasks": [
{
"data": {
"api": "dataforseo_labs",
"function": "domain_metrics_by_categories",
"se_type": "google",
"location_code": 2840,
"language_code": "en",
"category_codes": [13418, 10004],
"first_date": "2021-06-01",
"second_date": "2021-10-01",
"limit": 3
},
"result": [
{
"location_code": 2840,
"language_code": "en",
"total_count": 1131,
"items_count": 3,
"items": [
{
"organic_etv": 1179.6579938028008,
"organic_count": 58,
"organic_is_lost": 11,
"organic_is_new": 12,
"domain": "enricospastryshop.com",
"main_domain": "enricospastryshop.com",
"metrics_history": {
"202106": {
"organic": {
"pos_1": 4,
"pos_2_3": 3,
"pos_4_10": 1,
"pos_11_20": 4,
"pos_21_30": 6,
"pos_31_40": 1,
"pos_41_50": 2,
"pos_51_60": 4,
"pos_61_70": 5,
"pos_71_80": 7,
"pos_81_90": 4,
"pos_91_100": 1,
"etv": 147.2205658582747,
"count": 41,
"estimated_paid_traffic_cost": 69.1921289233835,
"is_new": 1,
"is_up": 4,
"is_down": 15,
"is_lost": 12
},
"paid": {
"pos_1": 0,
"pos_2_3": 0,
"pos_4_10": 0,
"pos_11_20": 0,
"pos_21_30": 0,
"pos_31_40": 0,
"pos_41_50": 0,
"pos_51_60": 0,
"pos_61_70": 0,
"pos_71_80": 0,
"pos_81_90": 0,
"pos_91_100": 0,
"etv": 0,
"count": 0,
"estimated_paid_traffic_cost": 0,
"is_new": 0,
"is_up": 0,
"is_down": 0,
"is_lost": 0
},
"featured_snippet": null,
"local_pack": null
},
"202110": {
"organic": {
"pos_1": 4,
"pos_2_3": 4,
"pos_4_10": 0,
"pos_11_20": 4,
"pos_21_30": 4,
"pos_31_40": 3,
"pos_41_50": 3,
"pos_51_60": 7,
"pos_61_70": 6,
"pos_71_80": 6,
"pos_81_90": 0,
"pos_91_100": 4,
"etv": 308.8720009159297,
"count": 46,
"estimated_paid_traffic_cost": 335.2933321259916,
"is_new": 12,
"is_up": 11,
"is_down": 7,
"is_lost": 19
},
"paid": {
"pos_1": 0,
"pos_2_3": 0,
"pos_4_10": 0,
"pos_11_20": 0,
"pos_21_30": 0,
"pos_31_40": 0,
"pos_41_50": 0,
"pos_51_60": 0,
"pos_61_70": 0,
"pos_71_80": 0,
"pos_81_90": 0,
"pos_91_100": 0,
"etv": 0,
"count": 0,
"estimated_paid_traffic_cost": 0,
"is_new": 0,
"is_up": 0,
"is_down": 0,
"is_lost": 0
},
"featured_snippet": null,
"local_pack": null
}
},
"metrics_difference": {
"organic": {
"pos_1": 1,
"pos_2_3": 1,
"pos_4_10": -1,
"pos_11_20": 0,
"pos_21_30": -1,
"pos_31_40": 2,
"pos_41_50": 1,
"pos_51_60": 3,
"pos_61_70": 1,
"pos_71_80": -1,
"pos_81_90": -4,
"pos_91_100": 3,
"etv": 161.65143505765496,
"count": 6,
"estimated_paid_traffic_cost": 266.1012032026081,
"is_new": 11,
"is_up": 6,
"is_down": -8,
"is_lost": 7
},
"paid": {
"pos_1": 0,
"pos_2_3": 0,
"pos_4_10": 0,
"pos_11_20": 0,
"pos_21_30": 0,
"pos_31_40": 0,
"pos_41_50": 0,
"pos_51_60": 0,
"pos_61_70": 0,
"pos_71_80": 0,
"pos_81_90": 0,
"pos_91_100": 0,
"etv": 0,
"count": 0,
"estimated_paid_traffic_cost": 0,
"is_new": 0,
"is_up": 0,
"is_down": 0,
"is_lost": 0
},
"featured_snippet": null,
"local_pack": null
}
}
]
}
]
}
]
}状态码与错误处理
- 顶层
status_code表示整个请求的执行状态 tasks[].status_code表示任务的执行状态- 建议同时检查:
- HTTP 状态码
- 顶层
status_code tasks_error- 各任务的
status_code
完整错误码定义可参考 /v3/appendix/errors。 强烈建议在接时实现完善的异常处理与重试机制。
使用建议
- 通过
/v3/dataforseo_labs/google/available_history/live/获取可用历史月份,再设置first_date与second_date - 若需要地点和语言枚举值,可调用
/v3/dataforseo_labs/locations_and_languages - 若需要更稳定的跨期比较结果,建议保留
correlate=true - 当需要筛选高价值域名时,可结合
filters与etv_min/etv_max - 如果需要对子域做单独分析,请保留
include_subdomains=true
实用场景
- 对比行业站点涨跌:按分类查看两个时间点之间的域名排名与流量变化,快速识别行业赢家和下滑站点。
- 筛选潜在竞品:通过
organic_etv、count、is_new等指标过滤出增长明显的域名,用于竞品监测和市场研究。 - 评估细分赛道活跃度:结合
top_categories_count扩展分类,发现相邻行业中的流量参与,或产品布局。 - 监控本地与特色结果占位:分析
featured_snippet、local_pack等结果类型在不同时间点的表现,评估 SERP 特殊版位机会。 - 追踪域名历史表现:基于
metrics_history和metrics_difference建立时间对比报表,用于 SEO 月报、季度复盘和客户汇报。