Search Console regex: the filters that reveal the queries you are not tracking
A copy-paste pattern library. No automata theory, no 400-character monsters nobody can read: just the syntax Search Console actually accepts and the combinations that surface demand you were not measuring.
TL;DR
- ✓ The filter lives in the performance report, under the Query or Page dimension, in the custom filter dropdown. It offers both "matches" and "doesn't match".
- ✓ Search Console runs RE2, not PCRE. Forget lookahead and backreferences: if your pattern has them, it gets rejected.
- ✓ In Spanish, accents split your results in half. Any serious pattern lists both the accented and the unaccented spelling.
- ✓ Regex segments; the spreadsheet does the numbers. There is no CTR or position filter in the interface.
- ✓ The goal is not a pretty report, it is walking away with a short keyword list that fits your 5 Free units or your 50 Pro units.
Where the regular expression filter lives in the Search Console performance report
Before writing a single pattern you have to find the box. Google tucked Search Console regex inside the ordinary filter menu without any fanfare, which is why plenty of people have used the tool for years without knowing it exists. It is four clicks, always the same four.
1. Open Performance → Search results
This is the classic Search Console performance report, the one with the clicks and impressions chart. Make sure all four metric toggles are on: clicks, impressions, CTR and average position. Without the impressions column visible, half the recipes below are useless.
2. Hit "New" or the filter chip
That is where the Search Console query filters live, alongside page, country, device and search type. On small screens the control collapses into a funnel icon, but it is the same menu.
3. Pick Query and switch the dropdown to custom
The filter defaults to "contains". Open the dropdown and you also get "doesn't contain", "exactly matches" and the regular expression option, with its two variants: matches and doesn't match. That second variant is what makes half the recipes below possible.
4. Paste the pattern and check the date range
A filter does not change the time window. If you have the last 28 days selected you will see very few rows, and on a young site almost none. For this exercise, three months is the floor.
One warning that saves a lot of frustration: the filter runs over the queries Search Console chooses to show you, not over the true total of searches that sent you traffic. Google anonymises the very low-volume tail, so there will always be a gap between the sum of the table rows and the total on the chart. That is not a bug in your pattern, it is how the report works. The time window has its own ceiling too: the report keeps up to 16 months, a limit with real consequences for seasonality analysis that we cover separately in the guide on Search Console's 16 months of historical data.
The other thing worth deciding up front is what you will do with whatever you find. A regex filter with no destination ends up as a screenshot in a document nobody opens. The natural destination is a short list of keywords tracked daily, which is exactly what a rank tracker with Search Console built in is for: Search Console tells you where you appeared according to Google, the tracker tells you what position you hold today, in your city and on your device.
Minimum viable regex syntax in Search Console: RE2 and what it refuses
Google Search Console regular expressions are not the ones in your text editor. Search Console runs on RE2, the engine Google wrote so that no pattern, however twisted, could hang a server. That linear-time guarantee has a cost: RE2 removes every construct that would force the engine to backtrack.
Translated into practice: 95% of what you need behaves identically, and the 5% that fails is always the same 5%. This table is the whole thing you need to memorise.
| Construct | What it does | Works? |
|---|---|---|
| | | Alternation: this or that | Yes |
| ( ) | Groups alternatives together | Yes |
| [ ] | Character class, any one of the characters inside | Yes |
| ^ · $ | Anchors to the start and end of the query | Yes |
| . · * · + · ? | Any character, plus quantifiers | Yes |
| (?i) | Inline case-insensitive flag | Yes |
| \d \s \b | Digit, whitespace, word boundary (ASCII only) | Yes, carefully |
| (?= (?! (?<= | Lookahead and lookbehind | No |
| \1 \2 | Backreferences | No |
Three traps if any of your traffic is in Spanish
The first and most expensive one is accents. Search Console stores the query exactly as the user typed it, and across Latin America most people type from a phone without accents. If your question pattern only lists the accented spelling of "cómo", you lose everyone who typed "como" — which in our data is the overwhelming majority. Every Spanish alternative goes in twice, no exceptions.
The second is that class shorthands such as the digit and word-boundary escapes operate on ASCII. A word boundary wrapped around an accented word behaves oddly, because the accented character is not an ASCII word character. The safe, boring alternative: instead of word boundaries, use explicit spaces and the end-of-string anchor. It always works and it reads better.
The third is the dot. When filtering URLs you will want to escape the dot in the domain, and backslashes survive copy-pasting badly between chat apps, docs and the browser. Trick: put the dot inside square brackets. Shorter to read, identical behaviour, and no backslash to lose along the way.
The limitation that hurts most: because RE2 has no negative lookahead, you cannot write "is a question and does not contain my brand" in a single pattern. That combination has exactly two solutions: apply the second condition through the "doesn't match regex" filter, or export the first result and clean it in a spreadsheet. There is no elegant third option, and any pattern on the internet promising otherwise will fail when you paste it.
That is everything you need. What follows are concrete patterns, each with what it returns and the business question it answers.
Ready-made recipes: splitting brand from non-brand queries
This is the first segmentation anyone should run, for a simple reason: brand queries inflate your metrics and hide reality. If 60% of your clicks come from people who already knew you and typed your name into Google, your site-wide CTR is a comfortable fiction and your average position reflects no competitive battle at all. Splitting brand from non-brand is what turns the report into something actionable.
The pattern has to cover the correct spelling, the frequent typos, the hand-typed domain and the spaced-out variants. People spell brand names badly, and every typo you fail to list leaks into your non-brand bucket.
Recipe 1 · Everything that is brand
(?i)(rankiamos|rankiamo|rankeamos|rankiamos com|rankiamos app) Filter: Query → matches regex. Swap the alternatives for your brand and its real typos, which you find by sorting the query table by impressions. The domain dot is deliberately left out so the pattern catches both the dotted and the spaced spelling.
Recipe 2 · Everything that is NOT brand
(?i)(rankiamos|rankiamo|rankeamos) Same pattern, but choosing doesn't match regex. This is your real discovery universe: people who did not know you and saw you anyway. On a young domain it is usually 100% of the report, and that is where all the unfinished work lives.
Recipe 3 · Competitor brand names
(?i)(semrush|ahrefs|accuranker|serpwatcher|seo edge) Showing up in searches that name a competitor is a strong signal: Google already considers you part of that result set. These queries are usually low frequency and very high commercial intent, and they are almost always underserved because nobody writes content for them.
Recipe 4 · Brand plus a specific doubt
(?i)rankiamos.*(price|pricing|review|reviews|free|cancel|worth it|legit) The dot-star in the middle acts as a wildcard: anything in between. The pattern returns queries where someone searched your brand next to a specific doubt. It is the best raw material there is for an FAQ page or a reviews section, because it literally tells you what is blocking the purchase.
Watch the order: this pattern requires the brand to come before the doubt. To catch both orders, duplicate the pattern with the two arrangements separated by a pipe — without lookahead there is no compact way to express "both terms in any order".
Ready-made recipes: questions, comparisons and LATAM country variants
This batch segments by intent and by geography. It is where regex stops being a cleanup trick and starts producing content ideas, because each block of results maps to a different page format.
Recipe 5 · Questions in English
(?i)^(what|how|why|when|where|which|who|can i|can you|is it|are there|should i|does)( |$) The trailing group with a space or end-of-string is what stops "who" from returning "wholesale". It is the safe substitute for a word boundary and it works the same in every language. Everything this returns is material for question-shaped headings with a direct answer underneath, the format that gets quoted most often in Google's AI summaries.
Recipe 6 · Questions in Spanish, accented and not
(?i)^(que|qué|como|cómo|cuando|cuándo|donde|dónde|cual|cuál|cuanto|cuánto|quien|quién|por que|por qué|para que|para qué|se puede|es posible|vale la pena)( |$) Same structure, doubled for accents. If any share of your traffic comes from Spanish-speaking markets, this is the single highest-return pattern in the whole post, because it surfaces a block of demand that English-only filters never touch.
Recipe 7 · Comparisons and alternatives
(?i)(vs|versus|compare|comparison|alternativ|best |better than|difference between|top 10|top 5) Note the truncated stem: "alternativ" with no ending covers singular and plural in one alternative. It is the trick that saves the most characters in a long pattern. Queries in this bucket carry high commercial intent and respond badly to a generic article: they want a table, prices and a clear recommendation.
Recipe 8 · Transactional intent
(?i)(price|pricing|cost|how much|cheap|affordable|free trial|buy|subscribe|plan |plans|precio|precios|cuanto cuesta|gratis|contratar) This is the bucket any business should read first, because every impression lost here has an estimable monetary value. If you have impressions on price queries and no pricing page that ranks, you already know your next task.
Recipe 9 · LATAM geographic variants
(?i)(colombia|bogota|bogotá|medellin|medellín|cali|barranquilla|mexico|méxico|cdmx|guadalajara|monterrey|argentina|buenos aires|chile|santiago|peru|perú|lima|ecuador|quito|guayaquil|spain|españa|madrid|barcelona) This catches queries where the user spelled the location out. Do not confuse that with implicit local intent: someone searching "dentist" from Medellín also has local intent without typing it, and that demand shows up in the Country filter, not here. Both are useful and they measure different things.
Recipe 10 · Long queries and short queries
^[^ ]+ [^ ]+ [^ ]+ [^ ]+ [^ ]+ ^[^ ]+ [^ ]+$ The first returns queries of five words or more: pure long tail, low competition, unmistakable intent. The second returns exactly two-word queries: head terms, high volume, and a barrier a young domain will not clear for months. For a new site the first pattern is worth ten times the second, and that is the strategic decision almost nobody makes consciously.
Recipe 11 · Separating Spanish from English
(?i)(tracker|tracking|best |how to|software|tool|free |app for|checker) It looks like an exotic pattern until you check your own data. On our property, the United States delivers more impressions than Colombia, and a large chunk of that demand arrives in English through queries such as seo position tracking mac and iphone rank tracking. Colombia brings fewer impressions but a far better average position: 9.4, against ranges of 20 to 70 in every other market.
That contrast is exactly the kind of decision a well-placed filter settles in thirty seconds and that you never see without one. It is also why this blog exists in two languages: the data said there was English-language demand before we knew it.
The filter that pays best: high impressions, zero clicks
Confirmed demand you are not capturing. The shortest and most profitable list in the report.
Start with what cannot be done: Search Console has no CTR filter and no position filter in the interface. Clicks, impressions, CTR and position are metrics, and filters operate on text dimensions. Any tutorial promising you a regex for "queries with CTR below 1%" is confusing the two.
The real way to do it is four steps, and regex is the first one:
Step 1 · Exclude your brand
Apply recipe 2 with "doesn't match regex". Brand queries with many impressions and few clicks are rarely a genuine content problem, so drop them from the analysis at the start.
Step 2 · Widen the range to three months or more
Over 28 days, a seasonal or low-frequency query never accumulates enough impressions to stand out. Three months is the sensible minimum; six is better if the site has little traffic.
Step 3 · Sort by impressions and export
Click the impressions column header to sort descending, then use the export button. Sheets or CSV, it makes no difference. What matters is getting the table out of the browser.
Step 4 · Filter clicks equal to zero in the sheet
That is the numeric filter the interface refuses to give you. Sort the result by impressions and keep the top 20 rows. That is your work list for the quarter.
What this looks like on a brand-new domain: our own numbers
Rankiamos.com logged 581 impressions and 1 click over 90 days. This is not a textbook example with comfortable figures: it is a new domain with no authority, starting from zero. That is precisely why it is useful, because it shows what you can extract when the numbers are small. These are the commercial queries with the most impressions after running the four steps:
| Query | Impressions | Avg. position | Read |
|---|---|---|---|
| app de seo tracking | 70 | 23.8 | Priority 1: commercial, two pages away |
| seo latam | 33 | 69 | Too far out, needs new content |
| iphone rank tracking | 24 | 27.6 | Matches the product, attack in English |
| seo position tracking mac | 14 | 18.4 | Closest to the top 10 |
| posicion google | 7 | 17.9 | Generic, unclear intent |
| como posicionarse en el numero 1 de google | 7 | 74 | Long tail, heavy competition |
Search Console data for rankiamos.com, 90-day window closing in July 2026. The whole site recorded 1 click in that period, so every query above is effectively at zero clicks.
The useful read is not "we are doing badly", which we already knew. It is this: the commercial query with the most impressions sits at position 23.8, and another sits at 18.4. Neither is an impossible jump from page one. Meanwhile "seo latam" at position 69 is a head term you do not win with a tweak — you win it with months of content and links. That turns a six-row table into a concrete prioritisation decision.
One aside before moving on: if these filters show several different URLs competing for the same query, do not treat it as a CTR problem. It is a different issue with a different fix, covered in the guide on spotting keyword cannibalization with Search Console.
From a list of Search Console queries to a list of keywords you actually track
So far you have done half the job. Finding keywords in Search Console is useful, but the report has three structural limits that stop it from working as a monitoring system, and it is worth knowing them before building a process on top.
You only see what you already have
Search Console reports queries where your site already appeared. Anything Google has never shown you simply does not exist in the report, however good the pattern is. It is a rear-view mirror, not radar.
Position is an aggregated average
The number you see blends devices, countries and times of day into one figure. It could be a stable position or the mean of something swinging wildly, and the report gives you no way to tell them apart.
There is no alert when something drops
A regex is a one-off query. If tomorrow you lose six positions on your most profitable term, Search Console will not tell you: you find out next time you open the report, which with luck is two weeks away.
That is why the natural workflow has two halves. Search Console handles discovery, because it knows things no external tool can guess. A rank tracker handles monitoring, because it measures the exact position every day, in the city you specify, with mobile and desktop separated. How to wire the two together is laid out step by step in the guide to connecting Google Search Console to a rank tracker, which is the starting point if your property is not linked yet.
An honest warning about the handover: when you add a keyword to a tracker, its history starts that day. It is not retroactive. Whatever already happened lives in Search Console and stays there. So do not leave the final list for three months from now — every week you wait is a week of your own history you will never have.
How to pick 5 keywords on Free or 50 on Pro with this method
Quota forces you to decide, and that is a good thing. The Rankiamos Free plan is 5 keywords with an automatic weekly check, no card required. Pro is 50 with a daily check, and on both plans you can re-check a keyword by hand 6 hours after its last check. The part that catches people out is that every keyword and city combination consumes one unit: 20 terms across 3 cities is 60 units, not 20. The price does not go up when you add cities, but the quota does get spent. The exact limits of each plan are on the pricing page.
With that constraint in place, this is the selection order we apply to whatever the regex produced:
| Priority | Criterion | Free (5) | Pro (50) |
|---|---|---|---|
| 1 | Commercial, position 11 to 25, with impressions | 3 | 13 |
| 2 | Already in the top 10: defending what pays | 2 | 10 |
| 3 | Long tail with clear intent (5+ words) | 0 | 12 |
| 4 | Second and third city for the key terms | 0 | 10 |
| 5 | Long shots and distant head terms | 0 | 5 |
With 5 units there is no room for curiosity. The rule is brutal and it works: three commercial queries stuck between position 11 and 25, and two already in the top 10 that you cannot afford to lose. No head terms 60 positions away, however pretty the volume looks — the app measures up to the top 30, so that keyword just shows as "30+" for six months and you learn nothing.
With 50 units you can afford structure, and the split in the table works for most projects. The one line I would argue about case by case is the fourth: opening cities only makes sense if your business genuinely competes locally. If you sell software across a whole continent, those 10 units go further spread across more distinct terms than across more locations for the same ones.
One last thing about frequency. The weekly check on Free is enough to see underlying trends, but not to catch a drop in time. If the list you pulled with these filters contains terms that real revenue depends on, the daily check stops being a luxury. The difference between finding out today and finding out next Tuesday is six days of lost traffic nobody gives back.
How Rankiamos handles it
Regex gives you the list. This is what happens to it next.
🔗 Search Console connected on the Free plan
The Google Search Console integration is included on the free plan too, alongside the site scan. It is not a paid-tier feature: it is where the keywords worth tracking come from in the first place. Inside the app you see up to 250 queries from the last 28 days, one property per project; you run the regex filters in this post in Search Console itself.
📈 Search volume for prioritising
On Pro, every keyword can show its search volume, fetched on demand, along with its CPC, estimated traffic value and seasonality. That is the data point the performance report is missing when you have to decide which of two similar-impression queries deserves the quota unit.
🤖 AI analysis and AI Overview citations
On Pro you can request AI analysis for any keyword (30 a month), and each Google keyword shows whether Google's AI Overview cites your domain. On both plans, the daily alert summary flags when an AI Overview appears, starts citing you or stops citing you. Especially useful on the question-shaped queries from recipes 5 and 6.
⌚ Daily checks in your pocket
Automatic daily checks on Pro, manual re-checks 6 hours after a keyword's last check, and widgets on iPhone, the lock screen and Apple Watch on both plans. On Pro, tracking mobile and desktop together uses 2 quota units, one per device.
So there are no surprises: Rankiamos is a native app for iPhone, iPad, Mac and Apple Watch, and its interface is in Spanish only. There is no web version and no Android version today. If your team works on Windows, this is not for you, and I would rather say so here than after you install it.
Free plan: 2 projects, 5 keywords, weekly check, Search Console included · No card
The whole thing in one sentence
Eleven well-chosen patterns turn an unreadable thousand-row table into five workable lists: brand, non-brand, questions, comparisons and geographic demand. None of them is complicated and none needs anything RE2 refuses. The hard part is not the syntax, it is having the discipline to finish the exercise with a short list instead of a screenshot.
The next step is just as simple: take the 5 or the 50 queries that survived the filter, put them on a fixed measurement schedule and stop guessing. If you want to see what the product does with that list once loaded, it is all in the tracker feature breakdown.
Frequently asked questions
Does Search Console accept any regular expression? ▾
Is Search Console regex case-sensitive? ▾
Can I use regex on the Page filter and not just on Query? ▾
Why does my regex return nothing when I know those queries exist? ▾
Can I filter by CTR or by position using regex? ▾
How many of the keywords I find should I actually track? ▾
Is this worth doing on a site with very few impressions? ▾
Read next
Connecting Google Search Console to a rank tracker
The step before all of this: linking the property, understanding what each source contributes and building the full workflow.
DiagnosisSpotting keyword cannibalization with Search Console
What to do when several of your own URLs compete for the same query, and how to decide which one stays.