Skip to main content

Documentation Index

Fetch the complete documentation index at: https://developers.openalex.org/llms.txt

Use this file to discover all available pages before exploring further.

How has open access publishing changed over the last decade? Two API calls and some simple subtraction give you a year-by-year breakdown.

Step 1: Get total works by year

Use group_by=publication_year to count all works per year:
https://api.openalex.org/works?filter=publication_year:2015-2025&group_by=publication_year
The response group_by array contains one entry per year:
[
  {"key": "2015", "key_display_name": "2015", "count": 9949715},
  {"key": "2016", "key_display_name": "2016", "count": 10262596},
  {"key": "2017", "key_display_name": "2017", "count": 10109865}
]

Step 2: Get open access works by year

Add open_access.is_oa:true to the filter to count only OA works:
https://api.openalex.org/works?filter=publication_year:2015-2025,open_access.is_oa:true&group_by=publication_year
Same shape, smaller counts:
[
  {"key": "2015", "key_display_name": "2015", "count": 3066358},
  {"key": "2016", "key_display_name": "2016", "count": 3383207},
  {"key": "2017", "key_display_name": "2017", "count": 3564129}
]

Step 3: Combine the results

Match up the two responses by year and compute the OA percentage.
import requests

total_resp = requests.get(
    "https://api.openalex.org/works",
    params={"filter": "publication_year:2015-2025", "group_by": "publication_year"}
).json()

oa_resp = requests.get(
    "https://api.openalex.org/works",
    params={"filter": "publication_year:2015-2025,open_access.is_oa:true", "group_by": "publication_year"}
).json()

total_by_year = {g["key"]: g["count"] for g in total_resp["group_by"]}
oa_by_year = {g["key"]: g["count"] for g in oa_resp["group_by"]}

for year in sorted(total_by_year):
    total = total_by_year[year]
    oa = oa_by_year.get(year, 0)
    closed = total - oa
    pct = 100 * oa / total
    print(f"{year}: {total:>12,} total | {oa:>12,} OA | {closed:>12,} closed | {pct:.1f}%")

Results

Data retrieved February 2026. Counts are approximate and will shift as OpenAlex continues indexing.
YearTotalOAClosedOA %
20159.9M3.1M6.9M30.8%
201610.3M3.4M6.9M33.0%
201710.1M3.6M6.5M35.3%
201810.1M4.0M6.1M39.6%
201910.5M4.4M6.0M42.5%
202011.2M5.4M5.8M48.4%
202110.2M5.6M4.7M54.2%
20229.8M6.0M3.8M61.2%
202310.4M6.5M4.0M62.0%
202410.2M6.2M4.0M60.8%
202514.0M9.5M4.5M67.9%
Open access has grown from roughly 31% to 68% of indexed works over the last decade. The crossover point — where OA works first outnumbered closed — was around 2021.