通过托管 OAuth,使用 GAQL 查询 Google Ads 广告系列、关键词和效果数据。
数据分析
google-search-console
试用通过托管 OAuth 代理接入 Google Search Console,查询搜索分析数据、管理 sitemap 并查看站点表现。
它能做什么
通过 api.maton.ai 访问 Google Search Console API,平台会自动注入 Google OAuth 令牌并把请求转发到 www.googleapis.com。每次调用都需带上 MATON_API_KEY 作为 Bearer 令牌,如果绑定了多个 Google 账号,可通过 Maton-Connection 头指定目标账号。技能封装了 webmasters/v3 接口:列出站点、按维度(query、page、country、device、date)查询 searchAnalytics 数据(指标包含 clicks、impressions、ctr、position),以及 sitemap 的列出、提交与删除。所有写操作和新 OAuth 连接在执行前都必须经过用户明确确认。
什么时候用它
- 按 query、page、country、device 或 date 维度查询搜索分析
- 拉取指定站点的点击、展示量、CTR 和平均排名报表
- 为 Search Console 站点提交、列出或删除 sitemap
- 通过 Maton connections 接口管理多个 Google Search Console OAuth 连接
技能文档
Google Search Console
Access the Google Search Console API with managed OAuth authentication. Query search analytics, manage sitemaps, and monitor site performance in Google Search.
Quick Start
# List sites
python <<'EOF'
import urllib.request, os, json
req = urllib.request.Request('https://api.maton.ai/google-search-console/webmasters/v3/sites')
req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}')
print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))
EOF
Base URL
https://api.maton.ai/google-search-console/{native-api-path}
Maton proxies requests to www.googleapis.com and automatically injects your OAuth token.
Authentication
All requests require the Maton API key in the Authorization header:
Authorization: Bearer $MATON_API_KEY
Environment Variable: Set your API key as MATON_API_KEY:
export MATON_API_KEY="YOUR_API_KEY"
Getting Your API Key
- Sign in or create an account at maton.ai
- Go to maton.ai/settings
- Copy your API key
Connection Management
Manage your Google OAuth connections at https://api.maton.ai.
List Connections
python <<'EOF'
import urllib.request, os, json
req = urllib.request.Request('https://api.maton.ai/connections?app=google-search-console&status=ACTIVE')
req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}')
print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))
EOF
Create Connection
python <<'EOF'
import urllib.request, os, json
data = json.dumps({'app': 'google-search-console'}).encode()
req = urllib.request.Request('https://api.maton.ai/connections', data=data, method='POST')
req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}')
req.add_header('Content-Type', 'application/json')
print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))
EOF
Get Connection
python <<'EOF'
import urllib.request, os, json
req = urllib.request.Request('https://api.maton.ai/connections/{connection_id}')
req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}')
print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))
EOF
Response:
{
"connection": {
"connection_id": "{connection_id}",
"status": "ACTIVE",
"creation_time": "2025-12-08T07:20:53.488460Z",
"last_updated_time": "2026-01-31T20:03:32.593153Z",
"url": "https://connect.maton.ai/?session_token=...",
"app": "google-search-console",
"metadata": {}
}
}
Open the returned url in a browser to complete OAuth authorization.
Delete Connection
python <<'EOF'
import urllib.request, os, json
req = urllib.request.Request('https://api.maton.ai/connections/{connection_id}', method='DELETE')
req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}')
print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))
EOF
Specifying Connection
If you have multiple Google Search Console connections, specify which one to use with the Maton-Connection header:
python <<'EOF'
import urllib.request, os, json
req = urllib.request.Request('https://api.maton.ai/google-search-console/webmasters/v3/sites')
req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}')
req.add_header('Maton-Connection', '{connection_id}')
print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))
EOF
If you have multiple connections, always include this header to ensure requests go to the intended account.
Security & Permissions
- Access is scoped to search performance, URL inspection, and sitemaps within the connected Google Search Console account.
- All write operations require explicit user approval. Before executing any create, update, or delete call, confirm the target resource and intended effect with the user.
API Reference
Sites
GET /google-search-console/webmasters/v3/sites
GET /google-search-console/webmasters/v3/sites/{siteUrl}
Note: Site URL must be URL-encoded (e.g., https%3A%2F%2Fexample.com%2F)
Search Analytics
POST /google-search-console/webmasters/v3/sites/{siteUrl}/searchAnalytics/query
Content-Type: application/json
{
"startDate": "2024-01-01",
"endDate": "2024-01-31",
"dimensions": ["query"],
"rowLimit": 100
}
Sitemaps
GET /google-search-console/webmasters/v3/sites/{siteUrl}/sitemaps
PUT /google-search-console/webmasters/v3/sites/{siteUrl}/sitemaps/{feedpath}
DELETE /google-search-console/webmasters/v3/sites/{siteUrl}/sitemaps/{feedpath}
Search Analytics Examples
Top Queries
{
"startDate": "2024-01-01",
"endDate": "2024-01-31",
"dimensions": ["query"],
"rowLimit": 25
}
Top Pages
{
"startDate": "2024-01-01",
"endDate": "2024-01-31",
"dimensions": ["page"],
"rowLimit": 25
}
Device Breakdown
{
"startDate": "2024-01-01",
"endDate": "2024-01-31",
"dimensions": ["device"],
"rowLimit": 10
}
Daily Performance
{
"startDate": "2024-01-01",
"endDate": "2024-01-31",
"dimensions": ["date"],
"rowLimit": 31
}
Filtered Query
{
"startDate": "2024-01-01",
"endDate": "2024-01-31",
"dimensions": ["query"],
"dimensionFilterGroups": [{
"filters": [{
"dimension": "query",
"operator": "contains",
"expression": "keyword"
}]
}],
"rowLimit": 100
}
Dimensions
query- Search querypage- Page URLcountry- Country codedevice- DESKTOP, MOBILE, TABLETdate- Date
Metrics (returned automatically)
clicks- Number of clicksimpressions- Number of impressionsctr- Click-through rateposition- Average position
Code Examples
JavaScript
const response = await fetch(
'https://api.maton.ai/google-search-console/webmasters/v3/sites/https%3A%2F%2Fexample.com/searchAnalytics/query',
{
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Authorization': `Bearer ${process.env.MATON_API_KEY}`
},
body: JSON.stringify({
startDate: '2024-01-01',
endDate: '2024-01-31',
dimensions: ['query'],
rowLimit: 25
})
}
);
Python
import os
import requests
from urllib.parse import quote
site_url = quote('https://example.com', safe='')
response = requests.post(
f'https://api.maton.ai/google-search-console/webmasters/v3/sites/{site_url}/searchAnalytics/query',
headers={'Authorization': f'Bearer {os.environ["MATON_API_KEY"]}'},
json={
'startDate': '2024-01-01',
'endDate': '2024-01-31',
'dimensions': ['query'],
'rowLimit': 25
}
)
Notes
- Site URLs must be URL-encoded in the path
- Date range limited to 16 months
- Maximum 25,000 rows per request
- Use
startRowfor pagination - Data has 2-3 day delay
- IMPORTANT: When using curl commands, use
curl -gwhen URLs contain brackets (fields[],sort[],records[]) to disable glob parsing - IMPORTANT: When piping curl output to
jqor other commands, environment variables like$MATON_API_KEYmay not expand correctly in some shell environments. You may get "Invalid API key" errors when piping.
Error Handling
| Status | Meaning |
|---|---|
| 400 | Missing Search Console connection |
| 401 | Invalid or missing Maton API key |
| 429 | Rate limited (10 req/sec per account) |
| 4xx/5xx | Passthrough error from Search Console API |
Troubleshooting: API Key Issues
- Check that the
MATON_API_KEYenvironment variable is set:
echo $MATON_API_KEY
- Verify the API key is valid by listing connections:
python <<'EOF'
import urllib.request, os, json
req = urllib.request.Request('https://api.maton.ai/connections')
req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}')
print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))
EOF
Troubleshooting: Invalid App Name
- Ensure your URL path starts with
google-search-console. For example:
- Correct:
https://api.maton.ai/google-search-console/webmasters/v3/sites - Incorrect:
https://api.maton.ai/webmasters/v3/sites
Resources
相关技能
通过托管 OAuth 连接 Google Tasks,统一 API 完成任务列表与任务的读写管理。
通过托管 OAuth 代理创建、更新与读取 Google Forms。
通过 OAuth 托管的 API 创建与管理 Google Apps Script 项目、部署、版本及远程脚本执行。
通过托管 OAuth 网关调用 Android Publisher API,管理 Google Play 应用、订阅、内购商品和评论。
通过托管 OAuth 调用 Google Docs API,实现文档创建、读写与样式管理。