Search Console

Search Console ranking opportunities (Growth+)

Changed on

Queries whose average position is between min_position and max_position (default 4 to 20) with at least min_impressions impressions, ranked by potential_clicks: the clicks a move into the top 3 would add at top_ctr, the CTR the property's own queries averaging position 3 or better get in the same window. Use it to find the queries where a small ranking gain would add the most traffic. No outside CTR curve is used: with no top-3 query in the window, top_ctr and potential_clicks are null. Reads Google's top 25,000 queries per property (truncated: true when reached) and excludes anonymized queries. Requires a connected Search Console property (Growth+). Live reads only: under stored reads it returns ERR_INVALID_PARAM. Live reads return ERR_SEARCH_CONSOLE_ACCESS_REVOKED (403) for revoked Google access; reconnect the property in Preferences > Project Settings > Data Connections. They return ERR_SEARCH_CONSOLE_UPSTREAM (503) when Google Search Console is unavailable or over quota; wait for the number of seconds in Retry-After before retrying.

get/search_console/opportunities

Request

  • Base URL
    https://api.llmpulse.ai/api/v1
  • URL
    https://api.llmpulse.ai/api/v1/search_console/opportunities
  • Auth
    API key in header Authorization

Query parameters

project_idinteger required

Project ID

propertystring

Which Search Console properties to read; /search_console/properties lists them. Omit it for the primary property, or pass one property id (e.g. sc-domain:example.com) to read that one; both answer with property. A comma-separated list of ids, or all, combines several and answers with properties, excluded_properties and property_errors instead: excluded_properties are left out because another selected property already counts them (a URL-prefix property under a domain property), so no click is counted twice; property_errors are properties Google refused, left out of the figures and also named in the X-Search-Console-Property-Errors header. When Google refuses every property, the request fails as a single-property read would.

rangeinteger

Number of days to look back, today included (alternative to from/to). At most 487, Google's retention.

fromstring date

Start date (YYYY-MM-DD). Defaults to 30 days ago.

tostring date

End date (YYYY-MM-DD), inclusive. Defaults to today. Google publishes data with a 2-3 day lag, so data_through in the response says how far it reaches.

min_impressionsinteger

Smallest impressions a query needs.

min_positionnumber

Best average position to include.

max_positionnumber

Worst average position to include; at least min_position.

pageinteger
per_pageinteger
output'flat' | 'csv'

Rectangular output for BI tools (Tableau, Excel, Sheets, ELT). Omit for the default nested JSON. 'flat' returns the same metadata plus 'columns' and 'rows'; 'csv' returns those rows as text/csv. Errors are always returned as JSON.

search_type'web' | 'image' | 'video' | 'news' | 'discover' | 'googleNews'

Which search surface to measure. Defaults to web. discover and googleNews carry no query dimension, so Google rejects /search_console/queries for them.

filtersstring

Narrow the query; every entry must match (AND). Send the whole list as one JSON value: filters=[{"dimension":"page","operator":"contains","expression":"/blog/"}] (URL-encoded). An array of objects has no query-parameter form a generated client can produce, so the string is what the official SDKs send; see the SearchConsoleFilters schema for the shape it encodes. includingRegex and excludingRegex take RE2 syntax. At most 10 entries, expression at most 500 characters. The bracket form filters[][dimension]=page&filters[][operator]=contains&filters[][expression]=/blog/ is also accepted.

data_state'final' | 'all'

final (default) counts only rows Google has finalized. all also counts the most recent days, which are still being filled in and will change.

aggregation_type'auto' | 'byPage' | 'byProperty'

How Google counts impressions. auto (default) is what Search Console shows (by page when page is grouped or filtered, else by property). Google rejects byProperty with a page dimension or filter.

Response

Ranking opportunities

project_idinteger
fromstring date
tostring date
data_throughstring date nullable

Latest date Google has published for the property, or for every combined property (it lags 2-3 days). Later days are missing, not zero.

min_impressionsinteger
min_positionnumber
max_positionnumber
top_ctrnumber nullable

CTR (0..1) of the property's queries averaging position 3 or better in the window; null when there are none, and then no potential_clicks

pageinteger
per_pageinteger
totalinteger

Rows in the report before paging

truncatedboolean

Present (true) when Google returned its 25,000-row maximum for a property, so the report covers its top rows only

request_idstring

Changes