Full Quarterly Bulletin Vintage History

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"
)
Revisions in nominal GDP levels, across vintages

By Aidan Horn, data engineer @ Codera Analytics