
Openalex
- 11 installs
- 3.2k repo stars
- Updated August 4, 2026
- brycewang-stanford/auto-empirical-research-skills
openalex is a skill that drives a CLI to query the OpenAlex API for academic metadata such as works, authors, institutions, citations, and open-access PDFs.
About
This skill drives the openalex CLI to retrieve academic metadata from the OpenAlex API. It searches works, authors, sources, and institutions, tracks who cites a paper and what it references, and looks up records by DOI or ORCID. A researcher uses it to explore academic literature, analyze publication trends, and download open-access PDFs, with output in summary, detail, JSON, or BibTeX formats.
- CLI to retrieve academic metadata from the OpenAlex API
- Search works, authors, institutions, journals; track citations and references
- Look up by DOI or ORCID and download open-access PDFs
Openalex by the numbers
- 11 all-time installs (skills.sh)
- Ranked #1,552 of 2,064 Data Science & ML skills by installs in the Skillselion catalog
- Data as of Aug 5, 2026 (Skillselion catalog sync)
openalex capabilities & compatibility
OpenAlex API key configured per references/setup.md
- Capabilities
- academic search · citation tracking · metadata retrieval · research
- Use cases
- research · web search
- Pricing
- Bring your own API key
What openalex says it does
Use the `openalex` CLI to retrieve academic metadata from the OpenAlex API.
OpenAlex organizes data into 8 entity types:
npx skills add https://github.com/brycewang-stanford/auto-empirical-research-skills --skill openalexAdd your badge
Show developers this skill is listed on Skillselion. Paste this into your README.
| Installs | 11 |
|---|---|
| repo stars | ★ 3.2k |
| Last updated | August 4, 2026 |
| Repository | brycewang-stanford/auto-empirical-research-skills ↗ |
What it does
Query the OpenAlex API via CLI to search papers, authors, and institutions, track citations, and download open-access PDFs by DOI or OpenAlex ID.
Who is it for?
Searching papers, tracking citations, building author profiles, and pulling open-access PDFs.
Skip if: Synthesizing a full literature review or verifying citations for a manuscript.
When should I use this skill?
Searching academic papers, finding authors or institutions, tracking citations, or looking up works by DOI or ORCID.
What you get
Retrieves papers, author profiles, citation chains, and downloadable PDFs by DOI, ORCID, or OpenAlex ID.
By the numbers
- 8 OpenAlex entity types
- 6 PDF source fallbacks tried on download
Files
OpenAlex CLI Skill
Use the openalex CLI to retrieve academic metadata from the OpenAlex API.
When to Use
Invoke this skill when the user needs to:
- Search for academic papers or scholarly works
- Find information about authors, institutions, or journals
- Track citations (who cited a paper, what a paper references)
- Discover related works or research topics
- Look up metadata by DOI, ORCID, or OpenAlex ID
- Analyze publication trends or research metrics
Initial Setup
First time using this skill? Read references/setup.md for installation and API key configuration.
Prerequisites
The CLI must be built and available. Check with:
openalex --helpIf openalex is not installed yet, install it first:
npm install -g openalex-skill
openalex --helpFor installation, persistent API key setup, and first-run verification, see references/setup.md.
Core Commands
Entity Types
OpenAlex organizes data into 8 entity types:
works- research papers, articles, preprintsauthors- researchers and their profilessources- journals, conferences, repositoriesinstitutions- universities, research centerstopics- research areas and subjectspublishers- academic publishersfunders- funding organizationsconcepts- (legacy) subject classifications
OpenAlex ID Format
ID format: OpenAlex IDs start with W (e.g., W2626778328). The summary format displays reusable IDs on a secondary line:
- Attention Is All You Need (2017 | cited 6519)
id: W2741809807 | authors: Vaswani et al | doi: https://doi.org/10.48550/arXiv.1706.03762Get ID from search results:
openalex works search "paper title" --per-page 1
# Copy the `id: Wxxxx` from the output⚠️ ID usage restrictions:
cited-by,references, andrelatedsupport both DOI and OpenAlex ID- bare DOIs like
10.1038/nature12373anddoi:10.1038/nature12373are normalized automatically for work lookups and helpers - OpenAlex IDs are still the most reusable follow-up identifiers when chaining multiple commands
Common Operations
Search for papers:
openalex works search "your query" --per-page 5Get specific work by ID or DOI:
openalex works get W2741809807
openalex works get https://doi.org/10.1038/nature12373
openalex works get 10.1038/nature12373Find author:
openalex authors search "Author Name" --per-page 3Get author by ORCID:
openalex authors get https://orcid.org/0000-0002-3141-5845Track citations:
# Papers that cite this work
openalex works cited-by W2741809807 --per-page 5
openalex works cited-by 10.1038/nature12373 --per-page 5
openalex works cited-by https://doi.org/10.1038/nature12373 --per-page 5
# Papers this work references
openalex works references W2741809807 --per-page 5
openalex works references https://doi.org/10.1038/nature12373 --per-page 5
# Related works
openalex works related W2741809807 --per-page 5
openalex works related https://doi.org/10.1038/nature12373 --per-page 5Filter and sort:
openalex works list \
--filter publication_year:2024 \
--filter is_oa:true \
--sort cited_by_count:desc \
--per-page 10Autocomplete (for non-works entities):
openalex institutions autocomplete "tsinghua"
openalex authors autocomplete "einstein"Group by field:
openalex works group --by publication_year \
--filter author.id:A5070829652Download full-text PDF:
# Download the best available open access PDF for a work
openalex works download https://doi.org/10.48550/arXiv.1706.03762
openalex works download 10.48550/arXiv.1706.03762
# Specify output filename
openalex works download W2741809807 -o paper.pdf
# Overwrite existing file
openalex works download W2741809807 --overwriteThe download command tries multiple sources in order: 1. primary_location.pdf_url 2. best_oa_location.pdf_url 3. open_access.oa_url 4. primary_location.landing_page_url 5. best_oa_location.landing_page_url 6. Any locations[].pdf_url or locations[].landing_page_url
Default filename is based on DOI or OpenAlex ID (sanitized for filesystem safety).
Output Formats
The CLI defaults to summary format. For detailed format options, see references/output-formats.md.
Quick reference:
summary(default) - Concise one-line format, ~2KB for 5 resultsdetail- Human-readable with inline lists for repeated fieldsjson- Full structured payload, ~40KB-268KB per querybibtex- BibTeX entries for work records--field <path>- Client-side projection to extract specific fields--select <field>- Server-side selection to reduce network payload
Common patterns:
# Extract specific fields
openalex works get W2741809807 --field title --field abstract
# Export a work as BibTeX
openalex works get 10.1038/nature12373 --format bibtex
# Combine server-side + client-side for efficiency
openalex works search "crispr" --select title --select cited_by_count \
--field title --field cited_by_countNote: --field abstract and --select don't combine well; use --field abstract alone when you need abstract text.
Workflow Patterns
Pattern 1: Quick Paper Search
# Start with summary to browse
openalex works search "graph neural networks" --per-page 5
# If user wants details on a specific paper, use detail format
openalex works get W2741809807 --format detail
# Or extract specific fields with inline author display
openalex works get W2741809807 \
--format detail \
--field title --field abstract --field authorships.author.display_namePattern 2: Author Research
# Find author
openalex authors search "Jacob Andreas" --per-page 3
# Get author details by ORCID to resolve stable identifier
openalex authors get https://orcid.org/0000-0002-3141-5845
# Then use author.orcid filter to get their works
openalex works list --filter author.orcid:0000-0002-3141-5845 \
--sort cited_by_count:desc --per-page 10
# Or use resolved author.id if available
openalex works list --filter author.id:A5070829652 \
--sort cited_by_count:desc --per-page 10Pattern 3: Citation Analysis
# Search for a paper, note the ID from the secondary line
openalex works search "attention is all you need" --per-page 3
# Use the ID (e.g., W2741809807) or DOI for citation commands
openalex works cited-by W2741809807 --per-page 10
openalex works references W2741809807 --per-page 10If cited-by or references returns a 404, verify the work first with openalex works get <id-or-doi>. A valid-looking W... id can still be missing upstream.
Pattern 4: Topic Exploration
# Search for survey papers on a topic
openalex works search "LLM tool use survey" \
--filter publication_year:>2023 \
--filter type:review \
--sort cited_by_count:desc \
--per-page 5Pattern 5: Field Discovery and Extraction
# First, discover available fields
openalex works fields
# Then extract exactly what you need with detail format
openalex works search "retrieval augmented generation" --per-page 3 \
--format detail \
--field title \
--field abstract \
--field publication_year \
--field cited_by_count \
--field authorships.author.display_namePattern 6: Handling Noisy or Empty Results
Search too broad? Add filters:
openalex works search "self-adaptive agent framework" \
--filter publication_year:>2022 \
--filter type:article \
--per-page 5Have a DOI? Use direct lookup:
openalex works get https://doi.org/10.1038/nature12373Pattern 7: Download Full-Text Papers
# Download by DOI or OpenAlex ID
openalex works download https://doi.org/10.48550/arXiv.1706.03762
openalex works download W2626778328 -o paper.pdf --overwriteDownload tries multiple sources in order: primary_location.pdf_url, best_oa_location.pdf_url, open_access.oa_url, then landing pages.
`--select` caveats:
- OpenAlex
selectonly supports root-level fields groupandautocompletedo not supportselectabstractandabstract_inverted_indexare not selectable upstream
ORCID format matters:
# Wrong: using full ORCID URL in filter
openalex works list --filter author.orcid:https://orcid.org/0000-0002-3141-5845
# Correct: bare ORCID value
openalex works list --filter author.orcid:0000-0002-3141-5845
# But ORCID URL works for 'authors get'
openalex authors get https://orcid.org/0000-0002-3141-5845Tips
- Default format is `summary` - no need to specify unless you want something else
- Use
<entity> fieldscommand to discover available field paths before querying - Use
--fieldprojection to extract specific data efficiently - Use
--selectfor network efficiency when you know which fields you need - Combine
--selectand--fieldfor optimal performance and presentation - Use
--per-pageto control result count (default varies by endpoint) - Use
--allto auto-follow cursor pagination for list-style commands - Filters use
:syntax:field:value,field:>value,field:<value - Sort uses
:syntax:field:ascorfield:desc - DOIs and OpenAlex IDs are interchangeable in most commands
- ORCID filters use bare ORCID value, not the
https://orcid.org/URL form - If author work lookup returns nothing, use
author.orcidinstead ofauthor.id - If
cited-byorreferencesfails with 404, verify the work first withworks get - For some preprint or repository records, the queried DOI and the record DOI may differ; use
detailorjsonwhen provenance matters - Check rate limits with:
openalex rate-limit
Configuration Commands
The CLI supports persistent configuration for API keys and other settings.
View current configuration:
openalex config showSet API key (recommended):
openalex config set api-key your_key_hereOther config options:
openalex config set base-url https://api.openalex.org
openalex config set mailto you@example.comView config file path:
openalex config pathRemove a setting:
openalex config unset api-keyConfiguration is stored in ~/.openalex-skill/config.json. Environment variables (OPENALEX_API_KEY, OPENALEX_BASE_URL, OPENALEX_MAILTO) override stored config.
Common Filters
For works:
publication_year:2024orpublication_year:>2020is_oa:true(open access)type:articleortype:reviewauthor.id:A5070829652author.orcid:0000-0002-3141-5845- institution-related filters are passed through as-is; verify the exact OpenAlex path with
--format jsonif needed primary_location.source.id:S123456(journal)
For authors:
last_known_institutions.id:I123456works_count:>100
Error Handling
If a command fails: 1. Check the entity type is correct (works, authors, etc.) 2. Verify ID format (OpenAlex IDs start with W/A/S/I/T/P/F/C) 3. Check filter syntax (use : not =) 4. Try with --format json to see full error details 5. If search results are empty, retry with broader keywords 6. If author lookup fails, verify ORCID format (bare value, not URL) 7. Use DOI direct lookup when you know the exact paper 8. If a work helper 404s, the identifier may be valid in shape but absent in OpenAlex
OpenAlex CLI Output Formats
Detailed guide for output formats and field selection options.
Format Options
summary (default, recommended for AI)
Concise one-line format with key metadata and reusable identifiers.
Example:
- Attention Is All You Need (2017 | cited 6519 | OA gold | Neural Information Processing Systems)
id: W2741809807 | authors: Vaswani, Shazeer, Parmar + 5 more | doi: https://doi.org/10.48550/arXiv.1706.03762The secondary line shows reusable IDs you can copy for follow-up commands:
- Works:
id(W-prefixed, required forcited-by/references),authors,doi - Authors:
id(A-prefixed),orcid - Institutions:
id(I-prefixed),ror - Other entities show their respective IDs
- Token usage: ~2KB for 5 results
- Each entity type has specialized formatting (works show citations, authors show h-index, etc.)
detail
Human-readable structured output with business fields only.
- Hides transport noise (request URLs, rate-limit headers)
- Reconstructs friendly fields like
abstractfrom inverted index - Inlines short projected scalar lists for readability (e.g., authors displayed as "Alice, Bob, Charlie")
- Good for exploring data structure without JSON verbosity
json
Full structured payload.
- Token usage: ~40KB-268KB per query
- Use only when you need complete data or specific nested fields
jsonl
One JSON object per line. Good for streaming or line-by-line processing.
markdown
Heading + JSON block. Useful for documentation or reports.
bibtex
BibTeX entries for work records.
- best for citation-manager import or quick
.bibexport - uses OpenAlex work metadata directly, so no extra DOI lookup is required
- works especially well with direct DOI lookups and
--fieldis usually unnecessary here
Field Projection with --field
Client-side projection - fetch full payload first, then display only requested fields:
# Discover available fields first
openalex works fields
# Extract specific fields (repeatable)
openalex works get W2741809807 \
--field title \
--field abstract \
--field authorships.author.display_name \
--field doi
# detail format with field projection (authors shown inline)
openalex works search "crispr" --per-page 3 \
--format detail \
--field title \
--field abstract \
--field cited_by_count
# export one work as BibTeX
openalex works get 10.1038/nature12373 --format bibtexKey behaviors:
--fieldworks withdetail,json,jsonl, andmarkdownformats- When requesting
abstract, CLI reconstructs it fromabstract_inverted_indexwhen possible - In
detailformat, repeated scalar paths likeauthorships.author.display_nameare shown as inline readable lists instead of nested structures
Server-side Selection with --select
Server-side filtering - ask OpenAlex API to return fewer fields (reduces network payload):
openalex works search "crispr" \
--select id \
--select title \
--select cited_by_countKey behaviors:
--selectreduces upstream payload size- Available on
get,random,list,search,related,cited-by, andreferences groupdoes not support--select, but still supports--field- OpenAlex only supports selecting root-level fields
abstractandabstract_inverted_indexare not selectable upstream
Combining --select and --field
Best practice: Use --select for network efficiency, --field for presentation control:
# Server-side: only fetch necessary fields
# Client-side: display as curated view
openalex works search "crispr" --per-page 3 \
--select id \
--select title \
--select cited_by_count \
--field title \
--field cited_by_countImportant: --field abstract and --select do not combine well, because OpenAlex does not let you select abstract fields upstream. If you need abstract text, avoid --select for that request and let the CLI reconstruct it from the full work payload.
Format Selection Guide
Use `summary` when:
- Browsing or exploring results
- User wants a quick overview
- You need basic metadata (title, year, citations, authors)
- Token efficiency matters (99% reduction vs JSON)
Use `detail` when:
- You need structured data but JSON is too verbose
- Exploring nested fields without transport noise
- Want readable output with inline lists for repeated fields
Use `--field` projection when:
- You know exactly which fields you need
- Want to minimize tokens while keeping structure
- Need specific nested paths (e.g.,
authorships.author.display_name)
Use `--select` when:
- You want to reduce network payload from OpenAlex
- The endpoint supports official OpenAlex field selection
- Combining with
--fieldfor both efficiency and presentation
Use `json` when:
- You need the complete raw payload
- Programmatic processing of all fields required
- User explicitly asks for structured data
Example comparison
# Most efficient: ~2KB for 5 results
openalex works search "LLM agents" --per-page 5
# Fetch all pages with cursor pagination
openalex works search "LLM agents" --all --per-page 200 --format jsonl
# Structured but readable with inline lists: ~10KB for 5 results
openalex works search "LLM agents" --per-page 5 --format detail
# Targeted extraction: ~5KB for 5 results
openalex works search "LLM agents" --per-page 5 \
--format detail --field title --field abstract --field cited_by_count
# Network optimized + presentation curated
openalex works search "LLM agents" --per-page 5 \
--select title --select cited_by_count \
--field title --field cited_by_count
# Full payload: ~268KB for 5 results
openalex works search "LLM agents" --per-page 5 --format json
# Citation export
openalex works get 10.1038/nature12373 --format bibtex--select caveats
- OpenAlex
selectonly supports root-level fields groupandautocompletedo not supportselectabstractandabstract_inverted_indexare not selectable upstream- if you need abstract text, use
--field abstractor fetch the full work object first
ORCID format matters
# Wrong: using full ORCID URL in filter
openalex works list --filter author.orcid:https://orcid.org/0000-0002-3141-5845
# Correct: bare ORCID value
openalex works list --filter author.orcid:0000-0002-3141-5845
# But ORCID URL works for 'authors get'
openalex authors get https://orcid.org/0000-0002-3141-5845OpenAlex CLI Initial Setup
Installation
Install globally via npm:
npm install -g openalex-skillAfter installation, the openalex command will be available globally.
API Key Configuration
The OpenAlex API has rate limits. Using an API key provides higher quotas.
Get Your API Key
1. Visit https://openalex.org/settings/api-key 2. Sign in or create an account 3. Generate and copy your API key
Configuration Methods (Recommended: Persistent Config)
Use the config command to save your API key to the user config file:
openalex config set api-key your_api_key_hereVerify the configuration:
openalex config showAlternative Configuration Methods
Environment Variable (temporary):
Bash:
export OPENALEX_API_KEY=your_api_key_here
openalex works search "machine learning" --per-page 5PowerShell:
$env:OPENALEX_API_KEY="your_api_key_here"
openalex works search "machine learning" --per-page 5Config file location:
openalex config path
# Example output: /home/username/.openalex-skill/config.jsonRemove Configuration
To remove a saved API key:
openalex config unset api-keyQuick Verification
After installation and configuration, verify everything works:
# Check version
openalex --version
# View help
openalex --help
# Test search (works without API key)
openalex works search "test" --per-page 1
# Check rate limit status
openalex rate-limit
# Download a paper PDF (requires open access)
openalex works download https://doi.org/10.48550/arXiv.1706.03762Related skills
FAQ
How is it installed?
Install globally with npm install -g openalex-skill, then verify with openalex --help.
What entity types does OpenAlex cover?
Works, authors, sources, institutions, topics, publishers, funders, and legacy concepts.