ParseForge Scrapers

DuckDuckGo Search Results Scraper

parseforge/duckduckgo-search-scraper

MARKETINGBusinessOther

Scrapes DuckDuckGo search results for a list of queries and returns each result as a flat row with title, URL, description, and rank position. Supports region, time range, and SafeSearch filters.

Run this scraper See the API call
Total users
9
Monthly active
1
Total runs
491
Bookmarked
0
Rating
Not rated yet
Last modified
9 days ago

Overview

ParseForge

DuckDuckGo Search Results Scraper

Scrape DuckDuckGo search results for any keyword, up to a million per run. Every result comes with its title, URL, description, and rank position. Filter by region, time range, and SafeSearch level. Export to CSV, JSON, Excel, or XML.

DuckDuckGo's privacy-first design means there is no official search API to apply for. This Actor reads the public search result pages directly, so you can collect organic listings for any keyword without registration or rate-limit headaches. It returns a clean, flat dataset of titles, URLs, descriptions, and ranks, ready for your SEO toolchain or content research.

Who uses it What they scrape DuckDuckGo for
SEO specialists Track keyword rankings and featured snippet appearances on DuckDuckGo.
Market researchers Map the competitive landscape for a set of industry terms.
Content strategists Discover what content ranks for target topics to find content gaps.
Brand managers Monitor brand mentions and sentiment across DuckDuckGo's organic results.

What it does

This Actor collects DuckDuckGo search results for a list of queries and returns each result as a flat row with its title, URL, description, and position.

  • ๐ŸŒ Region targeting: 34 region codes including us-en, uk-en, de-de, br-pt, and jp-jp to see results as a local user would.
  • โฑ๏ธ Time range filter: restrict results to the past day, week, month, or year to focus on fresh content.
  • ๐Ÿ”’ SafeSearch control: set filtering to off, moderate, or strict to match your research needs.
  • ๐Ÿ“Š Bulk query input: paste a list of keywords and collect results for all of them in a single run.

Results export to CSV, JSON, Excel, or XML, or straight from the API.

What you can do with DuckDuckGo data

๐Ÿ“ˆ Track keyword rankings on DuckDuckGo.

An SEO agency runs a weekly scrape for 500 client keywords with region set to us-en and time range w to report on ranking movements and new competitors.

๐ŸŒŽ Compare search results across regions.

A market researcher runs the same query against us-en, de-de, and br-pt to understand how local content and competitors differ by market.

๐Ÿ“ Find content gaps for a topic cluster.

A content strategist scrapes the top 50 results for a head term, then analyzes titles and descriptions to identify subtopics the existing content library does not cover.

๐Ÿ›ก๏ธ Monitor brand presence on a private search engine.

A brand manager runs a daily scrape for the company name with SafeSearch off to catch any unexpected results appearing on DuckDuckGo.

Why choose this scraper

What you get
No API key needed Start scraping immediately without registering an application or managing OAuth tokens.
Fixed flat schema Every result row has the same columns: title, URL, description, and rank. No nested objects to flatten.
Localized results Switch between 34 region codes to see exactly what a user in Germany, Brazil, or Japan sees.
Freshness control Limit results to the past day, week, month, or year to analyze only recent content.

How it compares

This Actor focuses on delivering clean, flat organic search results at scale, while other DuckDuckGo scrapers may include additional verticals or structured data extracts.

Feature ParseForge DuckDuckGo Scraper (56 users) DuckDuckGo Scraper (104 users)
Organic web results Yes Yes Yes
Region filtering (34 codes) Yes Not listed Not listed
Time range filter (day, week, month, year) Yes Not listed Not listed
SafeSearch control Yes Not listed Not listed
Ads extraction Not listed Yes Not listed
Knowledge graph extraction Not listed Yes Not listed

Configure the run

Drive the Actor with a list of search queries, and optionally narrow results by region, time range, and SafeSearch level so only the most relevant rows land in your dataset. The Input tab lists every parameter.

A first run with the defaults:

{
  "maxItems": 10,
  "queries": [
    "apify scraper"
  ],
  "region": "us-en",
  "safeSearch": "moderate"
}

A larger pull:

{
  "maxItems": 200,
  "queries": [
    "apify scraper"
  ],
  "region": "us-en",
  "safeSearch": "moderate"
}

Pricing

Pay-per-result: $0.011 per result collected. You pay only for the results written to your dataset.

Results collected Approximate cost
100 results $1.10
1,000 results $11.00
10,000 results $110.00

New Apify accounts start with $5 in free credit.

Free users

Free-plan runs return up to 10 results as a preview. Upgrade your Apify plan to collect up to 1,000,000 results per run.

Run it

  1. Create a free Apify account with $5 in credit.
  2. Open the DuckDuckGo Search Results Scraper.
  3. Set your inputs and any filters, then click Start.
  4. Export the results as CSV, Excel, JSON, or XML from the Dataset tab.

