google-search-console
GitHub通过API查询Google Search Console数据,包括搜索表现(点击/展示/CTR)、站点列表、Sitemap状态及URL索引检查。适用于分析有机搜索性能、排查索引问题或查看Sitemap提交情况。
Trigger Scenarios
Install
npx skills add NeverSight/learn-skills.dev --skill google-search-console -g -y
SKILL.md
Frontmatter
{
"name": "google-search-console",
"license": "Apache-2.0",
"metadata": {
"author": "acedatacloud",
"version": "1.0"
},
"connections": [
"google\/search-console"
],
"description": "Query Google Search Console via the Search Console API v1 — search analytics (clicks \/ impressions \/ CTR \/ position), sites, sitemaps and URL inspection. Use when the user mentions Search Console, organic search performance, top queries \/ pages, indexing status, or sitemaps.",
"when_to_use": "Trigger when the user wants Search Console data — top queries or\npages by clicks \/ impressions \/ CTR \/ position, performance by date\nor country, the list of verified sites, sitemaps, or URL inspection.\nRead-only (`webmasters.readonly`). List sites first to get the\nproperty URL.\n",
"allowed_tools": [
"Bash"
]
}
Query Google Search Console via curl + jq. The user's OAuth bearer token is
in $GOOGLE_SEARCH_CONSOLE_TOKEN (scope webmasters.readonly); every call needs
Authorization: Bearer $GOOGLE_SEARCH_CONSOLE_TOKEN. Base:
https://searchconsole.googleapis.com.
Failures are {"error":{"code","message","status"}} — show verbatim. 401 =
re-install. 403 = the token's account doesn't own/verify that site.
AUTH="Authorization: Bearer $GOOGLE_SEARCH_CONSOLE_TOKEN"
# Verified sites (siteUrl is the property — URL-encode it in later calls)
curl -sS -H "$AUTH" "https://searchconsole.googleapis.com/webmasters/v3/sites" \
| jq '.siteEntry[] | {siteUrl, permissionLevel}'
Search analytics
# Top queries by clicks for the last 28 days. siteUrl must be URL-encoded
# (https%3A%2F%2Fexample.com%2F or sc-domain%3Aexample.com).
SITE="https%3A%2F%2Fexample.com%2F"
curl -sS -X POST -H "$AUTH" -H "Content-Type: application/json" -d '{
"startDate":"2026-05-24","endDate":"2026-06-21",
"dimensions":["query"],"rowLimit":10
}' "https://searchconsole.googleapis.com/webmasters/v3/sites/$SITE/searchAnalytics/query" \
| jq '.rows[] | {query: .keys[0], clicks, impressions, ctr, position}'
Swap dimensions for ["page"], ["country"], ["date"], or combine
["query","page"]. Add "dimensionFilterGroups" to filter by page/country.
Sitemaps & URL inspection
# Submitted sitemaps
curl -sS -H "$AUTH" "https://searchconsole.googleapis.com/webmasters/v3/sites/$SITE/sitemaps" \
| jq '.sitemap[] | {path, lastDownloaded, errors, warnings}'
# Is a URL indexed?
curl -sS -X POST -H "$AUTH" -H "Content-Type: application/json" \
-d '{"inspectionUrl":"https://example.com/page","siteUrl":"https://example.com/"}' \
"https://searchconsole.googleapis.com/v1/urlInspection/index:inspect" \
| jq '.inspectionResult.indexStatusResult | {verdict, coverageState, lastCrawlTime}'
Gotchas
- Two property shapes: URL-prefix (
https://example.com/) vs Domain (sc-domain:example.com). Use exactly thesiteUrlfrom the sites list, URL-encoded. - Data lags ~2–3 days; the most recent dates may be partial/empty — set
endDatea couple days back for stable numbers. ctris 0–1,positionis average rank (lower = better).
Version History
- e0220ca Current 2026-07-05 22:54


