OpenAlex data is and will remain available at no cost. Our data snapshot is totally free for bulk download. The API is a freemium service: you get $1 free every day, and after that you pay for what you use. We sell services, not data.
Getting an API Key
To use the API at scale, you need a key. It’s free—just make an account (takes 30 seconds) and copy your key from openalex.org/settings/api. Then add api_key=YOUR_KEY to your API calls:
curl "https://api.openalex.org/works?api_key=YOUR_KEY"
Costs
Pricing by Endpoint
Use per_page=100 to load many results per query—it makes your query budget go much further.
| Operation | Description | Cost per 1,000 calls |
|---|
| Get singleton | Retrieve a single entity by ID or DOI | Free |
| List+Filter | Query and filter entities | $0.10 |
| Search | Full-text keyword search | $1 |
| Semantic search | AI-powered semantic search | $1 |
| Content download | Cached PDF via content API | $10 |
| Text/Aboutness (deprecated) | Topic classification | $10 |
The openalex.org website runs on this same API, so browsing it draws from the same budget. Viewing a single record’s page (one work, author, source, etc.) is free, but a search or a results page loads several billable calls (the list of results plus its facets/charts). Your $1/day free budget covers a lot of normal browsing, and a prepaid balance covers anything beyond it.
Common Activity Costs
| Activity | Endpoint | Calls | Results | Cost |
|---|
| Search “climate change AND kelp” | Search | 103 | 10,205 | $0.10 |
| All works from Harvard | List+Filter | 8,707 | 870,627 | $0.87 |
| Retrieve works by DOI from a list | Singleton | 1,000,000 | 1,000,000 | Free |
| Daily research (20 searches, 200 filters, 50 lookups) | Mixed | 270 | ~27,000 | $0.04 |
| Download 1,000 PDFs | Content | 1,000 | 1,000 PDFs | $10.00 |
What You Can Do for Free Every Day
Your free API key gives you $1 of free usage every day. With that, you can do a mix of:
| Action | Calls | Results | Example |
|---|
| Get a single entity | Unlimited | Unlimited | Look up a work by DOI |
| List+filter | 10,000 | 1,000,000 | All works from MIT in 2024 |
| Search | 1,000 | 100,000 | Full-text search for “CRISPR” |
| Content download | 100 | 100 PDFs | Download a paper’s full text |
Increased Limits
Need more than $1/day? Paid plans give you higher daily allowances and prepaid usage.
Your daily budget refills every day at midnight UTC. A prepaid balance is a separate pool that automatically kicks in once your daily budget is spent for the day—buying prepaid credit doesn’t change your daily budget, it just covers usage beyond it (and doesn’t expire daily).
Keeping Tabs on Costs
Per Call
Every API response includes headers showing your current status:
| Header | Description |
|---|
X-RateLimit-Limit | Your total daily limit |
X-RateLimit-Remaining | Remaining for today |
X-RateLimit-Credits-Used | Cost of this request |
X-RateLimit-Reset | Seconds until reset (midnight UTC) |
Every response includes a meta object (see Response Format) with the cost of that request and the total result count, so you can estimate the cost of paginating through all results before committing:
"meta": {
"count": 870627,
"db_response_time_ms": 19,
"page": 1,
"per_page": 100,
"groups_count": null,
"cost_usd": 0.0001
}
Here, cost_usd tells you this call cost $0.0001 (list+filter calls are $0.10 per 1,000), and count tells you 870,627 results at 100 per page = 8,707 calls = $0.87 total.
Overall
Usage Dashboard
Check your usage anytime at openalex.org/settings/usage—accessible from the battery icon in the lower left of openalex.org.
Rate Limit Endpoint
You can also check programmatically via the /rate-limit endpoint:
curl "https://api.openalex.org/rate-limit?api_key=YOUR_KEY"
{
"api_key": "abc...xyz",
"rate_limit": {
"daily_budget_usd": 1,
"daily_used_usd": 0.05,
"daily_remaining_usd": 0.95,
"prepaid_balance_usd": 0,
"prepaid_remaining_usd": 0,
"prepaid_expires_at": null,
"resets_at": "2026-02-20T00:00:00.000Z",
"resets_in_seconds": 43200,
"endpoint_costs_usd": {
"singleton": 0,
"list": 0.0001,
"search": 0.001,
"semantic": 0.01,
"content": 0.01,
"text": 0.01
}
}
}
Tips
Exceeding Limits
If you exceed your daily limit or make more than 100 requests per second, you’ll get 429 Too Many Requests errors.
Individual queries also have these constraints:
| Limit | Value |
|---|
| OR values per filter | 100 |
per_page maximum | 100 |
sample maximum | 10,000 |
| Basic paging limit | 10,000 results |
To retrieve more than 10,000 results, use cursor paging.
Usage Tips
Best practices:
Browser testing: The API uses simple GET requests, so you can test any request in your browser. Install a JSON formatter extension for a better experience:
Efficient bulk extraction:
# Use maximum page size
requests.get("https://api.openalex.org/works?per_page=100&api_key=YOUR_KEY")
# Batch DOI lookups (up to 100 at once)
dois = "10.1234/a|10.1234/b|10.1234/c"
requests.get(f"https://api.openalex.org/works?filter=doi:{dois}&api_key=YOUR_KEY")