DuckDuckGo search as JSON. Ranked results, ads in their own array, 37 regions.
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
HasData API key, created at app.hasdata.com. 1,000 free credits every month, no card.
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
Get DuckDuckGo Search Results Fetches DuckDuckGo SERPs for a query with region targeting (kl, or cc+setLang), safesearch (off/moderate/strict), device type, and token-based pagination. Returns organic results (title, url, snippet, displayed url, position, date, sitelinks, video metadata), ads, and the Search Assist AI answer. Use for SEO rank tracking, SERP feature monitoring, DuckDuckGo-specific visibility audits, and training/eval data for search agents.
Specify the search term for which you want to scrape the SERP. Required unless `nextPageToken` is provided (which carries the query of the page it continues).
The two-letter country code for the country to search from. Combined with `setLang` to form the DuckDuckGo region. Ignored if `kl` is set.
DuckDuckGo region code in `<country>-<language>` form (e.g. `us-en`, `de-de`). Sets country and interface language at once; takes precedence over `cc`/`setLang`. Use `wt-wt` for no region.
The preferred result/interface language code — usually two letters (e.g. `en`, `de`), with script-tag variants for some languages (e.g. `zh-hans`, `zh-hant`). Combined with `cc` to form the DuckDuckGo region. Ignored if `kl` is set.
Specify the device type for the search.
Adult Content Filtering option.
Opaque token returned in each response as `nextPageToken`. Pass it back (in place of `q`) to fetch the next page of results. It carries a pre-signed page URL bound to the original request's session, so it must be used as-is and cannot be constructed manually. Absent when there are no further pages.
Get DuckDuckGo Search Results Fetches DuckDuckGo SERPs for a query with region targeting (kl, or cc+setLang), safesearch (off/moderate/strict), device type, and token-based pagination. Returns organic results (title, url, snippet, displayed url, position, date, sitelinks, video metadata), ads, and the Search Assist AI answer. Use for SEO rank tracking, SERP feature monitoring, DuckDuckGo-specific visibility audits, and training/eval data for search agents.
| Argument | Type | Description |
|---|---|---|
| q | string | Specify the search term for which you want to scrape the SERP. Required unless `nextPageToken` is provided (which carries the query of the page it continues). |
| cc | string | The two-letter country code for the country to search from. Combined with `setLang` to form the DuckDuckGo region. Ignored if `kl` is set. |
| kl | string | DuckDuckGo region code in `<country>-<language>` form (e.g. `us-en`, `de-de`). Sets country and interface language at once; takes precedence over `cc`/`setLang`. Use `wt-wt` for no region. |
| setLang | string | The preferred result/interface language code — usually two letters (e.g. `en`, `de`), with script-tag variants for some languages (e.g. `zh-hans`, `zh-hant`). Combined with `cc` to form the DuckDuckGo region. Ignored if `kl` is set. |
| deviceType | string | Specify the device type for the search. |
| safeSearch | string | Adult Content Filtering option. |
| nextPageToken | string | Opaque token returned in each response as `nextPageToken`. Pass it back (in place of `q`) to fetch the next page of results. It carries a pre-signed page URL bound to the original request's session, so it must be used as-is and cannot be constructed manually. Absent when there are no further pages. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"q": {
"type": "string",
"description": "Specify the search term for which you want to scrape the SERP. Required unless `nextPageToken` is provided (which carries the query of the page it continues)."
},
"cc": {
"enum": [
"ar",
"au",
"at",
"be",
"br",
"ca",
"cl",
"dk",
"fi",
"fr",
"de",
"hk",
"in",
"id",
"it",
"jp",
"kr",
"my",
"mx",
"nl",
"nz",
"no",
"cn",
"pl",
"pt",
"ph",
"ru",
"sa",
"za",
"es",
"se",
"ch",
"tw",
"tr",
"gb",
"us"
],
"type": "string",
"description": "The two-letter country code for the country to search from. Combined with `setLang` to form the DuckDuckGo region. Ignored if `kl` is set."
},
"kl": {
"enum": [
"ar-es",
"au-en",
"at-de",
"be-nl",
"be-fr",
"br-pt",
"ca-en",
"ca-fr",
"cl-es",
"dk-da",
"fi-fi",
"fr-fr",
"de-de",
"hk-tzh",
"in-en",
"id-en",
"it-it",
"jp-jp",
"kr-kr",
"my-en",
"mx-es",
"nl-nl",
"nz-en",
"no-no",
"cn-zh",
"pl-pl",
"ph-en",
"ru-ru",
"za-en",
"es-es",
"se-sv",
"ch-de",
"tw-tzh",
"tr-tr",
"uk-en",
"us-en",
"wt-wt"
],
"type": "string",
"description": "DuckDuckGo region code in `<country>-<language>` form (e.g. `us-en`, `de-de`). Sets country and interface language at once; takes precedence over `cc`/`setLang`. Use `wt-wt` for no region."
},
"setLang": {
"enum": [
"ar",
"ca",
"zh-hans",
"zh-hant",
"hr",
"cs",
"da",
"nl",
"en",
"et",
"fi",
"fr",
"de",
"he",
"hu",
"it",
"ja",
"ko",
"lv",
"lt",
"nb",
"pl",
"pt",
"ro",
"ru",
"sk",
"sl",
"es",
"sv",
"th",
"tr",
"uk",
"vi"
],
"type": "string",
"description": "The preferred result/interface language code — usually two letters (e.g. `en`, `de`), with script-tag variants for some languages (e.g. `zh-hans`, `zh-hant`). Combined with `cc` to form the DuckDuckGo region. Ignored if `kl` is set."
},
"deviceType": {
"enum": [
"desktop",
"mobile",
"tablet"
],
"type": "string",
"description": "Specify the device type for the search."
},
"safeSearch": {
"enum": [
"off",
"moderate",
"strict"
],
"type": "string",
"description": "Adult Content Filtering option."
},
"nextPageToken": {
"type": "string",
"description": "Opaque token returned in each response as `nextPageToken`. Pass it back (in place of `q`) to fetch the next page of results. It carries a pre-signed page URL bound to the original request's session, so it must be used as-is and cannot be constructed manually. Absent when there are no further pages.\n"
}
},
"additionalProperties": false
}