Apify duckduckgo mcp serp research
Skill johnisanerd/claude-skill-duckduckgo-mcp-serp-research/apify-duckduckgo-mcp-serp-research
Claude/agent skill: DuckDuckGo SERP research and rank checking over MCP. Installs via npx skills add.
npx -y skills add johnisanerd/claude-skill-duckduckgo-mcp-serp-research --skill apify-duckduckgo-mcp-serp-researchAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
3 things to look at
- 20 days oldThe repository was created 20 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
Check where a site ranks on DuckDuckGo and research a live SERP from an AI agent, using the Apify DuckDuckGo Scraper Actor (johnvc/DuckDuckGo-Scraper-for-serp-rankings) as a hosted duckduckgo mcp tool. Run a query, read the ranked organic_results rows (position, title, link, snippet, favicon), find a domain's position, list the competitors above it, and repeat the query across regions or date windows to see how a privacy-first engine ranks differently from Google. Use when the user asks about duckduckgo mcp, wants to check a DuckDuckGo ranking, see where a site sits on DuckDuckGo, compare competitor visibility on DuckDuckGo, watch a position over time, or ground an agent's answer in live DuckDuckGo results instead of training data. 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
8.2 KB, ~2.0k tokens by cl100k_base, as published. Nobody here has run it
DuckDuckGo MCP: Rank Checking and SERP Research
Point an agent at a live DuckDuckGo SERP and answer the questions people actually ask about it. Where does my domain rank for this term? Who sits above me? Does that change in the UK, or in Germany, or if I only count results from the past month?
DuckDuckGo pulls from a different index than Google, so a site that ranks well on one often does not on the other. This skill turns that gap into something you can measure.
When to use this skill
- The user asks about "DuckDuckGo MCP" or wants a DuckDuckGo tool their agent can call.
- They want to check where a domain ranks on DuckDuckGo for a keyword.
- They want to see which competitors outrank them on DuckDuckGo, and with what page titles.
- They want to compare the same query across regions, or before and after a content change.
- They want an agent to ground an answer in live search results rather than in what it remembers.
Not for: bulk SERP exports and pipeline work (use the companion DuckDuckGo scraper skill), or Google, Yandex, and Baidu rankings (see references/actor-index.md).
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).
Connect it as an MCP tool
The Actor is MCP-ready. Add the hosted server URL to Claude, Cursor, or any MCP client:
https://mcp.apify.com/?tools=actors,docs,johnvc/DuckDuckGo-Scraper-for-serp-rankings
MCP setup docs: https://docs.apify.com/platform/integrations/mcp
Once connected, prompts like these work directly:
- "Where does example.com rank on DuckDuckGo for 'privacy focused search engine'?"
- "Show me the top ten DuckDuckGo results for 'open source CRM' in the UK and flag anyone I compete with."
- "Run that same query restricted to the past month and tell me what changed."
Workflow
- Fix the query and the market. One keyword per run. Set
localizationto the region and language you care about,us-enby default,uk-en,de-de,fr-frand 38 more available. - Decide the depth.
max_pages1 is enough for a top-of-page check. Use 2 for a top-50-ish read. Deeper only if the domain is genuinely buried. - Run the Actor and take the single page item back.
- Find the position. Walk
organic_resultsand match the target domain against each row'slink. The row'spositionis the rank on that page. If you paginated, keeppage_numberso you can report the page as well as the position. - Read the neighbourhood. The rows above the target, with their
titleandsnippet, are the pages you are actually losing to. Theirtitletext is usually the fastest signal for what the engine thinks the query means. - Repeat to compare. Same query, different
localization, gives a regional read. Same query withdate_filterset tomor an explicit range gives a freshness read. Same query re-run later gives movement.
Rank check with the Apify CLI
Top page of results for a keyword, US English:
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-mcp-serp-research \
2>/dev/null
Same keyword in the UK, two pages deep, for a wider rank check:
apify actors call "johnvc/DuckDuckGo-Scraper-for-serp-rankings" -i '{"query":"privacy focused search engine","localization":"uk-en","max_pages":2}' \
--json \
--user-agent apify-awesome-skills/apify-duckduckgo-mcp-serp-research \
2>/dev/null
Fresh results only, past month, to see what recently published pages are winning:
apify actors call "johnvc/DuckDuckGo-Scraper-for-serp-rankings" -i '{"query":"best password manager","date_filter":"m","max_pages":1}' \
--json \
--user-agent apify-awesome-skills/apify-duckduckgo-mcp-serp-research \
2>/dev/null
Every call carries the three flags this repo expects: --json, --user-agent apify-awesome-skills/apify-duckduckgo-mcp-serp-research, and 2>/dev/null.
What comes back (one item per page)
Confirmed on a live run. Each dataset item is a whole page, and the ranked rows live in a nested array on it.
organic_resultsarray. Every row hasposition,title,link,snippet,favicon. Rows carrydateanddate_rawwhen DuckDuckGo shows a published date (9 of 11 rows on the test query).- Run echo:
query,localization,safe_search,max_pages,search_timestamp. - Counters:
total_results_found,pages_processed,page_number. search_metadata:localization,localization_name,safe_search,safe_search_description,max_pages,pagination_limit_reached.pagination_info:total_pages,max_pages_set,pagination_stopped_by_limit, andresults_per_pagewithfirst_pageandsubsequent_pages.ads,knowledge_graph,news_results,inline_images,inline_videos,related_searchescome back as arrays on every item and fill in only when DuckDuckGo renders those blocks. All six were empty for the informational test query.
search_timestamp is what makes a series comparable. Store it with every reading.
Reading a rank honestly
- A position is a snapshot for one query, one region, one moment. Two readings do not make a trend.
- Page size is not uniform. The live run reported 11 results on the first page and 50 on subsequent pages, so never compute a global rank by multiplying
page_numberby a fixed page size. Useresults_per_pageor just concatenate the arrays in order. - If the domain does not appear at all, say "not found in the first N results", not "not ranking". Absence within
max_pagesis not absence from the index. - DuckDuckGo rankings are not Google rankings. Do not present one as a proxy for the other.
- A missing
dateon a row means DuckDuckGo did not show one, not that the page is old.
Cost
Pay per event: a fractions-of-a-cent setup fee per run plus a per-page fee. A one-page rank check costs about a penny, so daily tracking of a small keyword set is cheap. The arithmetic and confirmation thresholds are in references/gotchas.md.
Troubleshooting
- Domain not in
organic_results: raisemax_pagesto 2, then stop. Deeper pages rarely change a decision. - Positions shifted with no content change: normal SERP movement. Re-read before reporting a drop.
- Wrong-country results:
localizationis a combined region and language code, so settingde-dealso switches the language to German. - Rejected
date_filter: used,w,m,y, or exactlyYYYY-MM-DD..YYYY-MM-DD.
See references/gotchas.md for cost guardrails and error recovery, and references/actor-index.md for the Actor routing table.
Related search Actors
- DuckDuckGo scraper (bulk SERP export, 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
What ships with it: 2 files
6.1 KB alongside SKILL.md
references/
- actor-index.md2.1 KB
- gotchas.md4.0 KB