Google Search URL Parameters: What Still Works in 2026

Last Updated on August 13, 2026
Hand-drawn map showing how Google search URL parameters control query, language, market, time, and result type.
AI Summary
A practical 2026 reference to Google Search URL parameters and operators, explaining which controls still work and which require testing. It covers core query, language, country, result-type, date, and pagination parameters; the shift from tbm to udm; city-level uule targeting; common parameter conflicts; structured extraction workflows; official API alternatives; and responsible automation practices for SEO and research teams.

Sometime around September 2025, a bunch of SEO tools and custom scripts quietly broke. The culprit? Google stopped reliably honoring the num=100 parameter that power users had relied on for years to pull 100 results per page. There was no formal deprecation notice — just a spokesperson telling Search Engine Land that the parameter was "not formally supported." Around the same period, Google introduced more udm modes alongside older tbm verticals, announced that country-code domains would gradually redirect to google.com, and reported AI Overviews reaching over 2.5 billion monthly users.

If you've been building search URLs, tracking rankings, or automating research using Google's URL parameters, there's a decent chance some of your workflows are silently degraded right now. At Thunderbit, we reviewed current Google documentation, recent change announcements, reverse-engineered references, and live spot checks to separate stable controls from contextual ones. The result is a dated, test-before-deploy reference for the Google search URL parameters that matter in 2026, including tbm/udm mappings, the uule encoding formula for city-level geo-targeting, and parameter conflicts that can save hours of debugging.

What Are Google Search URL Parameters?

Diagram of a Google search URL showing the query, language, market, time, and result-type controls

Google search URL parameters are the key=value pairs that appear after the ? in a Google search URL. They control everything from what you're searching for, to which country's results you see, to whether you get images, news, or classic blue links.

A typical Google search URL breaks down like this:

https://www.google.com/search?q=best+crm+software&hl=en&gl=us&tbs=qdr:m
  • Base URL: https://www.google.com/search
  • ? begins the query string
  • q=best+crm+software is the search query (spaces encoded as +)
  • & separates each parameter
  • hl=en sets the interface language to English
  • gl=us tells Google to show results as if you're in the US
  • tbs=qdr:m filters to results from the past month

A distinction worth making: search operators like site:, filetype:, and intitle: go inside the q= value. They're part of your query. URL parameters like gl, hl, and tbs are separate keys in the URL that control how Google processes and displays results. Both matter, and they work together — but they're different animals.

Google has never published a single, versioned specification for these parameters. Some come from the Advanced Search form, some from the Custom Search API, and some are reverse-engineered from observing Google's own URLs. That means the article you're reading is based on live testing and documented behavior, not an official API contract.

Why Google Search URL Parameters Matter in 2026

URL parameters aren't just a developer concern. Anyone in SEO, marketing, sales, operations, or product who needs to understand what Google shows for a specific query, in a specific market, at a specific time — these parameters are your toolkit.

A quick breakdown of who benefits and how:

Use CaseWho BenefitsKey Parameters
SEO rank tracking across countriesSEO & Marketing teamsgl, hl, uule, pws
Competitor monitoring by dateStrategy & Ops teamstbs, q with site:
Ad monitoring in specific marketsPaid media teamsgl, hl, udm
Local SEO audits (city-level)Local business ownersuule, gl
Content research / trend trackingContent teamstbs (date filters), lr
Feeding search data into AI/LLM appsProduct & Data teamsMultiple params + structured extraction

Three big shifts make 2026 materially different:

  1. num=100 is no longer dependable. The old results-per-page trick stopped working reliably in September 2025. Google did not formally deprecate it; a spokesperson said it had never been formally supported.
  2. ccTLD redirects are a migration, not a completed switch. Google announced in April 2025 that country-code domains (google.co.uk, google.de, etc.) would gradually redirect to google.com. Google has not published a completion notice, so do not assume every locale behaves identically yet.
  3. AI Overviews changed the SERP. Google reports AI Overviews reaching over 2.5 billion monthly users and 200+ countries and territories. Reverse-engineered udm modes can change the result surface in some contexts, but they are not a guaranteed AI Overview switch.

If your workflows haven't been updated for these changes, you're probably getting degraded or misleading results without realizing it.

