The hardware and bandwidth for this mirror is donated by dogado GmbH, the Webhosting and Full Service-Cloud Provider. Check out our Wordpress Tutorial.
If you wish to report a bug, or if you are interested in having us mirror your free-software or open-source project, please feel free to contact us at mirror[@]dogado.de.

Receiver Profiles (CNAE) and DICT Users

This vignette covers the two endpoints added to the BCB PIX Open Data API and supported since pixr 0.1.1:

library(pixr)
library(dplyr)

Users registered in the DICT

Unlike the other endpoints, PixUsuariosCadastradosDICT takes no reference-date parameter: a single request returns the full monthly series. Use orderby and top to narrow it:

users <- get_pix_dict_users(orderby = "DataGraficosPix desc", top = 6)
users
#> # A tibble: 6 x 4
#>   DataGraficosPix qtdUsuariosPessoaFisica qtdUsuariosPessoaJuridica qtdUsuariosCadastrad...
#>   <date>                            <dbl>                     <dbl>                  <dbl>
#> 1 2026-09-30                    168245596                  18729138              186974734
#> 2 2026-08-31                    167721822                  18557780              186279602
#> 3 2026-07-31                    167141580                  18496255              185637835
#> 4 2026-06-30                    166529238                  18338313              184867551
#> 5 2026-05-31                    165981454                  18136372              184117826
#> 6 2026-04-30                    165307979                  17911400              183219379

The column DataGraficosPix is parsed as a Date (last day of each month), so the series is ready for time arithmetic and plotting:

users |>
  arrange(DataGraficosPix) |>
  mutate(
    monthly_growth = qtdUsuariosCadastradosDICTTotal -
      lag(qtdUsuariosCadastradosDICTTotal)
  ) |>
  select(DataGraficosPix, total = qtdUsuariosCadastradosDICTTotal, monthly_growth)
#> # A tibble: 6 x 3
#>   DataGraficosPix     total monthly_growth
#>   <date>              <dbl>          <dbl>
#> 1 2026-04-30      183219379             NA
#> 2 2026-05-31      184117826         898447
#> 3 2026-06-30      184867551         749725
#> 4 2026-07-31      185637835         770284
#> 5 2026-08-31      186279602         641767
#> 6 2026-09-30      186974734         695132

Plotting the full series:

library(ggplot2)
library(scales)

get_pix_dict_users() |>
  ggplot(aes(DataGraficosPix, qtdUsuariosCadastradosDICTTotal)) +
  geom_line(linewidth = 1) +
  scale_y_continuous(labels = label_number(scale_cut = cut_short_scale())) +
  labs(
    x = NULL, y = "Users registered in DICT",
    title = "PIX adoption: users with at least one registered key"
  ) +
  theme_minimal()

Receiver profiles: CNAE section, company size, and MEI

get_pix_cnae_stats() profiles the receiving side of PIX transactions: which economic sectors get paid, how large the receiving companies are, and whether the receiver is an individual microentrepreneur (MEI).

pix_columns("cnae")

The database parameter selects a snapshot, not a month

As with get_pix_transactions_by_municipality(), the required database parameter selects the data snapshot, and the response can contain rows for several reference months (AnoMes). To analyze a single month, add an AnoMes filter:

cnae <- get_pix_cnae_stats(
  database = "202506",
  filter = "AnoMes eq 202506"
)

Where do MEI receive PIX payments?

mei <- get_pix_cnae_stats(
  database = "202506",
  filter = "AnoMes eq 202506 and mei eq 'S'"
)

mei |>
  group_by(cnssecao) |>
  summarise(
    total_value = sum(vllanliq),
    transactions = sum(qtlanliq),
    .groups = "drop"
  ) |>
  arrange(desc(total_value)) |>
  slice_head(n = 5)
#> # A tibble: 5 x 3
#>   cnssecao                                                        total_value transactions
#>   <chr>                                                                 <dbl>        <dbl>
#> 1 Pessoa fisica                                                 129893546653.    545210144
#> 2 G - Comercio, reparacao de veiculos automotores e motocicletas  8253029010.     56506481
#> 3 I - Alojamento e alimentacao                                    2488863327.     31068838
#> 4 H - Transporte, armazenagem e correio                           2474709446.      7724758
#> 5 S - Outras atividades de servicos                               2317447612.     13550221

Value received by company size

get_pix_cnae_stats(
  database = "202506",
  filter = "AnoMes eq 202506 and tipopessoa eq 'PJ'"
) |>
  group_by(porte) |>
  summarise(
    total_value = sum(vllanliq),
    transactions = sum(qtlanliq),
    .groups = "drop"
  ) |>
  arrange(desc(total_value))
#> # A tibble: 5 x 3
#>   porte         total_value transactions
#>   <chr>               <dbl>        <dbl>
#> 1 Demais            1.06e12   1141105592
#> 2 Microempresa      2.57e11   1190137127
#> 3 Pequeno Porte     1.14e11    348707396
#> 4 Outros            7.01e 7       119364
#> 5 NA                1.57e 6          930

Note how micro companies receive more transactions than all larger companies combined (“Demais”), while the larger companies concentrate most of the value – a typical signature of PIX as a retail payment method.

Other useful filters

# Only Pix Saque / Pix Troco (cash withdrawal) transactions
saque <- get_pix_cnae_stats(
  database = "202506",
  filter = "AnoMes eq 202506 and finalidade ne 'Pix'"
)

# Payments between accounts of the same person
mesma_titularidade <- get_pix_cnae_stats(
  database = "202506",
  filter = "AnoMes eq 202506 and mesmatit eq 'S'"
)

Learn more

These binaries (installable software) and packages are in development.
They may not be fully stable and should be used with caution. We make no claims about them.
Health stats visible at Monitor.