开发者文档

Google SERP API(同步搜索)

SERP 端点面向「即问即答」的搜索场景:提交查询后服务端阻塞等待并直接把结果返回,与 scraper 的「提交 → 轮询 → 取数」异步模型不同。小任务用它最省事;大任务超时会自动降级为可轮询的 run(见下)。


与 scraper 的三点不同

维度 scraper(/v1/scraper/* SERP(/v1/serp/*
入参 { deliveryMode, recordLimit, targets:[ {...} ], deliveries }(目标数组) 扁平:查询字段直接平铺在 body 顶层 + recordLimit + dataFormat(单次查询)
返回 异步:201 + run id,自行轮询取数 同步直返200 + 结果(records 数组),无需轮询
通知 支持 deliveries webhook 推送 不支持(同步直返,无异步通知)

快速说明

  • Base URLhttps://api.antsdata.com/v1
  • 方法与路径POST /v1/serp/{platform}/{resource}。当前 platformgoogleresource 见下方端点一览。
  • 鉴权:请求头 Authorization: Bearer ants_xxx(静态 API Key,与 scraper 同一套)
  • Content-Typeapplication/json
  • 提交体:查询字段平铺在顶层,另加两个可选的 run 级字段:
    • recordLimit:本次查询记录上限(省略/0 按可用积分反算)。
    • dataFormat:结果格式,json(默认,直返记录数组)/ csv / html / markdown(后三者返导出文本)。

返回码与响应体

统一信封 { code, message, data }data 形状随终局分三种:

场景 HTTP data
成功 + json 200 { "runId", "status":"succeeded", "records":[ … ] }
成功 + csv/html/markdown 200 { "runId", "status":"succeeded", "format":"csv", "content":"…" }
采集失败 200 { "runId", "status":"failed", "run":{ …逐任务 errorMessage… } }
超时未完成 202 { "runId", "status":"queued"\|"running", "run":{ … } }
  • 超时降级:大查询在服务端同步窗口内没跑完 → 返 202 + runId,run 继续后台跑,改用轮询:GET /v1/serp/runs/{id},成功后 GET /v1/serp/runs/{id}/records 取数或 GET /v1/serp/runs/{id}/download?format=json|csv|excel 下载。
  • 产物过大:同步直返产物 > 16 MiB 会报错,请改用 GET /v1/serp/runs/{id}/download 取全量。
  • 计费:与 scraper 一致,按成功产出的记录条数结算;失败释放不计费(详见认证与错误处理)。

端点一览

端点 路径 说明
网页搜索 POST /v1/serp/google/search 网页 / 图片搜索结果
购物 POST /v1/serp/google/shopping Google Shopping 商品
新闻 POST /v1/serp/google/news Google News 文章
地图 POST /v1/serp/google/maps Google Maps 商家/地点
广告创意 POST /v1/serp/google/ads-creatives 广告透明度中心创意列表
创意详情 POST /v1/serp/google/ads-creative-details 单条创意的曝光/花费/披露详情

Search — 网页搜索

POST /v1/serp/google/search

查询字段(平铺在 body 顶层):

字段 类型 必填 说明
query string 搜索关键词
searchType string web 网页 / image 图片(默认 web
geo_location string 地理位置,如 California,United States
host_language string 界面语言 hl,如 en(默认 en
domain string Google 域名后缀 google.<domain>(默认 com
page number SERP 页码(默认 1

输出字段records 每条一条结果):

字段 类型 说明
organic array 自然搜索结果(searchType=web,每条一记录)
organic.pos number 板块内排名
organic.pos_overall number 整页综合排名
organic.title string 标题
organic.favicon_text string 站点名 / favicon 文本
organic.url_shown string 面包屑 / 显示 URL
organic.url string 落地 URL
organic.desc string 摘要片段
imageResults array 图片搜索结果(searchType=image,每条一记录)
imageResults.position number 排序序号
imageResults.thumbnailUrl string 缩略图 URL
imageResults.originalUrl string 原图 URL
imageResults.source string 来源域名
imageResults.title string 图片标题
total_results_count string 结果总数文本(如 About 1,230,000 results;部分查询为 null)
ai_overview string AI 概览摘要纯文本(无则 null)

提交示例:

curl -X POST "https://api.antsdata.com/v1/serp/google/search" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "query": "bitcoin",
    "searchType": "web",
    "geo_location": "California,United States",
    "host_language": "en",
    "recordLimit": 50
  }'

同步响应(HTTP 200):

{
  "code": 0,
  "message": "ok",
  "data": {
    "runId": "1287345",
    "status": "succeeded",
    "records": [
      {
        "organic": {
          "pos": 1,
          "pos_overall": 1,
          "title": "Bitcoin - Open source P2P money",
          "url": "https://bitcoin.org/",
          "desc": "Bitcoin is an innovative payment network ..."
        }
      }
    ]
  }
}

Shopping — 购物

POST /v1/serp/google/shopping

查询字段

字段 类型 必填 说明
query string 商品搜索词
gl string 国家地区(默认 us
hl string 界面语言(默认 en
minPrice number 价格下限(本地币种)
maxPrice number 价格上限
condition string new / used / refurbished
sortBy string relevance / price_asc / price_desc / rating
resultsLimit number 返回上限(默认 60;一般由 recordLimit 控制)

输出字段records.products[] 每条一件商品):

字段 类型 说明
totalResults number 命中估算总数
products.position number 排名序号
products.productId string Google Shopping 商品 ID
products.title string 商品标题
products.link string Shopping 商品详情页
products.price.amount string 当前价
products.price.currency string 币种
products.price.originalAmount string 划线原价
products.seller string 卖家名称
products.rating string 商品评分
products.reviewsCount number 评论数
products.thumbnail string 主图缩略图 URL
products.isSponsored boolean 是否为赞助 / 广告位
products.shipping string 配送说明
products.badges array 平台标签徽章
products.offers[].seller string 其它卖家名
products.offers[].price string 该卖家价格
products.offers[].currency string 币种
products.offers[].condition string 商品状态
products.offers[].link string 卖家落地页

提交示例:

curl -X POST "https://api.antsdata.com/v1/serp/google/shopping" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "query": "wireless earbuds",
    "gl": "us",
    "hl": "en",
    "minPrice": 50,
    "maxPrice": 300
  }'

News — 新闻

POST /v1/serp/google/news

查询字段

字段 类型 必填 说明
query string 搜索关键词
timeRange string 1h / 1d / 7d / 1m / 1y(默认 7d,仅 keyword)
cluster boolean 同事件聚类去重(默认 true,仅 keyword)
hl string 语言(默认 en
gl string 国家地区(默认 us
feedType string keyword / top / topic / publication(默认 keyword
topicId string feedType=topic 时必填
publicationId string feedType=publication 时必填

输出字段records.articles[] 每条一篇文章):

字段 类型 说明
feedType string 回显采集类型
articles.title string 文章标题
articles.link string News 跳转链接
articles.source string 发布媒体名称
articles.published string 发布时间
articles.snippet string 内容摘要
articles.thumbnail string 配图缩略图 URL
articles.clusterSize number 该事件关联的报道数量(聚类开启时返回)

提交示例:

curl -X POST "https://api.antsdata.com/v1/serp/google/news" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "query": "AI regulation EU",
    "timeRange": "7d",
    "cluster": true,
    "hl": "en",
    "gl": "us"
  }'

Maps — 地图

POST /v1/serp/google/maps

查询字段

字段 类型 必填 说明
query string 地址 / 地名 / 商家搜索词
location string 商家搜索自然语言区域,如 Manhattan, NY
gl string 国家地区代码(默认 us
hl string 界面语言(默认 en
openNow boolean 仅营业中(默认 false
resultsLimit number 商家搜索返回上限(默认 20;一般由 recordLimit 控制)
minRating number 最低评分过滤
pageToken string 翻页 token(取自上一页 nextPageToken
lat / lng number 反查坐标(成对,用于经纬度反查)
ll string 商家搜索中心点,如 @40.7128,-74.0060,15z
mode string geocode / reverse / places(默认 places,一般留空自动判断)

输出字段records.places[] 每条一个地点):

字段 类型 说明
places.placeId string Google Place ID
places.dataId string Maps data_id
places.title string 商家名称
places.address string 地址
places.rating string 用户评分
places.reviewsCount number 评论总数
places.priceLevel string 价位等级
places.categories array 经营类目
places.lat string 纬度
places.lng string 经度
places.phone string 联系电话
places.website string 官网
places.thumbnail string 封面缩略图 URL
nextPageToken string 下一页 token

提交示例:

curl -X POST "https://api.antsdata.com/v1/serp/google/maps" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "query": "coffee shop",
    "location": "Manhattan, NY",
    "gl": "us",
    "hl": "en",
    "openNow": false
  }'

Ads-creatives — 广告创意

POST /v1/serp/google/ads-creatives

Google 广告透明度中心(Ads Transparency)的创意列表。拿到的 creative_id / sponsor_id 可作「创意详情」入参。

查询字段

字段 类型 必填 说明
query string 网站域名 / 关键词,如 nike.com(与 advertiser_id 二选一)
regions array 地区代码数组,如 ["US","GB"](默认 ["us"]region 格式)
start_date string 投放起 YYYY-MM-DD
end_date string 投放止 YYYY-MM-DD
platform number 平台过滤 1–6(1=Search / 2=Display / 3=YouTube / 4=Maps / 5=Play / 6=Shopping)
advertiser_id string 广告主 ID(与 query 二选一,来自联想结果)
limit number 返回创意上限(1–1000,默认 100;受 recordLimit 计费上限压低)
topic string political 切到政治广告 schema

输出字段records 每条一条创意):

字段 类型 说明
creative_id string 创意 ID(可作创意详情入参)
sponsor_id string 广告主 ID
format string 创意格式(如 video
regions array 投放地区
first_shown string 首次曝光
last_shown string 末次曝光

提交示例:

curl -X POST "https://api.antsdata.com/v1/serp/google/ads-creatives" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "query": "nike.com",
    "regions": ["US"],
    "start_date": "2026-01-01",
    "end_date": "2026-06-30",
    "platform": 1
  }'

Ads-creative-details — 创意详情

POST /v1/serp/google/ads-creative-details

单条创意的曝光 / 花费 / 政治广告披露详情。sponsor_idcreative_id 请先从「广告创意」接口获取,勿硬编码。

查询字段

字段 类型 必填 说明
sponsor_id string 广告主 ID
creative_id string 创意 ID(先从广告创意接口获取)
topic string political 切到政治 schema

输出字段records 每条一条创意详情):

字段 类型 说明
creative_id string 创意 ID
sponsor_id string 广告主 ID
first_shown string 首次曝光时间(ISO 8601)
last_shown string 末次曝光时间(ISO 8601)
topic string 广告主题(political 时非空,否则空串)
funder string 出资方 / 资助者(政治广告披露,普通广告为空串)
regions array 投放地区明细,每项 {code, first_shown, last_shown, min_times, max_times}(曝光次数区间为字符串)
impressions_lower number 曝光量下界(政治 / EU 广告披露,普通广告为 null)
impressions_upper number 曝光量上界(同上)
spend_lower number 花费下界(政治 / EU 广告披露,普通广告为 null)
spend_upper number 花费上界(同上)
eu_reach number 欧盟触达人数(EU 政治广告披露,否则 null)

提交示例:

curl -X POST "https://api.antsdata.com/v1/serp/google/ads-creative-details" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "sponsor_id": "AR00040546930815664129",
    "creative_id": "CR12886158981977866241"
  }'

FAQ

Q: SERP 和 /v1/scraper/google/* 有什么区别?

底层是同一套 Google 采集能力,但 SERP(/v1/serp/google/*)是同步直返 + 扁平入参的封装:一次调用直接拿结果,入参不用包 targets 数组、也不用轮询。追求异步批量、webhook 推送时用 /v1/scraper/google/*

Q: 超时了(返回 202)怎么办?

202 说明查询较大、没在同步窗口内跑完,但 run 已在后台继续。拿返回里的 runId,转为轮询 GET /v1/serp/runs/{id},到 succeededGET /v1/serp/runs/{id}/records 取数或 /download 下载。

Q: dataFormat 支持哪些格式?

json(默认,records 直返记录数组)、csv / html / markdown(返 content 导出文本 + format)。

Q: 结果很大取不全?

同步直返上限 16 MiB,超了会报错。改用 GET /v1/serp/runs/{id}/download?format=json|csv|excel 一次拿全量。

Q: 计费方式?

与 scraper 一致,按成功产出的记录条数结算,失败释放不计费。详见认证与错误处理