Free tool · no account · runs in your browser

Branded vs non-branded split

Type your brand name and the misspellings people use, upload the Queries export from Search Console, and get the clicks, impressions and CTR of branded against non-branded queries. You choose the terms and the matching rule is a plain one, so you can check it: the biggest queries on each side are listed beside the result.

Your file never leaves your browser. It is read by JavaScript in this tab; there is no upload, and this page's security policy blocks fetch, XHR, WebSocket, EventSource and beacon calls and form posts.

The ZIP from the Export button, or its Queries file. You can drop files here.

One per line, or separated by commas: the brand name, product names that carry it, and the misspellings and spacings people type. Case and accents do not matter. A term matches whole words, so "acme" matches "buy acme online" and not "acmeshoes".

What it tells you

How much of your search traffic already knew you

You choose the terms

Nothing is guessed. Your terms go in, and the tool says which of them matched queries, how many, and which matched nothing, so a misspelling you forgot shows up in the biggest non-branded queries instead of hiding in them.

A rule you can read

Whole words, with case and accents ignored. A query counts once, under the longest term that matches it. Matching inside words is an option you turn on, not a default.

Honest about what is missing

Rare, anonymized queries are in neither share, and the table stops at 1,000 rows. The shares are of the queries in your file, and the page says so beside the numbers.

What to upload

