Apify duckduckgo scraper
Skill johnisanerd/claude-skill-duckduckgo-scraper/apify-duckduckgo-scraper
Claude/agent skill: scrape DuckDuckGo search results into structured JSON. Installs via npx skills add.
npx -y skills add johnisanerd/claude-skill-duckduckgo-scraper --skill apify-duckduckgo-scraperAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
3 things to look at
- 18 days oldThe repository was created 18 days ago. New is not bad, but a brand new repository carrying a familiar-sounding name is the shape a typosquat arrives in, and there has been no time for anyone else to find a problem with it.
- no licenseNo license file was found in the repository. Code published without one is not open source by default, so using it at work is a question for whoever answers licensing questions where you are.
- 0 stars0 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
What its author says it does
Copied from the file, not written here
Scrape DuckDuckGo search results into structured JSON with the Apify DuckDuckGo Scraper Actor (johnvc/DuckDuckGo-Scraper-for-serp-rankings). One query returns a page item holding organic_results rows with position, title, link, snippet, favicon, and a date when DuckDuckGo shows one, plus page metadata and slots for ads, knowledge graph, news, inline images, inline videos, and related searches. Localize across 42 region and language codes, filter by date, set safe search, and cap pages to control spend. Use when the user wants a duckduckgo scraper, duckduckgo scraping, DuckDuckGo search results as JSON or CSV, a DuckDuckGo SERP export, or a keyless way to read DuckDuckGo from code. Pay-per-page billing, MCP-ready for Claude and other AI agents.
The file declares its own license as MIT. That is the author’s claim about this one file, and it is not the same thing as the license GitHub reports for the repository, which is listed with the other numbers below.
SKILL.md
7.9 KB, as published. Nobody here has run it
DuckDuckGo Scraper: SERP Results as Structured JSON
A DuckDuckGo scraper that needs no API key and no account with DuckDuckGo. One query returns a page of the DuckDuckGo SERP as JSON, with ranked organic results plus the page metadata you need to paginate and audit the run.
When to use this skill
- The user wants a "DuckDuckGo scraper" or asks about "DuckDuckGo scraping" from code.
- They want DuckDuckGo search results as JSON or CSV for a query or a batch of queries.
- They need a search feed that does not require registering for an official search API key.
- They want results localized to a specific country and language, or filtered to a recent time window.
Not for: Google, Yandex, or Baidu SERPs (each engine has its own Actor, see references/actor-index.md). For rank checking and agent-side research on DuckDuckGo, use the companion DuckDuckGo MCP SERP research skill.
What you get (one dataset item per page)
Each dataset item is one page of results, not one row per link. Confirmed on a live run:
- Query echo and settings:
query,localization,safe_search,max_pages,search_timestamp - Page counters:
total_results_found,pages_processed,page_number search_metadataobject:localization,localization_name,safe_search,safe_search_description,max_pages,pagination_limit_reachedpagination_infoobject:total_pages,max_pages_set,pagination_stopped_by_limit, andresults_per_pagewithfirst_pageandsubsequent_pagesorganic_resultsarray. Every row carriesposition,title,link,snippet,favicon. Rows also carrydateanddate_rawwhen DuckDuckGo shows a published date (9 of 11 rows on the test query).- Additional arrays that come back on every item and fill in when DuckDuckGo shows those blocks for the query:
ads,knowledge_graph,news_results,inline_images,inline_videos,related_searches. They were empty for the plain informational test query.
Flatten organic_results client-side if you want one CSV row per link.
Prerequisites
- Apify account (sign up at https://apify.com?fpr=9n7kx3&fp_sid=skillrepo).
- Authentication via
apify login, or anAPIFY_TOKENenvironment variable (Apify Console, Settings, Integrations).
The Actor
- Store page: https://apify.com/johnvc/DuckDuckGo-Scraper-for-serp-rankings?fpr=9n7kx3&fp_sid=skillrepo
- Actor ID:
johnvc/DuckDuckGo-Scraper-for-serp-rankings - Pricing: a tiny per-run setup fee plus a per-page fee (see
references/gotchas.md).
Run it with the Apify CLI
One page of US English results for a query:
apify actors call "johnvc/DuckDuckGo-Scraper-for-serp-rankings" -i '{"query":"privacy focused search engine","max_pages":1}' \
--json \
--user-agent apify-awesome-skills/apify-duckduckgo-scraper \
2>/dev/null
Two pages of German results from the past week, safe search off:
apify actors call "johnvc/DuckDuckGo-Scraper-for-serp-rankings" -i '{"query":"crm software","localization":"de-de","date_filter":"w","safe":"off","max_pages":2}' \
--json \
--user-agent apify-awesome-skills/apify-duckduckgo-scraper \
2>/dev/null
Confirm live pricing and the input schema before a large batch:
apify actors info "johnvc/DuckDuckGo-Scraper-for-serp-rankings" --json \
--user-agent apify-awesome-skills/apify-duckduckgo-scraper \
2>/dev/null
Every call carries the three flags this repo expects: --json, --user-agent apify-awesome-skills/apify-duckduckgo-scraper, and 2>/dev/null.
Run it from Claude or another AI agent (MCP)
The Actor is MCP-ready. Add the hosted server URL:
https://mcp.apify.com/?tools=actors,docs,johnvc/DuckDuckGo-Scraper-for-serp-rankings
Then ask, for example: "Scrape one page of DuckDuckGo results for 'open source password manager' and list the organic links with their positions." MCP setup docs: https://docs.apify.com/platform/integrations/mcp
Workflow
- Build the query.
queryis the only required field, minimum one character. - Pick the market.
localizationtakes a region and language code such asus-en,uk-en,de-de,fr-fr,ja-jp. Default isus-en. There are 42 codes in the schema. - Narrow if needed.
date_filteracceptsd,w,m,y, or an explicit range like2026-01-01..2026-05-01.safeacceptsstrict,moderate(default), oroff. - Bound the volume.
max_pagesdefaults to 2 and is the cost driver.0means no limit, which is worth avoiding unless the user has agreed to an open-ended spend. - Estimate cost, then run. See
references/gotchas.mdfor the arithmetic and confirmation thresholds. - Read the dataset. Each item is one page. Concatenate
organic_resultsacross items, keepingpage_numberif you need to preserve global ordering.
Inputs
query(string, required): the search termlocalization(enum, 42 region and language codes, defaultus-en)safe(enumstrict,moderate,off, defaultmoderate)date_filter(string):d,w,m,y, orYYYY-MM-DD..YYYY-MM-DDmax_pages(integer 0 to 100, default 2):0means no limitoutput_file(string): also write results to this filename in the run key-value store
Cost
Billing is pay per event: a fractions-of-a-cent setup fee per run plus a per-page fee, so cost tracks max_pages almost exactly. A default two-page run lands around two cents. Live prices and batch thresholds are in references/gotchas.md.
Honest limits
- Results reflect the SERP at crawl time for the chosen
localization. Repeat runs can differ as DuckDuckGo reindexes. - The first page returned fewer rows than later pages on the test run (
results_per_pagereported 11 for the first page and 50 for subsequent pages), so do not assume a fixed page size when computing global positions. ads,knowledge_graph,news_results,inline_images,inline_videos, andrelated_searchesare present on every item but only fill in when DuckDuckGo renders those blocks. Plain informational queries often return all six empty.dateanddate_raware per-row and optional. Treat a missing date as unknown, not as recent.
Troubleshooting
- Empty
organic_results: the query returned nothing for that region. Broaden the query or trylocalizationus-en. - Fewer pages than
max_pages: DuckDuckGo ran out of results. Checkpagination_limit_reachedandpagination_stopped_by_limit. - Rejected
date_filter: the field is pattern-validated. Use a single letter or the exactYYYY-MM-DD..YYYY-MM-DDform. - Unexpected spend:
max_pages0removes the cap. Set an explicit integer for anything unattended.
See references/gotchas.md for cost guardrails and error recovery, and references/actor-index.md for the Actor routing table.
Related search Actors
- DuckDuckGo MCP SERP research (rank checking, the companion skill for this Actor)
- Yandex Search Scraper: https://apify.com/johnvc/Scrape-Yandex?fpr=9n7kx3&fp_sid=skillrepo
- Baidu Search Scraper: https://apify.com/johnvc/Baidu-Search-Scraper?fpr=9n7kx3&fp_sid=skillrepo
- Naver Search API (Korea): https://apify.com/johnvc/naver-search-api?fpr=9n7kx3&fp_sid=skillrepo