Openalex Paper Search
Academic paper search powered by OpenAlex -- the free, open catalog of 240M+ scholarly works. Use when the user needs to find academic papers, research articles, literature for a topic, citation data, author publications, or any scholarly source. Triggers on: 'find papers on', 'academic research about', 'what studies exist', 'literature review', 'find citations', 'scholarly articles about', 'who published on', 'papers by [author]', 'highly cited papers on', any request for peer-reviewed or academic sources. Also use during deep research when you need to ground findings in academic literature. Do NOT use for general web searches -- use web-search for that.
- Skill ID
- kortix-ai/kortix-registry/openalex-paper-search
- Publisher
- kortix-ai
- Repository
- kortix-registry
- Installs
- 0
- Files
- 1
- Synced
- Sep 23, 2026
Open any RiverX project, open the Skills panel in the chat, and search for this identifier. The files are fetched from the source repository at install time.
kortix-ai/kortix-registry/openalex-paper-searchInstalls these files- SKILL.md
What this skill tells the agent
Academic Paper Search (OpenAlex)
Search 240M+ scholarly works using the OpenAlex API -- completely free, no API key required, no SDK needed. Just curl or bash with URL construction.
Full docs: https://docs.openalex.org
Quick Start
OpenAlex is a REST API. You query it by constructing URLs and fetching them with curl. All responses are JSON.
# Search for papers about "transformer architecture"
curl -s "https://api.openalex.org/works?search=transformer+architecture&per_page=5&mailto=agent@kortix.ai" | python3 -m json.toolImportant: Always include mailto=agent@kortix.ai (or any valid email) in every request. Without it, you're limited to 1 request/second. With it, you get 10 requests/second (the "polite pool").
Core Concepts
Entities
OpenAlex has these entity types (all queryable):
| Entity | Endpoint | Count | Description |
|---|---|---|---|
| Works | /works | 240M+ | Papers, articles, books, datasets, theses |
| Authors | /authors | 90M+ | People who create works |
| Sources | /sources | 250K+ | Journals, repositories, conferences |
| Institutions | /institutions | 110K+ | Universities, research orgs |
| Topics | /topics | 4K+ | Research topics (hierarchical) |
Work Object -- Key Fields
When you fetch a work, these are the most useful fields:
id OpenAlex ID (e.g., "https://openalex.org/W2741809807")
doi DOI URL
title / display_name Paper title
publication_year Year published
publication_date Full date (YYYY-MM-DD)
cited_by_count Number of incoming citations
fwci Field-Weighted Citation Impact (normalized)
type article, preprint, review, book, dataset, etc.
language ISO 639-1 code (e.g., "en")
is_retracted Boolean
open_access.is_oa Boolean -- is it freely accessible?
open_access.oa_url Direct URL to free version
authorships List of authors with names, institutions, ORCIDs
abstract_inverted_index Abstract as inverted index (needs reconstruction)
referenced_works List of OpenAlex IDs this work cites (outgoing)
related_works Algorithmically related works
cited_by_api_url API URL to get works that cite this one (incoming)
topics Assigned research topics with scores
keywords Extracted keywords with scores
primary_location Where the work is published (journal, repo)
best_oa_location Best open access location with PDF linkReconstructing Abstracts
OpenAlex stores abstracts as inverted indexes for legal reasons. To get plaintext, reconstruct:
import json, sys
# Read the abstract_inverted_index from a work object
inv_idx = work["abstract_inverted_index"]
if inv_idx:
words = [""] * (max(max(positions) for positions in inv_idx.values()) + 1)
for word, positions in inv_idx.items():
for pos in positions:
words[pos] = word
abstract = " ".join(words)Or in bash with python3 -c:
# Pipe a work JSON into this to extract the abstract
echo "$WORK_JSON" | python3 -c "
import json,sys
w=json.load(sys.stdin)
idx=w.get('abstract_inverted_index',{})
if idx:
words=['']*( max(max(p) for p in idx.values())+1 )
for word,positions in idx.items():
for pos in positions: words[pos]=word
print(' '.join(words))
"Searching for Papers
Basic Keyword Search
Searches across titles, abstracts, and fulltext. Uses stemming and stop-word removal.
# Simple search
curl -s "https://api.openalex.org/works?search=large+language+models&mailto=agent@kortix.ai"
# With per_page limit
curl -s "https://api.openalex.org/works?search=CRISPR+gene+editing&per_page=10&mailto=agent@kortix.ai"Boolean Search
Use uppercase AND, OR, NOT with parentheses and quoted phrases:
# Complex boolean query
curl -s "https://api.openalex.org/works?search=(reinforcement+learning+AND+%22robot+control%22)+NOT+simulation&mailto=agent@kortix.ai"
# Exact phrase match (use double quotes, URL-encoded as %22)
curl -s "https://api.openalex.org/works?search=%22attention+is+all+you+need%22&mailto=agent@kortix.ai"Search Specific Fields
# Title only
curl -s "https://api.openalex.org/works?filter=title.search:transformer&mailto=agent@kortix.ai"
# Abstract only
curl -s "https://api.openalex.org/works?filter=abstract.search:protein+folding&mailto=agent@kortix.ai"
# Title and abstract combined
curl -s "https://api.openalex.org/works?filter=title_and_abstract.search:neural+scaling+laws&mailto=agent@kortix.ai"
# Fulltext search (subset of works)
curl -s "https://api.openalex.org/works?filter=fulltext.search:climate+tipping+points&mailto=agent@kortix.ai"Filtering
Filters are the most powerful feature. Combine them with commas (AND) or pipes (OR).
Most Useful Filters
# By publication year
?filter=publication_year:2024
?filter=publication_year:2020-2024
?filter=publication_year:>2022
# By citation count
?filter=cited_by_count:>100 # highly cited
?filter=cited_by_count:>1000 # landmark papers
# By open access
?filter=is_oa:true # only open access
?filter=oa_status:gold # gold OA only
# By type
?filter=type:article # journal articles
?filter=type:preprint # preprints
?filter=type:review # review articles
# By language
?filter=language:en # English only
# Not retracted
?filter=is_retracted:false
# Has abstract
?filter=has_abstract:true
# Has downloadable PDF
?filter=has_content.pdf:true
# By author (OpenAlex ID)
?filter=author.id:A5023888391
# By institution (OpenAlex ID)
?filter=institutions.id:I27837315 # e.g., University of Michigan
# By DOI
?filter=doi:https://doi.org/10.1038/s41586-021-03819-2
# By indexed source
?filter=indexed_in:arxiv # arXiv papers
?filter=indexed_in:pubmed # PubMed papers
?filter=indexed_in:crossref # Crossref papersCombining Filters
# AND: comma-separated
?filter=publication_year:>2022,cited_by_count:>50,is_oa:true,type:article
# OR: pipe-separated within a filter
?filter=publication_year:2023|2024
# NOT: prefix with !
?filter=type:!preprint
# Combined example: highly-cited OA articles from 2023-2024, not preprints
curl -s "https://api.openalex.org/works?filter=publication_year:2023-2024,cited_by_count:>50,is_oa:true,type:!preprint&search=machine+learning&per_page=10&mailto=agent@kortix.ai"Sorting
# Most cited first
?sort=cited_by_count:desc
# Most recent first
?sort=publication_date:desc
# Most relevant first (only when using search)
?sort=relevance_score:desc
# Multiple sort keys
?sort=publication_year:desc,cited_by_count:descPagination
Two modes: basic paging (for browsing) and cursor paging (for collecting all results).
# Basic paging (limited to 10,000 results)
?page=1&per_page=25
?page=2&per_page=25
# Cursor paging (unlimited, for collecting everything)
?per_page=100&cursor=* # first page
?per_page=100&cursor=IlsxNjk0ODc... # next page (cursor from previous response meta)The cursor for the next page is in response.meta.next_cursor. When it's null, you've reached the end.
Select Fields
Reduce response size by selecting only the fields you need:
# Only get IDs, titles, citation counts, and DOIs
?select=id,display_name,cited_by_count,doi,publication_year
# Minimal metadata for scanning
?select=id,display_name,publication_year,cited_by_count,open_accessCitation Graph Traversal
Find what a paper cites (outgoing references)
# Get works cited BY a specific paper
curl -s "https://api.openalex.org/works?filter=cited_by:W2741809807&per_page=25&mailto=agent@kortix.ai"Use this skill in a project
Open any RiverX project, search the Skills panel for kortix-ai/kortix-registry/openalex-paper-search, and install it in one click.
