Skip to main content
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.