# Reclame AQUI Scraper (`trev0n/reclameaqui-scraper`) Actor

Scrape Reclame AQUI complaints and company reputation: full complaint text, status, consumer score and evaluation, the company's reply, city and state. Filter by status, date, category, problem or text, go past the 500-complaint limit, or monitor new complaints.

- **URL**: https://apify.com/trev0n/reclameaqui-scraper.md
- **Developed by:** [Paweł](https://apify.com/trev0n) (community)
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $4.99 / 1,000 results

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

## 🇧🇷 Reclame AQUI Scraper — Complaints & Company Reputation

🎯 **Turn Brazil's biggest complaint site into a clean dataset: every complaint, every company reply, every reputation score.**

Collect complaints from [Reclame AQUI](https://www.reclameaqui.com.br) for any company — full complaint text, status, the consumer's score and evaluation, "would do business again", city and state, category and problem type, plus the company's reply and the consumer's final comment. Or pull company profiles with the official reputation badge, answer and solve rates, response time and the problems customers complain about most.

### 🚀 What Does It Do?

This scraper automatically reads Reclame AQUI and collects **structured, ready-to-use data** for the companies you choose. No manual browsing needed — type a company name, set your filters and hit Start.

💡 **Two modes of operation:**

1. **📣 Complaints** — one record per complaint, newest first, filtered by status, date, category, problem, product or text.
2. **🏢 Company profiles** — one record per company with its reputation for every period (6 months, 12 months, last year, the year before, 3 years) and its top complaint categories, problems and products.

You can give companies by name (`Nubank`), by their Reclame AQUI short name (`magazine-luiza-loja-online`) or by link — including a link to a complaint list you already filtered on the site, or a single complaint page.

### 👥 Who Is This For?

| 🏢 Use Case                         | 💬 How It Helps                                                                                          |
| ----------------------------------- | -------------------------------------------------------------------------------------------------------- |
| 🎧 **Customer experience teams**    | Watch your own complaints arrive, see which problems spike, and check every reply your team posted.      |
| 🥊 **Competitive intelligence**     | Compare your reputation, solve rate and response time with competitors, period by period.                |
| 🤖 **AI & NLP teams**               | Hundreds of thousands of labelled Portuguese texts: complaint, category, problem, score, solved or not.  |
| 📈 **Investors & analysts**         | Track complaint volume and reputation of listed Brazilian companies as an early warning signal.          |
| ⚖️ **Lawyers & consumer advocates** | Find patterns of the same problem (e.g. "cobrança indevida") against one company, with dates and cities. |
| 🛒 **Marketplace & retail buyers**  | Check a supplier's or store's complaint record before you sign.                                          |

### ✨ Features

- 📝 **Full complaint text** — title and complete description, not the truncated preview
- ⭐ **Consumer verdict** — solved or not, score 0–10, "would do business again" and the written evaluation
- 💬 **Company replies** — the whole conversation: company reply, consumer replies and the final comment
- 🏆 **Reputation profiles** — RA1000 / Ótimo / Bom… badge, score, answered %, solved %, average response time, for five periods
- 🔥 **Top problems** — what customers of each company complain about most, with counts
- 🎛️ **Smart Filters** — status tab, date window, category, problem type, product and free-text search
- 🚧 **Past the 500 limit** — Reclame AQUI lists at most 500 complaints per view; the scraper splits big lists to reach thousands more
- 🔁 **Monitoring mode** — scheduled runs return only new complaints and complaints whose status changed (the company answered, the consumer evaluated)
- 🔔 **Instant alerts** — Telegram, Discord, Slack or any webhook when something new appears
- 🏙️ **Where from** — the consumer's city and state on every complaint
- ⚡ **Fast & Scalable** — about 1 000 complaints a minute, any number of companies per run
- 🧹 **Deduplication** — every complaint appears once, even across overlapping filters
- 📤 **Export Anywhere** — Download results as JSON, CSV, Excel, or push to Google Sheets, Zapier, Make, or your CRM

### 🎛️ Filters & Options

| Option                                          | What It Does                                                                                       |
| ----------------------------------------------- | -------------------------------------------------------------------------------------------------- |
| 🔀 **What to scrape**                           | Complaints, or company profiles with reputation                                                    |
| 🏢 **Companies**                                | Names, short names or links of the companies to read                                               |
| 🔗 **Reclame AQUI links**                       | Company pages, filtered complaint lists or single complaint pages                                  |
| 🔢 **Max complaints per company**               | How many complaints to collect for each company (0 = all that match)                               |
| 🚦 **Status**                                   | All, not answered, answered, evaluated, solved or not solved                                       |
| 📅 **Only complaints since**                    | A date or a window like "7 days" or "3 months"                                                     |
| 🔎 **Text search**                              | Only complaints mentioning a word, e.g. "pix", "estorno", "entrega"                                |
| 🗂️ **Category**                                 | E.g. "Cartões de Crédito", "Bancos" — accents and case do not matter                               |
| ⚠️ **Problem type**                             | E.g. "Cobrança indevida", "Atraso na entrega"                                                      |
| 📦 **Product**                                  | E.g. "Cartão de crédito", "Conta"                                                                  |
| 🚧 **Go past the 500-complaint limit**          | Splits big lists by category, problem and product to collect more                                  |
| 💬 **Add the company's replies**                | Adds the full conversation to every complaint                                                      |
| 🏆 **Add company reputation to each complaint** | Puts the company's current badge, score, solved % and answered % on every row                      |
| 🔤 **Text format**                              | Plain text or the original HTML                                                                    |
| 📦 **Compact output / Skip empty fields**       | Twelve essential fields per complaint, or leave out empty values                                   |
| 🔁 **Incremental monitoring**                   | Emit only new or changed complaints on scheduled runs                                              |
| 🔔 **Notifications**                            | Webhook, Telegram, Discord or Slack message when something changes                                 |
| 🛡️ **Proxy**                                    | Runs without a proxy by default and switches to Brazilian residential proxies by itself if blocked |

### 📦 What You Get (Output Fields)

Every complaint includes:

#### 📝 Complaint

| Field       | Example                                                                                                 |
| ----------- | ------------------------------------------------------------------------------------------------------- |
| complaintId | `h3IUAmLg8fHfbdEy`                                                                                      |
| url         | `https://www.reclameaqui.com.br/nubank/nao-consigo-resgatar-meu-tesouro-direto-selic_h3IUAmLg8fHfbdEy/` |
| title       | `Não consigo resgatar meu Tesouro Direto Selic`                                                         |
| description | `Fiz uma solicitação de resgate de tesouro direto Selic (10/10) e até agora…`                           |
| createdAt   | `2026-10-13T13:25:32`                                                                                   |
| category    | `Bancos`                                                                                                |
| problem     | `Demora na execução`                                                                                    |
| product     | `Tesouro Direto Selic`                                                                                  |
| userCity    | `Alvorada`                                                                                              |
| userState   | `RS`                                                                                                    |

#### ⭐ Status & Evaluation

| Field              | Example                                                                           |
| ------------------ | --------------------------------------------------------------------------------- |
| status             | `SOLVED`                                                                          |
| statusLabel        | `Solved`                                                                          |
| hasCompanyReply    | `true`                                                                            |
| firstReplyAt       | `2026-10-13T16:47:47`                                                             |
| isEvaluated        | `true`                                                                            |
| isSolved           | `true`                                                                            |
| wouldDealAgain     | `true`                                                                            |
| consumerScore      | `10`                                                                              |
| consumerEvaluation | `A empresa respondeu com agilidade e profissionalismo, sanando todas as dúvidas.` |

#### 💬 Conversation (with "Add the company's replies")

| Field                | Example                                                          |
| -------------------- | ---------------------------------------------------------------- |
| companyReply         | `Olá, Joesio. Agradecemos por nos contar seu caso. Após…`        |
| consumerFinalComment | `A empresa respondeu com agilidade e profissionalismo…`          |
| interactionCount     | `2`                                                              |
| interactions         | `[{ "type": "companyReply", "message": "…", "createdAt": "…" }]` |

#### 🏢 Company

| Field             | Example                                          |
| ----------------- | ------------------------------------------------ |
| companyName       | `Nubank`                                         |
| companyShortname  | `nubank`                                         |
| companyUrl        | `https://www.reclameaqui.com.br/empresa/nubank/` |
| companyReputation | `RA1000` (with "Add company reputation")         |

Every **company profile** includes the company's name, CNPJ, website, address, phones, segments, the reputation badge and score, consumer score, answered %, solved %, "would deal again" %, average response time in hours, complaints in the last 30 days, total complaints, the same numbers for each period, and its top 10 categories, problems and products.

### 📊 Example Output

```json
{
    "complaintId": "h3IUAmLg8fHfbdEy",
    "legacyId": 261488469,
    "url": "https://www.reclameaqui.com.br/nubank/nao-consigo-resgatar-meu-tesouro-direto-selic_h3IUAmLg8fHfbdEy/",
    "title": "Não consigo resgatar meu Tesouro Direto Selic",
    "description": "Fiz uma solicitação de resgate de tesouro direto Selic  (10/10) e até agora o resgate não ocorreu. Pelas regras do tesouro o valor teria que ser depositado no mesmo dia.",
    "createdAt": "2026-10-13T13:25:32",
    "modifiedAt": "2026-10-13T16:55:02",
    "status": "SOLVED",
    "statusLabel": "Solved",
    "hasCompanyReply": true,
    "firstReplyAt": "2026-10-13T16:47:47",
    "isEvaluated": true,
    "isSolved": true,
    "wouldDealAgain": true,
    "consumerScore": 10,
    "consumerEvaluation": "A empresa respondeu com agilidade e profissionalismo, sanando todas as dúvidas.",
    "userCity": "Alvorada",
    "userState": "RS",
    "categoryId": null,
    "category": null,
    "productId": null,
    "product": null,
    "problemId": "0000000000001462",
    "problem": "Demora na execução",
    "otherProblem": null,
    "otherProduct": "Tesouro Direto Selic",
    "isCompliment": false,
    "interactionCount": 2,
    "mediaCount": 0,
    "companyId": "88850",
    "companyName": "Nubank",
    "companyShortname": "nubank",
    "companyUrl": "https://www.reclameaqui.com.br/empresa/nubank/",
    "companyReply": "Olá, Joesio.\n\nAgradecemos por nos contar seu caso.\n\nApós verificarmos a sua solicitação de resgate do Tesouro Selic, confirmamos que a liquidação ocorreu com sucesso…",
    "consumerFinalComment": "A empresa respondeu com agilidade e profissionalismo, sanando todas as dúvidas.",
    "interactions": [
        {
            "type": "companyReply",
            "message": "Olá, Joesio.\n\nAgradecemos por nos contar seu caso.…",
            "createdAt": "2026-10-13T16:47:47"
        },
        {
            "type": "consumerFinalComment",
            "message": "A empresa respondeu com agilidade e profissionalismo, sanando todas as dúvidas.",
            "createdAt": "2026-10-13T16:55:02"
        }
    ],
    "detailFetched": true,
    "contentHash": "acc61154af1be78d",
    "scrapedAt": "2026-10-14T08:29:35.461Z"
}
```

### 📋 Dataset Views

The Apify Console gives you **5 ready-made table views** to quickly browse your results:

| View                    | What It Shows                                                             |
| ----------------------- | ------------------------------------------------------------------------- |
| 📊 **Complaints**       | Title, company, date, status, solved, score, city and state, link         |
| ⭐ **Evaluation**       | Solved, would deal again, score, the consumer's evaluation, first reply   |
| 💬 **Replies**          | The company's reply, the consumer's final comment, number of messages     |
| 🏆 **Company profiles** | Reputation, scores, answered %, solved %, response time, total complaints |
| 📋 **Full Details**     | Every single field — the complete dataset                                 |

### ❓ FAQ

**🤔 How many complaints can I get for one company?**
As many as you need. Reclame AQUI itself shows only 500 complaints per list, so for bigger requests the scraper automatically splits the list by category, problem and product. Big brands have hundreds of thousands of complaints — use the date window or filters to keep runs focused.

**🤔 Can I track new complaints every day?**
Yes. Turn on **Incremental monitoring** and schedule the run. Each run returns only complaints that are new or whose status changed — for example when the company answered or the consumer marked it solved — and you pay only for those. Add a Telegram, Slack, Discord or webhook alert to hear about them instantly.

**🤔 Do I need the exact company name?**
No. Type it as you would on the site ("Magazine Luiza", "Itaú") and the scraper picks the matching company. You can also paste the company's Reclame AQUI link.

**🤔 Are consumers' personal details included?**
No contact details. Reclame AQUI hides consumers' names, e-mails and phones on public pages, and the output contains only what the page shows: the city and state, and the texts as published — a company reply may greet the consumer by first name, exactly as on the site.

**🤔 Can I export the data?**
Yes — JSON, CSV, Excel, XML, HTML, RSS. You can also push data directly to Google Sheets, Zapier, Make, or any webhook/API endpoint.

**🤔 How often should I run this?**
For fresh data, run daily or weekly. You can schedule automatic runs on Apify with just a few clicks.

**🤔 Does it work with proxies?**
Yes. It runs without a proxy by default, which is the fastest and cheapest, and switches to Apify's Brazilian residential proxies by itself if Reclame AQUI starts refusing requests.

### 🛠️ Need Custom Filters or Features?

**I'm happy to customize this scraper for your specific needs!** 🤝

Whether you need:

- 🎯 Additional filters (by city or state, by score range, only complaints with photos, only companies of one segment)
- 📊 Extra data fields or custom output formats
- 🔄 Integration with your CRM, Google Sheets, or database
- ⏰ Scheduled scraping with automatic deduplication
- 🌐 Scraping from other review and complaint platforms alongside Reclame AQUI (Consumidor.gov.br, Google Reviews, Trustpilot)

👉 **Don't hesitate to reach out via private message** — I respond quickly and I'm always open to building exactly what you need. No request is too small or too specific!

### ⚖️ Legal & Ethical Use

This scraper collects **only publicly available information** from Reclame AQUI. It does not log in, does not access private data and does not collect consumers' contact details. Please use the data responsibly and in compliance with applicable laws (including Brazil's LGPD) and the platform's terms of service.

# Actor input Schema

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

Complaints returns one record per complaint. Company profiles returns one record per company with its Reclame AQUI reputation for every period, answer and solve rates, response time and what customers complain about most.

## `companies` (type: `array`):

Company names as you would type them on Reclame AQUI ("Nubank", "Magazine Luiza"), their Reclame AQUI short names ("magazine-luiza-loja-online"), or links to their pages. A link to a filtered complaint list keeps its filters.

## `startUrls` (type: `array`):

Company pages (/empresa/{company}/), complaint lists with filters, or single complaint pages. Same as "Companies", kept for links you already have.

## `maxResultsPerCompany` (type: `integer`):

Stop after this many complaints for each company. 0 = everything the filters match (big companies have hundreds of thousands).

## `status` (type: `string`):

The same tabs as on the company's complaint list.

## `dateFrom` (type: `string`):

A date (2026-01-31) or a window ("7 days", "3 months"). Complaints are read newest first, so a recent date makes runs short.

## `searchTerm` (type: `string`):

Only complaints that mention this text, e.g. "pix", "estorno", "entrega". Results come in relevance order.

## `category` (type: `string`):

Category name as shown on the company's complaint list ("Cartões de Crédito", "Bancos"). Accents and case do not matter.

## `problem` (type: `string`):

Problem name ("Cobrança indevida", "Atraso na entrega", "Estorno do valor pago").

## `product` (type: `string`):

Product or service name ("Cartão de crédito", "Conta").

## `splitLargeQueries` (type: `boolean`):

Reclame AQUI shows at most 500 complaints per list. When you ask for more, the scraper splits the list by category, problem and product to reach the rest.

## `includeCompanyReplies` (type: `boolean`):

Opens every complaint page to add the full conversation: the company's reply, the consumer's answers and final comment. One extra page per complaint.

## `addCompanyReputation` (type: `boolean`):

Adds the company's current reputation, score, solved % and answered % to every complaint. No extra cost.

## `descriptionFormat` (type: `string`):

How complaint texts and replies are written.

## `compact` (type: `boolean`):

Twelve essential fields per complaint instead of the full record.

## `excludeEmptyFields` (type: `boolean`):

Leave out fields with no value.

## `incrementalMode` (type: `boolean`):

Remember what previous runs saw and emit only new complaints and complaints whose status changed (the company answered, the consumer evaluated). The first run stores a baseline; you pay only for what is emitted.

## `stateKey` (type: `string`):

Name the baseline this run compares against. Leave empty to derive one from the companies and filters.

## `emitUnchanged` (type: `boolean`):

Emit every complaint, tagged NEW / UPDATED / UNCHANGED.

## `emitExpired` (type: `boolean`):

Emit complaints from the baseline that this run did not see (deleted, or fell outside the filters / limit).

## `webhookUrl` (type: `string`):

POSTs the run summary and emitted complaints as JSON.

## `telegramBotToken` (type: `string`):

Bot token from @BotFather. Stored encrypted.

## `telegramChatId` (type: `string`):

Chat or channel that receives the message.

## `discordWebhookUrl` (type: `string`):

Discord channel webhook.

## `slackWebhookUrl` (type: `string`):

Slack incoming webhook.

## `notifyOnlyChanges` (type: `boolean`):

Skip the message when a monitoring run found nothing new.

## `notificationLimit` (type: `integer`):

How many complaints are listed in one notification.

## `includeRunSummary` (type: `boolean`):

Adds the counts of new, updated and unchanged complaints to the webhook payload.

## `maxConcurrency` (type: `integer`):

How many companies are read at the same time.

## `detailConcurrency` (type: `integer`):

Used with "Add the company's replies".

## `proxyConfiguration` (type: `object`):

No proxy is the default — the fastest and cheapest setting (measured: 300 complaints with replies for $0.002). Do not pick Apify's datacenter proxies: Reclame AQUI refuses most of their requests. If Reclame AQUI starts refusing requests, the run switches to residential proxies by itself (see below).

## `proxyFallback` (type: `boolean`):

After a few refused requests the rest of the run continues through Brazilian residential proxies instead of losing results.

## Actor input object example

```json
{
  "mode": "complaints",
  "companies": [
    "Nubank"
  ],
  "startUrls": [],
  "maxResultsPerCompany": 50,
  "status": "all",
  "dateFrom": "",
  "searchTerm": "",
  "category": "",
  "problem": "",
  "product": "",
  "splitLargeQueries": true,
  "includeCompanyReplies": false,
  "addCompanyReputation": false,
  "descriptionFormat": "text",
  "compact": false,
  "excludeEmptyFields": false,
  "incrementalMode": false,
  "stateKey": "",
  "emitUnchanged": false,
  "emitExpired": false,
  "webhookUrl": "",
  "telegramChatId": "",
  "discordWebhookUrl": "",
  "slackWebhookUrl": "",
  "notifyOnlyChanges": true,
  "notificationLimit": 10,
  "includeRunSummary": true,
  "maxConcurrency": 3,
  "detailConcurrency": 3,
  "proxyConfiguration": {
    "useApifyProxy": false
  },
  "proxyFallback": true
}
```

# Actor output Schema

## `overview` (type: `string`):

No description

## `companies` (type: `string`):

No description

## `runSummary` (type: `string`):

No description

# 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 = {
    "companies": [
        "Nubank"
    ],
    "maxResultsPerCompany": 50,
    "proxyConfiguration": {
        "useApifyProxy": false
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("trev0n/reclameaqui-scraper").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 = {
    "companies": ["Nubank"],
    "maxResultsPerCompany": 50,
    "proxyConfiguration": { "useApifyProxy": False },
}

# Run the Actor and wait for it to finish
run = client.actor("trev0n/reclameaqui-scraper").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 '{
  "companies": [
    "Nubank"
  ],
  "maxResultsPerCompany": 50,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}' |
apify call trev0n/reclameaqui-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,trev0n/reclameaqui-scraper"
        }
    }
}
```

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/WxPUTPT0xfvCBf42j/builds/ASDREJt4OuH43Iqnf/openapi.json
