# Brazil Trademark Filings (INPI) — Marcas com CNPJ (`latsouth/brazil-trademark-filings`) Actor

New trademark applications published by Brazil's INPI every week, each with the holder company's CNPJ, legal name, CNAE, size, city, website, role e-mail and phone. Lookup mode: trademarks of a CNPJ list. PT: novos pedidos de marca INPI com CNPJ.

- **URL**: https://apify.com/latsouth/brazil-trademark-filings.md
- **Developed by:** [LatSouth Data](https://apify.com/latsouth) (community)
- **Categories:** Lead generation, Business
- **Security:** Limited permissions
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $15.00 / 1,000 trademark filings

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## Brazil Trademark Filings (INPI): new brand leads with the company's CNPJ and contacts

**By [LatSouth](https://latsouth.com).** Every week Brazil's patent and trademark office (INPI) publishes thousands of
new trademark applications. A company that files a brand is launching a product, a store, a restaurant, an app or a
rebrand, and will soon buy packaging, design, legal and accounting services, software, marketing, logistics and
financing. This actor turns those filings into **company leads**:

1. **New filings**: applications the INPI published in the last N days (default 30), newest first, filtered by brand
   keyword, Nice class, the holder's industry (CNAE), state, size and status.
2. **Lookup**: send a list or CSV of CNPJs and get each company's trademark filings (portfolio, pending applications,
   renewals), with a `not_found` row for CNPJs without filings.

Every row is one filing with the **holder company** joined to the official CNPJ registry (Receita Federal): legal name,
trade name, CNAE activity, size (*porte*), share capital, opening date, city/UF, address, registered phone (with an
accountant flag), the registered e-mail **only when it is a role mailbox on the company's own domain**, an
**HTTP-verified website** and contacts published on that website. No scraping at query time.

*Em português: veja a seção [Português](#português) abaixo (novos pedidos de marca no INPI com CNPJ, telefone e e-mail
da empresa titular; consulta de marcas por CNPJ).*

### Quick facts

| | |
|---|---|
| Filings in the data | 2,974,439 filings of 876,469 companies (pending 589,546, registered 1,310,376, dead 1,074,517) |
| New filings per month | about 17,000 applications by companies published in the RPI each month (last 30 days: 17,192 filings of 10,012 companies) |
| Price | **US$0.004 per filing** returned (1,000 = US$4). Lookup: CNPJ without filings = **US$0.0005** |
| Contacts | 37% of recent filings have a usable company contact (phone not flagged as the accountant's, role e-mail or website contact; old-format mobiles do not count); 20% a role e-mail |
| Speed | 1-2 s for a page of up to 1,000 new filings, about 10 s for a 1,000-CNPJ lookup (measured on a local copy at the 1 GB memory setting; reading from cloud storage adds a few seconds) |
| Freshness | The INPI re-publishes its open data **weekly** (Saturdays), including the RPI gazette of the previous Tuesday. Data as of **2026-10-31** (newest RPI no. 2912 of 2026-10-27); every row carries `data_as_of` |
| Company data only | Only holders that are companies (CNPJ) and active in the registry; no individuals (CPF), no MEI / individual entrepreneurs, no owner-named forms (holders named after their owner are masked), no attorney or legal-representative names, no personal e-mail, phone numbers cut from brand text |

### Who uses it

- **Agencies and freelancers** (branding, packaging, web, social media): a company that just filed a brand needs them now.
- **Law and IP firms**: opposition period, renewals (`expiry_date`), portfolio monitoring of clients and competitors.
- **Accountants, banks, fintechs, SaaS and B2B sellers**: new product launches are a buying signal; filter by CNAE,
  state and size.
- **Market research**: who is launching what, by industry and state (`nice_classes`, `cnae_code`, `state`).

### Input examples

New filings in São Paulo by food and beverage companies, last 7 days:

```json
{"days": 7, "states": ["SP"], "cnae_divisions": ["10", "11", "56"], "only_with_contact": true, "max_results": 500}
```

Brands containing "pet" or "vet", last 90 days, with a role e-mail:

```json
{"days": 90, "brand_keywords": ["pet", "vet"], "only_with_email": true, "max_results": 1000}
```

Trademark portfolio of a list of companies (8-digit root = every establishment):

```json
{"mode": "lookup", "cnpjs": ["33000167", "11.222.333/0001-81"], "statuses": ["pending", "in_force"], "max_filings_per_company": 50}
```

Empty input `{}` returns the 25 newest filings of the last 30 days (about US$0.10).

### Output (one row per filing)

| Field | Meaning |
|---|---|
| `process_number` | INPI process number (search it at busca.inpi.gov.br) |
| `brand_name` | The mark as filed (empty for purely figurative marks) |
| `presentation`, `nature` | Nominativa / Mista / Figurativa ...; De Produto / De Serviço / Coletiva ... |
| `nice_classes`, `nice_class_labels`, `main_nice_class` | Nice classes (1-45) with short English labels, when the INPI publishes them (see Limits) |
| `filing_date`, `publication_date`, `grant_date`, `expiry_date` | Filing (depósito), RPI publication, registration and end of the 10-year term |
| `status`, `status_code`, `status_label_pt` | `pending` / `in_force` / `dead` plus the INPI situation |
| `last_decision_code`, `last_decision_pt`, `last_decision_date`, `last_decision_rpi` | Latest INPI decision (despacho) published in the RPI, standard text only |
| `co_holders` | Number of holders of the process (>1 = co-owned) |
| `cnpj`, `cnpj_root`, `legal_name`, `trade_name`, `is_headquarters` | The holder establishment as in the Receita registry |
| `legal_nature`, `company_size`, `share_capital_brl`, `opening_date` | Legal form, *porte* (micro / small / other), capital, opening date |
| `cnae_code`, `cnae_label_en`, `cnae_label_pt`, `cnae_division`, `cnae_section` | Main activity |
| `state`, `city`, `zip`, `address` | Registered address |
| `phone`, `is_likely_accountant_contact` | Registered phone (`+55` + area code + 8-digit landline starting 2-5 or 9-digit mobile starting 9; an 8-digit number starting 6-9 is a pre-2016 mobile missing its leading 9 and is left empty, never guessed); `true` when it is probably the accountant's office |
| `email`, `email_is_role`, `email_domain` | Registered e-mail only when it is a role mailbox (contato@, comercial@ ...) on the company's own domain |
| `website`, `website_verified`, `website_checked_at` | Corporate website that answered our HTTP check |
| `public_role_emails`, `public_phones`, `linkedin_url`, `instagram_url`, `facebook_url`, `contact_source_url`, `contact_fetched_at`, `has_public_contact` | Contacts published on the company's own homepage (role mailboxes only), with source URL and date |
| `has_contact` | `true` = phone not flagged as the accountant's, role e-mail or website contact |
| `legal_name_masked` | `true` = the holder's name is a person's (individual law firm, MEI / EIRELI wording outside a limitada): `legal_name` is `***` and the trade name, brand, phone, e-mail, website and contacts are empty |
| `inpi_data_as_of`, `registry_data_as_of`, `data_as_of`, `source` | Dates of the INPI files and of the registry; attribution line |
| `lookup_input`, `lookup_match`, `not_found`, `not_found_reason` | Lookup mode only |

The run summary (key-value store record `OUTPUT`) has the total matching filings, the date window, the INPI data
date, the Nice-class coverage date and whether the run stopped at your spending limit.

### Limits (read before buying)

- **Nice classes stop at filings of about 2025-10-22.** The INPI open-data file with the Nice classes
  (`MARCAS_CLASSIFICACOES_NICE.csv`) has not received new applications since then (same 5.33 million rows in the
  releases of 2026-10-24 and 2026-10-31). Newer filings come with an empty `nice_classes` and are **not** matched by the
  `nice_classes` filter; the run log and `OUTPUT.warning` say so. For recent filings filter by the holder's industry
  (`cnae_divisions` / `cnae_codes`) or by `brand_keywords`.
- A filing becomes public only when the INPI publishes it in the RPI, 3 to 8 weeks after it was filed
  (median 28 days in the last 12 months), so "new filings" are counted by **publication date** by default
  (`date_basis` = `filed` uses the filing date).
- Holders that are individuals (CPF), foreign holders without a CNPJ, MEI / individual entrepreneurs and companies not
  active in the Receita release are not in the data: about 63% of the company (CNPJ) holders' filings are
  covered.
- In lookup mode a CNPJ whose filings are all outside `statuses` (default pending + in_force) comes back as
  `not_found`; add `dead` to see archived and refused filings too.
- Company columns come from the monthly Receita release (`registry_data_as_of`); contacts from our homepage crawl
  (`contact_fetched_at`).

### Data sources and licence

- INPI - Instituto Nacional da Propriedade Industrial, **Dados Abertos - Marcas** (dadosabertos.inpi.gov.br):
  `MARCAS_DEPOSITANTES.csv`, `MARCAS_DADOS_BIBLIOGRAFICOS.csv`, `MARCAS_CLASSIFICACOES_NICE.csv`,
  `MARCAS_DESPACHOS.csv`. Catalogued on dados.gov.br under Creative Commons Attribution (CC BY 4.0): attribute the INPI
  when you republish. The RPI gazette XML is not used.
- Receita Federal do Brasil, Dados Abertos do CNPJ (company columns).
- Contacts: the company's own homepage.
- Not an official INPI or Receita Federal product. Data transformed by LatSouth (São Paulo, Brazil).

### More from LatSouth

- [Brazil Company Finder](https://apify.com/latsouth/brazil-company-finder): every active CNPJ by CNAE, city, size and opening date, or a bulk
  CNPJ lookup (US$0.0015/row).
- [Brazil Company Contacts](https://apify.com/latsouth/brazil-verified-contacts): the companies with a verified website and a role e-mail or
  phone published on it.
- [LATAM Jobs & Hiring Signals](https://apify.com/latsouth/latam-jobs-hiring-signals): companies hiring now, matched to the CNPJ.
- [LATAM Gov Contracts & Suppliers](https://apify.com/latsouth/latam-gov-contracts): PNCP contracts and government suppliers.
- [LATAM Company Enrichment](https://apify.com/latsouth/latam-company-enrichment): enrich your own list of CNPJs or domains.

### Pricing

Pay per event: **US$0.004 per filing** returned. In lookup mode a CNPJ without filings comes back as one
`not_found` row **free of charge** (default `include_not_found` = true, so the output lines up 1:1 with your list; set it
to false to get only the filings), and an input rejected on format alone (wrong check digits, a CPF) comes back with
`lookup_match: "invalid"`, also free. Set a spending limit on the run and the actor
stops there. Comparable trademark actors on the Store charge US$0.005-0.01 per record (US/EU registers) and do not
join the holder to a company registry.

***

### Português

**Novos pedidos de marca no INPI como leads de empresa.** Toda semana o INPI publica na RPI milhares de pedidos de
registro de marca. Empresa que deposita marca está lançando produto, loja, restaurante, app ou rebranding, e vai
contratar embalagem, design, jurídico, contabilidade, software, marketing, logística e crédito. Este actor entrega esses
pedidos já unidos ao **CNPJ da empresa titular**:

1. **Novos pedidos** (`new_filings`): publicados nos últimos N dias (padrão 30), do mais novo para o mais antigo, com
   filtros por palavra na marca, classe Nice, CNAE da empresa titular, UF, porte e situação.
2. **Consulta por CNPJ** (`lookup`): mande uma lista ou CSV de CNPJs e receba as marcas de cada empresa (carteira,
   pedidos pendentes, vencimentos), com uma linha `not_found` para CNPJ sem marca.

Cada linha é um pedido com a **empresa titular** unida ao cadastro da Receita Federal: razão social, nome fantasia,
CNAE, porte, capital social, data de abertura, cidade/UF, endereço, telefone cadastrado (com aviso de telefone de
contador; número de 8 dígitos começando com 6-9, celular antigo sem o nono dígito, sai vazio), e-mail cadastrado **só quando é caixa de função no domínio da própria empresa**, **site verificado por HTTP**
e contatos publicados nesse site. Sem raspagem na hora da consulta.

#### Números

| | |
|---|---|
| Pedidos na base | 2.974.439 pedidos de 876.469 empresas (pendentes 589.546, registros em vigor 1.310.376, extintos/arquivados 1.074.517) |
| Novos por mês | cerca de 17 mil pedidos de empresas publicados na RPI por mês (últimos 30 dias: 17.192 pedidos de 10.012 empresas) |
| Preço | **US$0,004 por pedido** (1.000 = US$4). Consulta: CNPJ sem pedido = **US$0,0005** |
| Contato | 37% dos pedidos recentes têm contato da empresa (telefone que não parece do contador, e-mail de função ou contato do site; celular antigo de 8 dígitos não conta); 20% e-mail de função |
| Atualização | O INPI republica os dados abertos **toda semana** (sábado), com a RPI da terça anterior. Dados de **31/10/2026** (RPI mais nova nº 2912, de 27/10/2026) |
| Só dados de empresa | Só titulares pessoa jurídica (CNPJ) ativos na Receita; nada de pessoa física (CPF), MEI, empresário individual, EIRELI, nome de procurador ou representante legal, e-mail pessoal; titular com nome de pessoa (advocacia individual, MEI/EIRELI fora de limitada) sai mascarado (`legal_name_masked`); telefone cortado do texto da marca |

#### Exemplos de entrada

```json
{"days": 7, "states": ["SP"], "cnae_divisions": ["10", "11", "56"], "only_with_contact": true, "max_results": 500}
```

```json
{"mode": "lookup", "cnpjs": ["33000167", "11.222.333/0001-81"], "statuses": ["pending", "in_force"]}
```

Entrada vazia `{}` = os 25 pedidos mais novos dos últimos 30 dias (cerca de US$0,10).

#### Limites

- **Classe Nice só até depósitos de ~22/10/2025.** O arquivo de classes Nice dos dados abertos do INPI parou de
  receber pedidos novos (mesmas 5,33 milhões de linhas nas versões de 24/10 e 31/10/2026). Pedidos mais novos vêm com
  `nice_classes` vazio e **não** entram no filtro `nice_classes`; o log e o `OUTPUT.warning` avisam. Para pedidos
  recentes, filtre pelo CNAE da empresa titular (`cnae_divisions` / `cnae_codes`) ou por `brand_keywords`.
- O pedido só fica público quando sai na RPI, 3 a 8 semanas depois do depósito (mediana 28 dias nos últimos 12
  meses): por isso a janela padrão é pela **data de publicação** (`date_basis` = `filed` usa a data de depósito).
- Titular pessoa física, estrangeiro sem CNPJ, MEI e empresa inativa na Receita ficam fora: cobrimos cerca de
  63% dos pedidos de titulares com CNPJ.
- Na consulta, CNPJ cujos pedidos estão todos fora de `statuses` (padrão: pendentes + em vigor) volta como
  `not_found`; inclua `dead` para ver arquivados e indeferidos.

#### Fontes e licença

INPI - Dados Abertos - Marcas (dadosabertos.inpi.gov.br), catalogado no dados.gov.br como Creative Commons Atribuição
(CC BY 4.0): cite o INPI ao republicar. Cadastro: Receita Federal do Brasil - Dados Abertos do CNPJ. Contatos: site da
própria empresa. Não é produto oficial do INPI nem da Receita Federal. Dados transformados pela LatSouth (São Paulo).

#### Preço

Por evento: **US$0,004 por pedido** retornado. Na consulta, CNPJ sem pedido volta numa linha `not_found` **sem
cobrança** (saída 1:1 com a sua lista; `include_not_found` = false devolve só os pedidos), e entrada inválida também é
grátis. Defina um limite de
gasto no run e o actor para nele.

#### Mais da LatSouth

[Busca de empresas e consulta CNPJ em lote](https://apify.com/latsouth/brazil-company-finder) ·
[Contatos de empresas com site verificado](https://apify.com/latsouth/brazil-verified-contacts) ·
[Vagas e sinais de contratação](https://apify.com/latsouth/latam-jobs-hiring-signals) ·
[Licitações PNCP](https://apify.com/latsouth/latam-gov-contracts) · [Enriquecimento de CNPJ](https://apify.com/latsouth/latam-company-enrichment)

# Actor input Schema

## `mode` (type: `string`):

new_filings = applications the INPI published in the last N days (or since a date), with the filters below. lookup = the filings of each CNPJ you send (list or CSV). PT: new_filings = novos pedidos publicados na RPI; lookup = marcas de uma lista de CNPJs.

## `days` (type: `integer`):

Counted back from the INPI release date of the data (the INPI re-publishes its files every week), so the newest weekly RPI is always inside the window. PT: publicados nos ultimos N dias.

## `since_date` (type: `string`):

YYYY-MM-DD. Overrides 'last N days'.

## `date_basis` (type: `string`):

A filing appears in the INPI open data only after its RPI publication, 3-8 weeks after it was filed; 'published' gives the newest leads every week.

## `nice_classes` (type: `array`):

e.g. 9 software/electronics, 25 clothing, 30 food, 35 retail/advertising, 41 education, 42 IT services, 43 restaurants, 44 health/beauty. NOTE: the INPI open data has Nice classes only for applications filed up to about October 2025 (its class file stopped updating); newer filings have no class and do not match this filter. Use the CNAE filters (the holder company's activity) for recent filings.

## `brand_keywords` (type: `array`):

Matches anywhere in the brand, accent- and case-insensitive (cafe = Cafe = CAFE). Several = any of them.

## `states` (type: `array`):

State of the holder company's registered address. Empty = all of Brazil.

## `cnae_divisions` (type: `array`):

Main activity of the holder company, e.g. 62 IT, 47 retail, 56 food service, 86 health, 10-11 food & beverage makers.

## `cnae_codes` (type: `array`):

7-digit CNAE subclass (6201501 or 6201-5/01) or a shorter prefix.

## `company_size` (type: `array`):

Receita 'porte' of the holder. Empty = all sizes.

## `statuses` (type: `array`):

Default: pending + in_force.

## `only_with_contact` (type: `boolean`):

Keep filings whose holder has a phone not flagged as the accountant's, a role e-mail or a contact on its own website.

## `only_with_email` (type: `boolean`):

Registered role mailbox on the company's own domain, or a role e-mail published on its own website. Personal mailboxes are never output.

## `exclude_accountant_phone` (type: `boolean`):

Drop filings whose registered phone is probably the accountant's (shared by many companies).

## `cnpjs` (type: `array`):

14-digit CNPJs (formatted or not, alphanumeric CNPJ included) = filings of that establishment; an 8-digit root = filings of every establishment of the company. CPFs are not supported (company data only).

## `cnpjs_file` (type: `string`):

One CNPJ per line, or a CSV with a column whose header contains 'cnpj'. Up to 100,000 distinct CNPJs, 50 MB.

## `include_not_found` (type: `boolean`):

On (default): a CNPJ with no filing in the data (or inactive / MEI / not in the Receita release) gets one row with not_found = true, free of charge, so the output lines up 1:1 with your list. An input rejected on format alone (wrong check digits, a CPF) gets lookup_match = invalid and is free too. Only filings are charged.

## `max_filings_per_company` (type: `integer`):

Newest filings first.

## `filed_after` (type: `string`):

YYYY-MM-DD.

## `max_results` (type: `integer`):

You pay per filing returned (US$0.004 each: 1,000 filings = US$4). The run also stops at your spending limit. Default 25 in new_filings, 10,000 in lookup.

## Actor input object example

```json
{
  "mode": "new_filings",
  "days": 30,
  "date_basis": "published",
  "only_with_contact": false,
  "only_with_email": false,
  "exclude_accountant_phone": false,
  "include_not_found": true,
  "max_filings_per_company": 100,
  "max_results": 25
}
```

# Actor output Schema

## `filings` (type: `string`):

Matching filings, one item per row. Download as JSON, CSV, Excel or XML via the dataset API.

## `summary` (type: `string`):

Counts, window, INPI data date, Nice-class coverage and whether the run stopped at the buyer's budget cap.

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "days": 30,
    "max_results": 25
};

// Run the Actor and wait for it to finish
const run = await client.actor("latsouth/brazil-trademark-filings").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "days": 30,
    "max_results": 25,
}

# Run the Actor and wait for it to finish
run = client.actor("latsouth/brazil-trademark-filings").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "days": 30,
  "max_results": 25
}' |
apify call latsouth/brazil-trademark-filings --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,latsouth/brazil-trademark-filings"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/mfUSnFSAjNj4eLuUe/builds/C0tsdXaDKm4RW5H7Z/openapi.json