Google Search URL Parameters Cheat Sheet (2026)

Before the deep dive, the quick-reference table below is the most up-to-date list I've been able to put together. Bookmark it.

ParameterWhat It DoesExample ValueStatus
qSearch query (supports operators inside)q=best+crm+softwareâś… Active
hlInterface languagehl=en, hl=jaâś… Active
glCountry/market contextgl=us, gl=jpâś… Active
lrRestrict results to a content languagelr=lang_enâś… Active
crRestrict results to a hosting countrycr=countryUSâś… Active
startPagination offsetstart=10 (page 2)âś… Active
numResults per page (formerly)num=100⚠️ Not formally supported; unreliable since Sept 2025
udmContextual content modeudm=14 (classic web)⚠️ Reverse-engineered; varies by context
tbmSearch verticaltbm=isch (images)⚠️ Still observed; test alongside udm
tbsTime filters, sort, verbatimtbs=qdr:wâś… Active
safeSafeSearch controlsafe=activeâś… Active
filterDuplicate-result filteringfilter=0âś… Active (observed)
nfprDisable auto-correctionnfpr=1âś… Active (observed)
pwsDisable personalizationpws=0âś… Active
uuleCity/DMA-level geo-targetinguule=w+CAIQICI...âś… Active (reverse-engineered)
as_q, as_epq, as_eq, etc.Advanced Search form fieldsVariousâś… Active
as_sitesearchRestrict to a domain (Advanced Search)as_sitesearch=example.comâś… Active
as_filetypeRestrict to file type (Advanced Search)as_filetype=pdfâś… Active
ie, oeInput/output encodingie=UTF-8âś… Active (rarely needed)
kgmid, si, ibpKnowledge Graph entity / feature viewVarious⚠️ Contextual (not for general use)
ei, ved, sxsrf, sclientSession/tracking/telemetryVariousđź”’ Internal (ignore)
gbvBasic HTML view (formerly)gbv=1❌ Unreliable in 2026

Strip ei, ved, sxsrf, and sclient from any URLs you save or share. They're session and telemetry state that Google attaches automatically — irrelevant for constructing search URLs.

Core Google Search URL Parameters That Still Work

I've tested each of these live as of mid-2026. They're the ones you'll reach for most often.

q — Your Search Query

The q parameter carries your search terms. Spaces are encoded as + or %20. This is where Google's documented search operators live — they go inside the q value, not as separate URL parameters.

A few examples:

  • Exact phrase: q=%22google+search+url+parameters%22
  • Site-restricted: q=site%3Aexample.com+pricing
  • File type: q=filetype%3Apdf+annual+report+2026
  • Combined: q=site%3Acompetitor.com+intitle%3Apricing+after%3A2026%2F01%2F01

Always URL-encode the entire query value. Quotes, colons, and slashes all need proper encoding to avoid corrupting the URL.

hl — Interface Language

hl controls the language of Google's interface (buttons, labels, "People also ask" headings) and influences which results Google prioritizes. It uses ISO 639-1 codes like en, fr, de, ja, or BCP 47 tags like en-gb or pt-br.

hl does not force all result documents into that language. It's a strong signal, but Google may still show results in other languages if they're highly relevant. For content-language restriction, use lr instead.

gl — Country / Geolocation

gl simulates the country you're searching from, using ISO 3166-1 alpha-2 codes (us, gb, jp, de). With ccTLDs gradually redirecting to google.com, gl is now the primary way to get country-specific results.

The same query with different gl values can return completely different results, featured snippets, and local packs. For example, q=best+bank&gl=us and q=best+bank&gl=jp will show you very different banks.

Pro tip: always pair gl with hl for accurate localized results. Using gl=jp with hl=en gives you Japan-market results in an English interface — useful for international SEO audits.

lr and cr — Language Restrict and Country Restrict

These two get mixed up constantly. The distinction matters:

  • lr=lang_en restricts results to pages written in English (content language)
  • cr=countryUS restricts results to pages hosted in the United States (server location / country association)
  • gl=us simulates searching from the United States (affects ranking, local results, ads)