Run it programmatically through the Apify API (run-sync-get-dataset-items) or the ApifyClient for JavaScript and Python.

Use with AI agents (MCP)

Give an AI agent live access to DuckDuckGo through the Model Context Protocol. Add the Actor to Claude, Cursor, or any MCP client:

claude mcp add --transport http apify "https://mcp.apify.com?tools=parseforge/duckduckgo-search-scraper"

Then prompt it in plain language to run the scraper and read back the results.

Troubleshooting

Why am I getting fewer results than my maxItems setting?

DuckDuckGo may return fewer results than requested for some queries, especially very specific or long-tail keywords. Try a broader query or remove the time range filter to see if more results become available.

Why do results look different from what I see in my browser?

Check your region setting. DuckDuckGo personalizes results by country. Set the region code to match the location you want to emulate, such as us-en for the United States.

The Actor is running but not collecting any results.

DuckDuckGo may be showing a CAPTCHA or blocking the request. Try reducing the number of concurrent queries, adding a delay between requests, or using Apify proxy to rotate IP addresses.

Can I get more than a few hundred results per query?

DuckDuckGo typically caps its infinite scroll at a few hundred results per query. To collect more data, try breaking your topic into multiple, more specific queries and running them together.

Why are some results missing a description?

DuckDuckGo sometimes shows results without a description snippet, especially for certain site types or very new pages. This is normal behavior from the search engine itself.

FAQ

Question Answer
Does this Actor use the DuckDuckGo API? No. It reads the public HTML search result pages directly, so you do not need an API key or any registration.
How many results can I get per query? DuckDuckGo's infinite scroll typically returns several hundred results per query. The Actor collects until it hits your maxItems limit or exhausts the available results.
Can I scrape image or video results? This Actor focuses on the standard web search results. It does not extract image, video, or news verticals.
What does the region code wt-wt mean? wt-wt is DuckDuckGo's code for no region filtering. It returns a global mix of results without localization.
Is SafeSearch enabled by default? Yes, the default is moderate. You can change it to off or strict in the input settings.
Can I run multiple queries in one Actor run? Yes. Add as many queries as you need to the queries array, and the Actor will process them sequentially in a single run.
Does this Actor handle DuckDuckGo's infinite scroll? Yes. It automatically scrolls the results page to load more listings until it reaches your requested maximum or no more results are available.
What export formats are supported? You can export your dataset in CSV, JSON, Excel, or XML from the Apify platform.
Can I filter results by date? Yes. Use the timeRange field to restrict results to the past day (d), week (w), month (m), or year (y).
Is there a limit on how many queries I can run? There is no hard limit on the number of queries. The maxItems field controls the total results collected across all queries in a run.

Related actors

Browse the full ParseForge collection for more scrapers.

๐Ÿ†˜ Need help? Email parseforge@protonmail.com with your run ID, your input, and what you expected.

โš ๏ธ Disclaimer. This Actor is unofficial and is not affiliated with, endorsed by, or sponsored by DuckDuckGo. It collects only publicly available data. You are responsible for using the collected data in compliance with the source's terms of service and applicable data-protection laws, including GDPR, CCPA, and PIPL. Do not use it to collect personal data unlawfully.

Input

FieldTypeWhat it doesDefault
maxItems integer How many search results to collect per run. 10
queries array Keywords to search on DuckDuckGo. Each query produces multiple result rows. ["apify scraper"]
region string (44 options) DuckDuckGo region code. Examples: `us-en` (United States, English), `uk-en`, `de-de`, `es-es`, `mx-es`, `br-pt`, `wt-wt` (no region). us-en
timeRange string (5 options) Restrict to recent results: `d` (past day), `w` (past week), `m` (past month), `y` (past year). Empty = any time. not set
safeSearch string (3 options) DuckDuckGo SafeSearch level: `off`, `moderate`, `strict`. moderate

Pricing

from $8.25 per 1,000 results

Charged forWhat it isPrice each
Item One row in the default dataset. $0.00825 to $0.011

Tiered: the lower figure is the price on a higher Apify plan. Billing and the free credit live on Apify.

API

One POST returns the dataset directly. Same shape for every scraper in the library, so swapping the slug is the only change.

POST ยท run and get results
curl -X POST "https://api.apify.com/v2/acts/parseforge~duckduckgo-search-scraper/run-sync-get-dataset-items?token=$APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "helloWorld": 123
  }'

Examples

Input that runs as-is.

input.json
{
  "helloWorld": 123
}

Reviews

No reviews yet. Be the first.

Issues

We build and maintain this scraper, so a problem with it comes to us. Report it on the Apify listing and the thread stays attached to the scraper where the next person can find it: open an issue.

Broken and urgent, or you would rather not post in public? Write to parseforge@protonmail.com and it reaches the people who wrote it.

Related scrapers

Run DuckDuckGo Search Results Scraper on Apify All scrapers