Search filters
Restrict, exclude or boost domains, bound results by publish date, read typed published_at dates, and get query-ranked highlights instead of whole pages. No extra credits.
These options narrow and reorder what a search returns. They work on /v1/search, /v1/news, /v1/images and /v1/videos as listed below, cost nothing extra, and every other endpoint rejects them with 400 invalid_request.
curl https://api.serpkite.com/v1/search \
-H "Authorization: Bearer $SERPKITE_API_KEY" \
-H "Content-Type: application/json" \
-d '{"q":"rust async runtime","include_domains":["github.com","docs.rs"],"exclude_domains":["reddit.com"],"start_date":"2026-01-01"}'Domain filters
| Parameter | Type | Default | Description |
|---|---|---|---|
include_domains | string[] | Only results from these sources, up to 20: a domain (example.com, subdomains match), a path prefix (github.com/org) or a TLD (.gov). Compiled to site: operators and enforced on the results. Search, news, images, videos. | |
exclude_domains | string[] | Drop results from these sources, up to 20, same formats as include_domains. Search, news, images, videos. | |
boost_domains | string[] | Move results from these sources to the top without filtering out the rest, up to 20. Search and news. |
Each list takes up to 20 entries, as a JSON array or a comma-separated string:
| Entry | Matches |
|---|---|
example.com |
example.com and every subdomain (www., docs.…) |
github.com/serpkite |
Pages under that path prefix only |
.gov |
Every host in that top-level domain |
include_domainsandexclude_domainsare compiled into Google operators (q (site:a OR site:b) -site:c) and then enforced on the returned rows, because a fallback engine may treatsite:as a hint. Rows that don’t match are dropped andpositionis renumbered. A page where nothing matches is an empty result and is not billed.qplus the compiled operators must stay within 2,048 characters.- They can’t be combined with
engine: "consensus". boost_domains(search and news) filters nothing: matching rows move to the top, and both groups keep their original order.requestechoes the caller’sqand the normalised lists, never the compiled operators.
Date range
| Parameter | Type | Default | Description |
|---|---|---|---|
start_date | string | Only results published on or after this date (YYYY-MM-DD). Google's custom date range; can't be combined with time or tbs. | |
end_date | string | Only results published on or before this date (YYYY-MM-DD). |
start_date and end_date (YYYY-MM-DD, either or both) become Google’s custom date range (tbs=cdr:1,cd_min:…,cd_max:…). They can’t be combined with time or tbs. When a request falls back to another engine (engine), the range goes along; an engine that can’t filter by date is skipped rather than answering unfiltered.
Typed dates: published_at
Organic results, news, top stories and videos carry Google’s date as shown (“3 days ago”, “Mar 3, 2026”). When it parses, SerpKite adds published_at in ISO 8601: a date (2026-09-30) for absolute and day-level relative dates, a UTC time (2026-10-03T09:00:00Z) for “2 hours ago”. Relative dates are resolved against the time the page was fetched, so cached results keep the right date.
Highlights
| Parameter | Type | Default | Description |
|---|---|---|---|
highlights | boolean | false | With include_content: return up to 3 query-ranked passages (~600 characters each) per fetched page in results[].highlights instead of the whole page. No extra credits. |
With include_content on /v1/search, highlights: true returns up to 3 passages of about 600 characters per fetched page in results[].highlights instead of the whole page in content. Passages are split along the page’s headings and ranked against q with BM25 (a lexical ranker: deterministic, no model involved). Each one has text, score (higher is better, comparable within one response) and heading, the section path it sits under.
{
"position": 1,
"title": "Async in depth",
"link": "https://docs.example.org/async",
"domain": "docs.example.org",
"published_at": "2026-09-30",
"highlights": [
{ "text": "An async runtime drives futures to completion by polling them…", "score": 7.412, "heading": "Async in depth > Runtimes" }
]
}
Highlights cost nothing on top of include_content (+1 credit per fetched page). In format: "markdown" each passage is wrapped in a highlight tag under its result; format: "compact" lists the passage texts.
Choose the matching workflow
Use filters and highlights in a RAG pipeline to focus the evidence you retrieve. /v1/rank rejects domain filters, boosts and highlights because they would change the positions being measured. Search and news monitors save domain includes/excludes and time, but do not accept absolute date ranges, boosts or highlights.
Related: Common parameters, Page content, Search providers.
Last updated: 2026-10-04