# Germany G-BA Drug Benefit Rating Lookup (`chosen_loafer/germany-gba-monitor`) Actor

Look up a drug substance's G-BA early-benefit-assessment rating (Section 35a SGB V) before a market-access decision: benefit rating, indication, decision date and document link. Can also run on a schedule to monitor new/changed ratings. No personal data, government data only

- **URL**: https://apify.com/chosen_loafer/germany-gba-monitor.md
- **Developed by:** [Pavel Staurouski](https://apify.com/chosen_loafer) (community)
- **Categories:** Business, News, Automation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $30.00 / 1,000 checked decision records

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## Germany G-BA Drug Benefit Rating Lookup

Look up a drug substance's **G-BA** (Gemeinsamer Bundesausschuss, Germany's statutory
health-technology-assessment body) **early-benefit assessment rating** under **Section
35a SGB V** ("fruehe Nutzenbewertung") before a market-access or pricing decision: added-
benefit rating, evidence category, comparator therapy, indication, and decision date --
straight from G-BA's own official machine-readable data export, not scraped off a web
page. Can also run on a schedule to monitor new and changed ratings.

### What you get

One record per new, changed, or withdrawn decision/patient-group combination. Every
record carries an explicit `matchState`:

- `FIRST_SEEN` -- your own baseline run.
- `NEW` -- a decision/patient-group not seen on a previous run.
- `RATING_CHANGED` -- the added-benefit rating itself changed (extent, evidence level,
  comparator, or the headline rating sentence). The record includes both
  `previousBenefitRating` (before) and `benefitRating` (after).
- `AMENDED` -- some other tracked field changed (validity date, trade name, indication
  text, ICD code) without the rating itself changing.
- `REMOVED` -- a decision that was tracked on a previous run has dropped out of G-BA's
  currently-implementing export (repealed or superseded).

Unchanged decisions are never pushed or charged -- only what actually moved.

Each record includes: decision ID and case number, substance and trade name(s),
indication (patient subgroup), ICD-10 code(s), decision date, benefit-rating extent and
evidence category, the headline rating sentence, per-endpoint (mortality/morbidity/
quality of life/adverse events) advantage-or-disadvantage symbols where published, and
a link back to G-BA's own procedure page.

### No personal data