Both lr and cr are available through Google's Advanced Search form. Be careful combining them — lr=lang_en + cr=countryJP means "only English-language pages hosted in Japan," which is a very narrow set. More on this in the conflicts section.

start — Pagination

start=10 asks for results starting from position 11 (page 2), start=20 for page 3, and so on. Because num=100 is no longer dependable, incrementing start by 10 is the safer default—but Google may still rewrite or constrain pagination.

The old num=100&start=0 trick for pulling a full page of 100 results no longer works. If your scripts still include num, remove it — it's being silently ignored.

pws — Disable Personalization

pws=0 requests that Google turn off account-based personalization. This is essential for SEO rank tracking, where you want results that aren't skewed by your own search history, clicked results, or account preferences.

A word of caution: pws=0 reduces personalization but doesn't eliminate all contextual factors. Google says results can still vary by time, location, language, and device. There's no such thing as a truly "neutral" Google SERP.

safe and filter — SafeSearch and Duplicate Filtering

  • safe=active turns on SafeSearch; safe=off turns it off. Note that account settings, admin policies, network configurations, or regional laws may override this parameter.
  • filter=0 disables Google's duplicate-result filtering. Useful when you want to see every result Google has, including near-duplicates it would normally collapse.

nfpr — Disable Auto-Correction

nfpr=1 prevents Google from forcibly rewriting your query when it thinks you've misspelled something. This is useful for tracking branded terms with unusual spelling, technical jargon, or intentionally misspelled queries that competitors target.

Note that nfpr=1 only suppresses the forced rewrite. For broader control — disabling synonym expansion, spelling changes, and other automatic modifications — use tbs=li:1 (verbatim mode), which I cover in the tbs section below.

The tbm to udm Migration: What Changed and What to Use Now

This is one of the biggest parameter changes in recent years—and one of the easiest to overstate.

tbm has been a common way to switch between Google's search verticals — images, news, video, shopping — for over a decade. Google has also introduced a numeric udm system with overlapping and additional modes. Because Google has not published a stable consumer registry, treat this as a contextual mapping rather than a clean, completed replacement.

The Complete tbm-to-udm Mapping Table

The mappings below combine observed UI behavior and live spot checks dated August 12, 2026. Several values were stripped or rewritten in anonymous requests, so every row should be tested in the account, region, and client where it will be used:

Old ParameterOld ValueNew ParameterNew ValueStatus
tbm=lclPlaces/Localudm=1Places/Local⚠️ Contextual
tbm=ischImagesudm=2Images⚠️ Contextual
tbm=vidVideosudm=7Videos⚠️ Contextual
tbm=nwsNewsudm=12News⚠️ Contextual
——udm=14Classic web (no AI Overview)🆕 New, no tbm equivalent
——udm=18Forums🆕 New, no tbm equivalent
tbm=shopShoppingudm=28Shopping⚠️ Contextual
tbm=bksBooksudm=36Books⚠️ Contextual
——udm=39Short videos🆕 New, no tbm equivalent
——udm=50AI Overview mode🆕 New, no tbm equivalent

Google has not published a stable udm registry — that's a critical caveat. These values are reverse-engineered from observing Google's own UI behavior. URL acceptance varies by account, region, client, cookies, and experiment cohort. In my testing, some udm values were stripped in anonymous HTTP requests but worked fine in interactive browser sessions. Don't assume every value works universally.

What udm=14 Does (and Why SEOs Love It)

udm=14 has become something of a cult favorite in the SEO community. Android Central described it as a way to request a classic web-results surface without AI Overviews. In many sessions it produces a traditional blue-link SERP, but it is not an official or universal guarantee.

Why does this matter? If you're doing rank tracking or SEO audits, AI Overviews can push organic results below the fold and make it harder to assess ranking positions. udm=14 can give you a cleaner view when Google honors it.

That said, udm=14 is not guaranteed to work in every context. In live August 12, 2026 spot checks, Google sometimes stripped or rewrote udm values depending on the request context. Your mileage will vary by session, account, region, client, and experiment cohort.

udm=50 has been observed in AI Mode/AI-result contexts, but it should not be described as a guaranteed way to force an AI Overview for an arbitrary query.

What to Do: Update Your Workflows from tbm to udm

