brjoey/ecb-press-conferences
ECB Monetary Policy Press Conference Transcripts Full transcripts of every ECB Governing Council monetary policy press conference from June 1998 to the present, structured paragraph-by-paragraph with an introductory statement / Q&A split and journalist-vs-ECB-official speaker labels. Source: European Central Bank (ecb.europa.eu) — original text © European Central Bank, Frankfurt am Main, Germany. Reproduction permitted provided the ECB is cited as the source. See ECB copyright… See the full description on the dataset page: https://huggingface.co/datasets/brjoey/ecb-press-conferences.
ECB Monetary Policy Press Conference Transcripts
Full transcripts of every ECB Governing Council monetary policy press conference from June 1998 to the present, structured paragraph-by-paragraph with an introductory statement / Q&A split and journalist-vs-ECB-official speaker labels.
Source: European Central Bank (ecb.europa.eu) — original text © European Central Bank, Frankfurt am Main, Germany. Reproduction permitted provided the ECB is cited as the source. See ECB copyright notice. Coverage: June 1998 – present (294 conferences as of June 2026) Update frequency: Automatically updated after each Governing Council meeting (8 times/year) Version: v1.1 — see CHANGELOG.md
Dataset structure
Speaker classification
Each Q&A paragraph carries a role label — "question" (journalist or reporter) or "answer" (ECB President or Vice-President).
Pipeline
Validation status
Residual errors may exist — please flag any mislabelled paragraph on the community tab.
Usage
Load a clean dataset and build the subsets
Load, keep only standard monetary-policy conferences and English Q&A, then split into the IS / Q&A / questions / answers subsets. intro_paragraphs and intro_full_text already exclude section headings and ceremonial preambles.
from datasets import load_dataset
ds = load_dataset("brjoey/ecb-press-conferences", split="train")
# Keep only standard monetary-policy conferences (drops the 6 non-MP events)
ds = ds.filter(lambda r: r["is_monetary_policy"])
# Introductory statement (no headings, no ceremonial preamble)
is_full = ds["intro_full_text"] # list[str] one IS string per conference
is_paras = ds["intro_paragraphs"] # list[list[str]] IS body paragraphs
# Q&A — English turns only (drops the few French tribute/question turns)
def en_turns(row):
return [t for t in row["qa_turns"] if t["lang"] == "en"]
qa_paras = [[t["text"] for t in en_turns(row)] for row in ds] # list[list[str]]
qa_full = ["\n\n".join(turns) for turns in qa_paras] # list[str] per conference
questions = [[t["text"] for t in en_turns(row) if t["role"] == "question"] for row in ds]
answers = [[t["text"] for t in en_turns(row) if t["role"] == "answer"] for row in ds]
# Flatten across the whole corpus if you don't need per-conference grouping
all_questions = [q for conf in questions for q in conf]
all_answers = [a for conf in answers for a in conf]From 2021 the introductory statement is split under named sections (Economic activity, Inflation, Monetary policy stance), stored in intro_headings as {text, after_paragraph_index}. Work with intro_paragraphs alone to ignore them, or use after_paragraph_index to reinsert each heading after that body paragraph.
Data-quality flags
Almost every entry is a standard English press conference: an introductory statement followed by a Q&A. A few are exceptions — some entries aren't monetary-policy conferences at all, a few Q&A turns are in French, and away meetings open with a host's welcome address. These fields let you find and drop those exceptions:
The load example above shows how to apply these to get a clean English monetary-policy dataset.
Language
The corpus is English. Six Q&A turns across three conferences are in French — always a farewell tribute or a French-language question+answer at an away meeting — and are tagged lang="fr" on the relevant qa_turns (has_non_english / n_non_english_paragraphs summarise this at row level):
The introductory statements are English throughout, so intro_paragraphs is not language-tagged.
Ceremonial preambles
Twice a year the Governing Council meets outside Frankfurt, hosted by a national central bank whose governor might give a welcome address before the president's statement. On such pages the ECB separates the welcome address from the IS with an extra ***. Where that preamble would otherwise be merged into the IS it is split into ceremonial_paragraphs instead, keeping intro_paragraphs clean. Currently non-empty for 2011-10-06 (Berlin) — Bundesbank President Weidmann's welcome address at Trichet's final press conference.
Non-standard entries
Every conference contains an introductory statement (the minimum is 5 body paragraphs), so there are no IS-less rows. What differs from the standard layout:
Not monetary-policy press conferences (is_monetary_policy == False) — six historical entries the ECB filed on the monetary-policy-statement URL path that are actually other events:
No Q&A (has_qa == False) — nine conferences: the six non-MP events listed above, plus three genuine early monetary-policy conferences from 1998 (1998-06-09, 1998-07-08, 1998-09-11), when the ECB reported Governing Council decisions without a press Q&A.
Note: the 2014-10-26 comprehensive-assessment briefing and the abbreviated 2007-08-02 statement (issued during the onset of the financial crisis) are monetary-policy conferences and remain flagged is_monetary_policy == True.Issues and contributions
Found a labeling error or a missing conference? Please open a discussion on the dataset community tab.
License
The transcript texts are © European Central Bank, Frankfurt am Main, Germany. Reproduction is permitted provided the ECB is cited as the source. See the ECB copyright notice.
