Last observation: 3 sept. 2026 (N = 7)
First observation: 1 janv. 1999 (N = 6)
Last data update: 05 sept. 2026, 03:09
Last compile: 06 sept. 2026, 14:07
Info
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.
variable
Code
liq_daily |>
left_join(variable, by = "variable") |>
group_by(variable, Variable) |>
summarise(Nobs = n()) |>
arrange(variable) |>
print_table_conditional()
| ABSPP |
ABSPP - ABS purchase programme |
622 |
| CBPP1 |
CBPP1 - Covered bond purchase programme |
2735 |
| CBPP2 |
CBPP2 - Covered bond purchase programme 2 |
2005 |
| CBPP3 |
CBPP3 - Covered bond purchase programme 3 |
622 |
| CSPP |
CSPP - Corporate sector purchase programme |
537 |
| DF |
Deposit facility |
9301 |
| MLF |
Marginal lending facility |
9301 |
| OMO |
Open market operations excl. MonPol portfolios |
9301 |
| PEPP |
PEPP - Pandemic emergency purchase programme |
336 |
| PSPP |
PSPP - Public sector purchase programm |
601 |
| SMP |
SMP - Securities Markets programme |
663 |
| current_accounts |
Current accounts |
9337 |
| excess_liquidity |
Excess liquidity |
1822 |
| net_autonomous_monpol |
Net liquidity effect from Autonomous Factors and MonPol portfolios |
9337 |
| reserve_requirements |
Reserve requirements |
9337 |
duplicates
Same + different values
Code
liq_daily |>
group_by(variable, date) |>
filter(n()>1) |>
arrange(date, variable) |>
print_table_conditional()
Different values
Code
liq_daily |>
unique() |>
group_by(variable, date) |>
filter(n()>1) |>
arrange(date, variable) |>
print_table_conditional()
| 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 |
Data on liquidity
Last date
Code
liq_daily |>
filter(date == max(date)) |>
print_table_conditional()
| 2026-09-03 |
OMO |
28171 |
| 2026-09-03 |
MLF |
0 |
| 2026-09-03 |
DF |
1989894 |
| 2026-09-03 |
net_autonomous_monpol |
-2281646 |
| 2026-09-03 |
current_accounts |
319923 |
| 2026-09-03 |
reserve_requirements |
174661 |
| 2026-09-03 |
excess_liquidity |
2135157 |
Last date by variable
Code
liq_daily |>
group_by(variable) |>
filter(date == max(date)) |>
print_table_conditional()
| 2026-09-03 |
OMO |
28171 |
| 2026-09-03 |
MLF |
0 |
| 2026-09-03 |
DF |
1989894 |
| 2026-09-03 |
net_autonomous_monpol |
-2281646 |
| 2026-09-03 |
current_accounts |
319923 |
| 2026-09-03 |
reserve_requirements |
174661 |
| 2026-08-28 |
CBPP1 |
0 |
| 2026-08-28 |
CBPP2 |
0 |
| 2026-08-28 |
SMP |
14 |
| 2026-08-28 |
CBPP3 |
190023 |
| 2026-08-28 |
ABSPP |
1979 |
| 2026-08-28 |
PSPP |
1669210 |
| 2026-08-28 |
CSPP |
217171 |
| 2026-09-03 |
excess_liquidity |
2135157 |
| 2026-08-28 |
PEPP |
1284914 |
Asset purchase program
CBPP1, CBPP2, CBPP3, SMP, ABSPP, PSPP, CSPP, PEPP
All
Lines
Code
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 = ""))
Stock
Code
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 = ""))
2020-
Code
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 = ""))
2022-
Code
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 = ""))
Excess Liquidity
Code
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 = ""))
Excess Liquidity & Deposit Facility
Code
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 = ""))
Synthesis excess liquidity
All
Code
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 = ""))
2022
Code
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 = ""))
Excess Liquidity
Code
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 = ""))
Excess Liquidity & Deposit Facility & Current accounts
All
Code
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 = ""))
2020-
Code
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 = ""))
2022-
Code
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 = ""))
Excess Liquidity & Deposit Facility & Current accounts
All
Code
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 = ""))
2020-
Code
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 = ""))
2022-
Code
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 = ""))
July 2022- Novembre 2022
Code
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 = ""))