§Research Allowance

Free API

Every award, as data.

All 5353 published awards of Germany’s research allowance as JSON or CSV. No key, no sign-up, CORS open. Data fetched 15 Oct 2026 from the EU Transparency Award Module.

Endpoints

GET /api/awardsAwards as JSON, with filters and paging
GET /api/awards.csvSame filters, as a CSV file – without limit you get every matching row
GET /api/statsTotals by year, region, sector and amount range
GET /api/openapi.jsonMachine-readable description (OpenAPI 3.1)

Try it

curl "https://researchallowance.com/api/awards?region=Berlin&size=sme&limit=2"
const res = await fetch("https://researchallowance.com/api/awards?region=Berlin&size=sme&limit=2");
const { total, awards } = await res.json();
import pandas as pd
df = pd.read_csv("https://researchallowance.com/api/awards.csv?size=sme")

Open the example in your browser →

Filters

ParameterTypeWhat it does
qtextSearch in company name and register number, e.g. q=biotech
regiontextExact region as in the data, e.g. region=Bayern
sectortextExact sector text (NACE), see /api/stats
sizesme | largeSmall/medium or large companies
yearnumberYear the award was granted, e.g. year=2024
minAmountnumberOnly awards whose range starts at or above this many euros
sortgranted | amount | nameDefault: granted
orderasc | descDefault: desc
limitnumberRows per page, default 50, at most 1000
offsetnumberRows to skip, for paging

Response

{
  "source": { "url": "…", "case": "SA.56245", "fetched": "2026-10-15" },
  "total": 123,
  "limit": 2,
  "offset": 0,
  "awards": [
    {
      "ref": "TM-11223354",
      "registerId": "HRB 9014 NP",
      "name": "Andrenomed AG",
      "sme": true,
      "region": "Brandenburg",
      "sector": "Research and experimental development on natural sciences and engineering",
      "objective": "Industrial research (Art. 25(2)(b))",
      "amountFrom": 1000001,
      "amountTo": 2000000,
      "amountText": "1,000,001 to 2,000,000 EUR",
      "granted": "2023-03-01",
      "published": "2022-07-26",
      "taxOffice": "Finanzamt Oranienburg"
    }
  ]
}
FieldMeaning
refTAM reference number – unique per award
registerIdCommercial register number, e.g. HRB 9014 NP (null for private persons)
nameCompany name (null for private persons – we hide their names)
smetrue = small or medium-sized company
regionGerman state or region
sectorIndustry (NACE)
objectiveType of research, e.g. Industrial research (Art. 25(2)(b))
amountFrom / amountToThe published range in whole euros; amountTo null = open-ended
amountTextThe range exactly as TAM writes it (with its separators)
grantedDate the tax office granted it (YYYY-MM-DD)
publishedDate it was published in TAM
taxOfficeTax office that granted it

Good to know

  • Only awards above €100000 are published by law (Art. 9 GBER). Smaller ones are secret under German tax law.
  • Amounts are ranges, exactly as the EU publishes them. All numbers are whole euros, without separators.
  • Freelancers’ own-hour claims are de-minimis aid and are not in TAM.
  • Names of private persons are removed; companies are shown as published.
  • Responses are cached for an hour. Please be gentle – there is no hard rate limit yet.
  • Please credit the source: “European Commission, State Aid Transparency Award Module”. Reuse follows the Commission’s reuse policy (Decision 2011/833/EU).