SERP API · DuckDuckGo
DuckDuckGo search API
DuckDuckGo's web results, returned as JSON: rank, title, link, displayed URL, domain and snippet. DuckDuckGo's own Instant Answer API returns instant answers, not the list of results; this is the SERP API with engine: "duckduckgo", billed per search.
![A DuckDuckGo search for hiking boots in the US: the results page in the middle with the first result's title, displayed URL and highlighted words marked, and the real organic[0] JSON with rank 1, title, display_link, source rei.com and description. $0.0009 per search, whatever the tier.](/serp-api/duckduckgo/hero.webp?v=20261030api)
What you get
One result, one object.
| Field | What it holds |
|---|---|
rank | 1-based position |
title | Title of the result |
link | URL |
display_link | URL as displayed |
source | Domain |
description | Snippet |
Each result also carries the words DuckDuckGo highlights in the snippet.
Example
One request, one JSON answer.
curl -X POST https://api.quanticdata.io/v1/scraper/serp \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"query":"hiking boots","engine":"duckduckgo","country":"us","lang":"en","num":10}'import requests
r = requests.post("https://api.quanticdata.io/v1/scraper/serp",
headers={"Authorization": "Bearer YOUR_API_KEY"},
json={"query": "hiking boots", "engine": "duckduckgo", "country": "us", "lang": "en", "num": 10})
for o in r.json()["payload"]["organic"]:
print(o["rank"], o["title"], o["link"]){
"rank": 1,
"title": "Hiking Boots: Shop Boots for Hiking & Backpacking | REI Co-op",
"link": "https://www.rei.com/c/hiking-boots",
"display_link": "www.rei.com/c/hiking-boots",
"source": "rei.com",
"description": "Find hiking boots for men, women and kids at REI, the outdoor gear experts. Browse top-…"
}The answer is the usual envelope: payload.organic holds the list above, payload.search_metadata says which tier answered and how long it took.
Parameters
What, where, how many.
| Parameter | Meaning |
|---|---|
query | What you would type |
engine | duckduckgo |
num, page | Results per call and the page to read |
country | Proxy exit and Google locale (gl), ISO code: us, gb, de, it… |
lang | Interface language (hl): en, de, it… |
device | desktop (default), mobile, ios or android |
Every parameter, for every vertical, is in the API reference.
Price
Per search, nothing monthly.
Every successful search costs $0.0009, whatever the tier. In our test on 30 October 2026 the call answered from the plain page in 2.66 seconds.
Failed searches are not charged. There is no subscription: a $2 free credit every month covers the first calls, then you top up your balance by card, PayPal or crypto.
Every price per search and per vertical: SERP API pricing.
Official API or this one
The Instant Answer API is not a results API.
DuckDuckGo's Instant Answer API returns topic summaries and instant answers; it does not return the full list of web results.
This endpoint returns that list as JSON, at a fixed price per search.
Use cases
What teams build with it.
A third view of the web next to Google and Bing for research and RAG.
Privacy-minded products that prefer a non-personalised index.
Rank tracking on DuckDuckGo for the markets that use it.
Before you call it
Questions developers ask
Does DuckDuckGo have an official search API?
Its Instant Answer API returns instant answers, not the list of results; this endpoint returns the list.
Can I choose the country?
Yes, country and lang set the region.
What does it cost?
$0.0009 per successful search, always.
How fast is a call?
About 3 seconds in our test on 30 October 2026.
Can I query Google and Bing too?
Yes, the same endpoint with engine google or bing.
Start with the free credit.
Create an API key, run the example above and read the JSON. Pay per search after the $2 monthly credit, no subscription.