My recommendation:

  • New implementations: Treat udm as an experimental/contextual input and build fallbacks.
  • Existing workflows: Support and test both tbm and udm where relevant rather than assuming a completed migration.
  • Never combine both: When tbm and udm are both present in a URL, behavior is unpredictable. In my tests, Google sometimes stripped both and returned a plain query. More on this in the conflicts section.

The Full tbs Syntax: Custom Date Ranges, Sort-by-Date, and Verbatim

tbs is one of the most powerful parameters in the Google search URL toolkit, and most guides barely scratch the surface. It handles time filtering, date sorting, verbatim mode, and more — all packed into a single comma-separated value.

Standard Time Filters

tbs ValueMeaningExample URL Fragment
qdr:hPast hour&tbs=qdr:h
qdr:dPast 24 hours&tbs=qdr:d
qdr:wPast week&tbs=qdr:w
qdr:mPast month&tbs=qdr:m
qdr:yPast year&tbs=qdr:y

These are the basics that most guides cover. But tbs can do much more.

Custom Date Ranges

Need results from a specific time window? Use the cdr:1,cd_min:MM/DD/YYYY,cd_max:MM/DD/YYYY syntax:

&tbs=cdr:1,cd_min:01/01/2026,cd_max:06/01/2026

This filters results to those Google associates with dates between January 1 and June 1, 2026. It's invaluable for competitive research — for example, "what did competitors publish about pricing in Q1 2026?" Just remember to URL-encode the full value, since colons and slashes need encoding.

A practical note: Google's date association isn't always accurate. The date shown in search results is Google's best guess, not necessarily the actual publication date. Always verify dates on the destination page.

Sort by Date and Verbatim Mode

This is where the guide covers ground that no competing article does.

sbd:1 sorts results by date (newest first). On its own, that's useful but not remarkable. The trick is that you can combine it with time-range filters in a single tbs value:

&tbs=qdr:m,sbd:1

This gives you results from the past month, sorted by date — newest first. It's the fastest way to find what's just been published on a topic. I use this combination constantly when monitoring competitor content.

li:1 enables verbatim mode — the URL equivalent of clicking Google's "Verbatim" tool in the search interface. Verbatim mode disables auto-correction, synonym expansion, spelling changes, and other automatic query modifications.

The difference between li:1 and nfpr=1 comes down to scope:

  • nfpr=1: Only suppresses forced spelling/query rewriting (e.g., stops Google from changing "teh" to "the")
  • tbs=li:1: Disables all automatic modifications — spelling, synonyms, related terms, personalization adjustments

You can even stack multiple tbs values. For example, tbs=qdr:m,sbd:1,li:1 gives you past-month results, sorted by date, with verbatim matching. In my testing, this combination works, though I'd recommend verifying with your specific queries since tbs is undocumented syntax.

How to Build a uule Code for City-Level Geo-Targeting

If gl is a country-level zoom lens, uule is a city-level microscope. For local SEO — checking how your business ranks in Denver vs. Dallas, or what a searcher in Tokyo's Shibuya district sees — gl alone isn't precise enough.

No top-ranking article actually explains how to construct a uule code — they mention the parameter exists and move on. The full breakdown follows.

When to Use gl vs. uule vs. cr

ParameterGranularityTypical Use CaseRequires Encoding?
gl=usCountry-levelQuick country simulationNo
cr=countryUSCountry-level (restrict)Filter by hosting countryNo
uule=w+CAIQICI...City/DMA-levelLocal SEO rank checkingYes

The uule Encoding Algorithm (Step-by-Step)

The uule parameter uses an encoded named-location signal. The construction is reverse-engineered, not officially documented by Google, but it's been widely validated by the SEO community.

The safer approach is to encode a small Protocol Buffers payload rather than rely on the commonly-copied shortcut (which can fail with non-ASCII characters). Here's the process:

  1. Get the canonical Google location name. Google publishes geographic targets with canonical names through the Google Ads API geographic targeting data. Example: New York,New York,United States
  2. Encode the name as UTF-8 bytes.
  3. Build a small protobuf payload with the name and its byte length.
  4. Base64url-encode the payload and prepend w+.

Here's a Python snippet that does this:

import base64