In Search Console, choose your property, open Performance, then Search results, and pick a date range. Open the Queries tab, make sure Clicks and Impressions (and, for the position column, Average position) are switched on (click a metric's tile above the chart to show it), and use the Export button, then Download CSV. Upload the ZIP, or the Queries file inside it. Google says a value shown as ~ or - in the report is a zero in the download. A table with a Page column as well as a Query column is not read here.

Choosing terms. Start with the brand name as one word, then add it spaced and joined ("acme shoes", "acmeshoes"), the misspellings you can see in your own queries, and the names of products that carry the brand. When the result appears, read the biggest non-branded queries: a brand misspelling there is a term to add.

Search Console has its own branded filter. How this differs.

Google added a branded queries filter to the Performance report: in the filter bar choose Query, then Branded or Non-branded. Google's announcement (20 Nov 2025, updated 11 Mar 2026 to say it is now available to all eligible sites) says it does not use a keyword or regular expression rule. An internal, AI-assisted system decides, covering the brand name in all languages, typos, and queries that do not contain the brand name but refer to a unique product or service of the site, and Google says some queries may occasionally be misidentified. It is only for top-level properties, not URL-path or subdomain properties, and only for sites with enough queries and impressions. Google's help page says the classifications are for information only and do not affect ranking.

This tool is the other way round. You list the terms, the matching rule is printed on this page, and it works on any Queries export, including one from a property where Google's filter is not available. The two will not always agree: Google can count a product that never mentions your brand, and this tool counts it only if you type it. If Google's filter is available to you, comparing the two is a good check on your term list.

What the file cannot tell you

  • Anonymized queries are in neither share. Google omits anonymized (rare) queries from the Queries table and includes them in the chart totals unless a query filter is applied, so the chart in Search Console shows more clicks and impressions than the two groups here add up to. The branded share printed here is a share of the queries in your file, not of everything your site earned.
  • The table is cut at 1,000 rows. Google says the download is "truncated to 1,000 rows of representative examples of your data" and does not say which rows. A table of exactly 1,000 rows may have been cut, and the file cannot say whether it was.
  • The split is only as good as the terms. A misspelling you did not type counts as non-branded. A term that is also an ordinary word (a brand called "Apple" or "Orange") counts every ordinary query that contains it as branded. The lists beside the result are there so you can see both.
  • Position and CTR for a group are averages of averages. Each query's position is itself an average over its impressions, as Google's help page says. A group's position here is those positions weighted by impressions, and is labelled as such.
  • Queries are exact matches. Google says the Queries table shows exact matches that are not case-sensitive, so the same search written two ways is one row, and a different spelling is another.
  • One range. The figures cover the whole date range you exported. Dates in Search Console are Pacific Time.

Sources, read on 21 Oct 2026: Google's help pages Export data directly from a Search Console report, What are impressions, position, and clicks?, Troubleshooting data discrepancies, Common tasks and use cases and Dimensions and data groupings, and the Search Central post Introducing the branded queries filter in Search Console.

What happens to your file

Nothing leaves your browser. The file is read by JavaScript running in this tab and parsed in memory; it is not uploaded, there is no copy on a server, and nothing from it is written to a cookie or to local storage (the theme switch remembers light or dark and nothing else). The page loads no analytics and no third-party scripts.

You do not have to take our word for it. Open your browser's developer tools, choose the Network tab, run an analysis, and watch it make no request. Two things back that up. This page carries a content security policy, readable in its source, that blocks fetch, XHR, WebSocket, EventSource and beacon calls (connect-src 'none') and form posts (form-action 'none'), and allows images only as inline data: URIs. A content security policy does not cover every browser feature (WebRTC, for one), so the second check matters: the project's tests read this page's own script and every module it imports, and fail on any of the browser's network APIs.

The site-wide script penlid.js, which every page loads, contains network calls for the signed-in app's account switcher. This page never calls it, and a test checks that those calls sit only inside the switcher.

The brand terms you type stay in the page too. The one thing that leaves this page's memory is what you ask for by clicking: the CSV of every query with its group.

Methods: the rules and thresholds

Each number below is a constant in public/assets/lib/queries.js (the read-size limit is in tool-ui.js). The project's tests compare the numbers quoted here with those constants; that is a check on the numbers, and not on every sentence. They are judgement calls, and they are the owner's to change.

Reading the file
A table is recognised by its columns, not its name: a column of queries, and columns of clicks and impressions (and position, when there is one). Only a Queries table is read. A choice of files totalling more than 64 MB is not opened. A row with a negative or fractional clicks or impressions value, or with more clicks than impressions, is not used, and is counted. A row with an empty clicks or impressions cell is not used either, and is counted: Search Console writes 0 and never a blank, and reading a blank as 0 would shrink a group. A row whose position or CTR is not a number (a "-" or "~" copied from the screen) keeps its clicks and impressions, so it stays in its group, and has no position. Every row not used is counted in a sentence at the top of the result. A row with no query text, or labelled "Grand total", is skipped. A query that appears more than once, ignoring case, has its rows added together and is named at the top.
Brand terms
One term per line, or separated by commas or semicolons; at most 100 terms, each at most 80 characters. A term is refused, with the reason shown, when it has no letters or digits or is too short: by whole word it needs at least 2 characters, inside words at least 3 (2 for a term written wholly in Han, Kana, Hangul, Thai, Lao, Khmer or Myanmar script, which have no spaces between words), because a one-letter word would label unrelated queries. A term listed twice, whatever its case or accents, counts once.
Matching
Case and accents are folded away first (the same fold the parser uses on a column heading); a letter that is not an accented form of another, such as ø or ł, is matched as written. By whole word, a query matches a term when the query's words contain the term's words, in order and next to each other, and a word is a run of letters and digits, so punctuation and hyphens separate words. Inside words, the folded query text contains the folded term. An apostrophe is tried both ways in either mode, so "macys" and "macy's" find each other. When several terms match one query, the longest wins and of equal length the one listed first, the longest being the one with the most characters in both modes, so each query is counted under one term only and the groups add up to the table.
The two groups
Branded is every query that matched a term; non-branded is every other query in the table. CTR is clicks divided by impressions. A group's average position is its queries' positions weighted by their impressions, over the queries that have a position. Shares are of the table's clicks and impressions, not of the chart's totals.
The lists beside the result
The 15 biggest branded queries and the 15 biggest non-branded queries by clicks, then impressions, then text, so a misspelling or a stray match is visible. Terms that matched no query are named. The CSV has every query, its group and the term it matched.
The 1,000-row table
A table of exactly 1,000 rows (Google's documented maximum) gets the warning that it may have been cut off, and that the file cannot say whether it was. A table with more than 1,000 rows is not called cut off.