Get Search Console Data
Returns Google Search Console clicks, impressions, CTR and position, grouped by query, page, country, device or date.
GET /api/sites/:site/gsc/dataQueries Google Search Console's Search Analytics for the site's connected property and returns its rows. The site must be connected.
Permissions: any role on the site (viewer and above). API keys need the gsc:read scope. Public sites and private links can read it without a key.
Path Parameters
Prop
Type
Query Parameters
Prop
Type
One of dimensions or dimension is required. This endpoint takes its own filters format, not the analytics filters.
Response
Prop
Type
GSCRow Object
Prop
Type
Error Responses
Errors use the standard body { error, code, message, resolution }.
Prop
Type
curl -X GET "https://app.rybbit.io/api/sites/123/gsc/data?start_date=2026-10-01&end_date=2026-10-28&dimensions=query,country&row_limit=100" \
-H "Authorization: Bearer your_api_key_here"const response = await fetch(
'https://app.rybbit.io/api/sites/123/gsc/data?start_date=2026-10-01&end_date=2026-10-28&dimensions=query,country&row_limit=100',
{
headers: {
'Authorization': 'Bearer your_api_key_here'
}
}
);
const data = await response.json();import requests
response = requests.get(
'https://app.rybbit.io/api/sites/123/gsc/data',
params={
'start_date': '2026-10-01',
'end_date': '2026-10-28',
'dimensions': 'query,country',
'row_limit': 100
},
headers={
'Authorization': 'Bearer your_api_key_here'
}
)
data = response.json()$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'https://app.rybbit.io/api/sites/123/gsc/data?start_date=2026-10-01&end_date=2026-10-28&dimensions=query,country&row_limit=100');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, [
'Authorization: Bearer your_api_key_here'
]);
$response = curl_exec($ch);
curl_close($ch);
$data = json_decode($response, true);require 'net/http'
require 'json'
uri = URI('https://app.rybbit.io/api/sites/123/gsc/data?start_date=2026-10-01&end_date=2026-10-28&dimensions=query,country&row_limit=100')
req = Net::HTTP::Get.new(uri)
req['Authorization'] = 'Bearer your_api_key_here'
res = Net::HTTP.start(uri.hostname, uri.port, use_ssl: true) { |http| http.request(req) }
data = JSON.parse(res.body)req, _ := http.NewRequest("GET", "https://app.rybbit.io/api/sites/123/gsc/data?start_date=2026-10-01&end_date=2026-10-28&dimensions=query,country&row_limit=100", nil)
req.Header.Set("Authorization", "Bearer your_api_key_here")
client := &http.Client{}
resp, _ := client.Do(req)
defer resp.Body.Close()
var data map[string]interface{}
json.NewDecoder(resp.Body).Decode(&data)let client = reqwest::Client::new();
let res = client
.get("https://app.rybbit.io/api/sites/123/gsc/data?start_date=2026-10-01&end_date=2026-10-28&dimensions=query,country&row_limit=100")
.header("Authorization", "Bearer your_api_key_here")
.send()
.await?;
let data: serde_json::Value = res.json().await?;HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://app.rybbit.io/api/sites/123/gsc/data?start_date=2026-10-01&end_date=2026-10-28&dimensions=query,country&row_limit=100"))
.header("Authorization", "Bearer your_api_key_here")
.GET()
.build();
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());using var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer your_api_key_here");
var response = await client.GetAsync("https://app.rybbit.io/api/sites/123/gsc/data?start_date=2026-10-01&end_date=2026-10-28&dimensions=query,country&row_limit=100");
var data = await response.Content.ReadAsStringAsync();{
"data": [
{
"query": "acme analytics",
"country": "US",
"clicks": 412,
"impressions": 3820,
"ctr": 0.1078,
"position": 2.4
},
{
"query": "acme pricing",
"country": "GB",
"clicks": 96,
"impressions": 1210,
"ctr": 0.0793,
"position": 3.1
}
]
}Get Search Console StatusGET
Returns whether a site is connected to Google Search Console, and to which property.
Get My OrganizationsGET
Returns the organizations the caller belongs to, with the sites the caller can access in each. Excludes subscription and billing information. Supports both session cookies and API key (Bearer token) authentication.