Google Search Console

What is the GSC Integration?

The Google Search Console integration connects your real search performance data directly into Publish Owl. It works in two ways: as a research tool on the Research page and as a workflow step that feeds live search data into your content generation pipeline.

Unlike third-party keyword tools, GSC data comes from Google itself — actual clicks, impressions, CTR, and ranking positions for your site. This means your AI-generated content can be informed by exactly what queries your site is already appearing for.

Use Cases:
  • Content updates: Find declining queries and refresh articles to recover traffic
  • Quick wins: Identify keywords ranking on pages 2–3 with high impressions
  • Cannibalization: Detect queries where multiple pages on your site compete against each other
  • Data-driven writing: Give your LLM steps real search data so articles target queries people actually search
  • CTR optimization: Find top-ranking queries where your CTR is below the expected average

Setup

Connecting Google Search Console requires a one-time OAuth setup:

Step 1: Enable the Search Console API

Go to Google Cloud Console → Search Console API and click Enable. Use the same Google Cloud project that has your existing Publish Owl OAuth credentials.

Step 2: Add the redirect URI

In APIs & Services → Credentials, edit your OAuth 2.0 Client ID. Under Authorized redirect URIs, add your Convex deployment's GSC callback URL (it follows the pattern https://your-deployment.convex.site/api/google/gsc-callback).

Step 3: Connect in Publish Owl

Go to Settings → API Keys and scroll to the Integrations section. Click Connect Google Search Console, select your Google account, and authorize access.

Note: GSC data has a 2–3 day delay. This is a Google limitation, not a Publish Owl one. The most recent data available is typically from 2–3 days ago.

Research Report

Once connected, a Search Console tab appears on the Research page. Click Fetch Report to pull your search performance data. The report includes an overview dashboard, opportunity analysis tabs, and a full sortable/filterable data table.

Overview Dashboard

Four stat cards at the top show your totals for the selected period, each with a percentage change compared to the previous period of equal length:

  • Clicks — total clicks from search results
  • Impressions — how many times your pages appeared in search
  • Avg CTR — overall click-through rate
  • Avg Position — average ranking position across all queries

Analysis Tabs

Below the overview, a tab bar lets you view the same data through different lenses. Each tab pre-filters the table to a specific category. The count badge on each tab shows how many queries match.

All

Every query, sorted by impressions by default. This is the full dataset.

Quick Wins

Queries ranking 4–10. These are close to top 3 positions — small improvements here yield the biggest traffic gains. Sorted by traffic potential.

CTR Issues

Queries ranking 1–3 where your click-through rate is significantly below the expected average for that position. Usually fixable by improving title tags and meta descriptions without needing to change the content itself.

Page 2

Queries ranking 11–20 with 50+ impressions. These need more content depth, internal links, or backlinks to break onto page 1.

Content Gaps

Queries with 200+ impressions but fewer than 5 clicks. Google shows your site for these searches but users aren't clicking — possible intent mismatch or poor SERP snippet.

Declining

Queries where clicks dropped 30%+ or position worsened by 3+ spots compared to the previous period. These indicate content that may need refreshing.

Cannibalization

Queries where 2 or more pages on your site rank in search results. These pages compete against each other, splitting clicks and confusing Google about which page to rank. The table groups competing pages together so you can see exactly which URLs overlap. The fix is usually to consolidate content into one definitive page or to differentiate each page's focus so they target distinct intents.

Computed Columns

Beyond the standard GSC metrics (clicks, impressions, CTR, position), the report adds computed columns to help you prioritize:

  • Page — the URL ranking for each query (shown as pathname)
  • Expected CTR — the average CTR for your ranking position based on industry studies. When your actual CTR is significantly below this, the cell highlights in red.
  • Traffic Potential — estimated additional clicks if the query ranked #1, calculated as (impressions × 28%) minus current clicks. High values highlight in green.
  • Trend — click change vs. the previous period, shown as an up/down arrow with the number of clicks gained or lost.

Filters & Tools

  • Filters — filter by query text, page URL, clicks range, impressions range, and position range
  • Unique pages only — deduplicates to show only the top query per page (by impressions), giving a page-level view
  • Sortable columns — click any column header to sort ascending/descending
  • Pagination — 100 rows per page with First/Prev/Next/Last navigation
  • Export CSV — download results with all metrics, named after the selected property and tab
  • Copy Queries — copy selected query strings to clipboard
  • Rewrite Page — select a single query and click Rewrite Page to create a rewrite workflow pre-filled with the ranking URL

Workflow Step

Add a Google Search Console step to your workflow pipeline to feed real search data into subsequent LLM steps. The GSC step fetches data from the API, formats it as structured Markdown with opportunity analysis and traffic potential estimates, and passes it as context to the next step.

Step 1: GSC fetches search data

The step queries the Search Console API for your selected property. The job's keyword is automatically used as a query filter, so each article gets relevant search data.

Step 2: Data is formatted for the LLM

Results are formatted as structured Markdown including a performance summary, opportunity sections (quick wins, CTR optimization, page 2 queries, content gaps), and a data table with expected CTR and traffic potential for each query.

Step 3: LLM uses the data as context

The next LLM step receives the GSC data alongside previous step outputs. You can instruct it to incorporate the search data into the article — targeting specific queries, addressing search intent, or optimizing for opportunities.

Configuration Options

Setting Description Default
siteUrl GSC property URL to pull data from Required
dateRange Time period: 7d, 28d, 90d, or 180d 28d
analysisType Full Data + Opportunities: complete data table plus opportunity sections. Opportunities Only: just the categorized opportunities. Full Data
sortBy How to sort the LLM output: impressions, clicks, CTR, or position Impressions
rowLimit Maximum query rows in the LLM output 100
filters Optional: query contains, page URL contains, device type, country, min impressions None (keyword auto-filter only)

Example: Data-Driven Content Update Workflow

A practical 2-step workflow that uses GSC data to write better content:

Step 1: Google Search Console Property: https://yoursite.com/ Date Range: Last 90 days Output Format: Full Data + Opportunities Sort By: Impressions Max Rows: 100 Step 2: Claude / GPT (LLM) Prompt: "Using the Google Search Console data from the previous step, write a comprehensive article about {{keyword}}. Focus on addressing the search queries with the highest impressions. Include sections that directly answer the top queries. Prioritize the 'quick wins' opportunities identified in the data where small ranking improvements could yield significant traffic gains."

Caching

GSC API responses are cached for 24 hours to avoid redundant API calls. Since GSC data is inherently 2–3 days stale, caching doesn't reduce freshness. If you run the same query parameters within 24 hours (same site, date range, and filters), the cached result is returned instantly.

External API

You can add a GSC workflow step via the External API by including gscConfig in a workflow agent object:

{
  "provider": "gsc",
  "model": "",
  "prompt": "",
  "enabled": true,
  "gscConfig": {
    "siteUrl": "https://yoursite.com/",
    "dateRange": "28d",
    "sortBy": "impressions",
    "rowLimit": 100,
    "analysisType": "raw",
    "filters": {
      "queryContains": "best",
      "device": "MOBILE",
      "minImpressions": 50
    }
  }
}
Was this helpful?