Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Search multiple academic databases simultaneously with Findpapers
.claude/skills/brycewang-stanford-findpapers-guide/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-05 | ✗→✓ | ▲ Improved | 12% | 0% |
| case-01 | ✗→✓ | ▲ Improved | 9% | 0% |
| case-02 | ✗→✓ | ▲ Improved | 26% | 0% |
| case-03 | ✗→✓ | ▲ Improved | -7% | 0% |
| case-04 | ✗→✓ | ▲ Improved | -1% | 0% |
Findpapers is a Python tool for searching multiple academic databases simultaneously — arXiv, bioRxiv, IEEE, medRxiv, PubMed, and Scopus — using a single query. It automates the tedious process of running the same search across multiple platforms, deduplicates results, and exports to structured formats for systematic reviews.
bashpip install findpapers
pythonimport findpapers import datetime # Define search query = '([deep learning] AND [medical imaging]) AND NOT [survey]' since = datetime.date(2022, 1, 1) until = datetime.date(2026, 12, 31) # Run search across all databases findpapers.search( outputpath="search_results.json", query=query, since=since, until=until, databases=["arxiv", "pubmed", "ieee", "scopus"], limit_per_database=200, )
python# Boolean operators: AND, OR, NOT # Brackets for grouping # Terms in square brackets # Example: find NLP papers about healthcare query = '[natural language processing] AND ([healthcare] OR [clinical])' # Example: exclude surveys query = '[transformer] AND [attention] AND NOT [survey]' # Example: specific domain query = '[reinforcement learning] AND [robotics] AND [simulation]'
python# Load previous search search = findpapers.load("search_results.json") # Interactive refinement (in Jupyter/terminal) findpapers.refine( inputpath="search_results.json", categories=["relevant", "maybe", "irrelevant"], ) # Programmatic filtering for paper in search.papers: if paper.citations and paper.citations > 50: paper.selected = True
python# Export to BibTeX findpapers.generate_bibtex( inputpath="search_results.json", outputpath="references.bib", only_selected=True, ) # Export to CSV findpapers.generate_csv( inputpath="search_results.json", outputpath="papers.csv", )
python# Scopus requires an Elsevier API key # IEEE requires an IEEE Xplore API key # arXiv and PubMed are free import os os.environ["SCOPUS_API_TOKEN"] = "your-scopus-key" os.environ["IEEE_API_TOKEN"] = "your-ieee-key"
| Database | API Key | Content | |----------|---------|---------| | arXiv | Not needed | Preprints (CS, physics, math) | | PubMed | Not needed | Biomedical literature | | bioRxiv | Not needed | Biology preprints | | medRxiv | Not needed | Medical preprints | | IEEE | Optional | Engineering and CS | | Scopus | Required | Multi-discipline |
pythonimport findpapers import datetime # Step 1: Define protocol query = '[machine learning] AND [drug discovery]' since = datetime.date(2020, 1, 1) # Step 2: Search findpapers.search( outputpath="slr_search.json", query=query, since=since, limit_per_database=500, ) # Step 3: Remove duplicates (automatic) search = findpapers.load("slr_search.json") print(f"Found {len(search.papers)} unique papers") # Step 4: Screen titles/abstracts findpapers.refine("slr_search.json", categories=["include", "exclude", "uncertain"]) # Step 5: Export included papers findpapers.generate_bibtex("slr_search.json", "included.bib", only_selected=True)
bash# Search from command line findpapers search "search.json" \ --query "[climate change] AND [adaptation]" \ --since 2022-01-01 \ --databases arxiv pubmed # Refine results interactively findpapers refine "search.json" # Export to BibTeX findpapers bibtex "search.json" "refs.bib" --only-selected
| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-05 | fail→pass | 10,972 | 5,430 | -51% | 1 | 1 | 0% | 1,935 | 2,176 | +12% | 0 | 0 | — |
case-01 | fail→pass | 14,408 | 13,036 | -10% | 1 | 1 | 0% | 2,920 | 3,191 | +9% | 0 | 0 | — |
case-02 | fail→pass | 17,610 | 6,482 | -63% | 1 | 1 | 0% | 1,736 | 2,194 | +26% | 0 | 0 | — |
case-03 | fail→pass | 22,118 | 11,674 | -47% | 1 | 1 | 0% | 3,680 | 3,422 | -7% | 0 | 0 | — |
case-04 | fail→pass | 16,657 | 7,400 | -56% | 1 | 1 | 0% | 2,614 | 2,587 | -1% | 0 | 0 | — |
case-06 | fail→pass | 15,046 | 5,903 | -61% | 1 | 1 | 0% | 3,146 | 2,084 | -34% | 0 | 0 | — |
case-07 | fail→pass | 5,430 | 2,574 | -53% | 1 | 1 | 0% | 836 | 1,466 | +75% | 0 | 0 | — |
case-08 | fail→pass | 7,815 | 4,164 | -47% | 1 | 1 | 0% | 1,465 | 1,566 | +7% | 0 | 0 | — |
case-09 | fail→pass | 15,794 | 2,394 | -85% | 1 | 1 | 0% | 2,515 | 1,554 | -38% | 0 | 0 | — |
case-10 | fail→pass | 8,670 | 2,978 | -66% | 1 | 1 | 0% | 1,270 | 1,502 | +18% | 0 | 0 | — |
case-11 | pass→pass | 9,039 | 7,381 | -18% | 1 | 1 | 0% | 1,413 | 2,735 | +94% | 0 | 0 | — |
case-12 | pass→pass | 11,642 | 4,304 | -63% | 1 | 1 | 0% | 1,581 | 1,701 | +8% | 0 | 0 | — |
case-13 | fail→pass | 9,783 | 4,452 | -54% | 1 | 1 | 0% | 1,695 | 1,716 | +1% | 0 | 0 | — |
case-14 | fail→pass | 5,876 | 2,526 | -57% | 1 | 1 | 0% | 937 | 1,440 | +54% | 0 | 0 | — |
case-15 | pass→pass | 11,623 | 4,386 | -62% | 1 | 1 | 0% | 1,994 | 1,781 | -11% | 0 | 0 | — |
case-16 | pass→pass | 5,285 | 2,518 | -52% | 1 | 1 | 0% | 888 | 1,538 | +73% | 0 | 0 | — |
case-17 | fail→pass | 19,782 | 12,675 | -36% | 1 | 1 | 0% | 4,281 | 3,648 | -15% | 0 | 0 | — |
case-18 | fail→pass | 8,120 | 8,241 | +1% | 1 | 1 | 0% | 1,752 | 2,730 | +56% | 0 | 0 | — |
case-19 | pass→pass | 6,777 | 3,830 | -43% | 1 | 1 | 0% | 1,046 | 1,634 | +56% | 0 | 0 | — |
case-20 | pass→pass | 7,836 | 4,505 | -43% | 1 | 1 | 0% | 1,256 | 1,915 | +52% | 0 | 0 | — |
case-21 | fail→pass | 9,368 | 4,266 | -54% | 1 | 1 | 0% | 1,665 | 1,751 | +5% | 0 | 0 | — |
case-22 | pass→pass | 15,374 | 13,904 | -10% | 1 | 1 | 0% | 2,606 | 3,998 | +53% | 0 | 0 | — |
case-23 | pass→pass | 14,166 | 9,614 | -32% | 1 | 1 | 0% | 2,916 | 2,818 | -3% | 0 | 0 | — |
case-24 | pass→pass | 9,313 | 7,278 | -22% | 1 | 1 | 0% | 1,456 | 2,172 | +49% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 24 cases were attempted. The headline lift of +63 percentage points is the difference between those two pass rates over the 24 comparable cases.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
Other measured skills in the registry, with their headline benchmark lift.