---
title: "Search Console branded vs non-branded split (Growth+)"
method: GET
path: "/search_console/brand_split"
tags: ["Search Console"]
---

# Search Console branded vs non-branded split (Growth+)

`GET /search_console/brand_split`

## Request

- Base URL: `https://api.llmpulse.ai/api/v1`
- URL: `https://api.llmpulse.ai/api/v1/search_console/brand_split`
- Auth: API key in header `Authorization`

Splits the property's impressions and clicks into branded queries, which contain one of the project's brand terms as a whole word, case-insensitively (brand_terms: its brand name, matching names, app names and domain, each also matched with its accents folded and with either apostrophe, so Nestlé also matches nestle and L’Oréal matches l'oreal), and non-branded ones, next to the unfiltered totals. Google applies the split itself as a regular-expression query filter, so it covers every query Google counts, not only the 25,000 rows one read lists. Use it to see how much search traffic comes from people who already know the brand and how much from discovery searches, and how each side evolves across date ranges. Google leaves anonymized queries out of any query filter, so unclassified holds the impressions and clicks neither side counts. Returns ERR_INVALID_PARAM when the brand terms are too long for one Google filter (4,096 characters, Google's documented limit), and ERR_SEARCH_CONSOLE_UPSTREAM (503) if Google refuses the filter built from them; our team is alerted in that case. 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.

## Query parameters

- `project_id` integer, required
- `property` string
- `range` integer
- `from` string, date
- `to` string, date
- `search_type` 'web' | 'image' | 'video' | 'news' | 'discover' | 'googleNews'
- `filters` string
- `data_state` 'final' | 'all'
- `aggregation_type` 'auto' | 'byPage' | 'byProperty'

## Response `200`

Branded and non-branded totals

- SearchConsoleBrandSplitResponse
  - `project_id` integer
  - `property` SearchConsoleProperty
    - `id` string: Property id, e.g. sc-domain:example.com
    - `name` string
  - `properties` SearchConsoleProperty[]: With a list or all in the property parameter, the properties whose data the response holds (instead of property)
    - `id` string: Property id, e.g. sc-domain:example.com
    - `name` string
  - `excluded_properties` SearchConsoleExcludedProperty[]: With a list or all, selected properties left out because another selected property already counts them
    - `id` string
    - `name` string
    - `covered_by` string: The selected property that already counts this one
  - `property_errors` SearchConsolePropertyError[]: With a list or all, selected properties Google refused, left out of the figures
    - `id` string
    - `name` string
    - `code` 'ERR_SEARCH_CONSOLE_ACCESS_REVOKED' | 'ERR_SEARCH_CONSOLE_UPSTREAM'
    - `message` string
    - `retry_after` integer: Seconds to wait before retrying, for ERR_SEARCH_CONSOLE_UPSTREAM
  - `from` string, date
  - `to` string, date
  - `data_through` string, 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.
  - `brand_terms` string[]: The project's brand name, matching names, app names and domain, lowercased, each matched as a whole word
  - `totals` SearchConsoleMetrics
    - `impressions` integer
    - `clicks` integer
    - `ctr` number: 0..1 fraction
    - `position` number: Impression-weighted average position
  - `branded` SearchConsoleMetrics
    - `impressions` integer
    - `clicks` integer
    - `ctr` number: 0..1 fraction
    - `position` number: Impression-weighted average position
  - `non_branded` SearchConsoleMetrics
    - `impressions` integer
    - `clicks` integer
    - `ctr` number: 0..1 fraction
    - `position` number: Impression-weighted average position
  - `unclassified` object: Impressions and clicks neither side counts, mostly anonymized queries Google leaves out of any query filter
    - `impressions` integer
    - `clicks` integer
  - `request_id` string

## Other responses

- `401`: Authentication failed
- `403`: Plan below Growth (ERR_PLAN_REQUIRED), or Google revoked the project's Search Console access (ERR_SEARCH_CONSOLE_ACCESS_REVOKED): reconnect the property
- `404`: Resource not found
- `422`: Invalid parameters
- `503`: Upstream provider unavailable, retry after the number of seconds in the Retry-After header: Google's own value when it sent one, otherwise 900 after a quota error and 60 after an outage

## Changes

- **2026-11-03** `38a31f123641`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/llmpulse/apis/llm-pulse-api/changes/search_console/brand_split/get.md)

---

[API](https://skmtc.dev/llmpulse/apis/llm-pulse-api.md) - [All operations](https://skmtc.dev/llmpulse/apis/llm-pulse-api/llms.txt) - [OpenAPI document](https://skmtc.dev/llmpulse/apis/llm-pulse-api/revisions/38a31f123641?raw)
