← Blog

Google search results as JSON with site: and filetype:

SERP rows as JSON. site:, filetype:, and intitle: pass through. Not Google Ads. Not an SEO retainer.

A laptop and notebook on a desk during work
Photo by Campaign Creators on Unsplash.

A SERP row is a result, not a ranking campaign. google.fetcher.sh returns Google web search as JSON. Operators pass through: site:, filetype:, intitle:, quoted phrases. That is search-as-data, not Google Ads and not a retainer.

The host’s own examples are the right ones: site:github.com x402 payments, agentic commerce filetype:pdf, "pay per call api". You put those tokens in query. You do not invent extra HTTP parameters for site or filetype.

Custom Search as the official path is the without-CSE note. Live grounding is the RAG job. X’s from: operators are a different family. News headlines are google-news.fetcher.sh. OSINT uses the same SERP with a journalism frame.

One GET, one query string, JSON rows. Official Custom Search needs a CSE id; this host does not. If you wanted Ads or a ranking retainer, you are in the wrong place.

A SERP row, not a ranking campaign

curl -H 'Authorization: Bearer bby_live_…' 'https://google.fetcher.sh/api/search?query=site:github.com+x402+payments'

What you get back is the public result list as data: titles, links, snippets, in the usual envelope. What you do not get is your own rank history, Search Console, or a promise that you can move a blue link. SEO agencies sell the campaign. This host sells the row.

Quoted phrases matter. pay per call api and "pay per call api" are different queries. site: constrains the corpus. filetype:pdf is how you ask for documents instead of homepages. intitle: is how you stop matching a word that only appears in a sidebar.

Do not mix X operators into this string. from:OpenAI on google.fetcher.sh is not a Twitter search. Do not mix News sections into this host. Headlines have their own API.

How people actually issue the query

Researchers start with site: when they already know the domain and they want Google’s ranking inside that domain, not a crawl they have to run. site:github.com x402 is a reasonable stand-in for “what did the open web index about this repo.” It is not GitHub’s search API.

Legal and policy people use filetype:pdf because the memo is a PDF and the blog post is noise. Agents use the same operators for grounding: constrain the corpus, then write with the snippets in context.

If the question is “is this a headline,” switch hosts. Google Search will return news stories sometimes; Google News is the product that is headlines, with editions and topics. Mixing them in one monitoring job is how you double-count.

A case: site:github.com instead of a crawl

A developer advocate is checking whether a protocol name is showing up in public repos and READMEs. They do not have time to crawl GitHub. They do not have a Custom Search engine.

They run site:github.com x402 payments, then a quoted phrase pass, then filetype:pdf for the deck-shaped results. They keep the URLs. They do not treat snippet text as the full README. They open the interesting rows.

That is a morning, a prepaid key, and no CSE id. If they later want headlines about the same protocol, they add News. If they want tweets, they leave Google entirely.

intitle: is the unglamorous operator that stops you matching a footer. Quoted phrases are how you look up the product name when it is also English words. Together with site: they are most of what people mean by “Google dorking” without turning this page into a hacker zine. We pass them through. We do not sell a list of “secret operators.”

Pagination, when the endpoint offers it, is how you get past page one. Snippets are truncated. If the row matters, open the URL. Agents that treat the snippet as the document will cite half a sentence. Humans do that too.

A case: an agent that must not invent citations

A support bot is allowed to answer from site:docs.example.com only. The team does not want it quoting a random blog.

Every retrieval is site:docs.example.com plus the user question, on this host. The bot cites the URLs in the JSON. If Google returns nothing, the bot says it does not know — it does not fall back to training data and pretend. Payment is the agent-pays loop. This note is the query language.

Operators are the product

site:, filetype:, intitle:, quotes. Put them in query. Docs: google.fetcher.sh. Same 402 or bby_live_ key as the rest of the catalog. Ads, Search Console, and retainers stay where they were.