Search Console
Pull Google Search Console clicks, impressions, CTR, and position data into Brandfine — synced nightly, surfaced per workspace, per post, per query, and cross-referenced with your SEO audit.
Brandfine's Search Console integration pulls your Google Search Console data into the CMS so the same place you manage your content also shows you how that content actually performs in Google's search results. One workspace ↔ one Google Search Console property.
Where it lives: Growth → SEO & Analytics → any workspace → Search Console tab.
What you see in the CMS
Workspace summary
The top of the tab shows your performance at a glance:
- Four metric cards — Clicks, Impressions, CTR, Average position. Each card is clickable: it toggles that metric on or off in the chart below. Defaults to Clicks + Impressions enabled (same default as GSC's own dashboard); CTR and Position toggle on when you want to see those trends.
- Multi-series chart — one line per enabled metric. Position uses an inverted axis so "up on the chart" still means "better rank" — matches how the delta arrows on the cards work.
- Top page (by clicks) and top query (by impressions) for the selected window.
- Position uses the standard rule: lower is better. A drop from 4.2 to 3.1 renders green; a rise from 4.2 to 6.5 renders rose.
Date filter + comparison
Two segmented pill toggles sit above the summary:
- Date range:
7d / 28d / 90d / 6mo / 12mo / 16mo. 16 months matches Google's hard data-retention ceiling — anything longer would return empty rows because GSC doesn't have it. Selection persists in the URL via?range=, so back/forward and deep-links preserve it. - Comparison:
vs prior(immediately preceding window of the same length) orvs year ago(same-length window shifted 365 days back). Year-ago comparison is useful for seasonal sites; persisted via?compare=year-ago.
Queries / Pages / Opportunities tabs
Below the summary, a tabbed table lets you drill into individual queries, pages, or opportunities:
- Queries — top 25 search queries that drove impressions, with per-query clicks / impressions / CTR / position. Sortable.
- Pages — top 25 pages, same columns. Page rows that match a Brandfine post deep-link directly into the editor.
- Opportunities — page-query pairs where you rank at positions 8-20 (page 1 bottom + page 2) with ≥ 50 impressions, sorted by impression-weighted upside. The "what to fix first" view: a query with 1,000 impressions at position 11 ranks higher than 50 impressions at position 9 — bigger overall lift if you can move it to the first page.
Index coverage panel
A rolling sample of URL inspections, populated by a nightly job. We inspect up to 20 URLs per workspace per day (1% of Google's 2,000/site/day quota), prioritizing top-clicked URLs and pages we haven't checked in the last week. Over the first couple of weeks after connecting, the panel grows as more URLs are inspected; after that it rotates.
The panel shows:
- Headline: "X of Y sampled URLs indexed (N.N%)" with a progress bar.
- Per-state breakdown: emerald
Indexed, roseNot indexed, amberPartial, andUnknownbadges with counts. - Per-URL details in a table: URL, coverage state, Google's human-readable reason (e.g. "Crawled — currently not indexed", "Excluded by 'noindex' tag"), last crawled time, when we inspected it.
Per-post metrics on the posts list
Once a workspace is connected and synced, your posts list picks up three new sortable columns: Clicks (28d), Impressions (28d), Avg. position. Position cells are colored by SERP band:
- 1-3 — emerald (top of page 1)
- 4-10 — sky (bottom of page 1)
- 11-20 — amber (page 2)
- 20+ — rose (deep results)
Sort the list by any column to find your best performers, your opportunities (high impressions, low CTR), or your underperforming top-ranking pages.
Posts without data — newly published, or URLs Search Console doesn't
have records for — render —. They sort to the bottom under
ascending order, so the list naturally surfaces real data first.
Per-post "Search performance" card
Open any post → the right sidebar shows a Search performance card with that specific post's last-28-day stats: clicks, impressions, CTR, average position (color-coded), plus the top 5 queries that drove impressions for this post. The card auto-hides on workspaces without GSC connected, so non-GSC workspaces don't see stub cards.
SEO Audit cross-reference
When you run an SEO audit on a workspace with GSC connected, every
audit finding that lives on a specific post picks up a small
search-traffic chip next to its "Edit" button: <clicks> · <impressions>.
The same metric numbers from your posts list, attached to your audit
findings.
This is how you decide what to fix first: a meta:description:missing
warning on a post with 1,500 impressions over 28 days is high-priority;
the same warning on a post with 3 impressions can wait.
Actions you can take
Request indexing
When you publish a new post or make a meaningful update, you can ping Google to re-crawl it instead of waiting for the next natural crawl. This requires expanding the connection's permissions to include the Indexing API.
Enabling it:
- On the Search Console tab, look for a sky-blue "Enable indexing actions" banner. It only shows when the connection has all baseline permissions but lacks the indexing scope.
- Click Enable indexing actions — you'll be sent back to
Google to authorize the additional scope. Your existing data
sync keeps working through the re-authorization (Google
preserves existing grants via
include_granted_scopes=true).
Using it:
Open any post → in the Search performance card on the right sidebar, click Request indexing. We POST your post's live URL to Google's Indexing API and toast back the result.
Important caveats:
- Google officially supports the Indexing API only for time- sensitive content types (job postings, livestream events). In practice it works for any URL, but Google doesn't guarantee prioritized re-crawl for other types — your URL is added to Google's crawl queue, not pushed to the front of it.
- The API has a daily quota of 200 publishes per Google Cloud project, shared across every workspace that uses this feature. If you hit it, you'll see a "Daily quota reached, try again tomorrow" toast.
- The button only appears when the post has a public URL (i.e. your workspace has a domain configured).
- Re-crawl typically takes hours to days; this is a request, not an instant re-index.
Sync now
If you want fresh data without waiting for the nightly cron, click Sync now in the connection header. It bypasses the cron's interval + any backoff state and runs the sync immediately.
Change property
Click Change property in the connection header to switch which Search Console property maps to this workspace. Useful if you set up a new domain property and want to migrate from a URL-prefix one, or if you accidentally picked the wrong property the first time.
Connecting
- Go to Growth → SEO & Analytics → workspace → Search Console.
- Click Connect Google Search Console.
- You're redirected to Google to authorize Brandfine. We request
read-only access (
webmasters.readonlyscope) and email-address access (userinfo.email— used only to show you which Google account the connection belongs to). The indexing scope is opt-in, separately, via the banner described above. - After consent, you return to the CMS. The property picker dialog opens automatically.
- Pick which Search Console property maps to this workspace. Most Google accounts have multiple properties — your personal blog, your employer's site, etc. The list shows everything you have access to; pick the one for this workspace.
- Brandfine kicks off the first sync immediately. The first sync pulls 90 days of history and usually completes within 1–2 minutes. Subsequent syncs run nightly and pull a 5-day rolling window to handle Google's 24–72 hour data latency.
Why "Pick a property" isn't auto-selected
Picking is explicit on purpose. We never auto-map even when the account has only one property — that explicit choice is the audit trail for "this is the property that owns this workspace's data." You can change it later from the same dialog.
Domain properties vs URL-prefix properties
Both are supported. Domain properties (sc-domain:example.com)
cover every subdomain and both http/https; URL-prefix properties
are scoped to one exact URL prefix. Domain is preferred where
possible, but URL-prefix is sometimes the only thing Google has
on file.
What data we pull
Two layers of search performance metrics, both fetched nightly:
| Layer | Dimensions | Used by |
|---|---|---|
| Page × Day | date + page | Workspace summary, per-post overlay, top pages tab |
| Page × Query × Day | date + page + query | Per-post top queries, top queries tab, opportunity report |
Plus a separate sampled stream:
| Stream | Source | Used by |
|---|---|---|
| URL inspection | urlInspection.index.inspect (Google API) | Index coverage panel |
All metric data is stored in Brandfine for up to 16 months — matching Google Search Console's own retention. Older rows are auto-pruned by the nightly cron. URL inspection results are kept indefinitely per URL, refreshed on a ~7-day rotation.
We don't pull country or device breakdowns yet. The schema supports them but the UI doesn't surface them. Tell us if you'd like them sooner.
Data freshness
Google Search Console publishes data with a 24–72 hour delay. We sync nightly, and each sync re-fetches the last 5 days so partial days self-heal as Google finalizes them. Practical implication: yesterday's clicks usually appear within ~24 hours of midnight Pacific Time, but expect 1–2 days of lag on average.
All dates in the Brandfine UI use Search Console's reporting timezone, Pacific Time (PT). This matches the GSC dashboard exactly so you don't see off-by-one rows when comparing the two.
Reconnecting
If we lose access to your Google account — typically because you revoked Brandfine in Google Account → Connected apps, or a password change invalidated the refresh token — Brandfine shows an amber "Reconnect required" banner on the Search Console tab. Click Reconnect to run the OAuth flow again. The new connection replaces the broken one; you don't lose any synced data.
What this integration doesn't do
- No keyword research. Search Console tells you what queries you already rank for — not which queries you should target. Use Ahrefs / SEMrush for that.
- No competitor data. Search Console is your own data only.
- No domain verification helpers. Verifying a property in Search Console is a one-time Google flow we don't replace. If Search Console doesn't show your site yet, verify it in Search Console first.
Permissions + privacy
- Baseline OAuth scopes:
webmasters.readonly(read-only access to your Search Console data) anduserinfo.email(your Google account email, for display only). We never modify properties, submit sitemaps, or change your search settings. - Optional indexing scope: requested only when you click
Enable indexing actions. Used solely to call the Indexing API's
urlNotifications:publishendpoint when you press Request indexing on a specific post. Never used to read other data or modify anything beyond that single endpoint call. - Refresh token storage: encrypted at rest with AES-256-GCM (per-row IV, app-level key). Same encryption used for every third-party credential Brandfine stores.
- Limited use compliance: Brandfine's use of Google API data adheres to the Google API Services User Data Policy, including the Limited Use requirements. Full disclosure is in our Privacy Policy.
- Disconnecting: visit Google Account → Connected apps →
Brandfine to revoke
Brandfine's access at the Google end. We stop calling Google
APIs immediately when revoked + the stored OAuth tokens are
deleted on the next sync attempt's
invalid_grantresponse.
SEO Audit
One-click multi-category audit — SEO, Performance, GEO/AIO, CMS health — covering every URL in your sitemap.
Google Analytics
Pull Google Analytics 4 sessions, engagement, channels, and key events into Brandfine — synced daily, surfaced per workspace and per post, side-by-side with built-in analytics.