| name | ddg-search |
| description | DuckDuckGo HTML search scraper CLI with JSON, CSV, OpenSearch, markdown, and compact outputs. |
| homepage | https://github.com/camohiddendj/ddg-search |
| metadata | {"openclaw":{"emoji":"🦆","requires":{"bins":["ddg-search"]},"install":[{"id":"node","kind":"node","package":"ddg-search","bins":["ddg-search"],"label":"Install ddg-search CLI (npm)"}]}} |
ddg-search
Search DuckDuckGo from the command line. Results go to stdout; progress goes to stderr.
Quick reference
ddg-search "query"
ddg-search -f compact "query"
ddg-search -f jsonl "query"
ddg-search -n 10 "query"
ddg-search -p 2 -f json "query"
ddg-search -r us-en -t w "recent topic"
ddg-search -p 0 "query"
Options
| Flag | Long | Description | Default |
|---|
-f | --format | Output format: json, jsonl, csv, opensearch, markdown, compact | json |
-p | --pages | Max pages to scrape (0 = unlimited) | 5 |
-n | --max-results | Stop after this many results | all |
-r | --region | Region code (e.g. us-en, uk-en) | all regions |
-t | --time | Time filter: d (day), w (week), m (month), y (year) | none |
Choosing a format
compact: Use for feeding results into an LLM. Minimal tokens, no JSON overhead.
jsonl: Use when piping to line-oriented tools or streaming processors.
json: Use when you need structured data with OpenSearch metadata, zero-click answers, and spelling corrections. Pipe through jq for field extraction (e.g. | jq '.items[].link').
csv: Use for spreadsheets or tabular analysis.
markdown: Use for human-readable output or embedding in documents.
opensearch: Use when producing Atom XML feeds.
Extracting URLs from JSON output
ddg-search "query" | jq -r '.items[].link'
Notes
- DuckDuckGo may trigger bot detection. The tool stops early and returns whatever results were collected.
- Random delays (800–2900 ms) are inserted between page fetches automatically.
- Progress messages appear on stderr, so redirecting stdout captures only results.