Search DuckDuckGo web results
Ranked organic web results for a query: each result’s position, title, URL, the URL as printed under the title, domain, snippet and the date DuckDuckGo shows beside it. Ads shown with the results come back separately in ads and never take a position, so positions count organic results only; a URL DuckDuckGo repeats on a later page is counted once, so positions have no gaps and no duplicates. When DuckDuckGo shows a summary box above the results it comes back as zeroClick. limit defaults to 10, the first page, and goes up to 200; DuckDuckGo lists at most about 190–200 organic results for any query and then stops, at which point endOfResults is true. Continue a search with nextCursor, sent with the same query, region, safeSearch and timeRange — a cursor sent with different filters is a 400. Results reflect a US searcher (us-en) unless you set region, and rankings differ between regions. A query that matches nothing is a 200 with an empty results list, not an error. Set includeSitelinks to also get the links shown under first-page results. DuckDuckGo publishes no total-result count. Billing: each result page read counts as one request (pagesScraped) — 10 results on the first page and up to 15 on each after; a short first page may mean one more page is read to reach limit, and a sitelinks read adds one. To find where one site ranks, use rank-check instead: it costs one request at any depth.
/search Web search https://api.fetchlayer.dev/duckduckgo/search Headers
Authorization string required Bearer token — your FetchLayer API key.
Parameters
query string required The search query, as you would type it (1–500 characters).
region string optional Region code: us-en, uk-en, de-de, fr-fr, es-es, it-it, jp-jp, in-en, au-en, ca-en, br-pt and 52 more (64 codes, DuckDuckGo’s own list), or wt-wt for no region. Results and rankings differ by region. (default: us-en)
safeSearch string optional DuckDuckGo’s own filter level: strict, moderate or off. DuckDuckGo still returns a site for a query that names it outright. (default: moderate)
timeRange string optional any, day, week, month or year: only results published within it. (default: any)
limit number optional Organic results to return (1–200), or -1 for the maximum. (default: 10)
pages number optional Most result pages to read in this request (1–20), or -1. Defaults to as many as limit needs. Each page read counts as one request.
cursor string optional A previous response’s nextCursor. Send it with the same query, region, safeSearch and timeRange.
includeSitelinks boolean optional Also return the links DuckDuckGo shows under first-page results (sitelinks). Reading them adds one page to pagesScraped, only when they were actually read; when they can’t be, a note says so and nothing extra is billed. (default: false)
format string optional json or markdown. (default: json)
timeoutMs number optional Time limit for each page read, in milliseconds (1000–120000).
Response Fields
search
Search DuckDuckGo web results
resultType string search, rank-check, instant-answer, suggestions, news, videos or images.
requestedUrl string The DuckDuckGo page this result corresponds to.
notes string[] Caveats about this particular result — a list that may be incomplete, a depth DuckDuckGo could not reach, a later page that could not be read. Empty when there are none. Read it on every call.
transport string The source this data came from. Always "duckduckgo".
scrapedAt string ISO 8601 timestamp of when the data was collected.
query string The query that was run.
region string The region the results are for.
safeSearch string The safe search level applied.
timeRange string The time range applied.
results object[] Organic results, in ranked order.
results[].position number 1-based position among organic results, counted across pages. Ads never take a position.
results[].page number The result page it appeared on.
results[].title string The result title.
results[].url string The destination URL.
results[].displayedUrl string The URL as printed under the title, or null.
results[].domain string Hostname of url.
results[].snippet string The text under the result, or null.
results[].date string The date DuckDuckGo shows beside the result, as given (e.g. 2026-08-03T00:00:00), or null. No time zone is stated, so none is added.
results[].sitelinks object[] | null With includeSitelinks, the links shown under a first-page result, each with title, url and snippet; null where there are none or includeSitelinks is off.
resultCount number Results in this response. DuckDuckGo publishes no total-result count anywhere; page with nextCursor until endOfResults.
ads object[] Ads shown with the results, never ranked: page, title, url (the advertiser’s landing page, when stated), domain, displayedUrl, snippet.
zeroClick object The summary box above the results — heading, abstract, url, source (e.g. "Wikipedia"), imageUrl — or null.
endOfResults boolean DuckDuckGo has no further results for this query.
pagesScraped number Result pages read. Each counts as one request against your plan. When the first page comes back short, one more may be read to reach limit, and a sitelinks read adds one.
pagesRequested number The most pages this request would have read. Compare with pagesScraped.
nextCursor string Pass back as cursor, with the same query and filters, to continue. null at the end.
hasNextPage boolean Whether there is more to fetch.
Request
curl -X POST "https://api.fetchlayer.dev/duckduckgo/search" \
-H "Authorization: Bearer ss-your-key" \
-H "Content-Type: application/json" \
-d '{"query":"open source crm","limit":10}'Response
{
"resultType": "search",
"requestedUrl": "https://duckduckgo.com/?q=open+source+crm&kl=us-en&kp=-1",
"scrapedAt": "2026-09-15T19:47:52.280Z",
"transport": "duckduckgo",
"notes": [],
"query": "open source crm",
"region": "us-en",
"safeSearch": "moderate",
"timeRange": "any",
"results": [
{
"position": 1,
"page": 1,
"title": "Best Open Source CRM Software for 2026: Top 8 Picks Reviewed",
"url": "https://crm.org/crmland/open-source-crm",
"displayedUrl": "crm.org/crmland/open-source-crm",
"domain": "crm.org",
"snippet": "Open source CRMs give you full control over your data, workflows, and hosting. We reviewed 8 top tools for flexibility, control, and cost-saving features—perfect for teams that like to self-host. Read more!",
"date": "2026-01-19T00:00:00"
},
{
"position": 2,
"page": 1,
"title": "9 Best Open Source CRMs Of 2026 - Forbes Advisor",
"url": "https://www.forbes.com/advisor/business/software/best-open-source-crm/",
"displayedUrl": "www.forbes.com/advisor/business/software/best-open-source-crm/",
"domain": "www.forbes.com",
"snippet": "In this roundup, you’ll learn about the best open source CRM software options. We’ll discuss features, costs and what to look for when choosing CRM software.",
"date": "2026-02-09T00:00:00"
},
{
"position": 3,
"page": 1,
"title": "10 Best Open Source CRM Software Reviewed In 2026",
"url": "https://croclub.com/tools/best-open-source-crm-software/",
"displayedUrl": "croclub.com/tools/best-open-source-crm-software/",
"domain": "croclub.com",
"snippet": "Discover the best open source CRM software for your team. Compare features, pros & cons, prices, and more in my complete guide.",
"date": "2026-08-03T00:00:00"
}
],
"resultCount": 10,
"ads": [
{
"page": 1,
"title": "Top 10 CRM Tools - Free List of the Top Products",
"url": "https://www.capterra.com/sem-compare-b/customer-relationship-management-software/",
"domain": "capterra.com",
"displayedUrl": "capterra.com",
"snippet": "No Matter Your Mission, Get The Right CRM Tools To Accomplish It. Easily Find The CRM Tools You’re Looking For w/ Our Comparison Grid."
}
],
"zeroClick": null,
"endOfResults": false,
"pagesScraped": 1,
"pagesRequested": 1,
"nextCursor": "eyJ2IjoxLCJmIjoiNlJjMDVmZjVvZ1BNIiwiZm9ybSI6…",
"hasNextPage": true
}