# 搜索可见性 SERP 数据接口
> 来源页面: https://www.gugudata.com/api/details/search-visibility
## 概览
- API 标识: `search-visibility`
- 分类: 网站工具
- 描述: 关键词排名与品牌搜索可见性
- 标签: 搜索排名观测 / SERP 结构化数据
- 短标签: SEO
- 详情页: https://www.gugudata.com/api/details/search-visibility
- LLM Markdown: https://www.gugudata.com/api/details/search-visibility/llm.md
- 数据预览: https://www.gugudata.com/preview/search-visibility
- 购买开通: https://www.gugudata.com/order/search-visibility
- APP KEY 管理: https://www.gugudata.com/portal/
- 订单与续费: https://www.gugudata.com/portal/orders
## 给大模型的接入指令
如果你正在帮助用户接入这个 API,请优先使用本文档中的接口地址、请求方式、请求参数、返回参数、状态码、cURL 示例和预览数据生成代码或排查问题。
- 接入目标: 调用 `搜索可见性 SERP 数据接口`,不要臆造未在文档中出现的参数或返回字段。
- AppKey 获取: 用户登录咕咕数据开发者中心后,在 `APP KEY 管理` 页面复制对应产品的 AppKey。
- AppKey 替换: 示例中的 `YOUR_APPKEY`、`APPKEY`、`{{YOUR_APPKEY}}`、`{{appkey}}`、`{{appKey}}` 都应替换为用户自己的 AppKey。
- AppKey 传递: 推荐使用 `X-GUGUDATA-APPKEY` 或 `X-API-Key` 请求头;OpenAI 兼容客户端可使用 `Authorization: Bearer <AppKey>`;历史 query 参数 `appkey` 继续有效。
- 开通与续费: 未开通时引导用户访问购买开通页;已开通或需要续费时,引导用户进入开发者中心或订单与续费页。
- 错误处理: HTTP 状态码代表传输层结果,响应体内的业务状态码代表接口业务结果,代码中应分别处理。
- 生产建议: AppKey 应保存在服务端环境变量或密钥配置中,由服务端统一发起请求,不要写入网页、App 客户端或公开仓库。
关键链接:
- 接口详情页: https://www.gugudata.com/api/details/search-visibility
- LLM Markdown: https://www.gugudata.com/api/details/search-visibility/llm.md
- 数据预览: https://www.gugudata.com/preview/search-visibility
- 购买开通页: https://www.gugudata.com/order/search-visibility
- 开发者中心 APP KEY 管理: https://www.gugudata.com/portal/
- 订单与续费: https://www.gugudata.com/portal/orders
## API 功能
- 按品牌、域名和关键词创建搜索观测报告;
- 支持 Google、Bing 和百度搜索来源;
- 可选择前 10、20 或 50 名观测范围;
- 返回搜索结果标题、链接及可获取的摘要;
- 支持品牌别名与竞品域名配置;
- 展示品牌最佳排名及排名覆盖指标;
- 提供竞品匹配与排名差距,便于对照分析;
- 支持手动再次观测,并查询任务状态;
- 按成功观测组合结算 credits,查询报告和结果不消耗搜索 credits;
- 排名受时间、地区及搜索环境影响,不保证排名提升;
- 默认最大 QPS:5,可在开发者中心自助升级;年度套餐包含 120,000 credits。
- [接口调用状态与状态监控](https://www.gugudata.com/status)
## API 文档
- 接口地址: `https://api.gugudata.com/v1/searchVisibilityReports`
- 返回格式: `application/json; charset=utf-8`
- 请求方式: `POST`
- 请求协议: `HTTPS`
- 请求示例: `https://api.gugudata.com/v1/searchVisibilityReports?appkey=APPKEY`
- 接口测试: https://api.gugudata.com/v1/searchVisibilityReports/demo
- Apifox: https://doc.gugudata.com/
- Postman: https://www.postman.com/gugudata/gugudata-official
- OpenAPI: https://www.gugudata.com/openapi/gugudata.openapi.3.1.json
## 鉴权方式
接口支持以下 AppKey 传递方式,任选一种即可;已有请求示例、Postman 集合和历史代码仍可继续使用原来的 `appkey` 参数方式。
| 传输载体 | 参数 | 示例 | 说明 |
| --- | --- | --- | --- |
| HTTP Header | `X-GUGUDATA-APPKEY` | `X-GUGUDATA-APPKEY: YOUR_APPKEY` | 推荐方式,适合服务端接入和统一封装。 |
| HTTP Header | `X-API-Key` | `X-API-Key: YOUR_APPKEY` | 通用 API Key Header,便于和常见 API 客户端集成。 |
| HTTP Header | `Authorization` | `Authorization: Bearer YOUR_APPKEY` | 适合 OpenAI 兼容接口或 Bearer Token 风格客户端。 |
| Query 参数 | `appkey` | `?appkey=YOUR_APPKEY` | 兼容现有示例、Postman 集合、浏览器调试和历史代码。 |
> 部分历史 POST 接口仍兼容表单或 JSON body 中的 `appkey`;新接入建议优先使用 Header 或 Query 参数。
## 请求参数
| 参数名 | 参数类型 | 是否必须 | 默认值 | 备注 |
| --- | --- | --- | --- | --- |
| appkey | string | 是 | APPKEY | 咕咕数据开发者中心分配的 APPKEY。建议通过 X-GUGUDATA-APPKEY、X-API-Key 或 Authorization: Bearer 传递;也兼容 Query 参数 appkey。 |
| brand | string | 是 | | 品牌或产品名称,长度 1-120。用于匹配标题、摘要和结果链接中的品牌信号。 |
| domain | string | 是 | | 需要观测的主域名,长度 1-255。可传 gugudata.com 或 https://www.gugudata.com,系统会按主域名规范化。 |
| queries | array | 是 | | 需要观测的搜索关键词列表,1-50 个。创建报告会自动创建首个观测任务,按关键词数量计入 credits 计算。 |
| sources | array | 是 | | 搜索来源,1-3 个;支持 google_web、bing_web、baidu_web。Google/Bing 在 maxRank=10/20/50 时分别消耗 1/2/5 credits;Baidu 同等排名深度消耗 10/20/50 credits。 |
| displayName | string | 否 | | 报告显示名称,便于在列表中识别,不传时可由业务侧使用 brand/domain 展示。 |
| aliases | array | 否 | | 品牌别名列表,最多 20 个;用于补充匹配英文名、简称、产品名等品牌信号。 |
| competitors | array | 否 | | 竞品域名定义列表,最多 10 个;每项支持 domain、name、aliases,用于计算竞品排名和差距。 |
| locale | string | 否 | | 语言区域提示,如 zh-CN、en-US。不同搜索来源会尽量按该提示观测。 |
| region | string | 否 | | 地域提示,如 CN、US、HK。不同地域的排名可能不同。 |
| maxRank | integer | 否 | 20 | 观测排名深度,仅支持 10、20、50,默认 20。Google/Bing 分别消耗 1/2/5 credits,Baidu 分别消耗 10/20/50 credits。 |
| includeRawResponse | boolean | 否 | false | 是否在问题排查场景保留扩展返回引用。普通业务接入建议保持 false。 |
## 返回参数
| 参数名 | 参数类型 | 备注 |
| --- | --- | --- |
| name | string | 报告资源名,格式为 searchVisibilityReports/{reportId}。 |
| reportId | string | 报告 ID,后续查询报告、创建观测任务时使用。 |
| displayName | string | 报告显示名称。 |
| brand | string | 品牌或产品名称。 |
| domain | string | 需要观测的主域名,系统会按规范域名返回。 |
| aliases | array | 品牌别名列表。 |
| competitors | array | 竞品定义列表,包含 domain、name、aliases。 |
| queries | array | 报告内需要持续观测的搜索关键词。 |
| sources | array | 搜索来源列表,支持 google_web、bing_web、baidu_web。 |
| locale | string | 语言区域提示,如 zh-CN、en-US。 |
| region | string | 地域提示,如 CN、US。 |
| maxRank | integer | 观测排名深度,仅支持 10、20、50。 |
| latestRunId | string | 最近一次观测任务 ID。创建报告时会自动创建首个观测任务。 |
| latestRunStatus | string | 最近一次观测任务状态,可能为 PENDING、RUNNING、SUCCEEDED、FAILED、PARTIALLY_FAILED、CANCELLED。 |
| latestMetrics | object | 最近一次观测任务聚合指标,任务完成前可能为空对象。 |
| createdAt | string | 报告创建时间,UTC RFC3339 格式。 |
| updatedAt | string | 报告最近更新时间,UTC RFC3339 格式。 |
## 响应示例(真实数据节选)
```json
{
"name": "searchVisibilityReports/svrpt_demo",
"reportId": "svrpt_demo",
"displayName": "咕咕数据搜索可见性观测",
"brand": "咕咕数据",
"domain": "gugudata.com",
"aliases": [
"GuGuData",
"咕咕数据"
],
"competitors": [
{
"domain": "example.com",
"name": "示例竞品",
"aliases": [
"Example"
]
}
],
"queries": [
"gugudata api",
"咕咕数据 api"
],
"sources": [
"google_web",
"bing_web"
],
"locale": "zh-CN",
"region": "CN",
"maxRank": 20,
"latestRunId": "svrun_demo",
"latestRunStatus": "SUCCEEDED",
"latestMetrics": {
"visibilityScore": 0.86,
"averageRank": 2.5,
"top10QueryCount": 2,
"observedQueryCount": 2,
"observedResultCount": 4,
"competitorMentionCount": 1,
"sourceCount": 2
},
"createdAt": "2026-07-01T10:00:00Z",
"updatedAt": "2026-07-01T10:05:00Z"
}
```
## 相关接口
### 获取搜索可见性报告
- 请求方式: `GET`
- 资源路径: `/v1/searchVisibilityReports/{reportId}`
- 接口地址: `https://api.gugudata.com/v1/searchVisibilityReports/{reportId}`
- 描述: 读取指定搜索可见性报告,返回报告配置、最近一次观测任务和最近聚合指标;该接口不消耗搜索可见性 credits。
#### 请求参数
| 参数名 | 参数类型 | 是否必须 | 备注 |
| --- | --- | --- | --- |
| reportId | string | 是 | 报告 ID。 |
#### 请求示例
```json
[]
```
#### 返回参数
| 参数名 | 参数类型 | 备注 |
| --- | --- | --- |
| name | string | 报告资源名,格式为 searchVisibilityReports/{reportId}。 |
| reportId | string | 报告 ID,后续查询报告、创建观测任务时使用。 |
| displayName | string | 报告显示名称。 |
| brand | string | 品牌或产品名称。 |
| domain | string | 需要观测的主域名,系统会按规范域名返回。 |
| aliases | array | 品牌别名列表。 |
| competitors | array | 竞品定义列表,包含 domain、name、aliases。 |
| queries | array | 报告内需要持续观测的搜索关键词。 |
| sources | array | 搜索来源列表,支持 google_web、bing_web、baidu_web。 |
| locale | string | 语言区域提示,如 zh-CN、en-US。 |
| region | string | 地域提示,如 CN、US。 |
| maxRank | integer | 观测排名深度,仅支持 10、20、50。 |
| latestRunId | string | 最近一次观测任务 ID。创建报告时会自动创建首个观测任务。 |
| latestRunStatus | string | 最近一次观测任务状态,可能为 PENDING、RUNNING、SUCCEEDED、FAILED、PARTIALLY_FAILED、CANCELLED。 |
| latestMetrics | object | 最近一次观测任务聚合指标,任务完成前可能为空对象。 |
| createdAt | string | 报告创建时间,UTC RFC3339 格式。 |
| updatedAt | string | 报告最近更新时间,UTC RFC3339 格式。 |
#### 响应示例
```json
{
"name": "searchVisibilityReports/svrpt_demo",
"reportId": "svrpt_demo",
"displayName": "咕咕数据搜索可见性观测",
"brand": "咕咕数据",
"domain": "gugudata.com",
"aliases": [
"GuGuData",
"咕咕数据"
],
"competitors": [
{
"domain": "example.com",
"name": "示例竞品",
"aliases": [
"Example"
]
}
],
"queries": [
"gugudata api",
"咕咕数据 api"
],
"sources": [
"google_web",
"bing_web"
],
"locale": "zh-CN",
"region": "CN",
"maxRank": 20,
"latestRunId": "svrun_demo",
"latestRunStatus": "SUCCEEDED",
"latestMetrics": {
"visibilityScore": 0.86,
"averageRank": 2.5,
"top10QueryCount": 2,
"observedQueryCount": 2,
"observedResultCount": 4,
"competitorMentionCount": 1,
"sourceCount": 2
},
"createdAt": "2026-07-01T10:00:00Z",
"updatedAt": "2026-07-01T10:05:00Z"
}
```
### 搜索可见性报告列表
- 请求方式: `GET`
- 资源路径: `/v1/searchVisibilityReports`
- 接口地址: `https://api.gugudata.com/v1/searchVisibilityReports`
- 描述: 分页读取当前 AppKey 下的搜索可见性报告。支持按 brand/domain 过滤,按 createdAt、updatedAt、domain 排序;该接口不消耗搜索可见性 credits。
#### 请求参数
| 参数名 | 参数类型 | 是否必须 | 备注 |
| --- | --- | --- | --- |
| pageSize | integer | 否 | 每页返回数量。 |
| pageToken | string | 否 | 分页令牌。 |
| filter | string | 否 | 过滤表达式。 |
| orderBy | string | 否 | 排序表达式。 |
#### 请求示例
```json
[]
```
#### 返回参数
| 参数名 | 参数类型 | 备注 |
| --- | --- | --- |
| reports | array | 当前页资源列表。 |
| nextPageToken | string | 下一页分页令牌;为空表示没有下一页。 |
#### 响应示例
```json
{
"reports": [
{
"name": "searchVisibilityReports/svrpt_demo",
"reportId": "svrpt_demo",
"displayName": "咕咕数据搜索可见性观测",
"brand": "咕咕数据",
"domain": "gugudata.com",
"aliases": [
"GuGuData",
"咕咕数据"
],
"competitors": [
{
"domain": "example.com",
"name": "示例竞品",
"aliases": [
"Example"
]
}
],
"queries": [
"gugudata api",
"咕咕数据 api"
],
"sources": [
"google_web",
"bing_web"
],
"locale": "zh-CN",
"region": "CN",
"maxRank": 20,
"latestRunId": "svrun_demo",
"latestRunStatus": "SUCCEEDED",
"latestMetrics": {
"visibilityScore": 0.86,
"averageRank": 2.5,
"top10QueryCount": 2,
"observedQueryCount": 2,
"observedResultCount": 4,
"competitorMentionCount": 1,
"sourceCount": 2
},
"createdAt": "2026-07-01T10:00:00Z",
"updatedAt": "2026-07-01T10:05:00Z"
}
],
"nextPageToken": ""
}
```
### 创建搜索可见性观测任务
- 请求方式: `POST`
- 资源路径: `/v1/searchVisibilityReports/{reportId}/runs`
- 接口地址: `https://api.gugudata.com/v1/searchVisibilityReports/{reportId}/runs`
- 描述: 为报告创建一次新的采样观测任务。该接口会按关键词、搜索来源和排名深度消耗 credits;forceRefresh=true 重新观测时同样消耗 credits。
#### 请求参数
| 参数名 | 参数类型 | 是否必须 | 备注 |
| --- | --- | --- | --- |
| reportId | string | 是 | 报告 ID。 |
| forceRefresh | boolean | 否 | 是否跳过短期复用结果并重新观测,默认 false。设置为 true 会重新创建观测并消耗 credits。 |
| includeRawResponse | boolean | 否 | 是否在问题排查场景保留扩展返回引用。普通业务接入建议保持 false。 |
#### 请求示例
```json
[]
```
#### 返回参数
| 参数名 | 参数类型 | 备注 |
| --- | --- | --- |
| name | string | 观测任务资源名,格式为 searchVisibilityRuns/{runId}。 |
| runId | string | 观测任务 ID。 |
| reportId | string | 所属报告 ID。 |
| state | string | 任务状态,可能为 PENDING、RUNNING、SUCCEEDED、FAILED、PARTIALLY_FAILED、CANCELLED。 |
| forceRefresh | boolean | 是否跳过短期复用结果并重新观测。 |
| creditCost | integer | 处理中为预占 credits,终态为成功观测组合实际结算额度;失败组合不收费。读取报告、任务和结果不消耗搜索 credits。 |
| tasksTotal | integer | 本次观测拆分后的任务总数,通常为关键词数乘以搜索来源数。 |
| tasksSucceeded | integer | 已成功完成的任务数。 |
| tasksFailed | integer | 执行失败的任务数。 |
| metrics | object | 任务完成后的聚合指标。 |
| metrics.queryCoverageRate | number | 关键词和来源组合中品牌可见的比例,0 到 1。 |
| metrics.top10PresenceRate | number | 进入前 10 名的比例,0 到 1。 |
| metrics.top20PresenceRate | number | 进入前 20 名的比例,0 到 1。 |
| metrics.bestRank | integer | 本次观测中品牌域名出现的最佳排名。 |
| metrics.averageVisibleRank | number | 有排名结果时的平均可见排名。 |
| metrics.averageRankWithPenalty | number | 未命中时按 maxRank + 1 计入后的平均排名。 |
| metrics.competitorGap | number | 品牌最佳排名与竞品最佳排名的平均差值,正数表示品牌更靠前。 |
| metrics.sourceCoverage | object | 按搜索来源统计的可见比例。 |
| metrics.visibilityScore | number | 综合可见性评分,0 到 100。 |
| errorSummary | array | 失败任务摘要,包含失败来源、关键词和错误说明。 |
| createdAt | string | 任务创建时间,UTC RFC3339 格式。 |
| updatedAt | string | 任务最近更新时间,UTC RFC3339 格式。 |
| completedAt | string | 任务完成时间,UTC RFC3339 格式。 |
#### 响应示例
```json
{
"name": "searchVisibilityRuns/svrun_example",
"runId": "svrun_example",
"reportId": "svrpt_example",
"state": "PENDING",
"forceRefresh": false,
"creditCost": 1,
"tasksTotal": 1,
"tasksSucceeded": 0,
"tasksFailed": 1,
"metrics": {
"queryCoverageRate": 1,
"top10PresenceRate": 1,
"top20PresenceRate": 1,
"bestRank": 1,
"averageVisibleRank": 1,
"averageRankWithPenalty": 1,
"competitorGap": 4,
"sourceCoverage": {
"google_web": 1
},
"visibilityScore": 100
},
"errorSummary": [],
"createdAt": "2026-07-01T10:00:00Z",
"updatedAt": "2026-07-01T10:01:20Z",
"completedAt": null
}
```
### 搜索可见性观测任务列表
- 请求方式: `GET`
- 资源路径: `/v1/searchVisibilityReports/{reportId}/runs`
- 接口地址: `https://api.gugudata.com/v1/searchVisibilityReports/{reportId}/runs`
- 描述: 分页读取报告下的观测任务。支持按 state 过滤,按 createdAt、updatedAt、state 排序;该接口不消耗搜索可见性 credits。
#### 请求参数
| 参数名 | 参数类型 | 是否必须 | 备注 |
| --- | --- | --- | --- |
| reportId | string | 是 | 报告 ID。 |
| pageSize | integer | 否 | 每页返回数量。 |
| pageToken | string | 否 | 分页令牌。 |
| filter | string | 否 | 过滤表达式。 |
| orderBy | string | 否 | 排序表达式。 |
#### 请求示例
```json
[]
```
#### 返回参数
| 参数名 | 参数类型 | 备注 |
| --- | --- | --- |
| runs | array | 当前页资源列表。 |
| nextPageToken | string | 下一页分页令牌;为空表示没有下一页。 |
#### 响应示例
```json
{
"runs": [
{
"name": "searchVisibilityRuns/svrun_example",
"runId": "svrun_example",
"reportId": "svrpt_example",
"state": "SUCCEEDED",
"forceRefresh": false,
"creditCost": 1,
"tasksTotal": 1,
"tasksSucceeded": 1,
"tasksFailed": 0,
"metrics": {
"queryCoverageRate": 1,
"top10PresenceRate": 1,
"top20PresenceRate": 1,
"bestRank": 1,
"averageVisibleRank": 1,
"averageRankWithPenalty": 1,
"competitorGap": 4,
"sourceCoverage": {
"google_web": 1
},
"visibilityScore": 100
},
"errorSummary": [],
"createdAt": "2026-07-01T10:00:00Z",
"updatedAt": "2026-07-01T10:01:20Z",
"completedAt": "2026-07-01T10:01:20Z"
}
],
"nextPageToken": ""
}
```
### 获取搜索可见性观测任务
- 请求方式: `GET`
- 资源路径: `/v1/searchVisibilityRuns/{runId}`
- 接口地址: `https://api.gugudata.com/v1/searchVisibilityRuns/{runId}`
- 描述: 读取指定观测任务,适合轮询任务状态、查看 creditCost 和获取聚合指标;该接口不消耗搜索可见性 credits。
#### 请求参数
| 参数名 | 参数类型 | 是否必须 | 备注 |
| --- | --- | --- | --- |
| runId | string | 是 | 观测任务 ID。 |
#### 请求示例
```json
[]
```
#### 返回参数
| 参数名 | 参数类型 | 备注 |
| --- | --- | --- |
| name | string | 观测任务资源名,格式为 searchVisibilityRuns/{runId}。 |
| runId | string | 观测任务 ID。 |
| reportId | string | 所属报告 ID。 |
| state | string | 任务状态,可能为 PENDING、RUNNING、SUCCEEDED、FAILED、PARTIALLY_FAILED、CANCELLED。 |
| forceRefresh | boolean | 是否跳过短期复用结果并重新观测。 |
| creditCost | integer | 处理中为预占 credits,终态为成功观测组合实际结算额度;失败组合不收费。读取报告、任务和结果不消耗搜索 credits。 |
| tasksTotal | integer | 本次观测拆分后的任务总数,通常为关键词数乘以搜索来源数。 |
| tasksSucceeded | integer | 已成功完成的任务数。 |
| tasksFailed | integer | 执行失败的任务数。 |
| metrics | object | 任务完成后的聚合指标。 |
| metrics.queryCoverageRate | number | 关键词和来源组合中品牌可见的比例,0 到 1。 |
| metrics.top10PresenceRate | number | 进入前 10 名的比例,0 到 1。 |
| metrics.top20PresenceRate | number | 进入前 20 名的比例,0 到 1。 |
| metrics.bestRank | integer | 本次观测中品牌域名出现的最佳排名。 |
| metrics.averageVisibleRank | number | 有排名结果时的平均可见排名。 |
| metrics.averageRankWithPenalty | number | 未命中时按 maxRank + 1 计入后的平均排名。 |
| metrics.competitorGap | number | 品牌最佳排名与竞品最佳排名的平均差值,正数表示品牌更靠前。 |
| metrics.sourceCoverage | object | 按搜索来源统计的可见比例。 |
| metrics.visibilityScore | number | 综合可见性评分,0 到 100。 |
| errorSummary | array | 失败任务摘要,包含失败来源、关键词和错误说明。 |
| createdAt | string | 任务创建时间,UTC RFC3339 格式。 |
| updatedAt | string | 任务最近更新时间,UTC RFC3339 格式。 |
| completedAt | string | 任务完成时间,UTC RFC3339 格式。 |
#### 响应示例
```json
{
"name": "searchVisibilityRuns/svrun_example",
"runId": "svrun_example",
"reportId": "svrpt_example",
"state": "SUCCEEDED",
"forceRefresh": false,
"creditCost": 1,
"tasksTotal": 1,
"tasksSucceeded": 1,
"tasksFailed": 0,
"metrics": {
"queryCoverageRate": 1,
"top10PresenceRate": 1,
"top20PresenceRate": 1,
"bestRank": 1,
"averageVisibleRank": 1,
"averageRankWithPenalty": 1,
"competitorGap": 4,
"sourceCoverage": {
"google_web": 1
},
"visibilityScore": 100
},
"errorSummary": [],
"createdAt": "2026-07-01T10:00:00Z",
"updatedAt": "2026-07-01T10:01:20Z",
"completedAt": "2026-07-01T10:01:20Z"
}
```
### 搜索可见性观测结果列表
- 请求方式: `GET`
- 资源路径: `/v1/searchVisibilityRuns/{runId}/results`
- 接口地址: `https://api.gugudata.com/v1/searchVisibilityRuns/{runId}/results`
- 描述: 分页读取观测任务下的关键词级结果。支持按 source/query 过滤,按 checkedAt、source、query 排序;该接口不消耗搜索可见性 credits。
#### 请求参数
| 参数名 | 参数类型 | 是否必须 | 备注 |
| --- | --- | --- | --- |
| runId | string | 是 | 观测任务 ID。 |
| pageSize | integer | 否 | 每页返回数量。 |
| pageToken | string | 否 | 分页令牌。 |
| filter | string | 否 | 过滤表达式。 |
| orderBy | string | 否 | 排序表达式。 |
#### 请求示例
```json
[]
```
#### 返回参数
| 参数名 | 参数类型 | 备注 |
| --- | --- | --- |
| results | array | 当前页资源列表。 |
| nextPageToken | string | 下一页分页令牌;为空表示没有下一页。 |
#### 响应示例
```json
{
"results": [
{
"name": "searchVisibilityResults/svres_example",
"resultId": "svres_example",
"reportId": "svrpt_example",
"runId": "svrun_example",
"query": "gugudata api",
"source": "google_web",
"checkedAt": "2026-07-01T10:01:20Z",
"cacheHit": false,
"metrics": {
"visible": true,
"top10": true,
"top20": true,
"bestRank": 1,
"averageRankWithPenalty": 1,
"bestCompetitorRank": 5,
"competitorGap": 4,
"matchedUrlCount": 1,
"visibilityScore": 100
},
"observedItems": [
{
"rank": 1,
"title": "咕咕数据 - 专业的数据提供商",
"url": "https://www.gugudata.com/",
"domain": "gugudata.com",
"snippet": "提供结构化数据接口、网站工具和自动化数据服务。"
},
{
"rank": 5,
"title": "示例竞品",
"url": "https://example.com/",
"domain": "example.com",
"snippet": "示例竞品搜索结果。"
}
],
"brandMatches": [
{
"rank": 1,
"url": "https://www.gugudata.com/",
"domain": "gugudata.com",
"registrableDomain": "gugudata.com",
"title": "咕咕数据 - 专业的数据提供商"
}
],
"competitorMatches": [
{
"rank": 5,
"url": "https://example.com/",
"domain": "example.com",
"registrableDomain": "example.com",
"title": "示例竞品",
"competitorDomain": "example.com",
"competitorName": "示例竞品"
}
]
}
],
"nextPageToken": ""
}
```
### 获取搜索可见性观测结果
- 请求方式: `GET`
- 资源路径: `/v1/searchVisibilityResults/{resultId}`
- 接口地址: `https://api.gugudata.com/v1/searchVisibilityResults/{resultId}`
- 描述: 读取指定关键词和搜索来源的观测结果,包含排名列表、品牌匹配、竞品匹配和单项指标;该接口不消耗搜索可见性 credits。
#### 请求参数
| 参数名 | 参数类型 | 是否必须 | 备注 |
| --- | --- | --- | --- |
| resultId | string | 是 | 观测结果 ID。 |
#### 请求示例
```json
[]
```
#### 返回参数
| 参数名 | 参数类型 | 备注 |
| --- | --- | --- |
| name | string | 观测结果资源名,格式为 searchVisibilityResults/{resultId}。 |
| resultId | string | 观测结果 ID。 |
| reportId | string | 所属报告 ID。 |
| runId | string | 所属观测任务 ID。 |
| query | string | 本条结果对应的关键词。 |
| source | string | 本条结果对应的搜索来源。 |
| checkedAt | string | 本条结果观测时间,UTC RFC3339 格式。 |
| cacheHit | boolean | 是否复用了短期内已有观测结果。 |
| metrics | object | 本关键词和来源的可见性指标。 |
| metrics.visible | boolean | 品牌域名或品牌别名是否在观测排名范围内出现。 |
| metrics.top10 | boolean | 品牌是否进入前 10 名。 |
| metrics.top20 | boolean | 品牌是否进入前 20 名。 |
| metrics.bestRank | integer | 品牌出现的最佳排名。未出现时为 null。 |
| metrics.averageRankWithPenalty | number | 未命中时按 maxRank + 1 计入的排名值。 |
| metrics.bestCompetitorRank | integer | 竞品出现的最佳排名。未出现时为 null。 |
| metrics.competitorGap | number | 品牌最佳排名与竞品最佳排名的差值。 |
| metrics.matchedUrlCount | integer | 匹配到品牌域名或品牌别名的结果数量。 |
| metrics.visibilityScore | number | 本关键词和来源的可见性评分,0 到 100。 |
| observedItems | array | 采样搜索结果列表,包含 rank、title、url、domain、snippet 等字段。 |
| brandMatches | array | 匹配到品牌域名或品牌别名的结果列表。 |
| competitorMatches | array | 匹配到竞品域名或竞品别名的结果列表。 |
#### 响应示例
```json
{
"name": "searchVisibilityResults/svres_example",
"resultId": "svres_example",
"reportId": "svrpt_example",
"runId": "svrun_example",
"query": "gugudata api",
"source": "google_web",
"checkedAt": "2026-07-01T10:01:20Z",
"cacheHit": false,
"metrics": {
"visible": true,
"top10": true,
"top20": true,
"bestRank": 1,
"averageRankWithPenalty": 1,
"bestCompetitorRank": 5,
"competitorGap": 4,
"matchedUrlCount": 1,
"visibilityScore": 100
},
"observedItems": [
{
"rank": 1,
"title": "咕咕数据 - 专业的数据提供商",
"url": "https://www.gugudata.com/",
"domain": "gugudata.com",
"snippet": "提供结构化数据接口、网站工具和自动化数据服务。"
},
{
"rank": 5,
"title": "示例竞品",
"url": "https://example.com/",
"domain": "example.com",
"snippet": "示例竞品搜索结果。"
}
],
"brandMatches": [
{
"rank": 1,
"url": "https://www.gugudata.com/",
"domain": "gugudata.com",
"registrableDomain": "gugudata.com",
"title": "咕咕数据 - 专业的数据提供商"
}
],
"competitorMatches": [
{
"rank": 5,
"url": "https://example.com/",
"domain": "example.com",
"registrableDomain": "example.com",
"title": "示例竞品",
"competitorDomain": "example.com",
"competitorName": "示例竞品"
}
]
}
```
## 接口常见 HTTP 响应状态码
> 以下为接口调用中常见的 HTTP 传输层状态码,不等同于响应体内的业务状态码;完整状态码注册表以 IANA HTTP Status Code Registry 为准。
| 状态码 | 状态码解释 | 备注 |
| --- | --- | --- |
| 200 | 请求成功 | HTTP 请求已成功处理;业务状态请结合响应体中的自定义业务码判断。 |
| 201 | 资源已创建 | 创建类接口请求成功,并已生成对应资源。 |
| 202 | 请求已接受 | 请求已被接受处理,结果可能异步完成。 |
| 204 | 无响应内容 | 请求成功但响应体为空,适用于无需返回数据的操作。 |
| 400 | 请求参数错误 | 请求参数缺失、格式错误或参数组合不合法。 |
| 401 | 认证失败 | 缺少、无效或未通过认证的访问凭证(如 AppKey)。 |
| 403 | 无权限访问 | 订单到期、权限不足或接口额度不可用。 |
| 404 | 资源不存在 | 请求路径不存在。 |
| 405 | 请求方法不允许 | 当前路径不支持该 HTTP 方法。 |
| 408 | 请求超时 | 客户端请求在服务端等待时间内未完成,可稍后重试。 |
| 409 | 请求冲突 | 请求与当前资源状态冲突,调整参数或业务状态后重试。 |
| 413 | 请求内容过大 | 上传文件或请求体超过接口限制。 |
| 414 | 请求地址过长 | 请求 URL 超过服务端可处理长度,建议减少查询参数或改用 POST。 |
| 415 | 请求内容类型不支持 | 上传或请求体的内容类型不符合接口要求。 |
| 422 | 请求语义错误 | 请求格式正确,但参数取值、语义或业务约束无法处理。 |
| 429 | 请求频率受限 | 默认按来源 IP 限速,单 IP 最多 5 QPS,可满足常规业务调用。超出限制时接口会返回 429 请求频率受限;已购买接口订单可加购 10 QPS 扩展。 |
| 431 | 请求头过大 | 请求头字段过大或过多,建议精简 Header 后重试。 |
| 500 | 服务器内部错误 | 服务端处理异常,请稍后重试。 |
| 502 | 服务暂时不可用 | 请稍后重试。 |
| 503 | 服务暂时不可用 | 请稍后重试。 |
| 504 | 请求超时 | 请稍后重试。 |
## 接口自定义业务状态码
| 业务状态码 | 业务状态码解释 | 备注 |
| --- | --- | --- |
| 400 | 参数无效 | |
| 401 | 凭证缺失或无效 | |
| 403 | 权益不可用 | |
| 404 | 资源不存在 | |
| 429 | 频率或额度受限 | |
| 500 | 请求处理失败 | |
| 503 | 搜索服务暂不可用 | |
## cURL 请求示例
```bash
curl --location --request POST 'https://api.gugudata.com/v1/searchVisibilityReports?appkey=APPKEY' \
--header 'Content-Type: application/json' \
--data '{"displayName":"GuGuData brand visibility","brand":"GuGuData","domain":"gugudata.com","aliases":["GuGuData"],"competitors":[{"domain":"example.com","name":"Example","aliases":["Example"]}],"queries":["gugudata api"],"sources":["google_web"],"locale":"zh-CN","region":"CN","maxRank":10,"includeRawResponse":false}'
```
## 常见问题 Q&A
### Q: Search Visibility 的 credits 怎么计算?
A: 当前年度套餐包含 120,000 credits/年。credits = 关键词数量 × 各搜索来源单次消耗之和。Google/Bing 在 maxRank=10/20/50 时分别消耗 1/2/5 credits;Baidu 在 maxRank=10/20/50 时分别消耗 10/20/50 credits。例如 10 个关键词 × google_web × maxRank=20 消耗 20 credits;10 个关键词 × google_web + bing_web × maxRank=20 消耗 40 credits;10 个关键词 × baidu_web × maxRank=20 消耗 200 credits。创建报告会自动创建首个观测任务,之后手动创建观测任务也会消耗 credits;读取已有报告、任务和结果不消耗搜索可见性 credits。
### Q: 报告、观测任务和观测结果有什么区别?
A: 报告保存品牌、域名、关键词、来源和竞品配置;观测任务代表一次实际采样执行;观测结果是每个关键词和搜索来源的明细结果,包含排名、品牌匹配、竞品匹配和可见性指标。
### Q: 任务状态应该如何轮询?
A: 创建报告或观测任务后,可使用 runId 调用获取观测任务接口。当 state 为 SUCCEEDED 时表示全部完成;PARTIALLY_FAILED 表示部分关键词或来源失败,可继续读取成功结果并结合 errorSummary 判断是否重跑。
### Q: 搜索可见性结果是否等同于官方搜索后台数据?
A: 不是。该接口提供面向公开搜索结果的采样观测,适合做品牌词、关键词覆盖和竞品排名的自动化监控;如需站点所有权维度的点击、曝光和索引诊断,应结合搜索引擎官方后台数据一起判断。
### Q: 如何完成第一次 API 调用?
A: 先确认当前接口的请求方法、必填参数和成功状态,再使用对应产品的 AppKey 发起请求;以实际响应中的业务状态判断结果。 [查看接入指南](https://www.gugudata.com/developers/getting-started)
### Q: 如何保证请求时 AppKey 的安全性?
A: 在开发者中心的 APP KEY 管理页面复制对应产品的 AppKey,并保存在服务端环境变量或密钥管理服务中。不要写入网页、App 客户端、公开仓库或日志。
### Q: 接口可以用于哪些开发语言?
A: Java、Python、Node.js、PHP、Go、C#、Swift、Kotlin 等支持 HTTP 请求的语言均可接入;也可以通过 OpenAPI、Postman 或 Apifox 查看和调试接口。
### Q: 请求失败或超时后可以重试吗?
A: 先区分 HTTP 状态与业务错误。参数、鉴权和权限错误应修正后再请求;超时并不表示服务端未执行,重试前需确认接口是否会重复计费或产生副作用。 [查看接入指南](https://www.gugudata.com/developers/errors-and-retries)
### Q: 接口的性能可以保证吗?
A: 实际响应时间受接口类型、参数和网络环境影响。请按当前套餐的 QPS 控制并发,生产接入前完成联调与容量评估。
## 服务协议以及服务免责声明
- [服务协议](https://www.gugudata.com/license)
- [服务免责声明](https://www.gugudata.com/disclaimer)
## 技术支持
- 技术支持邮箱: support@gugudata.com
- 微信客服: https://work.weixin.qq.com/kfid/kfcf9a60a6afe3337b7