Skip to contents

Overview

ANVISA (Agencia Nacional de Vigilancia Sanitaria) is Brazil’s health surveillance agency responsible for regulating medicines, health products, food, cosmetics, sanitizers, tobacco, and pesticides. Its open data portal provides CSV files on product registrations, post-market surveillance (pharmacovigilance, hemovigilance, technovigilance), and controlled substance sales (SNGPC).

Feature Details
Source HTTPS CSV (dados.anvisa.gov.br)
Data types 14 (12 snapshot + 2 time-series)
Snapshot types Current registry/database state
SNGPC types Monthly controlled substance sales (2014–2026)

Data types

Use anvisa_types() to see all available types:

Snapshot types (12)

These download the current snapshot of the registry or database. No year or month parameter is needed.

Code Name Category
medicines Medicamentos Product Registration
medical_devices Produtos para Saude Product Registration
food Alimentos Product Registration
cosmetics Cosmeticos Product Registration
sanitizers Saneantes Product Registration
tobacco Produtos Fumigenos Product Registration
pesticides Agrotoxicos Reference
hemovigilance Hemovigilancia Surveillance
technovigilance Tecnovigilancia Surveillance
vigimed_notifications VigiMed Notificacoes Surveillance
vigimed_medicines VigiMed Medicamentos Surveillance
vigimed_reactions VigiMed Reacoes Surveillance

Time-series types (2)

These require a year parameter and optionally a month parameter.

Code Name Availability
sngpc SNGPC Industrializados Jan 2014 – Oct 2021, Jan 2026+
sngpc_compounded SNGPC Manipulados Jan 2014 – Oct 2021, Jan 2026+

Product registrations

Medicines

Download the complete registry of medicines approved by ANVISA:

medicines <- anvisa_data(type = "medicines")

# explore the data
nrow(medicines)
names(medicines)

# filter active medicines
active <- medicines |>
  filter(SITUACAO_REGISTRO == "ATIVO")

# count by therapeutic class
active |>
  count(CLASSE_TERAPEUTICA, sort = TRUE)

Medical devices

devices <- anvisa_data(type = "medical_devices")

# count by risk class
devices |>
  count(CLASSE_RISCO, sort = TRUE)

Food and cosmetics

food <- anvisa_data(type = "food")
cosmetics <- anvisa_data(type = "cosmetics")

Select specific variables

# only keep product name and active ingredient
med_slim <- anvisa_data(
  type = "medicines",
  vars = c("NOME_PRODUTO", "PRINCIPIO_ATIVO", "SITUACAO_REGISTRO")
)

Pesticides

Pesticide monographs list authorized active ingredients and their maximum residue limits (LMR):

pesticides <- anvisa_data(type = "pesticides")

# search for a specific substance
anvisa_variables(type = "pesticides", search = "substancia")

# substances authorized for coffee
coffee <- pesticides |>
  filter(NO_CULTURA == "Cafe")

Post-market surveillance

Hemovigilance

Adverse events related to blood transfusions:

hemo <- anvisa_data(type = "hemovigilance")

# count by reaction type
hemo |>
  count(TIPO_REACAO_TRANSFUSIONAL, sort = TRUE)

# count by state
hemo |>
  count(UF_NOTIFICACAO, sort = TRUE)

Technovigilance

Adverse events related to medical devices:

techno <- anvisa_data(type = "technovigilance")

# count by notification type
techno |>
  count(TIPO_NOTIFICACAO, sort = TRUE)

Pharmacovigilance (VigiMed)

Drug/vaccine adverse event reports are split into three linked datasets sharing the IDENTIFICACAO_NOTIFICACAO key:

# notifications (patient info + event summary)
notif <- anvisa_data(type = "vigimed_notifications")

# medicines involved
meds <- anvisa_data(type = "vigimed_medicines")

# adverse reactions (MedDRA coded)
reactions <- anvisa_data(type = "vigimed_reactions")

# link notifications to reactions
linked <- notif |>
  select(IDENTIFICACAO_NOTIFICACAO, SEXO, IDADE_MOMENTO_REACAO, GRAVE) |>
  inner_join(reactions, by = "IDENTIFICACAO_NOTIFICACAO")

# most common reactions
linked |>
  count(PT, sort = TRUE) |>
  head(20)

SNGPC – Controlled substance sales

The SNGPC (Sistema Nacional de Gerenciamento de Produtos Controlados) tracks sales of controlled substances (psychotropics, narcotics) by pharmacies across Brazil.

Industrialized medicines

# download January 2020 data
sngpc_jan <- anvisa_data(type = "sngpc", year = 2020, month = 1)

# top prescribed controlled substances
sngpc_jan |>
  count(DS_PRINCIPIO_ATIVO, sort = TRUE) |>
  head(10)

# sales by state
sngpc_jan |>
  count(SG_UF_VENDA, sort = TRUE)

Multiple months

# download Q1 2020 (Jan-Mar)
sngpc_q1 <- anvisa_data(type = "sngpc", year = 2020, month = 1:3)

# monthly trend
sngpc_q1 |>
  count(month, name = "sales")

Compounded medicines

# compounded (manipulated) controlled substances
manip <- anvisa_data(type = "sngpc_compounded", year = 2020, month = 1)

# most common active ingredients
manip |>
  count(NO_PRINCIPIO_ATIVO, sort = TRUE) |>
  head(10)

Lazy evaluation for large queries

For large SNGPC queries spanning many months, use lazy evaluation to defer computation:

# lazy query (requires arrow package)
lazy_sngpc <- anvisa_data(
  type = "sngpc", year = 2020, month = 1:12,
  lazy = TRUE
)

# filter and collect only what you need
result <- lazy_sngpc |>
  filter(SG_UF_VENDA == "SP") |>
  collect()

Exploring variables

Use anvisa_variables() to see available variables for any type:

# all medicines variables
anvisa_variables(type = "medicines")

# search across descriptions
anvisa_variables(type = "hemovigilance", search = "paciente")

# SNGPC variables
anvisa_variables(type = "sngpc")

Caching

Downloaded data is cached locally for faster subsequent access:

# check cache status
anvisa_cache_status()

# clear all cached ANVISA data
anvisa_clear_cache()

Module information

# full module overview
anvisa_info()