def encode_varint(value: int) -> bytes:
    out = bytearray()
    while True:
        byte = value & 0x7F
        value >>= 7
        if value:
            out.append(byte | 0x80)
        else:
            out.append(byte)
            return bytes(out)

def build_uule(canonical_name: str) -> str:
    name = canonical_name.encode("utf-8")
    payload = b"\x08\x02\x10\x20\x12" + encode_varint(len(name)) + name
    encoded = base64.urlsafe_b64encode(payload).decode().rstrip("=")
    return "w+" + encoded

#Example
print(build_uule("New York,New York,United States"))
#Output: w+CAIQICIeTmV3IFlvcmssTmV3IFlvcmssVW5pdGVkIFN0YXRlcw

When you put this in a URL, make sure the literal + in w+ is properly encoded as %2B by your URL library. Most URLSearchParams or urllib.parse.urlencode implementations handle this automatically.

A correctly constructed uule is still just one location signal. It doesn't override IP address, account settings, device, or experiment cohort. Use it for directional local SEO checks, not as a guarantee of exact city-level rankings.

When Google Search URL Parameters Silently Conflict

Compatibility guide for combining Google search URL parameters without silent conflicts

Parameter combinations can fail silently: Google may ignore one input, rewrite the URL, or return a different surface. The conflict checks below are worth adding to every search-link workflow.

Zero competing articles cover parameter interactions. But if you're building search URLs with multiple parameters — and you probably are — you need to know which combinations play nicely and which ones fight.

gl + uule: Which One Wins?

When both are present, uule provides a more specific location signal than gl. If you set gl=uk and a uule pointing to Tokyo, you'll get Tokyo-influenced results, not UK results.

Recommendation: If you're using uule, either omit gl entirely or set gl to the country that contains your uule city. Don't send contradictory signals.

tbm + udm: Don't Use Both

In my testing, when both tbm and udm are present in the same URL, Google sometimes strips both and returns a plain web query. The behavior is inconsistent across sessions and accounts.

Recommendation: Use only udm for new implementations. If you must support legacy workflows, use one or the other — never both.

lr + cr: Double Filtering Can Return Zero Results

This is a subtle trap. lr=lang_en restricts to English-language content. cr=countryJP restricts to pages hosted in Japan. Combine them and you're asking for "English-language pages hosted in Japan" — which is a very small subset of the web.

Recommendation: Use one or the other unless you specifically need the intersection. If you do combine them, expect dramatically fewer results.

num + start: Broken Pagination

Old scripts using num=100&start=0 now silently return only ~10 results. The num parameter is no longer honored, but it doesn't throw an error — it just gets ignored.

Recommendation: Remove num from all URLs. Paginate using start in increments of 10 and deduplicate results across pages.

Quick Conflict Reference

CombinationWhat HappensRecommendation
gl + uuleuule provides more specific signalAlign country and city, or omit gl
tbm + udmUnpredictable — both may be strippedUse only udm
lr + crAggressive narrowing, often near-zero resultsUse one or the other
num + startnum ignored, only ~10 results returnedRemove num, paginate with start
nfpr=1 + tbs=li:1Related but not identical controlsTest your specific query
hl + lrInterface language ≠ content language restrictionUse deliberately; hl is not a content filter

From Google Search URL Parameters to Structured Data Extraction

Checklist for testing Google search URL parameters before using them in a data workflow

At this point you have a precise Google search URL — right query, right country, right date range, classic web results. The next step is getting structured data out of the results.

Whether you're building a rank tracker, monitoring competitors, or feeding search data into a research workflow, seeing the right results is only half the job. You need titles, URLs, snippets, positions, and dates in a spreadsheet or database.

Building a Targeted Google Search URL (Putting It All Together)

A complete example combining multiple parameters:

https://www.google.com/search?q=site%3Acompetitor.com+intitle%3Apricing&hl=en&gl=us&tbs=qdr:m,sbd:1&udm=14&pws=0

Breaking it down:

  • q=site%3Acompetitor.com+intitle%3Apricing — pages on competitor.com with "pricing" in the title
  • hl=en — English interface
  • gl=us — US market context
  • tbs=qdr:m,sbd:1 — past month, sorted by date
  • udm=14 — classic web results (no AI Overviews)
  • pws=0 — personalization off

