Last observation: 2026-08-13 (N = 7)
First observation: 1999-01-01 (N = 6)
Last data update: 17 aoû 2026, 04:01. Last compile: 18 aoû 2026, 01:06
Data - ECB
Last observation: 2026-08-13 (N = 7)
First observation: 1999-01-01 (N = 6)
Last data update: 17 aoû 2026, 04:01. Last compile: 18 aoû 2026, 01:06
Monetary financial institutions in the euro area are legally obliged to report data to their National Central Banks, which in turn report to the ECB.
liq_daily |>
left_join(variable, by = "variable") |>
group_by(variable, Variable) |>
summarise(Nobs = n()) |>
arrange(variable) |>
print_table_conditional()| variable | Variable | Nobs |
|---|---|---|
| ABSPP | ABSPP - ABS purchase programme | 619 |
| CBPP1 | CBPP1 - Covered bond purchase programme | 2732 |
| CBPP2 | CBPP2 - Covered bond purchase programme 2 | 2002 |
| CBPP3 | CBPP3 - Covered bond purchase programme 3 | 619 |
| CSPP | CSPP - Corporate sector purchase programme | 534 |
| DF | Deposit facility | 9286 |
| MLF | Marginal lending facility | 9286 |
| OMO | Open market operations excl. MonPol portfolios | 9286 |
| PEPP | PEPP - Pandemic emergency purchase programme | 333 |
| PSPP | PSPP - Public sector purchase programm | 598 |
| SMP | SMP - Securities Markets programme | 660 |
| current_accounts | Current accounts | 9322 |
| excess_liquidity | Excess liquidity | 1807 |
| net_autonomous_monpol | Net liquidity effect from Autonomous Factors and MonPol portfolios | 9322 |
| reserve_requirements | Reserve requirements | 9322 |
liq_daily |>
group_by(variable, date) |>
filter(n()>1) |>
arrange(date, variable) |>
print_table_conditional()liq_daily |>
unique() |>
group_by(variable, date) |>
filter(n()>1) |>
arrange(date, variable) |>
print_table_conditional()| date | variable | value |
|---|---|---|
| 2008-01-01 | OMO | 535514 |
| 2008-01-01 | OMO | 535503 |
| 2008-01-01 | net_autonomous_monpol | 256501 |
| 2008-01-01 | net_autonomous_monpol | 256490 |
| 2008-01-02 | OMO | 468454 |
| 2008-01-02 | OMO | 468443 |
| 2008-01-02 | net_autonomous_monpol | 262467 |
| 2008-01-02 | net_autonomous_monpol | 262456 |
| 2008-01-03 | OMO | 437094 |
| 2008-01-03 | OMO | 437083 |
| 2008-01-03 | net_autonomous_monpol | 269250 |
| 2008-01-03 | net_autonomous_monpol | 269239 |
| 2008-01-15 | current_accounts | 168183 |
| 2008-01-15 | current_accounts | 168187 |
| 2008-01-15 | net_autonomous_monpol | 232059 |
| 2008-01-15 | net_autonomous_monpol | 232055 |
liq_daily |>
filter(date == max(date)) |>
print_table_conditional()| date | variable | value |
|---|---|---|
| 2026-08-13 | OMO | 30724 |
| 2026-08-13 | MLF | 32 |
| 2026-08-13 | DF | 2010074 |
| 2026-08-13 | net_autonomous_monpol | -2303529 |
| 2026-08-13 | current_accounts | 324210 |
| 2026-08-13 | reserve_requirements | 174661 |
| 2026-08-13 | excess_liquidity | 2159592 |
liq_daily |>
group_by(variable) |>
filter(date == max(date)) |>
print_table_conditional()| date | variable | value |
|---|---|---|
| 2026-08-13 | OMO | 30724 |
| 2026-08-13 | MLF | 32 |
| 2026-08-13 | DF | 2010074 |
| 2026-08-13 | net_autonomous_monpol | -2303529 |
| 2026-08-13 | current_accounts | 324210 |
| 2026-08-13 | reserve_requirements | 174661 |
| 2026-08-07 | CBPP1 | 0 |
| 2026-08-07 | CBPP2 | 0 |
| 2026-08-07 | SMP | 14 |
| 2026-08-07 | CBPP3 | 190915 |
| 2026-08-07 | ABSPP | 2019 |
| 2026-08-07 | PSPP | 1678824 |
| 2026-08-07 | CSPP | 218180 |
| 2026-08-13 | excess_liquidity | 2159592 |
| 2026-08-07 | PEPP | 1291480 |
liq_daily |>
left_join(variable, by = "variable") |>
filter(variable %in% c("CBPP1", "CBPP2", "CBPP3", "SMP", "ABSPP", "PSPP", "CSPP", "PEPP")) |>
ggplot() + geom_line(aes(x = date, y = value/10^3, color = Variable)) +
xlab("") + ylab("") + theme_minimal() +
scale_x_date(breaks = as.Date(paste0(seq(1940, 2030, 2), "-01-01")),
labels = date_format("%Y")) +
theme(legend.position = c(0.3, 0.7),
legend.title = element_blank()) +
scale_y_continuous(breaks = 1000*seq(-100, 90, .5),
labels = scales::dollar_format(acc = 1, su = " Bn€", pre = ""))
liq_daily |>
left_join(variable, by = "variable") |>
filter(variable %in% c("CBPP1", "CBPP2", "CBPP3", "SMP", "ABSPP", "PSPP", "CSPP", "PEPP")) |>
ggplot() + geom_area(aes(x = date, y = value/10^3, fill = Variable), alpha = 0.5) +
xlab("") + ylab("") + theme_minimal() +
scale_x_date(breaks = as.Date(paste0(seq(1940, 2100, 1), "-01-01")),
labels = date_format("%Y")) +
# Add labels manually with matching colors
annotate("text", x = as.Date("2023-01-01"), y = 3000, label = "PEPP", color = scales::hue_pal()(8)[6], size = 4) +
annotate("text", x = as.Date("2021-01-01"), y = 1300, label = "PSPP", color = scales::hue_pal()(8)[7], size = 4) +
theme(legend.position = c(0.3, 0.7),
legend.title = element_blank()) +
scale_y_continuous(breaks = 1000*seq(-100, 90, .5),
labels = scales::dollar_format(acc = 1, su = " Bn€", pre = ""))
liq_daily |>
left_join(variable, by = "variable") |>
filter(date >= as.Date("2020-01-01")) |>
filter(variable %in% c("CBPP1", "CBPP2", "CBPP3", "SMP", "ABSPP", "PSPP", "CSPP", "PEPP")) |>
ggplot() + geom_line(aes(x = date, y = value/10^3, color = Variable)) +
xlab("") + ylab("") + theme_minimal() +
scale_x_date(breaks = seq(from = as.Date("2020-01-01"), Sys.Date(), by = "6 months"),
labels = date_format("%b %Y")) +
theme(legend.position = c(0.5, 0.5),
legend.title = element_blank()) +
scale_y_continuous(breaks = 1000*seq(-100, 90, .5),
labels = scales::dollar_format(acc = 1, su = " Bn€", pre = ""))
liq_daily |>
left_join(variable, by = "variable") |>
filter(date >= as.Date("2022-01-01")) |>
filter(variable %in% c("CBPP1", "CBPP2", "CBPP3", "SMP", "ABSPP", "PSPP", "CSPP", "PEPP")) |>
ggplot() + geom_line(aes(x = date, y = value/10^3, color = Variable)) +
xlab("") + ylab("") + theme_minimal() +
scale_x_date(breaks = seq(from = as.Date("2022-01-01"), as.Date("2026-01-01"), by = "2 months"),
labels = date_format("%b %Y")) +
theme(legend.position = c(0.45, 0.5),
legend.title = element_blank(),
axis.text.x = element_text(angle = 45, vjust = 1, hjust = 1)) +
scale_y_continuous(breaks = 1000*seq(-100, 90, .5),
labels = scales::dollar_format(acc = 1, su = " Bn€", pre = ""))
liq_daily |>
left_join(variable, by = "variable") |>
filter(Variable == "Excess liquidity") |>
ggplot() + geom_line(aes(x = date, y = value/10^3)) +
xlab("") + ylab("") + theme_minimal() +
scale_x_date(breaks = as.Date(paste0(seq(1940, 2030, 1), "-01-01")),
labels = date_format("%Y")) +
theme(legend.position = c(0.4, 0.9),
legend.title = element_blank()) +
scale_y_continuous(breaks = 1000*seq(-100, 90, .5),
labels = scales::dollar_format(acc = 1, su = " Bn€", pre = ""))
liq_daily |>
left_join(variable, by = "variable") |>
filter(Variable %in% c("Excess liquidity", "Deposit facility")) |>
ggplot() + geom_line(aes(x = date, y = value/10^3, color = Variable)) +
xlab("") + ylab("") + theme_minimal() +
scale_x_date(breaks = as.Date(paste0(seq(1940, 2030, 2), "-01-01")),
labels = date_format("%Y")) +
theme(legend.position = c(0.4, 0.9),
legend.title = element_blank()) +
scale_y_continuous(breaks = 1000*seq(-100, 90, .5),
labels = scales::dollar_format(acc = 1, su = " Bn€", pre = ""))
liq_daily |>
filter(variable %in% c("excess_liquidity", "reserve_requirements", "current_accounts", "DF", "MLF")) |>
group_by(date, variable) |>
filter(row_number(value) == 1) |>
spread(variable, value) |>
transmute(date, `Excess Liquidity (ECB)` = excess_liquidity,
`Excess Liquidity (own)` = current_accounts-reserve_requirements+DF-MLF) |>
gather(Variable, value, -date) |>
ggplot() + geom_line(aes(x = date, y = value/10^3, color = Variable, linetype = Variable)) +
xlab("") + ylab("") + theme_minimal() +
scale_color_manual(values = c("red", "black")) +
scale_x_date(breaks = as.Date(paste0(seq(1940, 2030, 2), "-01-01")),
labels = date_format("%Y")) +
theme(legend.position = c(0.3, 0.9),
legend.title = element_blank()) +
scale_y_continuous(breaks = 1000*seq(-100, 90, .5),
labels = scales::dollar_format(acc = 1, su = " Bn€", pre = ""))
liq_daily |>
filter(variable %in% c("excess_liquidity", "reserve_requirements", "current_accounts", "DF", "MLF")) |>
group_by(date, variable) |>
filter(row_number(value) == 1) |>
spread(variable, value) |>
transmute(date, `Excess Liquidity (ECB)` = excess_liquidity,
`Excess Liquidity (own)` = current_accounts-reserve_requirements+DF-MLF) |>
gather(Variable, value, -date) |>
filter(date >= as.Date("2022-01-01")) |>
ggplot() + geom_line(aes(x = date, y = value/10^3, color = Variable)) +
xlab("") + ylab("") + theme_minimal() +
scale_x_date(breaks = seq(from = as.Date("2022-01-01"), as.Date("2026-01-01"), by = "2 months"),
labels = date_format("%b %Y")) +
theme(legend.position = c(0.8, 0.9),
legend.title = element_blank(),
axis.text.x = element_text(angle = 45, vjust = 1, hjust = 1)) +
scale_y_continuous(breaks = 1000*seq(-100, 90, .5),
labels = scales::dollar_format(acc = 1, su = " Bn€", pre = ""))
liq_daily |>
filter(variable %in% c("excess_liquidity", "reserve_requirements", "current_accounts", "DF", "MLF")) |>
group_by(date, variable) |>
filter(row_number(value) == 1) |>
spread(variable, value) |>
transmute(date, value = current_accounts-reserve_requirements+DF-MLF) |>
ggplot() + geom_line(aes(x = date, y = value/10^3)) +
xlab("") + ylab("Excess liquidity") + theme_minimal() +
scale_x_date(breaks = as.Date(paste0(seq(1940, 2030, 2), "-01-01")),
labels = date_format("%Y")) +
theme(legend.position = c(0.4, 0.9),
legend.title = element_blank()) +
scale_y_continuous(breaks = 1000*seq(-100, 90, .5),
labels = scales::dollar_format(acc = 1, su = " Bn€", pre = ""))
liq_daily |>
left_join(variable, by = "variable") |>
filter(Variable %in% c("Excess liquidity", "Deposit facility", "Current accounts")) |>
ggplot() + geom_line(aes(x = date, y = value/10^3, color = Variable)) +
xlab("") + ylab("") + theme_minimal() +
scale_x_date(breaks = as.Date(paste0(seq(1940, 2030, 2), "-01-01")),
labels = date_format("%Y")) +
theme(legend.position = c(0.4, 0.9),
legend.title = element_blank()) +
scale_y_continuous(breaks = 1000*seq(-100, 90, .5),
labels = scales::dollar_format(acc = 1, su = " Bn€", pre = ""))
liq_daily |>
left_join(variable, by = "variable") |>
filter(date >= as.Date("2020-01-01")) |>
filter(Variable %in% c("Excess liquidity", "Deposit facility", "Current accounts")) |>
ggplot() + geom_line(aes(x = date, y = value/10^3, color = Variable)) +
xlab("") + ylab("") + theme_minimal() +
scale_x_date(breaks = seq(from = as.Date("2020-01-01"), Sys.Date(), by = "6 months"),
labels = date_format("%b %Y")) +
theme(legend.position = c(0.2, 0.9),
legend.title = element_blank()) +
scale_y_continuous(breaks = 1000*seq(-100, 90, .5),
labels = scales::dollar_format(acc = 1, su = " Bn€", pre = ""))
liq_daily |>
left_join(variable, by = "variable") |>
filter(date >= as.Date("2022-01-01")) |>
filter(Variable %in% c("Excess liquidity", "Deposit facility", "Current accounts")) |>
ggplot() + geom_line(aes(x = date, y = value/10^3, color = Variable)) +
xlab("") + ylab("") + theme_minimal() +
scale_x_date(breaks = seq(from = as.Date("2022-01-01"), as.Date("2026-01-01"), by = "2 months"),
labels = date_format("%b %Y")) +
theme(legend.position = c(0.15, 0.5),
legend.title = element_blank(),
axis.text.x = element_text(angle = 45, vjust = 1, hjust = 1)) +
scale_y_continuous(breaks = 1000*seq(-100, 90, .5),
labels = scales::dollar_format(acc = 1, su = " Bn€", pre = ""))
liq_daily |>
left_join(variable, by = "variable") |>
filter(Variable %in% c("Excess liquidity", "Deposit facility", "Current accounts", "Marginal lending facility", "Reserve requirements")) |>
mutate(Variable = factor(Variable, levels = c("Current accounts", "Reserve requirements", "Deposit facility", "Marginal lending facility", "Excess liquidity"))) |>
ggplot() + geom_line(aes(x = date, y = value/10^3, color = Variable)) +
xlab("") + ylab("") + theme_minimal() +
scale_x_date(breaks = as.Date(paste0(seq(1940, 2030, 2), "-01-01")),
labels = date_format("%Y")) +
theme(legend.position = c(0.2, 0.8),
legend.title = element_blank()) +
scale_y_continuous(breaks = 1000*seq(-100, 90, .5),
labels = scales::dollar_format(acc = 1, su = " Bn€", pre = ""))
liq_daily |>
left_join(variable, by = "variable") |>
filter(date >= as.Date("2020-01-01")) |>
filter(Variable %in% c("Excess liquidity", "Deposit facility", "Current accounts", "Marginal lending facility", "Reserve requirements")) |>
mutate(Variable = factor(Variable, levels = c("Current accounts", "Reserve requirements", "Deposit facility", "Marginal lending facility", "Excess liquidity"))) |>
ggplot() + geom_line(aes(x = date, y = value/10^3, color = Variable)) +
xlab("") + ylab("") + theme_minimal() +
scale_x_date(breaks = seq(from = as.Date("2020-01-01"), Sys.Date(), by = "6 months"),
labels = date_format("%b %Y")) +
theme(legend.position = c(0.5, 0.5),
legend.title = element_blank()) +
scale_y_continuous(breaks = 1000*seq(-100, 90, .5),
labels = scales::dollar_format(acc = 1, su = " Bn€", pre = ""))
liq_daily |>
left_join(variable, by = "variable") |>
filter(date >= as.Date("2022-01-01")) |>
filter(Variable %in% c("Excess liquidity", "Deposit facility", "Current accounts", "Marginal lending facility", "Reserve requirements")) |>
mutate(Variable = factor(Variable, levels = c("Current accounts", "Reserve requirements", "Deposit facility", "Marginal lending facility", "Excess liquidity"))) |>
ggplot() + geom_line(aes(x = date, y = value/10^3, color = Variable)) +
xlab("") + ylab("") + theme_minimal() +
scale_x_date(breaks = seq(from = as.Date("2022-01-01"), as.Date("2026-01-01"), by = "2 months"),
labels = date_format("%b %Y")) +
theme(legend.position = c(0.15, 0.5),
legend.title = element_blank(),
axis.text.x = element_text(angle = 45, vjust = 1, hjust = 1)) +
scale_y_continuous(breaks = 1000*seq(-100, 90, .5),
labels = scales::dollar_format(acc = 1, su = " Bn€", pre = ""))
liq_daily |>
left_join(variable, by = "variable") |>
filter(date >= as.Date("2022-09-05"),
date <= as.Date("2022-09-20")) |>
filter(Variable %in% c("Excess liquidity", "Deposit facility", "Current accounts", "Marginal lending facility", "Reserve requirements")) |>
mutate(Variable = factor(Variable, levels = c("Current accounts", "Reserve requirements", "Deposit facility", "Marginal lending facility", "Excess liquidity"))) |>
ggplot() + geom_line(aes(x = date, y = value/10^3, color = Variable)) +
xlab("") + ylab("") + theme_minimal() +
scale_x_date(breaks = seq(from = as.Date("2022-01-01"), as.Date("2026-01-01"), by = "1 day"),
labels = date_format("%d %b %Y")) +
theme(legend.position = c(0.15, 0.5),
legend.title = element_blank(),
axis.text.x = element_text(angle = 45, vjust = 1, hjust = 1)) +
scale_y_continuous(breaks = 1000*seq(-100, 90, .5),
labels = scales::dollar_format(acc = 1, su = " Bn€", pre = ""))