Scraper API

DuckDuckGo SERP API

for organic results, ads, and Search Assist

Search DuckDuckGo and get the results page as clean JSON. One request returns organic listings, ads, and the Search Assist answer with its sources, for any keyword or region, with proxies handled for you.

SUCCESS
99.5%

of requests succeed

P50
2.7s

median response

P95
5.1s

95% finish faster

PRICE
$0.75

per 1k SERPs at volume

Stop maintaining scrapers

DuckDuckGo reshapes its results page often. Your parser shouldn't care.

  • Results reshaped without notice
  • Ads blended into the organic list
  • Region tied to the kl and cc params
  • Search Assist answer rendered separately
  • Re-parse the page after each redesign
One integration commit replaces a backlog you’ll never finish.
scraper | git log
hotfix: markup changed, nulls in snippet
fix: ad parsed as an organic result
fix: region ignored without kl set
chore: rotate proxies for ddg runs again
fix: searchAssist missing on some queries
hotfix: captcha loop on repeat queries
fix: nextPageToken stopped paginating
chore: refresh residential IPs by region
fix: sitelinks dropped from ad blocks
fix: retry storm on rate limits
hotfix: markup changed, nulls in snippet
fix: ad parsed as an organic result
fix: region ignored without kl set
chore: rotate proxies for ddg runs again
fix: searchAssist missing on some queries
hotfix: captcha loop on repeat queries
fix: nextPageToken stopped paginating
chore: refresh residential IPs by region
fix: sitelinks dropped from ad blocks
fix: retry storm on rate limits
hotfix: markup changed, nulls in snippet
fix: ad parsed as an organic result
fix: region ignored without kl set
chore: rotate proxies for ddg runs again
fix: searchAssist missing on some queries
hotfix: captcha loop on repeat queries
fix: nextPageToken stopped paginating
chore: refresh residential IPs by region
fix: sitelinks dropped from ad blocks
fix: retry storm on rate limits
hotfix: markup changed, nulls in snippet
fix: ad parsed as an organic result
fix: region ignored without kl set
chore: rotate proxies for ddg runs again
fix: searchAssist missing on some queries
hotfix: captcha loop on repeat queries
fix: nextPageToken stopped paginating
chore: refresh residential IPs by region
fix: sitelinks dropped from ad blocks
fix: retry storm on rate limits
feat: integrate HasData API
Code Examples

One GET Request. That's the whole integration.

Start with just a query. Add more parameters when your use case needs them.

request example
curl -G 'https://api.hasdata.com/scrape/duckduckgo/serp' \
	--data-urlencode 'q=Coffee' \
	--data-urlencode 'deviceType=desktop' \
	--header 'x-api-key: <YOUR_API_KEY>' \
	--header 'Content-Type: application/json'
q Search Query
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).
kl Region
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.
cc Country
The two-letter country code for the country to search from. Combined with `setLang` to form the DuckDuckGo region. Ignored if `kl` is set.
setLang Interface Language
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.
safeSearch Adult Content Filtering
Adult Content Filtering option.
nextPageToken Next Page Token
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.
deviceType Device
Specify the device type for the search.
TRY ALL 7 PARAMETERS FREE
Response

Every result, one predictable schema

Organic results, ads, and the Search Assist answer come back with the same keys every time. Map the fields once and forget about it.

organicResults.json
[
  {
    "position": 1,
    "title": "10 Best Coffee Grinders 2026, Tested by Experts - Good Housekeeping",
    "link": "https://www.goodhousekeeping.com/appliances/coffee-maker-reviews/g30986295/best-coffee-grinders/",
    "displayedLink": "www.goodhousekeeping.com › appliances › coffee-maker-reviews",
    "source": "www.goodhousekeeping.com",
    "sourceName": "Good Housekeeping",
    "snippet": "The best blade, burr, and manual coffee grinders you can buy from top-rated brands, according to hands-on testing.",
    "snippetHighlightedWords": ["best", "coffee grinders"],
    "date": null
  }
]
Fields in organicResults
position number

Rank within the results

title / link string

Result title and destination URL

displayedLink / source string

Breadcrumb URL and host

sourceName string

Human-readable site name

snippet string

Result description text

snippetHighlightedWords string[]

Query terms bolded in the snippet

date string | null

Publish date when DuckDuckGo shows one

What We Offer

An all-in-one scraping service

Every feature you need to collect data from thousands to millions of requests.

Loved by developers

Teams that deleted their scraper

Now it's the part of the pipeline they don't think about

4.8 ★★★★★
across 100+ reviews on 5 platforms
Trustpilot Trustpilot ★★★★★

HasData delivers exactly what we need: speed and comprehensive search features. It's the fastest API we've used in this space. Plus, their customer support is fantastic.

Denver Sinclair
Denver Sinclair
Capterra Capterra ★★★★★

The SERP API provides accurate, structured search engine data across multiple regions and devices, enabling us to monitor market trends and performance with ease.

DD
Doaa D.
Trustpilot Trustpilot ★★★★★

We use the Google SERP API by HasData for its AI-overview feature. It delivers real-time data with consistent reliability. The JSON output includes an actual SERP screenshot, ensuring full accuracy.

Liam Hawthorne
Liam Hawthorne
Capterra Capterra ★★★★★

We rely on HasData for search performance data and broader scraping needs. Their APIs deliver highly structured data that integrates directly into our platforms.

JN
Jacob N.
Trustpilot Trustpilot ★★★★

We are using this service for google scraping and it works well. We used to use several services, but this looks like best match efficiency/cost.

Jan Svanda
Jan Svanda
CEO at E-solutions LLC
Pricing

Plans that get cheaper at scale

Fixed price, fixed volume, no surprises at the end of the month. Upgrade when you need more.

Free
$0 /mo
One-time free trial
100 SERPs to start
1 concurrent request
Team seats
Community support
Start free
Startup
$41 /mo
$2.04 / 1k SERPs
20K SERPs / month
15 concurrent requests
Team seats
Email support
Get started
Business
Recommended
$83 /mo
$0.82 / 1k SERPs
100K SERPs / month
30 concurrent requests
Team seats
Priority email support
Get started
Enterprise
$208 /mo
$0.69 / 1k SERPs
50 concurrent requests
Team seats
Dedicated account manager
Get started
Monthly SERP volume
Free 100K 500K 2M 6M 10M
Best fit
Business
SERPs / mo
100K
Concurrency
30
$ / 1k SERPs
$0.82
$83 /mo
Get Started

Start with 100 free SERPs. No credit card required.

FAQ

Questions, answered

1 Grab your API key 2 Send a GET request 3 Get structured JSON

Your first SERP
is minutes away

100 SERPs free · no credit card