You can construct this programmatically with curl:

curl -L -G 'https://www.google.com/search' \
  --data-urlencode 'q=site:competitor.com intitle:pricing' \
  --data-urlencode 'hl=en' \
  --data-urlencode 'gl=us' \
  --data-urlencode 'tbs=qdr:m,sbd:1' \
  --data-urlencode 'udm=14' \
  --data-urlencode 'pws=0' \
  -H 'User-Agent: Mozilla/5.0'

Or with Python:

import requests

params = {
    "q": "site:competitor.com intitle:pricing",
    "hl": "en",
    "gl": "us",
    "tbs": "qdr:m,sbd:1",
    "udm": "14",
    "pws": "0",
}

response = requests.get(
    "https://www.google.com/search",
    params=params,
    headers={"User-Agent": "Mozilla/5.0"},
    timeout=20,
)
print(response.url)

Anonymous HTTP requests to Google often return JavaScript shells with no server-rendered results, or unusual-traffic warnings — which is exactly where browser-based extraction has an edge.

Extracting SERP Data Without Writing a Parser

Parsing Google's HTML is fragile work. The DOM structure changes frequently, class names are obfuscated, and what you see in the browser isn't always what you get in a raw HTTP response.

A simpler approach for non-developers: open your carefully constructed search URL in Chrome, then use a browser-based extraction tool to pull structured data from the visible page. At Thunderbit, we built our Chrome extension to handle exactly this kind of workflow — you can use AI Suggest Fields to identify columns like result title, destination URL, snippet text, and visible position, then extract them into a spreadsheet without writing a parser.

This isn't the only path. Code-based approaches work too, especially if you need to handle large-scale or repeated extraction. But for ad-hoc research, audits, and one-off competitive analysis, browser-based extraction avoids the fragility of HTML parsing entirely.

When to Use an Official API Instead

The responsible-use callout — and it matters.

Google's Terms of Service prohibit automated access that bypasses protective measures, and Google Search Help explicitly classifies search scrapers and software that sends automated queries to determine rank as automated traffic. Running a production-scale Google scraper puts you at risk of IP blocks, CAPTCHAs, and potential legal issues.

For production-scale, high-volume search data needs, the better path is an official API. Google's Custom Search JSON API is closing to new customers — existing users have until January 1, 2027 to transition, with 100 free daily queries and $5 per 1,000 queries after that. Google recommends Vertex AI Search for controlled-site search going forward.

For sites you own, Search Console's Search Analytics API is the first-party source for clicks, impressions, CTR, and average position — no scraping required.

Think of URL-parameter knowledge as a diagnostic and research tool: great for building precise search links, running manual audits, and understanding what Google shows. Not a replacement for official APIs at scale.

Google Search Operators: The Parameters Inside Your Query

Search operators live inside the q= parameter, but they're essential companions to URL parameters. The table below covers the ones Google currently documents plus a few that still work in practice:

OperatorWhat It DoesExample
site:Restrict to a domainq=site:example.com+SEO
filetype:Restrict to file typeq=filetype:pdf+annual+report
intitle:Word must appear in titleq=intitle:pricing+SaaS
inurl:Word must appear in URLq=inurl:blog+marketing
-Exclude a termq=apple+-fruit
""Exact phrase matchq=%22google+search+url+parameters%22
OREither termq=scraping+OR+crawling
before:Results before a dateq=AI+before:2026-01-01
after:Results after a dateq=AI+after:2025-06-01
related:Similar sitesq=related:hubspot.com

The real power comes from combining operators inside q with URL parameters outside it:

q=site:competitor.com+intitle:pricing+after:2026/01/01&tbs=sbd:1&gl=us&udm=14

This finds pages on competitor.com with "pricing" in the title, published after January 2026, sorted by date, in the US market, with classic web results. That's a very precise competitive intelligence query built entirely from URL parameters and operators.

Google says site: results are not guaranteed to be complete — don't treat a site: query as an exhaustive inventory of indexed pages.

Responsible Use: Google's Terms of Service and Rate Limits

Brief but important context.

