Bundestag APIbundestag.de ↗
Access German Bundestag plenary session agendas and roll-call vote records. Two endpoints return structured JSON with dates, agenda items, and vote documents.
What is the Bundestag API?
The Bundestag.de API exposes 2 endpoints covering the German Bundestag's plenary activity: get_sitzungen returns conference-week agendas with full Tagesordnung (agenda items) per session, and search_abstimmungen lists Namentliche Abstimmungen (roll-call votes) with linked PDF and XLSX documents. Together they give structured access to the legislative calendar and official vote records published at bundestag.de.
curl -X GET 'https://api.parse.bot/scraper/04bee3e9-e48f-4c51-b175-e6fc573ce8f5/get_sitzungen?week=28&year=2026' \ -H 'X-API-Key: $PARSE_API_KEY'
Typed, relational, agent-ready
A generated client with real types, enums, and the links between objects — the structure a flat JSON response can't carry. Autocompletes in your editor and reads cleanly to coding agents.
- Fully typed · autocompletes
- Objects link to objects
- Typed errors & pagination
Typed Python client. Set up the SDK in your uv project, then pull this API’s typed client:
uv add parse-sdk uv run parse init uv run parse add --marketplace bundestag-de-api
uv run parse add --marketplace pulls a pinned snapshot of this canonical API — it won’t change underneath you. To customize it, subscribe and swap to your own copy.
"""Walkthrough: Bundestag Plenum API — session agendas and roll-call votes."""
from parse_apis.bundestag_de_api import Bundestag, InputFormatInvalid
client = Bundestag()
# Fetch the current/next conference week's plenary sessions and agenda.
week = client.conference_weeks.get()
print(f"Week {week.next.week}/{week.next.year} (next)")
for sitzung in week.conferences:
print(f" Sitzung {sitzung.conference_number} — {sitzung.date}")
for item in sitzung.agenda_items[:3]:
print(f" TOP {item.top}: {item.title} [{item.status}]")
# Navigate to a specific prior week using the previous reference.
try:
prev = client.conference_weeks.get(week=week.previous.week, year=week.previous.year)
print(f"\nPrevious week {prev.previous.week}/{prev.previous.year} sessions: {len(prev.conferences)}")
except InputFormatInvalid as e:
print(f"Invalid week/year input: {e.message}")
# List recent roll-call votes, capped at 5 total items.
for vote in client.abstimmungen.list(limit=5):
print(f"{vote.date}: {vote.title}")
print(f" PDF: {vote.pdf_url}")
print("\nexercised: conference_weeks.get / abstimmungen.list")
Retrieve plenary sessions (Sitzungen) for a given conference week, each with its full agenda (Tagesordnung). For each agenda item that has an associated article link, the article content is fetched and included inline. Without parameters returns the next/current conference week. Navigation to other weeks uses the week/year values from the previous/next fields in the response. Each conference contains numbered agenda items (TOP) with time, title, detail text (may include HTML markup with Drucksache references), status, optional link, and optional article object with the fetched article's title, category, and full text. Note: this endpoint makes one additional HTTP request per linked agenda item, so response time scales with the number of linked items in the week.
| Param | Type | Description |
|---|---|---|
| week | integer | ISO week number (1-53). When omitted, the API returns the next upcoming or current conference week. |
| year | integer | Four-digit year. When omitted together with week, defaults to the current/next conference week. |
{
"type": "object",
"fields": {
"next": "object with week and year for the next conference week (for pagination)",
"previous": "object with week and year for the previous conference week (for pagination)",
"conferences": "array of session objects, each with conference_number, date, and agenda_items (each agenda item may include an article object with article_title, article_text, and article_category when a linked article exists)"
},
"sample": {
"data": {
"next": {
"week": 37,
"year": 2026
},
"previous": {
"week": 26,
"year": 2026
},
"conferences": [
{
"date": "8. Juli 2026",
"agenda_items": [
{
"top": "",
"time": "14:00",
"title": "Sitzungseröffnung",
"detail": " ",
"status": "beendet"
},
{
"top": "",
"link": "https://www.bundestag.de/dokumente/textarchiv/2026/kw28-de-go-debatte-1194064",
"time": "14:00",
"title": "Zur Geschäftsordnung",
"detail": "Antrag auf Absetzung TOP 22a ",
"status": "beendet"
},
{
"top": "1",
"link": "https://www.bundestag.de/dokumente/textarchiv/2026/kw28-de-regierungsbefragung-1154632",
"time": "14:20",
"title": "Befragung der Bundesregierung (BMJV und BMUKN)",
"detail": "Befragung der Bundesregierung ",
"status": "beendet"
}
],
"conference_number": 88
}
]
},
"status": "success"
}
}About the Bundestag API
Plenary Session Agendas
get_sitzungen returns plenary sessions for a given ISO conference week. Call it without parameters to get the current or next scheduled conference week, or pass week (1–53) and year to target a specific period. Each response includes a conferences array where every entry carries a conference_number, date, and agenda_items list. The next and previous fields in the response each contain a week/year pair you can feed directly into the next request to page through the full legislative calendar.
Roll-Call Vote Records
search_abstimmungen lists Namentliche Abstimmungen in reverse-chronological order. Each item in the items array includes a date, a title describing the vote, and direct pdf_url and xlsx_url links to the official result documents. Use limit (up to 100) and offset to page through results; the total field tells you how many votes exist in total, and has_more indicates whether another page follows.
Coverage and Scope
The API covers the publicly listed plenary schedule and roll-call vote index as maintained by the Bundestag. Session data is scoped to conference weeks rather than individual calendar days, so navigation is week-based. Vote data is ordered by date and does not include the detailed per-deputy breakdown found inside the XLSX documents themselves — those breakdowns are available by downloading the linked files.
The Bundestag API is a managed, monitored endpoint for bundestag.de — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when bundestag.de changes and a check fails, the API is automatically queued for repair and re-verified. It is built to keep working as the site underneath it changes.
This isn't an official bundestag.de API — it's an independent, maintained REST wrapper over public data. Where the source has no official API (or only a limited one), Parse gives you a stable contract over a source that never promised one, and keeps it current. Need a new endpoint or field? You can revise it yourself in plain English and the agent rebuilds it against the live site in minutes — contributing the change back to the shared API is free.
Will this API break when the source site changes?+
Is this an official API from the source site?+
Can I fix or extend this API myself if I need a new endpoint or field?+
What happens if I call an endpoint that has an issue?+
- Track upcoming Bundestag conference weeks and their agenda items programmatically
- Build a legislative calendar app that displays session dates and Tagesordnung for a given week
- Monitor newly published roll-call votes by polling search_abstimmungen sorted by date descending
- Download official vote result spreadsheets (xlsx_url) for quantitative analysis of parliamentary voting patterns
- Archive Namentliche Abstimmungen titles and dates for longitudinal political research
- Alert stakeholders when a specific bill topic appears in an upcoming session's agenda_items
- Cross-reference vote dates with plenary session dates from get_sitzungen to map votes to sessions
| Tier | Price | Credits/month | Rate limit |
|---|---|---|---|
| Free | $0/mo | 200 | 5 req/min |
| Hobby | $30/mo | 1,000 | 20 req/min |
| Developer | $100/mo | 5,000 | 100 req/min |
| Team | $300/mo | 20,000 | 300 req/min |
| Company | $1,000/mo | 100,000 | 500 req/min |
Each endpoint has a fixed posted price per successful call — most fall between 1 and 10 credits — shown on this API's page before you run it. Exceeding the rate limit returns a 429 response. Authenticate with the X-API-Key header.
Does the Bundestag have an official developer API?+
How do I navigate across multiple conference weeks with get_sitzungen?+
next and previous objects, each containing a week and year value. Pass those values as the week and year parameters in your next request to move forward or backward through the conference calendar. Calling the endpoint with no parameters starts you at the current or next upcoming conference week.Does search_abstimmungen return the per-deputy vote breakdown?+
title, date, pdf_url, and xlsx_url — the detailed deputy-level breakdown lives inside the linked XLSX document. You can download that file via the xlsx_url field to get the full granular results. You can also fork this API on Parse and revise it to parse and return the deputy-level data from those documents as a new endpoint.