快速回答
SerpCrypto 搜索 endpoint 接受哪些参数?
GET https://serpcrypto.com/api/v1/search 接受一个必填参数 q,以及九个可选参数:engine、gl、hl、location、google_domain、device、page、safe 和 period。SerpCrypto 返回 JSON,在全部 6 个引擎上每次成功搜索扣 1 积分;出错免费。积分包 10,000 次搜索 起售价 US$7.50,用加密货币支付,无需 KYC。
如何通过身份验证?
用以下两种方式之一发送你的密钥。推荐方式是用 header Authorization: Bearer YOUR_KEY。另一种是用查询参数 api_key=YOUR_KEY,适合在浏览器标签页里快速测试。
密钥缺失、错误或已吊销会返回 401 invalid_api_key,且不扣费。你可以在 dashboard 中随时创建和撤销的 API 密钥,这样你可以为每个脚本或服务器分配各自的密钥,吊销其中一个而不影响其他。
执行一次搜索
GET/api/v1/search
在所选引擎上执行一次搜索,并将结果页以 JSON 返回。无论使用哪个引擎,一次成功搜索都消耗 1 积分;出错不消耗。参数放在查询字符串中,需 URL 编码。示例向 Google 查询德克萨斯州奥斯汀的咖啡烘焙商;其中的 ID、数量和结果仅为示例。
认证:API 密钥放在 Authorization: Bearer API_KEY header 中。
参数
| 名称 | 位置 | 类型 | 是否必填 | 描述 |
|---|---|---|---|---|
q | query | string | 是 | 搜索查询,按人们实际输入的方式来写。引号或 site: 等搜索运算符属于查询的一部分。 |
engine | query | string | 否 | google(默认)、google_news、google_images、google_maps、google_shopping 或 bing。 |
gl | query | string | 否 | 结果的国家/地区:小写的 ISO 3166-1 alpha-2 代码,例如 us、de 或 br。默认 us。 |
hl | query | string | 否 | 界面语言,例如 en、de 或 pt-BR。默认 en。 |
location | query | string | 否 | 城市级地点,写作 City, Region, Country,例如 Austin, Texas, United States。参见地点。 |
google_domain | query | string | 否 | 要搜索的 Google 域名,例如 google.de。默认:gl 国家对应的域名。当 engine=bing 时忽略。 |
device | query | string | 否 | desktop(默认)或 mobile。 |
page | query | integer | 否 | 结果页,从 1(默认)到 10。每个结果页都是一次单独的查询,并消耗 1 积分。 |
safe | query | string | 否 | active 会过滤掉露骨结果;off(默认)则不会。 |
period | query | string | 否 | 仅返回最近一小时(h)、一天(d)、一周(w)、一个月(m)或一年(y)内的结果。 |
api_key | query | string | 否 | 你的密钥,用于不发送 Authorization 请求头的情况。 |
响应 200
{
"search_metadata": {
"id": "srch_7f3a9c2e41b8",
"status": "success",
"engine": "google",
"created_at": "2026-10-22T09:14:05Z",
"credits_used": 1
},
"search_parameters": {
"engine": "google",
"q": "coffee roasters",
"gl": "us",
"hl": "en",
"location": "Austin, Texas, United States",
"google_domain": "google.com",
"device": "desktop",
"page": 1
},
"search_information": {
"total_results": 18600000,
"query_displayed": "coffee roasters"
},
"local_results": [
{
"position": 1,
"title": "Example Coffee Roasters",
"address": "123 Example St, Austin, TX",
"rating": 4.7,
"reviews": 312,
"type": "Coffee roasters"
}
],
"organic_results": [
{
"position": 1,
"title": "The 12 best coffee roasters in Austin",
"link": "https://www.example.com/austin/coffee-roasters",
"displayed_link": "www.example.com › austin › coffee",
"snippet": "From light Nordic roasts to dark espresso blends, these local roasters…",
"date": "Sep 30, 2026"
},
{
"position": 2,
"title": "Example Roasting Co. | Fresh beans, roasted in Austin",
"link": "https://www.example.org/",
"displayed_link": "www.example.org",
"snippet": "Small-batch coffee roasted every weekday and shipped the same day…"
}
],
"people_also_ask": [
{
"question": "What is the oldest coffee roaster in Austin?",
"snippet": "…",
"title": "Austin coffee history",
"link": "https://www.example.net/austin-coffee-history"
}
],
"related_searches": [
{
"query": "coffee roasters near me"
},
{
"query": "coffee roasters austin wholesale"
}
],
"pagination": {
"current": 1,
"next_page": 2
}
}代码示例
curl -sG "https://serpcrypto.com/api/v1/search" \
-H "Authorization: Bearer $SERPCRYPTO_API_KEY" \
--data-urlencode "q=coffee roasters" \
--data-urlencode "location=Austin, Texas, United States" \
-d gl=us -d hl=en -d device=desktopimport os
import requests
r = requests.get(
"https://serpcrypto.com/api/v1/search",
params={
"q": "coffee roasters",
"location": "Austin, Texas, United States",
"gl": "us",
"hl": "en",
},
headers={"Authorization": "Bearer " + os.environ["SERPCRYPTO_API_KEY"]},
timeout=60,
)
r.raise_for_status()
print(r.json()["organic_results"][0]["link"])const params = new URLSearchParams({
q: "coffee roasters",
location: "Austin, Texas, United States",
gl: "us",
hl: "en",
});
const res = await fetch("https://serpcrypto.com/api/v1/search?" + params, {
headers: { Authorization: "Bearer " + process.env.SERPCRYPTO_API_KEY },
});
const data = await res.json();
console.log(data.organic_results?.[0]?.link);有哪些 engine 值,各自返回什么?
响应结构(search_metadata、search_parameters、search_information)在每个 engine 上都一样。只有页面显示某个区块时,该区块才会出现。
engine | 来源 | 答案中的主要区块 |
|---|---|---|
google | Google 搜索结果 | ai_overview、organic_results、ads、people_also_ask、local_results、knowledge_graph、top_stories、inline_videos、shopping_results、related_searches、pagination |
google_news | Google News | news_results:标题、链接、来源、日期、摘要、缩略图 |
google_images | Google Images | images_results:原始 URL 和尺寸、缩略图、来源页面 |
google_maps | Google Maps | local_results:名称、地址、电话、网站、评分、评论数、类别、营业时间、坐标 |
google_shopping | Google Shopping | shopping_results:标题、价格、提取价格、货币、商家、配送、评分 |
bing | Bing | organic_results、related_searches |
查看你的积分
GET/api/v1/credits
返回账户剩余的积分、自 UTC 零点以来已使用的积分,以及你的账户可同时运行的查询数量。此调用免费。以下数值仅为示例。
认证:API 密钥放在 Authorization: Bearer API_KEY header 中。
响应 200
{
"credits_remaining": 84210,
"credits_used_today": 1290,
"concurrency_limit": 10
}代码示例
curl -s "https://serpcrypto.com/api/v1/credits" \
-H "Authorization: Bearer $SERPCRYPTO_API_KEY"import os
import requests
r = requests.get(
"https://serpcrypto.com/api/v1/credits",
headers={"Authorization": "Bearer " + os.environ["SERPCRYPTO_API_KEY"]},
timeout=30,
)
r.raise_for_status()
print(r.json()["credits_remaining"])const res = await fetch("https://serpcrypto.com/api/v1/credits", {
headers: { Authorization: "Bearer " + process.env.SERPCRYPTO_API_KEY },
});
const { credits_remaining } = await res.json();
console.log(credits_remaining);API 可能返回哪些错误?
每个错误的响应体都是 {"error": {"code": "…", "message": "…"}}。错误页面 解释了每个错误,并给出重试 code。
| HTTP | code | 发生时机 | 是否计费 |
|---|---|---|---|
| 400 | invalid_parameter | 缺少必需参数,或参数值超出允许范围 | 否 |
| 401 | invalid_api_key | 密钥缺失、错误或已撤销 | 否 |
| 402 | insufficient_credits | 账户积分已用完 | 否 |
| 429 | concurrency_limit | 你的账户同时运行的查询过多 | 否 |
| 502 | search_failed | 本次请求的 engine 或采集失败;请重试 | 否 |
| 504 | search_timeout | 未及时返回答案;请重试 | 否 |
具体如何计费?
- 一次成功的查询 = 1 积分,在每个 engine 上都一样,包括 Google Maps 和 Google Shopping。
- 每个结果页都是一次查询。 每页约 10 条自然结果,这是 Google 自 2025 年 9 月起不再支持 num=100 后的返回方式;每多一页就多消耗 1 积分。
- 错误免费: 所有 HTTP 状态码不是 200 的响应都不消耗积分。
- 查看积分免费。
预付的搜索积分永不过期:未使用的查询会一直留在你的账户中,直到你使用它们。积分包从 US$7.50 买 10,000 次搜索 起,最大的一档为 US$0.30/千次搜索;详见价格。
查询应该怎样编码?
以 URL 编码形式发送 q,和其他 query-string 值一样:空格变成 %20 或 +,带重音的字母按 UTF-8 编码。curl 用 --data-urlencode 完成,Python 的 requests 和 httpx 用 params= 完成,Node.js 用 URLSearchParams 完成。
查询要按用户在搜索框中输入的原文来写。引号、减号或 site: 都保留在 q 内;由 engine 决定如何处理它们,就像对待普通访客一样。
API 有版本吗?
有。版本是路径的一部分:/api/v1/。新字段或新区块可能出现在版本 1 的响应中,因此你的代码应忽略不认识的键。删除或重命名字段会通过路径中的新版本引入,而不会改动 v1。
API 参考常见问题
我可以发送带 JSON body 的 POST 请求吗?
版本 1 不行:两个 endpoint 都只接受 GET 请求,参数放在 query string 里。这样每次调用都能用 curl 或浏览器轻松复现,也便于在没有 body 的情况下记录日志。
一次搜索返回多少条结果?
每页约 10 条自然结果,这是 Google 自 2025 年 9 月起不再支持 num=100 后的返回方式;每多一页就多消耗 1 积分。要收集 30 条结果,请分别请求 page=1、page=2 和 page=3:三次搜索,三个积分。
积分用完了会怎样?
下一次搜索会返回 402 insufficient_credits,且不消耗任何积分。在定价页面用余额再买一个积分包即可;你的密钥继续有效,搜索会立即恢复。
我可以在多台服务器上使用同一个密钥吗?
可以。密钥不与 IP 地址绑定。受限的是账户上同时运行的搜索数量:GET /credits 中的 concurrency_limit 给出了具体数值。