Google's Terms of Service prohibit abusive access and bypassing protective measures. Google Search Help specifically calls out search scrapers and automated ranking software as examples of automated traffic. Violating these terms can result in IP blocks, CAPTCHAs, account restrictions, and potentially legal action.

URL parameter knowledge is best used for: manually constructing precise search URLs, building bookmarkable search links for your team, running small-scale audits in a browser, and understanding how Google's search interface works. For production-scale automated work, use Google's official APIs — or a licensed third-party search data provider like Brave Search API.

At Thunderbit, our browser extension is built for user-initiated, visible-page extraction — not high-volume automated Google querying. That's an important distinction.

Key Takeaways: Your 2026 Google Search URL Parameters Toolkit

The condensed version:

  • Use gl + hl for localization signals and do not rely only on ccTLDs during Google's redirect migration
  • Test both udm and tbm where relevant — neither is a stable, versioned consumer API
  • udm=14 may request classic web results without AI Overviews, but Google can strip or rewrite it
  • Use uule for city-level geo-targeting with the protobuf encoding formula above
  • Master tbs for precise date filtering (cdr:1,cd_min:...,cd_max:...), date sorting (sbd:1), and verbatim search (li:1)
  • Watch out for parameter conflicts: gl vs. uule, tbm vs. udm, lr vs. cr
  • num=100 is unreliable and was never formally supported — use start in increments of 10 as a safer default
  • For structured SERP data, use browser-based tools like Thunderbit for ad-hoc work, or official APIs for production scale
  • Respect Google's Terms of Service — URL parameters are a research tool, not a scraping license

Google continues to change parameters without announcement. I'll keep the reference current as things shift — bookmark it and check back.

Learn More

FAQs

What does udm=14 do in a Google search URL?

udm=14 can request a classic web-results surface without AI Overviews, which is why it is popular among SEO practitioners. It is reverse-engineered, not an officially documented Google contract, and Google may strip or rewrite it depending on session, account, region, client, and experiment cohort.

Is the num parameter still working in 2026?

Do not rely on it. Google stopped reliably honoring num=100 in September 2025, and a spokesperson said the parameter was never formally supported. Use start in increments of 10 as a safer pagination default, and verify the returned result count because Google can still rewrite or constrain the response.

How do I simulate a Google search from a specific city?

Use the uule parameter with an encoded city name. The encoding section above provides the protobuf-based algorithm and a Python code example. You'll need the canonical Google location name (available from Google Ads geographic targeting data), which you encode into a uule value like uule=w+CAIQICIeNew+York,New+York,United+States.

What's the difference between gl, lr, and cr?

These three parameters control different aspects of geographic and language targeting. gl simulates your search location at the country level (affects ranking and local results). lr restricts results to pages written in a specific content language. cr restricts results to pages hosted in a specific country. They can be combined, but contradictory combinations (like lr=lang_en + cr=countryJP) will dramatically narrow your results.

Can I combine multiple tbs values in one URL?

Yes — separate them with commas within a single tbs parameter. For example, tbs=qdr:m,sbd:1 filters to the past month and sorts by date (newest first). You can also add li:1 for verbatim mode: tbs=qdr:m,sbd:1,li:1. The tbs syntax is undocumented, so test your specific combinations to confirm they work as expected.

Shuai Guan
Shuai Guan
CEO at Thunderbit | AI Data Automation Expert Shuai Guan is the CEO of Thunderbit and a University of Michigan Engineering alumnus. Drawing on nearly a decade of experience in tech and SaaS architecture, he specializes in turning complex AI models into practical, no-code data extraction tools. On this blog, he shares unfiltered, battle-tested insights on web scraping and automation strategies to help you build smarter, data-driven workflows.When he's not optimizing data workflows, he applies the same eye for detail to his passion for photography.
Topics
Google search URL parametersGoogle search operatorsSEO automation
Table of Contents
Thunderbit · AI web data agent

Extract data from any page in 1 click

Trusted by 250,000+ users
free plan available
From webpage to spreadsheet
Describe what you need — Thunderbit's AI Agent scrapes it and exports to Excel, Google Sheets, Airtable, or Notion. Free to start.
Chrome Store Rating
PRODUCT HUNT#1 Product of the Week