A visual DuckDuckGo query builder built with Streamlit — designed for data professionals. Compose advanced search queries by combining operators, run them across multiple sources, compare results side by side, and export everything to CSV or JSON.

| Feature |
Description |
| 🛠️ Visual query builder |
Add operator blocks from the sidebar, reorder with ↑ ↓ arrows, edit values |
| 🎯 Query templates |
Pre-built stacks for datasets, papers, GitHub repos, API docs, tutorials, and files |
| 💾 Saved queries |
Name and save any operator stack, reload it later in one click |
| ⚖️ Side-by-side compare |
Build two independent queries and compare results in two columns |
| 🌐 Batch search |
Run one query across up to 10 data/research sites simultaneously |
| 📚 Search history |
Last 50 searches auto-saved with timestamp and result count; reload any past query |
| ⬇️ Export |
Download results as CSV or JSON per query or per batch site |
| 🔎 Domain filter |
Filter result cards by domain without re-searching |
| ♻️ Deduplicate |
Strip duplicate URLs from result sets |
| 🕐 Date range filter |
Restrict results to past day / week / month / year |
| 🌍 Region filter |
Target results by country/language |
| Operator |
Example |
Description |
| 🔍 Keyword |
python tutorial |
Plain search term |
🌐 site: |
site:github.com |
Restrict to a domain |
💬 "Exact phrase" |
"open source software" |
Words must appear together |
🚫 -Exclude |
-spam |
Remove results with this word |
✅ +Include |
+free |
Force-include a word |
📄 filetype: |
filetype:pdf |
Match a specific file type |
🔤 intitle: |
intitle:login |
Word must be in the page title |
🔗 inurl: |
inurl:admin |
Word must be in the URL |
🔄 related: |
related:nytimes.com |
Find similar websites |
⚡ OR |
cat OR dog |
Match either term |
🌟 * Wildcard |
"how to * python" |
Wildcard inside a quoted phrase |
Templates load a pre-built operator stack. Fill in the keyword block and search immediately.
| Template |
Searches on |
| 📊 Find Dataset |
Kaggle, Hugging Face, data.gov |
| 📄 Find Research Paper |
arXiv, Papers With Code |
| 💻 Find GitHub Repo |
GitHub |
| 📁 Find CSV / Excel File |
Any site, filetype:csv or xlsx |
| 📖 Find API Docs |
Pages with "API" or "documentation" in title |
| 🎓 Find Tutorial |
Pages with "tutorial" in title, excluding paid |
| Site |
Domain |
| 🤗 Hugging Face |
huggingface.co |
| 📊 Kaggle |
kaggle.com |
| 📄 Papers With Code |
paperswithcode.com |
| 🔬 arXiv |
arxiv.org |
| 💻 GitHub |
github.com |
| 🏛️ data.gov |
data.gov |
| 🌐 UCI ML Repo |
archive.ics.uci.edu |
| 🔷 Stack Overflow |
stackoverflow.com |
| 📰 Medium |
medium.com |
| 📝 Towards Data Science |
towardsdatascience.com |
| Label |
Code |
| 🌍 Worldwide |
wt-wt |
| 🇺🇸 USA |
us-en |
| 🇬🇧 UK |
uk-en |
| 🇩🇪 Germany |
de-de |
| 🇫🇷 France |
fr-fr |
| 🇯🇵 Japan |
jp-ja |
| 🇧🇷 Brazil |
br-pt |
| 🇮🇳 India |
in-en |
| 🇦🇺 Australia |
au-en |
| 🇨🇦 Canada |
ca-en |
- Python 3.10+
- uv (recommended) — or any virtual environment tool
git clone https://github.com/49mg/easy-search.git
cd easy-search
# Install dependencies with uv
uv sync
Or with pip:
python -m venv .venv
source .venv/bin/activate
pip install streamlit ddgs duckduckgo-search
uv run streamlit run app.py
Then open http://localhost:8501 in your browser.
Sidebar
The sidebar has five collapsible sections — all visible at once:
| Section |
Default |
Purpose |
| ➕ Add Operators |
Open |
Click Add next to any operator to add it to the Builder |
| 🎯 Query Templates |
Collapsed |
One-click pre-built operator stacks |
| ⚙️ Search Filters |
Collapsed |
Date range, region, deduplicate toggle |
| 💾 Saved Queries |
Collapsed |
Save/load named operator stacks |
| 📖 Operator Reference |
Collapsed |
Description, example, and tip for every operator |
- Add operators from the sidebar ➕ section, or open 🎯 Templates and load a full stack
- Edit values — fill in the input field on each operator card
- Reorder — use ↑ ↓ arrows to change operator positions
- Set filters — open ⚙️ Search Filters to set date range, region, and deduplication
- Search — adjust the max results slider (1–30), then click Search
- Copy query — the Query Preview box has a built-in copy button in its top-right corner
- Export results as CSV or JSON with the download buttons above the result cards
— Both formats contain three columns/fields: title, url, snippet
- Filter by domain — type a domain (e.g.
github.com) to narrow displayed results without re-searching
- Build Query A and Query B independently in two columns
- Each side has its own template loader, operator picker, full builder, and results with export
- Enter a base query (e.g.
sentiment analysis dataset)
- Select one or more target sites from the multiselect
- Set Results per site (1–10) with the slider
- Click Run Batch Search — searches run concurrently (up to 5 in parallel) and results are grouped by site
- Export each site's results individually as CSV or JSON
- Every search from the Builder tab is automatically saved (last 50)
- Click Reload to restore any past query's blocks back into the Builder
- Click 🗑️ to delete individual entries, or Clear history to wipe all
easy-search/
├── app.py # Streamlit UI — all features
├── pyproject.toml # Project metadata and dependencies
├── uv.lock # Locked dependency versions
└── README.md
| Package |
Role |
| Streamlit |
Web UI framework |
| ddgs |
DuckDuckGo search API |
MIT — see LICENSE for details.