DuckDuckGo has a property no other major engine offers: its results aren't personalized. Same query, same region, same SERP for everyone, which makes it the cleanest baseline I know for rank measurement, and a natural web-search tool for AI agents that shouldn't inherit anyone's filter bubble. The DuckDuckGo Scraper on Apify turns those SERPs into structured JSON: organic listings with positions, ads, knowledge graph, news, images, videos, and related searches, one dataset item per page.
Disclosure: the Apify links in this post are affiliate links. If you run the Actor, I may earn a referral commission at no extra cost to you.
Does DuckDuckGo have an API?
Partially, and the partial bit misleads people. DuckDuckGo's public endpoints serve instant-answer material: topic summaries and disambiguation, not the ranked organic results. There's no official SERP API, no key that returns "position 4 for this keyword in de-de." For rank tracking, competitive monitoring, or agent grounding, the results page itself is the product, so you need a scraper that reads it and hands back structure. That's this Actor's whole job.
What the DuckDuckGo scraper returns
The DuckDuckGo Scraper returns each results page as one JSON item containing every SERP block: organic listings with ranking positions, plus ads, knowledge graph, news, inline media, and related searches.
| Field | Example | Notes |
|---|---|---|
| Position | 3 |
Rank within the organic listings |
| Title | The Siliconimist Podcast |
Result headline |
| URL | https://siliconimist.com/ |
Target link for domain matching |
| Description | A podcast about the chip industry... |
SERP snippet |
| Displayed host | siliconimist.com |
With favicon reference |
| Publication date | 2026-06-30 |
When DuckDuckGo shows one |
Sitelinks and rich-snippet content ride along on organic entries, news items carry sources and timestamps, and the knowledge panel arrives as its own block when the query triggers one.
Who this is for
SEO folks who want rank data without personalization noise. Comms and research teams doing news monitoring on brand or topic terms. And agent builders who want a private-flavored web search tool their LLM can call, which is where the MCP angle below comes in.
The manual way, and where it breaks
DuckDuckGo looks scraper-friendly until you try to keep a scraper alive. The HTML endpoint returns a stripped page that omits most SERP blocks, the full page renders through JavaScript, and sustained request patterns hit rate limiting like anywhere else. Regional results need the right localization pair, date filtering hides behind terse URL parameters, and the markup drifts. I wrote the quick-and-dirty version years ago for a side project; it lasted three weeks, which is about average for quick-and-dirty SERP parsers.
The faster way: run the DuckDuckGo Scraper
Apify Console
- Open the DuckDuckGo Scraper and click Try for free.
- Enter a
query, pick alocalizationlikeus-en, and setmax_pages. - Run it and export the results as JSON or CSV.
REST
curl -X POST "https://api.apify.com/v2/acts/johnvc~DuckDuckGo-Scraper-for-serp-rankings/runs?token=YOUR_APIFY_TOKEN" \
-H "Content-Type: application/json" \
-d '{ "query": "best mechanical keyboard", "localization": "us-en", "max_pages": 2 }'
Run endpoints and dataset retrieval are covered in the Apify API docs.
Check rankings in Python
from apify_client import ApifyClient
client = ApifyClient("YOUR_APIFY_TOKEN")
run = client.actor("johnvc/DuckDuckGo-Scraper-for-serp-rankings").call(
run_input={
"query": "pfas free cookware",
"localization": "us-en",
"max_pages": 2,
}
)
for page in client.dataset(run["defaultDatasetId"]).iterate_items():
for result in page.get("organic_results", []):
print(result.get("position"), result.get("title"), result.get("url"))
Match url against your domain and you've got an unpersonalized rank check you can trust between runs.
Find where your domain ranks
The task Check your domain rankings on DuckDuckGo is that Python loop productized: keyword in, position out, no code required.
Track niche visibility, podcast edition
Check your podcast search rankings on DuckDuckGo applies the same run to a discovery problem most podcasters never measure: whether your show surfaces when someone searches its topic.
Monitor the news blocks
Monitor DuckDuckGo news for a topic leans on the date_filter input (d for the past day, w for the week, or a custom range) to pull fresh coverage with sources and timestamps, which is news monitoring with a one-line config.
Straight to CSV
Scrape DuckDuckGo search results to CSV is the export-and-open-in-Excel path for anyone allergic to JSON.
DuckDuckGo MCP: private web search for Claude
This is the setup that gets the most questions. Registered through Apify's MCP server, the Actor becomes a web-search tool that Claude, Claude Code, and Cursor can call, grounding answers in live, unpersonalized SERPs. The task Add DuckDuckGo web search to Claude via MCP walks through the configuration, and you can read more about Claude at claude.ai.
FAQ about the DuckDuckGo scraper
Is there a free DuckDuckGo API, or do I need a scraper?
The free public endpoints cover instant answers, not ranked results. For positions, ads, news blocks, and the knowledge panel you need a scraper; this one bills per page rather than per month.
What does the DuckDuckGo scraper cost to run?
Roughly a cent per results page, plus a fraction-of-a-cent setup fee per run. The default max_pages of 2 keeps a keyword check around two cents, and free Apify credit covers early runs entirely.
How do I turn this scraper into a DuckDuckGo MCP tool?
Connect Apify's MCP server to your client, enable the Actor, and it appears as a callable search tool in Claude, Claude Code, or Cursor. The MCP task linked above documents the exact config block.
Can I schedule the scraper for daily rank and news monitoring?
Yes. Save each keyword as a task, attach an Apify schedule, and you accumulate dated SERP snapshots you can diff for position moves or fresh coverage. Start from the DuckDuckGo Scraper.
Is a DuckDuckGo scraper representative of my Google rankings?
No, and that's not the goal. DuckDuckGo runs its own result mix, and its market share is a fraction of Google's. What it offers is consistency: no personalization means clean baselines, and for privacy-minded audiences it's the SERP that actually matters.
More from Truffle Pig Data
I've covered this Actor from other angles: DuckDuckGo Search API for AI Agents on Medium, the LinkedIn version, and the Peerlist walkthrough on checking your site's rankings. For other engines with the same JSON treatment, there's the Yandex Search API, the Baidu Search Scraper, and the Naver Search API.
Wrapping up
Unpersonalized SERPs are underrated infrastructure: stable enough to measure, private enough to hand to an agent. Run the DuckDuckGo Scraper on one keyword and see where you actually stand.
Top comments (0)