This Actor reads G-BA's own structured XML export (see "How it works" below), which
carries no contact/person-shaped field at all -- every one of its ~99 distinct data
fields is clinical or administrative (substance, ICD code, trade name, dates, rating
category). A full sweep of the live export for title+name patterns found none. As a
second-layer guard, every free-text field this Actor does output (indication text,
rating text, per-endpoint descriptions) is still checked for a German title
(Herr/Frau/Dr./Prof./PD) followed by a capitalised name, and withheld entirely (never
partially redacted) if it ever matches -- only a count of withheld fields is reported,
never the text itself. The one field in the source closest to a hearing-minutes risk
(G-BA's own long-form "Tragende Gruende" reasoning summary) is never read by this
Actor at all, by design, regardless of its content.

### How it works

G-BA publishes a machine-readable XML export ("AIS -- maschinenlesbare Fassung der
Beschluesse nach Section 35a SGB V"), updated twice a month, covering every currently-
implementing early-benefit decision with the added-benefit rating as structured data
(not locked inside a PDF). Getting it requires accepting a one-checkbox terms-of-use
form rather than a plain static download link -- this Actor does that automatically on
every run; no account or manual step is needed on your side.

### Why you might need this

Pharma market-access and HEOR teams, pricing/reimbursement consultancies, and medical-
communications agencies currently track these decisions by paying for a commercial
HTA-intelligence subscription or by manually re-checking G-BA's site. This Actor
surfaces the same decisions and rating changes directly from G-BA's own official feed.
The rating itself is not just informational: under AMNOG (Arzneimittelmarktneuordnungs-
gesetz), G-BA's added-benefit category is the direct input to the price negotiation
between the manufacturer and the GKV-Spitzenverband, so a `RATING_CHANGED` record (a
downgrade or upgrade in `extent`) is a signal with a real negotiating-position
consequence, not a line item to notice weeks later on a routine manual check.

**Scope**: Germany (G-BA) only. France (HAS) and the UK (NICE) are separate national
HTA bodies with their own sites and schemas -- not covered by this Actor.

### Sample output

A `RATING_CHANGED` record, where the headline added-benefit rating moved between runs:

```json
{
  "recordKey": "1334:7",
  "decisionId": "1334",
  "caseNumber": "2026-04-01-D-1287",
  "patientGroupId": "7",
  "substance": "Retifanlimab",
  "tradeNames": ["Zynyz"],
  "indication": "Erwachsene mit metastasiertem Merkelzellkarzinom",
  "decisionDate": "2026-10-01",
  "benefitRating": {
    "extent": "betraechtlich",
    "evidence": "Hinweis",
    "comparator": "Watch and wait / bestmoegliche unterstuetzende Behandlung",
    "text": "Ein Hinweis auf einen betraechtlichen Zusatznutzen liegt vor."
  },
  "previousBenefitRating": {
    "extent": "gering",
    "evidence": "Anhaltspunkt",
    "comparator": "Watch and wait / bestmoegliche unterstuetzende Behandlung",
    "text": "Ein Anhaltspunkt fuer einen geringen Zusatznutzen liegt vor."
  },
  "matchState": "RATING_CHANGED",
  "changedFields": ["benefitRating.extent", "benefitRating.evidence"],
  "matchesWatchlist": true,
  "sourceUrl": "https://www.g-ba.de/beschluesse/1334/",
  "checkedAt": "2026-10-10T06:00:00.000Z"
}
```

### Input

```json
{
  "watchlist": ["Sugemalimab", "C61"],
  "maxResults": 300
}
```

- `watchlist` (optional, default empty): substance names, trade names, or ICD-10 codes.
  Every record gets a `matchesWatchlist` flag (case-insensitive substring match) so you
  can filter to drugs/indications you actually track. Leave empty to track everything.
- `maxResults` (optional, default 300): caps how many changed records are pushed and
  charged in a single run. **Important for your first run**: G-BA's export currently
  covers roughly 1,700 decision/patient-group records; a first-ever run with no prior
  state treats every one of them as a new baseline record, so with the default cap your
  first run reports the newest ~300 and the rest follow automatically on your next
  scheduled run (nothing is lost or double-charged either way). If you want the full
  history backfilled in one run, raise `maxResults` and raise your own run cost cap in
  Console accordingly (see Pricing below).

### Change tracking across runs

Run this Actor on a schedule -- weekly is a reasonable match for G-BA's own twice-
monthly update cadence. Each decision/patient-group's rating and key fields are stored
per Actor run, so every run after the first reports only what actually changed.

### Pricing

Pay per run started, plus per new/changed/removed decision record reported (unchanged
records are never charged). See the Pricing tab for exact rates. A first run with a
high `maxResults` will cost proportionally more (see the Input section above) -- raise
your own maximum-cost-per-run setting if you deliberately want a one-run full backfill.

**Worked example.** A weekly scheduled run with no watchlist (full feed, after the
one-time backfill) typically sees 5-20 real new/changed decisions a week given G-BA's
twice-monthly update cadence, so roughly USD 1.40-2.60/month. A watchlist-scoped run
tracking a handful of named substances pays close to zero most weeks (just the run fee)
and only incurs a per-record charge on an actual rating change for one of your own
tracked drugs -- the scenario this Actor is built for.

***

### Deutschland G-BA Fruehe-Nutzenbewertung-Monitor

Verfolgt den **Gemeinsamen Bundesausschuss (G-BA)** auf neue und geaenderte
**Beschluesse zur fruehen Nutzenbewertung nach Section 35a SGB V**: Ausmass des
Zusatznutzens, Wahrscheinlichkeit/Evidenzkategorie, zweckmaessige Vergleichstherapie,
Anwendungsgebiet und Beschlussdatum -- direkt aus G-BAs eigenem maschinenlesbarem
Datenexport, nicht von einer Webseite gescrapt.

**Keine personenbezogenen Daten**: Der genutzte XML-Export enthaelt keinerlei
Kontakt-/Personenfeld; alle enthaltenen Freitextfelder werden zusaetzlich auf ein
Titel-plus-Name-Muster (Herr/Frau/Dr./Prof./PD + Name) geprueft und bei einem Treffer
vollstaendig verworfen, nie teilweise geschwaerzt. Das Feld mit dem hoechsten
theoretischen Risiko (die "Tragenden Gruende" als Volltext) wird von diesem Actor
grundsaetzlich nicht gelesen.

**Umfang**: ausschliesslich Deutschland (G-BA). Frankreich (HAS) und Grossbritannien
(NICE) sind eigene nationale HTA-Behoerden mit eigenen Datenquellen und werden von
diesem Actor nicht abgedeckt.

**Eingabe**: `watchlist` (Wirkstoff-/Handelsnamen oder ICD-10-Codes, optional) und
`maxResults` (Obergrenze geaenderter Datensaetze pro Lauf, Standard 300 -- beim ersten
Lauf ohne vorherigen Zustand werden alle ca. 1.700 Datensaetze als neu gewertet; mit der
Standardgrenze werden die juengsten 300 gemeldet, der Rest folgt automatisch bei den
naechsten planmaessigen Laeufen).

# Actor input Schema

## `watchlist` (type: `array`):

Optional list of substance names, trade names, or ICD-10 codes (e.g. \["Sugemalimab", "C61"]). Each decision record gets a matchesWatchlist flag (case-insensitive substring match either direction) so you can filter for drugs/indications you actually track. Leave empty to track every decision in the live feed.

## `maxResults` (type: `integer`):

Caps how many new/changed/removed decision records are pushed and charged in a single run (unchanged records are never pushed or charged, so this does not limit how many decisions exist, only how many CHANGES are reported per run). On the very first run this bounds how much of the ~1,700-record history is backfilled at once; anything beyond the cap is picked up by the next run, never lost or double-charged. Default 300.

## Actor input object example

```json
{
  "watchlist": [],
  "maxResults": 300
}
```

# Actor output Schema

## `gbaResults` (type: `string`):

Per-record results for this run.

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "watchlist": []
};

// Run the Actor and wait for it to finish
const run = await client.actor("chosen_loafer/germany-gba-monitor").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = { "watchlist": [] }

# Run the Actor and wait for it to finish
run = client.actor("chosen_loafer/germany-gba-monitor").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "watchlist": []
}' |
apify call chosen_loafer/germany-gba-monitor --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,chosen_loafer/germany-gba-monitor"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/C0z2JOnPywflmAEqe/builds/8dFXLwR46xCi59nJU/openapi.json
