National Financial Accounts - CNF
Data - Banque de France
Info
Last observation: Trimestriel: 31 mar 2026 (N = 304,634)
First observation: Trimestriel: 31 déc 1995 (N = 304,634)
Last data update: 10 aoû 2026, 18:57. Last compile: 14 aoû 2026, 21:47
Structure
Net Lending (+) / Net Borrowing (-) by Sector
Balance of financial claims and liabilities (quarterly flows, non-consolidated).
NFCs, Households, General Government, Total Economy
Code
CNF |>
filter(variable %in% c("CNF.Q.N.FR.W0.S11.S1.N.N.B9F.F._Z._Z.XDC._T.S.V.N._T",
"CNF.Q.N.FR.W0.S1M.S1.N.N.B9F.F._Z._Z.XDC._T.S.V.N._T",
"CNF.Q.N.FR.W0.S13.S1.N.N.B9F.F._Z._Z.XDC._T.S.V.N._T",
"CNF.Q.N.FR.W0.S1.S1.N.N.B9F.F._Z._Z.XDC._T.S.V.N._T")) |>
mutate(Sector = case_when(REF_SECTOR == "S11" ~ "Non-financial corporations",
REF_SECTOR == "S1M" ~ "Households",
REF_SECTOR == "S13" ~ "General government",
REF_SECTOR == "S1" ~ "Total economy"),
value = value/1000) |>
ggplot() + geom_line(aes(x = date, y = value, color = Sector)) +
geom_hline(yintercept = 0, linetype = "dashed", color = "black") +
theme_minimal() + xlab("") + ylab("") +
scale_x_date(breaks = seq(1960, 2100, 5) |> paste0("-01-01") |> as.Date(),
labels = date_format("%Y")) +
scale_y_continuous(labels = dollar_format(accuracy = 1, prefix = "", suffix = " €bn")) +
theme(legend.position = c(0.25, 0.2),
legend.title = element_blank(),
legend.text = element_text(size = 7))
Since 2015
Code
CNF |>
filter(variable %in% c("CNF.Q.N.FR.W0.S11.S1.N.N.B9F.F._Z._Z.XDC._T.S.V.N._T",
"CNF.Q.N.FR.W0.S1M.S1.N.N.B9F.F._Z._Z.XDC._T.S.V.N._T",
"CNF.Q.N.FR.W0.S13.S1.N.N.B9F.F._Z._Z.XDC._T.S.V.N._T",
"CNF.Q.N.FR.W0.S1.S1.N.N.B9F.F._Z._Z.XDC._T.S.V.N._T")) |>
filter(date >= as.Date("2015-01-01")) |>
mutate(Sector = case_when(REF_SECTOR == "S11" ~ "Non-financial corporations",
REF_SECTOR == "S1M" ~ "Households",
REF_SECTOR == "S13" ~ "General government",
REF_SECTOR == "S1" ~ "Total economy"),
value = value/1000) |>
ggplot() + geom_line(aes(x = date, y = value, color = Sector)) +
geom_point(aes(x = date, y = value, color = Sector)) +
geom_hline(yintercept = 0, linetype = "dashed", color = "black") +
theme_minimal() + xlab("") + ylab("") +
scale_x_date(breaks = "1 year",
labels = date_format("%Y")) +
scale_y_continuous(labels = dollar_format(accuracy = 1, prefix = "", suffix = " €bn")) +
theme(legend.position = c(0.25, 0.15),
legend.title = element_blank(),
legend.text = element_text(size = 7),
axis.text.x = element_text(angle = 45, vjust = 1, hjust = 1))
Latest Available Quarter
Code
CNF |>
filter(variable %in% c("CNF.Q.N.FR.W0.S11.S1.N.N.B9F.F._Z._Z.XDC._T.S.V.N._T",
"CNF.Q.N.FR.W0.S1M.S1.N.N.B9F.F._Z._Z.XDC._T.S.V.N._T",
"CNF.Q.N.FR.W0.S13.S1.N.N.B9F.F._Z._Z.XDC._T.S.V.N._T",
"CNF.Q.N.FR.W0.S1.S1.N.N.B9F.F._Z._Z.XDC._T.S.V.N._T")) |>
filter(!is.na(value)) |>
mutate(Sector = case_when(REF_SECTOR == "S11" ~ "Non-financial corporations",
REF_SECTOR == "S1M" ~ "Households",
REF_SECTOR == "S13" ~ "General government",
REF_SECTOR == "S1" ~ "Total economy"),
value = value/1000) |>
filter(date == max(date)) |>
select(Sector, date, "€bn" = value) |>
arrange(desc(`€bn`)) |>
print_table_conditional()| Sector | date | €bn |
|---|---|---|
| Households | 2026-03-31 | 52.320 |
| Non-financial corporations | 2026-03-31 | -35.664 |
| General government | 2026-03-31 | -46.910 |