Search
DuckDuckGo Scraper
duckduckgo.com
DuckDuckGo builds its results page with JavaScript and challenges clients that are not a real browser, so scraping it yourself means running one. A dedicated plugin endpoint takes a keyword and returns the results already parsed: organic results with position, title, URL, displayed URL, domain and description, the first page's ads in top and bottom lists, and related searches. The first page is rendered in a real browser through an exit in the country you pick, so its ads load; further pages add organic results. The response has the same shape as our Google /serpApi endpoint, so one pipeline handles both engines.
What you can extract
- Organic results with position, title, URL, displayed URL, domain and description
- Top and bottom ads from the first results page, with the advertiser's domain
- Related searches
- Pages checked and a hasMore flag
- Region- and language-specific result sets (proxy_country + language)
- Up to 10 result pages of organic results per call
Dedicated endpoints
/search/duckduckgo DuckDuckGo search results
Search results for a keyword: organic (position, title, url, displayedUrl, domain, description), topAds and bottomAds from the first page, and relatedSearches, plus a count for each list. Pick the region with proxy_country and language; collect up to 10 pages with pages_to_check. Same parameters and response shape as /serpApi; totalResults is null, as DuckDuckGo shows no result count.
How to scrape it
curl -X POST \
-H "X-ScrapeUnblocker-Key: $SU_API_KEY" \
"https://api.scrapeunblocker.com/search/duckduckgo?keyword=car%20insurance&pages_to_check=1&proxy_country=US"import requests
resp = requests.post(
"https://api.scrapeunblocker.com/search/duckduckgo",
headers={"X-ScrapeUnblocker-Key": SU_API_KEY},
params={"keyword": "car insurance", "pages_to_check": "1", "proxy_country": "US"},
)
print(resp.text)import { ScrapeUnblockerClient } from 'scrapeunblocker';
const su = new ScrapeUnblockerClient({ apiKey: process.env.SU_API_KEY });
const results = await su.duckduckgoSearch('car insurance', {
pagesToCheck: 1,
proxyCountry: 'US',
});
console.log(results); Requests are POST and take their parameters in the query string. Browser rendering always happens - there is no flag to enable.
Example response
{
"engine": "duckduckgo",
"keyword": "car insurance",
"country": "US",
"language": "en",
"totalResults": null,
"resultsCollected": 14,
"topAdsCount": 3,
"bottomAdsCount": 1,
"organicResultsCount": 10,
"topAds": [
{
"position": 2,
"title": "Side-By-Side Comparison - Car Insurance From $29/Mo",
"url": "https://www.nerdwallet.com/m/insurance/auto-insurance/compare-quotes-control-29?...",
"displayedUrl": "https://www.nerdwallet.com › insurance › car",
"domain": "nerdwallet.com",
"description": "Discover how much you could save on car insurance. Get multiple quotes in minutes!..."
}
],
"bottomAds": [
{
"position": 1,
"title": "GEICO® Official Site - Get a Free GEICO® Quote Today",
"url": "https://ad.doubleclick.net/searchads/link/click?lid=43700084044715165&...",
"displayedUrl": "https://www.geico.com › Auto",
"domain": "geico.com",
"description": "Get a Free Quote Today. GEICO®'s Car Insurance Quotes Are Personalized For You..."
}
],
"organic": [
{
"position": 1,
"title": "Cheapest Car Insurance in New York: Rates & Top Companies",
"url": "https://insurify.com/car-insurance/new-york/",
"displayedUrl": "https://insurify.com › car-insurance › new-york",
"domain": "insurify.com",
"description": "Compare the cheapest car insurance in New York for 2026, including average rates, top insurers..."
}
],
"relatedSearches": ["car insurance quotes online", "car insurance near me", "compare car insurance"],
"pagesChecked": 1,
"hasMore": true
} Frequently asked questions
Is it legal to scrape DuckDuckGo?
Collecting publicly available DuckDuckGo data such as organic results, ads and related searches is lawful in many jurisdictions, but the rules depend on your country, the data you collect and how you use it. ScrapeUnblocker returns the public results; what you collect and how you use it is your responsibility.
How do I scrape DuckDuckGo without getting blocked?
DuckDuckGo uses bot detection and challenges clients that are not a real browser. The /search/duckduckgo plugin renders the first results page in a real browser through an exit in the country you pick, retries on a fresh exit when a page comes back blocked, and returns parsed JSON. In ScrapeUnblocker's benchmark it returned real results on 100% of 1,040 calls with different queries, about 3.1s per call.
What DuckDuckGo data can I get?
/search/duckduckgo returns JSON in the same shape as /serpApi: organic results with position, title, URL, displayed URL, domain and description, top and bottom ads in their own lists, relatedSearches and a count for each list, plus pagesChecked and hasMore. Ads come from the first page only, and DuckDuckGo does not show them on every query. totalResults is always null, because DuckDuckGo shows no result count.
Do I need a DuckDuckGo API or account?
No. DuckDuckGo offers no official API for its results list; its Instant Answer API returns topic summaries, not search results. The plugin takes a keyword and returns the results as parsed JSON, with no account on your side, and because the shape matches /serpApi, code written for Google results reads DuckDuckGo results by changing the path only.
Can I scrape DuckDuckGo results from a specific country?
Yes. Pass proxy_country with a two-letter country code (default US) and language with a two-letter language code (default en). proxy_country sets DuckDuckGo's region and the exit the first page is rendered through, so the results and ads follow that country, and language sets the interface language.
How much does it cost to scrape DuckDuckGo?
Each results page fetched is billed as one request: a pages_to_check=3 call that returns three pages counts as 3 requests, and pagesChecked shows the exact number. 1 request = 1 credit, EUR 1.00 per 1,000 on pay as you go, down to about EUR 0.55 per 1,000 on the Ultimate plan. Blocks and timeouts are not billed, and the free trial includes 500 requests with no card.
Related scrapers
Start scraping this site today
Free tier included. No credit card required to test it.