Google’s search URL accepts dozens of undocumented parameters that control results, date filters, language, location, and output format. this is the working reference for 2026, sourced from reverse-engineering and official documentation.
the base url structure
every Google search starts at https://www.google.com/search. the query string carries all the search configuration. the minimum required parameter is q (the query). everything else is optional but powerful.
for scraping purposes, always target google.com with explicit gl and hl parameters rather than country-specific domains. the gl parameter gives you cleaner, more predictable results and avoids regional redirect chains.
core parameters
q: query
the search query. URL-encode it. spaces become + or %20. use urllib.parse.quote_plus() in Python. advanced operators (site:, intitle:, filetype:) go inside q.
num: results per page
valid values: 10 (default), 20, 30, 50, 100. setting num=100 gives you the full first page in one request, which is essential for efficient scraping. SERP quality degrades beyond position 30; positions 31-100 are often thin or duplicate content.
start: pagination offset
zero-indexed. start=0 is page 1, start=10 is page 2 (with default num=10). combine with num: num=100&start=0 fetches 100 results in one shot.
gl: geolocation country
two-letter country code. gl=us, gl=gb, gl=sg. for rank tracking, always fix gl so results are consistent across requests.
hl: interface language
hl=en forces English interface. if you omit this, Google infers language from IP location, which breaks scraping consistency when you rotate proxies across regions.
lr: language restrict
restricts results to pages in a specific language. format: lr=lang_en, lr=lang_zh-TW. different from hl: hl controls the UI language, lr controls the language of pages returned.
date and freshness parameters
tbs: time-based search
values: tbs=qdr:h (past hour), tbs=qdr:d (past 24 hours), tbs=qdr:w (past week), tbs=qdr:m (past month), tbs=qdr:y (past year), tbs=cdr:1,cd_min:1/1/2025,cd_max:12/31/2025 (custom date range). for news monitoring pipelines, tbs=qdr:h pairs with tbm=nws for news-specific results.
result type parameters
tbm: type of search
tbm=nws– Google Newstbm=isch– Google Imagestbm=vid– Google Videostbm=shop– Google Shoppingtbm=bks– Google Books
output and format parameters
filter
filter=0 disables duplicate filtering and the omitted similar results cluster. always set this when scraping for comprehensive results. filter=1 (default) silently drops results Google considers duplicates.
nfpr
nfpr=1 disables automatic query corrections, which is critical for rank tracking exact queries.
a working python scraping example
import urllib.parse
from curl_cffi import requests as cffi_requests
def google_serp(query, num=10, gl="us", tbs=None):
params = {"q": query, "num": str(num), "gl": gl, "hl": "en", "filter": "0", "nfpr": "1"}
if tbs:
params["tbs"] = tbs
url = "https://www.google.com/search?" + urllib.parse.urlencode(params)
s = cffi_requests.Session(impersonate="chrome120")
return s.get(url, headers={"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 Chrome/120.0.0.0 Safari/537.36", "Accept-Language": "en-US,en;q=0.9"}).text
html = google_serp("web scraping python", num=100, gl="us", tbs="qdr:m")parameters to avoid
some parameters seen in older guides no longer work or actively trigger bot detection. pws=0 (disable personalization) was removed in 2021. as_sitesearch works but is slower than using site: inside q. complete=0 has no effect on server-side responses.
sources and further reading
- Google Custom Search API reference
- SerpApi Google Search parameters reference
- Moz: Google search parameters guide
related guides
last updated: April 1, 2026