duckduckgo-search
Free web search via DuckDuckGo — text, news, images, videos. No API key needed. Prefer the `ddgs` CLI when installed; use the Python DDGS library only after verifying that `ddgs` is available in the c
Free web search via DuckDuckGo — text, news, images, videos. No API key needed. Prefer the `ddgs` CLI when installed; use the Python DDGS library only after verifying that `ddgs` is available in the c
Real data. Real impact.
Emerging
Developers
Per week
Excellent
Skills give you superpowers. Install in 30 seconds.
Free web search using DuckDuckGo. No API key required.
Preferred when
web_search is unavailable or unsuitable (for example when FIRECRAWL_API_KEY is not set). Can also be used as a standalone search path when DuckDuckGo results are specifically desired.
Check what is actually available before choosing an approach:
# Check CLI availability command -v ddgs >/dev/null && echo "DDGS_CLI=installed" || echo "DDGS_CLI=missing"
Decision tree:
ddgs CLI is installed, prefer terminal + ddgsddgs CLI is missing, do not assume execute_code can import ddgsddgs first in the relevant environmentImportant runtime note:
execute_code are separate runtimesexecute_code can import ddgsexecute_codeInstall
ddgs only when DuckDuckGo search is specifically needed and the runtime does not already provide it.
# Python package + CLI entrypoint pip install ddgs # Verify CLI ddgs --help
If a workflow depends on Python imports, verify that same runtime can import
ddgs before using from ddgs import DDGS.
Use the
ddgs command via terminal when it exists. This is the preferred path because it avoids assuming the execute_code sandbox has the ddgs Python package installed.
# Text search ddgs text -q "python async programming" -m 5 # News search ddgs news -q "artificial intelligence" -m 5 # Image search ddgs images -q "landscape photography" -m 10 # Video search ddgs videos -q "python tutorial" -m 5 # With region filter ddgs text -q "best restaurants" -m 5 -r us-en # Recent results only (d=day, w=week, m=month, y=year) ddgs text -q "latest AI news" -m 5 -t w # JSON output for parsing ddgs text -q "fastapi tutorial" -m 5 -o json
| Flag | Description | Example |
|---|---|---|
| Query — required | |
| Max results | |
| Region | |
| Time limit | (week) |
| Safe search | |
| Output format | |
Use the
DDGS class in execute_code or another Python runtime only after verifying that ddgs is installed there. Do not assume execute_code includes third-party packages by default.
Safe wording:
execute_code with ddgs after installing or verifying the package if needed"Avoid saying:
execute_code includes ddgs"execute_code"Important:
max_results must always be passed as a keyword argument — positional usage raises an error on all methods.
Best for: general research, companies, documentation.
from ddgs import DDGS with DDGS() as ddgs: for r in ddgs.text("python async programming", max_results=5): print(r["title"]) print(r["href"]) print(r.get("body", "")[:200]) print()
Returns:
title, href, body
Best for: current events, breaking news, latest updates.
from ddgs import DDGS with DDGS() as ddgs: for r in ddgs.news("AI regulation 2026", max_results=5): print(r["date"], "-", r["title"]) print(r.get("source", ""), "|", r["url"]) print(r.get("body", "")[:200]) print()
Returns:
date, title, body, url, image, source
Best for: visual references, product images, diagrams.
from ddgs import DDGS with DDGS() as ddgs: for r in ddgs.images("semiconductor chip", max_results=5): print(r["title"]) print(r["image"]) print(r.get("thumbnail", "")) print(r.get("source", "")) print()
Returns:
title, image, thumbnail, url, height, width, source
Best for: tutorials, demos, explainers.
from ddgs import DDGS with DDGS() as ddgs: for r in ddgs.videos("FastAPI tutorial", max_results=5): print(r["title"]) print(r.get("content", "")) print(r.get("duration", "")) print(r.get("provider", "")) print(r.get("published", "")) print()
Returns:
title, content, description, duration, provider, published, statistics, uploader
| Method | Use When | Key Fields |
|---|---|---|
| General research, companies | title, href, body |
| Current events, updates | date, title, source, body, url |
| Visuals, diagrams | title, image, thumbnail, url |
| Tutorials, demos | title, content, duration, provider |
DuckDuckGo returns titles, URLs, and snippets — not full page content. To get full page content, search first and then extract the most relevant URL with
web_extract, browser tools, or curl.
CLI example:
ddgs text -q "fastapi deployment guide" -m 3 -o json
Python example, only after verifying
ddgs is installed in that runtime:
from ddgs import DDGS with DDGS() as ddgs: results = list(ddgs.text("fastapi deployment guide", max_results=3)) for r in results: print(r["title"], "->", r["href"])
Then extract the best URL with
web_extract or another content-retrieval tool.
ddgs returns snippets, not full page content. Use web_extract, browser tools, or curl for the full article/page.ddgs versions. Use .get() for optional fields to avoid KeyError.ddgs install in terminal does not automatically mean execute_code can import it.| Problem | Likely Cause | What To Do |
|---|---|---|
| CLI not installed in the shell environment | Install , or use built-in web/browser tools instead |
| Python runtime does not have the package installed | Do not use Python DDGS there until that runtime is prepared |
| Search returns nothing | Temporary rate limiting or poor query | Wait a few seconds, retry, or adjust the query |
CLI works but import fails | Terminal and are different runtimes | Keep using CLI, or separately prepare the Python runtime |
max_results is keyword-only: ddgs.text("query", 5) raises an error. Use ddgs.text("query", max_results=5).command -v ddgs before using it.execute_code can import ddgs: from ddgs import DDGS may fail with ModuleNotFoundError unless that runtime was prepared separately.ddgs (previously duckduckgo-search). Install with pip install ddgs.-q and -m (CLI): -q is for the query, -m is for max results count.ddgs returns nothing, it may be rate-limited. Wait a few seconds and retry.Validated examples against
ddgs==9.11.2 semantics. Skill guidance now treats CLI availability and Python import availability as separate concerns so the documented workflow matches actual runtime behavior.MIT
mkdir -p ~/.hermes/skills/research/duckduckgo-search && curl -o ~/.hermes/skills/research/duckduckgo-search/SKILL.md https://raw.githubusercontent.com/NousResearch/hermes-agent/main/optional-skills/research/duckduckgo-search/SKILL.md1,500+ AI skills, agents & workflows. Install in 30 seconds. Part of the Torly.ai family.
© 2026 Torly.ai. All rights reserved.