Basic paging
Use page and per_page to navigate results:
| Parameter | Default | Range | Description |
|---|
page | 1 | 1-500 | Page number |
per_page | 25 | 1-100 | Results per page |
# Page 2 with 100 results per page
https://api.openalex.org/works?page=2&per_page=100
Basic paging limit: You can only access the first 10,000 results (page * per_page must not exceed 10,000). Use cursor paging for more.
Cursor paging
Cursor paging lets you access any number of results:
Step 1: Start with cursor=*
https://api.openalex.org/works?filter=publication_year:2020&per_page=100&cursor=*
Step 2: Get the next_cursor from the response:
{
"meta": {
"count": 8695857,
"per_page": 100,
"next_cursor": "IlsxNjA5MzcyODAwMDAwLCAnaHR0cHM..."
},
"results": ["..."]
}
Step 3: Use next_cursor for the next page:
https://api.openalex.org/works?filter=publication_year:2020&per_page=100&cursor=IlsxNjA5MzcyODAwMDAwLCAnaHR0cHM...
Repeat until next_cursor is null and results is empty.
Don’t use cursor paging to download the entire dataset.
- It takes days to page through /works or /authors
- It puts heavy load on our servers
Instead, use the OpenAlex snapshot for bulk downloads. It’s free, fast, and gives you the same data format.
Jupyter notebook
See this community notebook for executable paging examples.