# Linking Google Search Console as a source - Docs

![](https://res.cloudinary.com/dmukukwp6/image/upload/texture_tan_9608fcca70)

![](https://res.cloudinary.com/dmukukwp6/image/upload/texture_tan_dark_a92b0e022d)

Let AI connect your sources for you

Skip the manual setup — run this in your project and the wizard auto-detects your databases and APIs and connects them to PostHog.

`npx @posthog/wizard warehouse`

[Learn more](/wizard.md)

![PostHog Wizard hedgehog](https://res.cloudinary.com/dmukukwp6/image/upload/wizard_3f8bb7a240.png)

Connect a verified Google Search Console property to sync daily Search Analytics performance data (clicks, impressions, CTR, average position). Requires a Google account with read access to the property.

## Adding a data source

1.  Go to the [sources tab](https://app.posthog.com/data-management/sources) of the data pipeline section in PostHog.
2.  Click **\+ New source** and then click **Link** next to Google Search Console.
3.  Connect your `Google Search Console account` by signing in with a Google account that has read access to the property. Then enter the `Property URL` — use the URL prefix format (for example `https://example.com/`) or the `sc-domain:` prefix for domain properties (for example `sc-domain:example.com`). PostHog automatically handles common variations like percent-encoded URLs, missing trailing slashes, and pasted Search Console UI URLs.
4.  Back in PostHog, confirm the credentials and click **Next**.
5.  Select the tables you want to sync, set the sync method and frequency, then click **Import**.

Once the syncs are complete, you can start using Google Search Console data in PostHog.

## Available tables

| Table | Description | Sync method |
| --- | --- | --- |
| search_analytics_by_date | Daily totals for clicks, impressions, CTR, and average position | Incremental |
| search_analytics_by_query | Daily performance broken out by search query (keyword) | Incremental |
| search_analytics_by_page | Daily performance broken out by landing page URL | Incremental |
| search_analytics_by_country | Daily performance broken out by country (ISO 3166-1 alpha-3) | Incremental |
| search_analytics_by_device | Daily performance broken out by device (DESKTOP, MOBILE, TABLET) | Incremental |
| search_analytics_by_query_page | Daily performance broken out by both query and landing page | Incremental |
| search_analytics_by_search_appearance | Daily performance broken out by Google search result presentation type (e.g. RICH_RESULT, REVIEW_SNIPPET, VIDEO) | Incremental |

**Incremental** tables sync only new or updated records on each run. **Full refresh** tables reload all data on each sync.

## Sync limitations

Google's Search Analytics API caps results at roughly 50,000 rows per property, date, and dimension set. When the cap is hit, rows are sorted by clicks descending and the long tail is silently dropped. Tables with more dimensions (such as `search_analytics_by_query_page`) hit this cap fastest, so high-traffic properties may lose long-tail queries and pages. For full-fidelity data, use the per-query and per-page tables together, or rely on Google's BigQuery bulk export.

## Configuration

| Option | Description |
| --- | --- |
| Google Search Console accountType: oauthRequired: True |
| Property URLType: oauth-account-selectRequired: True | The exact verified property URL as it appears in Google Search Console. Use the trailing slash for URL prefix properties or the sc-domain: prefix for domain properties. |

## Supported tables

| Table | Description | Sync method | Incremental field | Primary key |
| --- | --- | --- | --- | --- |
| search_analytics_by_date | Daily totals for clicks, impressions, CTR, and average position. | Incremental, Full refresh | date | — |
| search_analytics_by_query | Daily performance broken out by search query (keyword). Sites with >50K distinct queries/day will lose long-tail keywords to API sampling. | Incremental, Full refresh | date | — |
| search_analytics_by_page | Daily performance broken out by landing page URL. Sites with >50K distinct landing pages/day will lose long-tail URLs to API sampling. | Incremental, Full refresh | date | — |
| search_analytics_by_country | Daily performance broken out by country (ISO 3166-1 alpha-3). | Incremental, Full refresh | date | — |
| search_analytics_by_device | Daily performance broken out by device (DESKTOP, MOBILE, TABLET). | Incremental, Full refresh | date | — |
| search_analytics_by_query_page | Daily performance broken out by both query and landing page. Most detailed table, but the cartesian over (query x page) hits Google's ~50K row/day API sampling cap fastest. Above the cap, only the top rows by clicks are returned and the tail is silently dropped. For full fidelity on high-traffic properties, use the per-query and per-page tables together, or rely on Google's BigQuery bulk export. | Incremental, Full refresh | date | — |
| search_analytics_by_search_appearance | Daily performance broken out by Google search result presentation type (e.g. RICH_RESULT, REVIEW_SNIPPET, FAQ_RICH_RESULT, VIDEO, AMP_BLUE_LINK). Useful for measuring the impact of structured data and rich result eligibility. | Incremental, Full refresh | date | — |

### Community questions

Ask a question

### Was this page useful?

HelpfulCould be better