DuckDuckGo results pages, news, images, videos and places as JSON
The DuckDuckGo Search API returns duckduckgo.com as JSON in seven actions.
This page covers what the DuckDuckGo API returns, who uses it, a real response and pricing. Every parameter and response field is in DuckDuckGo API parameters and responses →
- median response
- 1.9s
- endpoints
- 7
- credits per call
- 1–2
2 credits per call≈ $2/1,000 calls1,000 free credits, no card
- next_page
- 2
- next_start
- 10
7 active endpoints, on 1 and 2 credit tiers.
- POST/duckduckgo/v1/search2 credits
- POST/duckduckgo/v1/news1 credit
- POST/duckduckgo/v1/images2 credits
- POST/duckduckgo/v1/videos2 credits
- POST/duckduckgo/v1/maps2 credits
- POST/duckduckgo/v1/autocomplete1 credit
- POST/duckduckgo/v1/instant_answer1 credit
Run the call yourself, on the real endpoint
Change a parameter and press Try it. The response on the right is what your code will receive.
DuckDuckGo API
4 of 7 endpoints, ready to run
The results page as DuckDuckGo shows it: organic results, ads with sitelinks, the knowledge panel, related searches and inline news, videos and images.
// Press "Try it" and this pane shows exactly what the // live site returned this second — including an empty // result, if that is the truth. No key, no account.
What DuckDuckGo endpoints does ReefAPI ship?
7 live read endpoints. Read-only data API: no writes, no account actions, no dashboard access on the target site.
Every parameter, every allowed value →
Missing a DuckDuckGo endpoint, or need a source we don't have yet?Contact us real people · same-day reply.How the DuckDuckGo API works
DuckDuckGo is a normal ReefAPI surface — the same four rules that hold for every other engine on the key.
No OAuth app, no request signing, no per-site account. One key covers all 632 engines.
Every route is a POST with a JSON body. Parameters are validated against the published schema before anything is charged.
Credits, not seats. Failed and blocked calls are never charged, and nothing is cached: every call reads the source live.
One envelope everywhere. meta carries latency_ms, record_count and the endpoint that answered.
Track a keyword on DuckDuckGo in two markets, with the ads
The same query returns a different page per region, and that is the reason to ask for one. Key on link, never on position alone.
{"q": "vpn service", "region": "us-en"}organic_results plus the ads DuckDuckGo shows in the US market (4 on this query when measured), with sitelinks and advertiser links.
{"q": "vpn service", "region": "uk-en", "page": 2}The UK market, results 11 to 25 (page 2 holds 15).
{"q": "vpn", "time": "w"}What was published about it this week, with source and exact time.
Rankings, advertisers and coverage for one keyword per market from three calls.
curl -X POST https://api.reefapi.com/duckduckgo/v1/search \
-H "x-api-key: $REEF_KEY" \
-H "content-type: application/json" \
-d '{"q":"best laptop 2026"}'{
"ok": true,
"data": { … },
"meta": {
"api": "duckduckgo",
"endpoint": "search",
"mode": "live",
"latency_ms": …,
"record_count": …
},
"error": null
}What the DuckDuckGo API returns
Measured on 2026-11-06 over three runs of 295 live calls each. search answered 144 of 144, images, videos, autocomplete and instant answers 120 of 120 each; news and maps 117 of 120, where the three misses were the same correct empty answer each time (no Premier League articles in the past day; "bar" read by DuckDuckGo Maps as a place name).
| Field | What it holds |
|---|---|
| organic_results | The results in DuckDuckGo's order: position, title, link, displayed_link, domain, site_name, snippet, date (when DuckDuckGo shows one), favicon, and on video and article rows rich_snippet (author, views, duration). Page 1 holds 10 rows and later pages 15, the site's own page sizes. The same top 10 compared against DuckDuckGo's HTML page for 8 queries in 6 languages: 7 to 10 shared links per query, and every shared link had the identical title. |
| ads | Text ads with title, snippet, displayed_link, domain, sitelinks and callouts. link is the advertiser's URL decoded from DuckDuckGo's click link (29 of 29 decoded, 28 of 29 on the ad's own domain; the other is the advertiser's own tracking address), and tracking_link keeps DuckDuckGo's click URL. With the default region (wt-wt) the ads are those of the US market; pass region for a specific market. |
| knowledge_graph | The panel DuckDuckGo shows for people, places and things: title, type, entity_type, description with source and source link, image, official_website, attributes (Born, Occupation, Population…) and social profiles. It matched DuckDuckGo's Instant Answer record for 6 of 6 entities checked. |
| news_results, inline_videos, inline_images, shopping_ads | The modules DuckDuckGo places on the results page, when it places them. Shopping prices are returned as printed ("$110.00", sale price separately), never converted. |
| spelling | suggested_query and kind: including_results_for when DuckDuckGo already searched the corrected spelling ("pyhton tutoral" → "python tutorial"), did_you_mean otherwise. |
| news action | Up to 30 articles a page with title, link, snippet, source, an ISO 8601 UTC date and the site's relative date. The ISO date agreed with the relative text on 163 of 163 articles. |
| maps action | Places with title, category, address, coordinates, timezone, phone, website, rating, reviews, price ($ to $$$$), open_now, weekly hours, listing source (Tripadvisor, Yelp, Apple Maps) and recent reviews. With a strict bounding box 78 of 78 places were inside it. |
A query that has no real answer is padded with loosely matching pages, exactly as on duckduckgo.com; meta.relevance tells you how many rows contain your words. A request that genuinely has nothing (a search DuckDuckGo answers with "No results found", an empty time window, a place name in maps) comes back NOT_FOUND with the reason within about 2 seconds, never as an empty success; a bot check from DuckDuckGo is TARGET_BLOCKED and never NOT_FOUND. Measured on 2026-11-06: 14 of 14 no-results searches returned NOT_FOUND in at most 2.1 s.
What we measured on 2026-11-06
Three runs of 295 live calls each (48 searches in 14 languages, 40 calls for every other action) plus seven deliberate bad requests.
search 144 of 144; images, videos, autocomplete and instant answers 120 of 120 each; news and maps 117 of 120, the misses being the same correct empty answers every run. The seven bad requests came back with the right error every time.
Top-10 links shared with DuckDuckGo's HTML page 7 to 10 per query with identical titles; knowledge panel matched the Instant Answer record 6 of 6; news dates agreed with the site's relative times 163 of 163; strict bounding box respected 78 of 78; no HTML markup in any field.
search 1.5 s, news 1.0 s, images and videos 1.2 s, maps 1.2 s, instant answer 0.7 s, autocomplete 0.4 s.
Search 10 results on page 1 and 15 after; news 30, videos 60, images 100 per page.
DuckDuckGo's AI answer (search assist) and the Reddit discussion box; anything behind a login (none is needed).
What people build with DuckDuckGo
The jobs this data is most often used for.
endpoints
credits per call
Rank tracking on DuckDuckGo: position of your domain per keyword, region and time range, page by page.
Ad intelligence: who advertises on a keyword in each region, with ad copy, sitelinks and landing pages.
Entity lookup: the knowledge panel or instant answer for a person, company or place, with official site and social profiles.
Local research: places of one kind inside a city's bounding box, with ratings, reviews, hours and phone numbers.
What DuckDuckGo data costs
The cheapest call here is 1 credit, so $15/mo (Pro) buys 10,000 of them — $1.50 per 1,000 credits. Credits roll over and never expire, and failed or blocked calls are not charged.
- 1,000 free credits on signup, no card
- One key, all 632 APIs, one credit pool
- Failed and blocked calls are never charged
- Credits roll over and never expire
Call it in two lines
Sign up, get 1,000 credits and one key that works on every engine. Then this is the whole protocol.
curl -X POST https://api.reefapi.com/duckduckgo/v1/search \
-H "x-api-key: $REEF_KEY" \
-H "content-type: application/json" \
-d '{"q":"best laptop 2026"}'import os
import requests
REEF_KEY = os.environ["REEF_KEY"]
r = requests.post(
"https://api.reefapi.com/duckduckgo/v1/search",
headers={"x-api-key": REEF_KEY},
json={
"q": "best laptop 2026"
},
timeout=90,
)
print(r.json()["data"])Have a question? We got answers.
The questions people actually ask before wiring up DuckDuckGo.
Which regions, safe-search levels and time ranges are supported?▾
region takes DuckDuckGo's own codes: wt-wt (no region, the default), us-en, uk-en, ca-en, au-en, in-en, de-de, fr-fr, es-es, it-it, nl-nl, br-pt, mx-es, jp-jp, kr-kr, tr-tr, ru-ru, pl-pl and the rest; a code DuckDuckGo does not know is rejected with INVALID_PARAM. DuckDuckGo also ranks by where the request comes from, so the call leaves from the region's own country for the US, UK, Canada, Germany, France, Spain, Italy, Brazil and Thailand, from Germany for other European regions (France for be-fr and ch-fr) and from the US for the rest, wt-wt included; meta.exit_country names it. Measured: car insurance quotes and plumber near me with region=us-en had no foreign site in the top 5 in 18 of 18 calls (geico.com first for car insurance), where a German location had put a Berlin site first. safe is strict, moderate (default) or off. time is d, w, m or y, or a range such as 2024-01-01..2024-02-01. Measured: bundesliga tabelle with region=de-de returned 8 .de sites in the top 10 against 6 without it, and time=d returned none of the 10 links of the unfiltered page.
How does paging work?▾
page=1 returns the first 10 organic results, page=2 the next 15, page=3 the 15 after that, the same steps duckduckgo.com uses. start takes the raw offset (0, 10, 25, 40…) if you prefer it. pagination.next_page and next_start tell you whether there is more. source=lite pages the same way.
Do search operators work?▾
Yes. site:, "exact phrase", -exclude, filetype: and intitle: are passed to DuckDuckGo unchanged and DuckDuckGo applies them: site:reddit.com web scraping api returned reddit.com pages, starting with an r/webscraping thread.
What do the image and video filters do?▾
images: size (Small, Medium, Large, Wallpaper), color, type (photo, clipart, gif, transparent, line), layout (Square, Tall, Wide), license (Public, Share, ShareCommercially, Modify, ModifyCommercially, any) and time. videos: duration (short, medium, long), resolution (high, standard), license (creative_commons, youtube) and time (d, w, m). Measured on the same query: layout=Tall returned 95 of 97 images taller than wide; duration=short returned nothing longer than 4:57 and duration=long nothing shorter than 21:38.
How do I search places?▾
Give maps a query and either bbox (lat_top_left,lon_top_left,lat_bottom_right,lon_bottom_right) or lat and lon. Without a location DuckDuckGo would search around our server, so the call asks for one. Use a kind of business ("bars", "coffee"): a single word that is also a place name, such as "bar", is read by DuckDuckGo as that place and the call says so.
What is the difference between instant_answer and the knowledge panel?▾
instant_answer is DuckDuckGo's official Instant Answer record on its own: abstract, direct answer, definition, infobox, related topics. For an ambiguous name it returns the main article (Berlin the city); disambiguation=true returns DuckDuckGo's list of meanings instead. Many queries have no instant answer and return NOT_FOUND. search carries the same panel inside a full results page.
How fast is it?▾
Median times in the last run of 295 calls: search 1.5 s, news 1.0 s, images and videos 1.2 s, maps 1.2 s, instant answers 0.7 s, autocomplete 0.4 s. The slowest search took 3.3 s.
Are these Bing results?▾
DuckDuckGo builds its web results largely on Bing's index. This API returns DuckDuckGo's own page: its order, its ads, its modules and its knowledge panel, which is what a DuckDuckGo user sees.
What is the DuckDuckGo API?▾
DuckDuckGo API is a ReefAPI endpoint group for duckduckgo search as json: organic results, ads with sitelinks, the knowledge panel, related searches, inline news, videos, images and shopping ads, plus duckduckgo news, images, videos, maps places, autocomplete and instant answers. any region, safe-search level and time range. It returns live JSON through POST requests under /duckduckgo/v1.
Is the DuckDuckGo API free to try?▾
Yes. ReefAPI starts with 1,000 free credits, no card required. DuckDuckGo calls use the same shared credit balance as every other ReefAPI engine.
Do I need a DuckDuckGo login or account?▾
No login to DuckDuckGo is needed for the API response. You call ReefAPI with your x-api-key header, and the playground can run live examples before you create a production key.
How fresh is the DuckDuckGo data?▾
The page example is captured from a live search call, and production requests fetch live data through ReefAPI rather than a static sample.
How many credits does the DuckDuckGo API use?▾
DuckDuckGo actions currently cost 1-2 credits per successful call. Failed or blocked calls are free. All APIs draw from one credit pool.
Can I call DuckDuckGo from an AI assistant or MCP client?▾
Yes. Connect ReefAPI once through MCP and your assistant can call duckduckgo actions with the same key, credit pool and JSON envelope used by normal REST requests.
11 Search & SEO APIs on the same key
One key, one credit pool, one response envelope. If you are pulling DuckDuckGo, you are one call away from the rest of the category — no second contract, no second integration.
Need something this API does not do?
Name the endpoint, the field, or a source we do not carry yet. We ship new APIs every week and you would be first to get the key. Real people read every message and reply the same day.
Try it on your own data before you pay anything
The call above is the real endpoint, not a recording. A free key gives you 1,000 credits, the other 631 APIs, and the same envelope everywhere.
Endpoints, parameters and credit costs on this page are read from the live catalog and cannot drift from what the API accepts. Field notes were captured on 2026-11-06.