Search Console

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/data

Queries 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

Request
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"
Request
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();
Request
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()
Request
$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);
Request
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)
Request
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)
Request
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?;
Request
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());
Request
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();
Response
{
  "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
    }
  ]
}