Endpoint: POST https://www.googleapis.com/webmasters/v3/sites/{siteUrl}/searchAnalytics/query
| Field | Type | Description |
|---|---|---|
startDate |
string | Required. YYYY-MM-DD format. |
endDate |
string | Required. YYYY-MM-DD format. |
dimensions |
string[] | query, page, country, device, date, searchAppearance |
type |
string | web (default), image, video, news, discover, googleNews |
dimensionFilterGroups |
object[] | Array of filter groups (see below) |
aggregationType |
string | auto (default), byPage, byProperty, byNewsShowcasePanel |
rowLimit |
int | 1-25000 (default: 1000) |
startRow |
int | Pagination offset (default: 0) |
dataState |
string | final (default), all, hourly_all |
{
"dimensionFilterGroups": [{
"filters": [{
"dimension": "query",
"operator": "contains",
"expression": "seo"
}]
}]
}
Operators: contains, equals, notContains, notEquals, includingRegex, excludingRegex
- Regex uses RE2 syntax, max 4096 characters
{
"rows": [
{
"keys": ["seo tools", "https://example.com/tools"],
"clicks": 150,
"impressions": 5000,
"ctr": 0.03,
"position": 4.2
}
],
"responseAggregationType": "byPage"
}
discover and googleNews types do not support query dimension or position metric.USA, GBR, DEU).startRow by rowLimit until fewer rows returned.rowLimit is per API request. The claude-seo --limit option is a total
result cap and requests are paged internally at up to 25,000 rows.query and page dimensions. Query rows can
omit anonymized low-volume traffic and must not be summed as site totals."totals_complete": true.Endpoint: POST https://searchconsole.googleapis.com/v1/urlInspection/index:inspect
{
"inspectionUrl": "https://example.com/page",
"siteUrl": "sc-domain:example.com",
"languageCode": "en"
}
indexStatusResult:
| Field | Values |
|---|---|
verdict |
PASS, FAIL, NEUTRAL, PARTIAL, VERDICT_UNSPECIFIED |
coverageState |
Human-readable coverage description |
robotsTxtState |
ALLOWED, DISALLOWED |
indexingState |
INDEXING_ALLOWED, BLOCKED_BY_META_TAG, BLOCKED_BY_HTTP_HEADER |
pageFetchState |
SUCCESSFUL, SOFT_404, BLOCKED_ROBOTS_TXT, NOT_FOUND, ACCESS_DENIED, SERVER_ERROR, REDIRECT_ERROR, ACCESS_FORBIDDEN, BLOCKED_4XX, INTERNAL_CRAWL_ERROR, INVALID_URL |
lastCrawlTime |
ISO 8601 timestamp |
googleCanonical |
URL Google selected as canonical |
userCanonical |
URL declared canonical by the page |
crawledAs |
DESKTOP, MOBILE |
richResultsResult: Verdict + detected rich result types (e.g. Product, Breadcrumb, Review snippet, Event). Note: FAQPage and HowTo no longer produce rich results (FAQ retired 2026-05-07; HowTo retired 2023), so don't expect them as current rich-result types.
Base: https://www.googleapis.com/webmasters/v3/sites/{siteUrl}/sitemaps
| Method | Endpoint | Description |
|---|---|---|
GET |
/sitemaps |
List all sitemaps |
GET |
/sitemaps/{feedpath} |
Get specific sitemap |
PUT |
/sitemaps/{feedpath} |
Submit a sitemap |
DELETE |
/sitemaps/{feedpath} |
Delete a sitemap |
| Field | Description |
|---|---|
path |
URL of the sitemap |
lastSubmitted |
Last submission timestamp |
isPending |
Whether processing is incomplete |
isSitemapsIndex |
Whether this is a sitemap index |
type |
sitemap, atomFeed, rssFeed, urlList, notSitemap |
warnings |
Warning count |
errors |
Error count |
contents[] |
Array with type (web, image, video, news) and submitted count |
Base: https://www.googleapis.com/webmasters/v3/sites
| Method | Endpoint | Description |
|---|---|---|
GET |
/sites |
List all verified properties |
GET |
/sites/{siteUrl} |
Get property info |
PUT |
/sites/{siteUrl} |
Add a property |
DELETE |
/sites/{siteUrl} |
Remove a property |
| Field | Values |
|---|---|
siteUrl |
Property URL (e.g., sc-domain:example.com) |
permissionLevel |
siteOwner, siteFullUser, siteRestrictedUser, siteUnverifiedUser |