We have now loaded the full Quarterly Bulletin (QB) vintage history into EconData, from 2011Q2 to the current period, available publicly, for free. This spans 14 years and 55 quarters so far, with about 4600 series. The latest version of our QB datasets is 1.1.3, which is where we loaded the full vintage history recently. Our QB datasets are:
- Money and Banking
QB_MONBANK - Capital Market
QB_CAPMARK - Public Finance
QB_PUBLFIN - External Economic Accounts
QB_BALNPAY - National Accounts
QB_NATLACC - General Economic Indicators
QB_BUSCYCL
(see more details on the user guide page).
Nomenclature
Although each QB is published at the end of each quarter, the vintage description is the previous quarter, as the quarterly data is only up-to-date as of the previous quarter (even though monthly, weekly and daily data is more up-to-date). For example, we named the 30 September 2025 vintage “2025Q2”.
Intra-quarterly updates
In-between each quarterly load, we also query QB series from the SARB’s API, and update the QB with that subset, staging the data every weekday (as “unreleased” in EconData) and releasing that on or after the 15th day of January, February, March, May, June, August, September and November.
Evidence of our current set of vintages
Please run the econdatar::read_release("DATASET_ID") function in R, to see the available vintages (with version = "latest" by default). For example,
> read_release("QB_MONBANK")
Fetching releases for: ECONDATA-QB_MONBANK-1.1.3
release start-period end-period description
<POSc> <POSc> <POSc> <char>
1: 2025-11-17 09:53:51 1964-01-01 2025-09-12 2025Q2 (2025-11-17)
2: 2025-09-30 10:00:00 1922-12-01 2025-09-12 2025Q2 (2025-09-30)
3: 2025-06-30 10:00:00 1964-01-01 2025-06-13 2025Q1 (2025-06-30)
4: 2025-03-31 10:00:00 1960-01-01 2025-03-10 2024Q4 (2025-03-31)
5: 2024-12-31 10:00:00 1964-01-01 2024-11-29 2024Q3 (2024-12-31)
6: 2024-09-30 10:00:00 1964-01-01 2024-09-13 2024Q2 (2024-09-30)
7: 2024-06-30 10:00:00 1922-12-01 2024-06-10 2024Q1 (2024-06-30)
8: 2024-03-31 10:00:00 1922-12-01 2024-03-15 2023Q4 (2024-03-31)
9: 2023-12-31 10:00:00 1964-01-01 2023-12-01 2023Q3 (2023-12-31)
10: 2023-09-30 10:00:00 1922-12-01 2023-09-04 2023Q2 (2023-09-30)
11: 2023-06-30 10:00:00 1948-12-01 2023-06-15 2023Q1 (2023-06-30)
12: 2023-03-31 10:00:00 1964-01-01 2023-03-17 2022Q4 (2023-03-31)
13: 2022-12-31 10:00:00 1960-01-01 2022-11-25 2022Q3 (2022-12-31)
14: 2022-09-30 10:00:00 1960-01-01 2022-09-09 2022Q2 (2022-09-30)
15: 2022-06-30 10:00:00 1960-01-01 2022-06-10 2022Q1 (2022-06-30)
16: 2022-03-31 10:00:00 1964-01-01 2022-03-11 2021Q4 (2022-03-31)
17: 2021-12-31 10:00:00 1960-01-01 2021-12-06 2021Q3 (2021-12-31)
18: 2021-09-30 10:00:00 1960-01-01 2021-09-10 2021Q2 (2021-09-30)
19: 2021-06-30 10:00:00 1960-01-01 2021-06-14 2021Q1 (2021-06-30)
20: 2021-03-31 10:00:00 1960-01-01 2021-03-01 2020Q4 (2021-03-31)
21: 2020-12-31 10:00:00 1960-01-01 2020-05-01 2020Q3 (2020-12-31)
22: 2020-06-30 10:00:00 1960-01-01 2020-07-06 2020Q1 (2020-06-30)
23: 2020-03-31 10:00:00 1964-01-01 2020-02-28 2019Q4 (2020-03-31)
24: 2019-12-31 10:00:00 1960-01-01 2019-10-01 2019Q3 (2019-12-31)
25: 2019-09-30 10:00:00 1960-01-01 2019-07-01 2019Q2 (2019-09-30)
26: 2019-06-30 10:00:00 1960-01-01 2019-04-01 2019Q1 (2019-06-30)
27: 2019-03-31 10:00:00 1960-01-01 2019-01-01 2018Q4 (2019-03-31)
28: 2018-12-31 10:00:00 1960-01-01 2018-10-01 2018Q3 (2018-12-31)
29: 2018-09-30 10:00:00 1960-01-01 2018-07-01 2018Q2 (2018-09-30)
30: 2018-06-30 10:00:00 1960-01-01 2018-04-01 2018Q1 (2018-06-30)
31: 2018-03-31 10:00:00 1960-01-01 2018-01-01 2017Q4 (2018-03-31)
32: 2017-12-31 10:00:00 1960-01-01 2017-10-01 2017Q3 (2017-12-31)
33: 2017-09-30 10:00:00 1960-01-01 2017-06-01 2017Q2 (2017-09-30)
34: 2017-06-30 10:00:00 1964-01-01 2017-03-01 2017Q1 (2017-06-30)
35: 2017-03-31 10:00:00 1964-01-01 2017-01-01 2016Q4 (2017-03-31)
36: 2016-12-31 10:00:00 1960-01-01 2016-09-01 2016Q3 (2016-12-31)
37: 2016-09-30 10:00:00 1964-01-01 2016-06-01 2016Q2 (2016-09-30)
38: 2016-06-30 10:00:00 1964-01-01 2016-03-01 2016Q1 (2016-06-30)
39: 2016-03-31 10:00:00 1964-01-01 2015-12-01 2015Q4 (2016-03-31)
40: 2015-12-31 10:00:00 1960-01-01 2015-09-01 2015Q3 (2015-12-31)
41: 2015-06-30 10:00:00 1960-01-01 2015-03-01 2015Q1 (2015-06-30)
42: 2015-03-31 10:00:00 1960-01-01 2014-12-01 2014Q4 (2015-03-31)
43: 2014-12-31 10:00:00 1960-01-01 2014-09-01 2014Q3 (2014-12-31)
44: 2014-09-30 10:00:00 1960-01-01 2014-06-01 2014Q2 (2014-09-30)
45: 2014-06-30 10:00:00 1960-01-01 2014-03-01 2014Q1 (2014-06-30)
46: 2014-03-31 10:00:00 1960-01-01 2013-12-01 2013Q4 (2014-03-31)
47: 2013-12-31 10:00:00 1960-01-01 2013-09-01 2013Q3 (2013-12-31)
48: 2013-09-30 10:00:00 1964-01-01 2013-06-01 2013Q2 (2013-09-30)
49: 2013-06-30 10:00:00 1960-01-01 2013-03-01 2013Q1 (2013-06-30)
50: 2013-03-31 10:00:00 1960-01-01 2012-12-01 2012Q4 (2013-03-31)
51: 2012-12-31 10:00:00 1964-01-01 2012-09-01 2012Q3 (2012-12-31)
52: 2012-09-30 10:00:00 1960-01-01 2012-06-01 2012Q2 (2012-09-30)
53: 2012-06-30 10:00:00 1964-01-01 2012-03-01 2012Q1 (2012-06-30)
54: 2012-03-31 10:00:00 1960-01-01 2011-12-01 2011Q4 (2012-03-31)
55: 2011-12-31 10:00:00 1960-01-01 2011-09-01 2011Q3 (2011-12-31)
56: 2011-09-30 10:00:00 1964-01-01 2011-06-01 2011Q2 (2011-09-30)
release start-period end-period description
This looks the same for
read_release("QB_CAPMARK")
read_release("QB_PUBLFIN")
read_release("QB_BALNPAY")
read_release("QB_NATLACC")
read_release("QB_BUSCYCL")
Comparing series over vintages
You can compare a series over all the vintages with the hist_obs option when extracting the data. The following code produces the plot below it, with each colour representing data from a different vintage.
library(econdatar)
library(tidyverse)
library(hues)
data_qb_history <- read_dataset(
id = "QB_NATLACC",
tidy = FALSE,
wide = FALSE,
combine = TRUE,
series_key = "KBP6006L.Q.N.S.LA",
hist_obs = TRUE
)
ggplot_history <- ggplot(data_qb_history[["KBP6006L.Q.N.S.LA"]] %>%
as_tibble() %>%
mutate(created = format(ymd_hms(created), "%Y-%m-%d"),
TIME_PERIOD = ymd(TIME_PERIOD)) %>%
complete(created, TIME_PERIOD),
aes(x = TIME_PERIOD, colour = created, y = OBS_VALUE / (10^3))) +
geom_line(
linewidth = rel(0.65),
alpha = 0.75,
show.legend = FALSE
) +
theme_minimal() +
scale_y_log10(
labels = scales::label_number(big.mark = " ")
) +
theme(
axis.title.x = element_blank(),
legend.text = element_text(size = rel(0.6)),
legend.key.spacing.y = unit(-0.3, "lines"),
plot.title.position = "plot",
panel.grid = element_blank()
) +
labs(
y = "R billions",
title = "Nominal GDP at market prices",
colour = "Vintage"
) +
scale_color_manual(
values = iwanthue(n = length(unique(data_qb_history[[1]]$created)))
)
ggsave(
file = "sarb/qb/gdp_history.jpg",
plot = ggplot_history,
width = 13,
height = 7,
unit = "cm"
)

By Aidan Horn, data engineer @ Codera Analytics