# Reclame Aqui Scraper — Brazil Complaints & Company Reputation (`cleandata/reclame-aqui-scraper`) Actor

Scrape Reclame Aqui, Brazil's largest consumer complaint and company reputation site. Get complaints with full text, status, solved flag, consumer score, company replies and response time for any company. Monitor your brand and competitors daily. Fast, no browser.

- **URL**: https://apify.com/cleandata/reclame-aqui-scraper.md
- **Developed by:** [Rodrigo Junqueiro](https://apify.com/cleandata) (community)
- **Categories:** Business, Marketing, E-commerce
- **Stats:** 6 total users, 5 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $8.00 / 1,000 complaints

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, Replies & Reputation

Extract consumer complaints from **[Reclame Aqui](https://www.reclameaqui.com.br)**, Brazil's largest complaint and company-reputation platform, for any company. Get the complaint text, status, whether it was solved, how fast the company replied, the consumer's score, whether they would do business again, category, product, problem type, city/state and, optionally, the company's replies.

**Fast and cheap:** it runs on plain HTTP requests with no headless browser, so runs finish in seconds and use very few platform resources.

**You only pay for what you get:** all filters (status, search term, date range) run *before* billing, so complaints that get filtered out are never charged.

### What can you use it for?

- **Competitor monitoring:** track what customers complain about at your competitors, every day.
- **Customer-experience analytics:** measure solved rates, scores and recurring problems by product.
- **Brand monitoring and crisis alerts:** schedule a daily run with *Only complaints since = 1 day* and get new complaints into Slack, Sheets or your BI.
- **Due diligence:** check a supplier's or partner's complaint history before signing.
- **NLP and AI datasets:** build sentiment and topic models on real Brazilian-Portuguese customer text.

### Sample results

A few of the complaints from a real run for `nubank` (one row per complaint; the full text, URL and dates are in the output too):

| Title | Problem | Product | Status | Score | Would buy again | City |
|---|---|---|---|---|---|---|
| Fui cobrado indevidamente por antecipação de parcelas que já paguei | Cobrança indevida | Cartão de crédito | Resolvida | 10 | Yes | Maceió/AL |
| Fui cobrado indevidamente no meu cartão Nubank | Cobrança indevida | Cartão de crédito | Resolvida | 6 | No | Teresópolis/RJ |
| Minha conta Nubank foi cancelada após receber um Pix de R 10 mil | Cancelamento | Conta | Respondida | – | – | Itu/SP |
| Nubank não resolve meu caso e me cobra por Pix que não fiz | Cobrança indevida | Cartão de crédito | Não resolvida | 0 | No | Suzano/SP |
| Não consigo pagar meu seguro Nubank por conta bloqueada indevidamente | Bloqueio-desbloqueio de cartão | Cartão de crédito | Não respondida | – | – | Caçapava/SP |

### How much does it cost?

You pay per result, with no monthly rental:

| What | Price |
|---|---|
| Complaint | $8 per 1,000 complaints ($0.008 each) |
| Company replies (optional) | $4 per 1,000 complaints that have replies |

Complaints removed by your filters are never charged. Apify's free plan includes $5 of monthly credit, which covers about 600 complaints a month. You can also set a maximum cost per run in the run options.

### How to use it

1. Click **Try for free** and sign in to Apify (no credit card needed).
2. Add one or more companies: a slug like `nubank` or the company's Reclame Aqui URL.
3. Optionally pick a status, a search term, a date range and how many complaints you want.
4. Click **Start**. When the run finishes, download the results as JSON, CSV or Excel, or send them to Google Sheets, Slack or your own system.

### Input

| Field | Description |
|---|---|
| **Companies** | Company slugs (`nubank`) or Reclame Aqui URLs (`https://www.reclameaqui.com.br/empresa/nubank/`). |
| **Status filter** | All, Answered, Evaluated, Solved or Not solved. |
| **Search term** | Only complaints that mention a word, e.g. `Pix`, `entrega`, `cartão`. |
| **Max complaints per company** | 0 = as many as available. |
| **Go beyond 250 complaints per company** | On by default. Reclame Aqui shows only ~250 complaints per list; when you ask for more, the Actor splits the company by problem type (and by status for the most common problems) to collect many more, with duplicates removed before billing. |
| **Date from / Date to** | Date range in Brazil time. Absolute (`2026-10-01`) or relative (`1 day`, `2 weeks`). *Date from = 1 day* is ideal for scheduled monitoring. |
| **Include company replies** | Also returns the company's answers, the consumer's follow-ups and the final evaluation comment. |
| **Include company reputation stats** | Adds the company's current reputation to each complaint (free): RA1000/Bom/Ruim status, final score, solved rate, answered rate, would-do-business-again rate, average response time. |

```json
{
    "companies": ["nubank", "mercado-livre"],
    "status": "ALL",
    "maxComplaintsPerCompany": 100,
    "sinceDate": "1 day",
    "includeCompanyStats": true,
    "includeCompanyReplies": true
}
```

### Output

```json
{
    "id": "h3IUAmLg8fHfbdEy",
    "url": "https://www.reclameaqui.com.br/nubank/nao-consigo-resgatar-meu-tesouro-direto-selic_h3IUAmLg8fHfbdEy/",
    "companySlug": "nubank",
    "companyName": "Nubank",
    "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...",
    "status": "SOLVED",
    "statusLabel": "Resolvida",
    "hasCompanyReply": true,
    "evaluated": true,
    "solved": true,
    "wouldDoBusinessAgain": true,
    "consumerScore": 10,
    "consumerFinalComment": "A empresa respondeu com agilidade e profissionalismo, sanando todas as dúvidas.",
    "category": null,
    "product": "Tesouro Direto Selic",
    "problem": "Demora na execução",
    "userCity": "Alvorada",
    "userState": "RS",
    "createdAt": "2026-10-13T13:25:32-03:00",
    "modifiedAt": "2026-10-13T16:55:02-03:00",
    "firstCompanyReplyAt": "2026-10-13T16:47:47-03:00",
    "companyResponseHours": 3.4,
    "interactionsCount": 2,
    "interactions": [
        { "type": "ANSWER", "createdAt": "2026-10-13T16:47:47-03:00", "message": "Olá, [cliente]. Agradecemos por nos contar seu caso..." },
        { "type": "FINAL_ANSWER", "createdAt": "2026-10-13T16:55:02-03:00", "message": "A empresa respondeu com agilidade e profissionalismo..." }
    ]
}
```

`companyResponseHours` is how long the company took to send its first reply (from the complaint's creation), so you can compare response times across companies without opening each complaint. `interactions` is only present when **Include company replies** is on. With **Include company reputation stats**, each item also gets:

```json
"companyStats": {
    "reputationStatus": "RA1000",
    "reputationPeriod": "SIX_MONTHS",
    "finalScore": 8.7,
    "consumerScore": 7.73,
    "complaintsInPeriod": 56638,
    "answeredRate": 99.9,
    "solvedRate": 92.7,
    "dealAgainRate": 80.9,
    "averageResponseTime": "3 dias e 22 horas",
    "awaitingAnswer": 48
}
```

Each run also saves one summary per company in the key-value store under `COMPANY_PROFILES`.

Download the results as JSON, CSV, Excel or HTML, or use the Apify API and integrations (Make, Zapier, Google Sheets, Slack, webhooks).

### Privacy

This Actor only outputs complaint content and business fields. Reclame Aqui already masks consumer names, emails and contact details, and this Actor never outputs them. It also replaces the consumer's first name in company replies ("Olá, Maria." becomes "Olá, \[cliente]."). City and state are kept for regional analysis. If you process this data, you are responsible for complying with the LGPD and GDPR.

### Limits

- Reclame Aqui lists only the **~250 most recent complaints per filter combination**. With *Go beyond 250 complaints* on (the default), the Actor combines the site's own filters (problem type × status) to go much deeper. Coverage depends on how spread out a company's complaints are, so the very oldest complaints of huge companies may still be out of reach.
- Big runs take a while: Reclame Aqui is protected by Cloudflare, so every request goes through a fresh Brazilian residential IP. Expect roughly 1,000 complaints in about 5 minutes (400 took under 2 minutes in our tests). *Include company replies* opens every answered complaint, so it is several times slower; for thousands of complaints with replies, schedule the run or split it over a few companies at a time.
- The newest page can be cached by Reclame Aqui for up to about an hour.

### FAQ

**How do I find a company's slug?** Open the company on Reclame Aqui. The slug is the part after `/empresa/` in the URL, e.g. `reclameaqui.com.br/empresa/`**`nubank`**`/`. You can also paste the full URL.

**Can I monitor complaints daily?** Yes. Create a schedule in Apify Console with *Date from* set to `1 day` and connect an integration (Slack, Sheets, webhook).

**Is it legal to scrape Reclame Aqui?** This Actor only collects complaints that are publicly visible without logging in, and it leaves out personal data (see *Privacy*). How you use the data is your responsibility: if you process it in a way that falls under the LGPD or GDPR, check that you have a legal basis. When in doubt, ask a lawyer.

**Can I run it from my own code?** Yes, through the Apify API. In Python (`pip install apify-client`):

```python
from apify_client import ApifyClient

client = ApifyClient("<YOUR_APIFY_TOKEN>")
run = client.actor("cleandata/reclame-aqui-scraper").call(
    run_input={"companies": ["nubank"], "maxComplaintsPerCompany": 100, "sinceDate": "7 days"}
)
for complaint in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(complaint["title"], complaint["status"])
```

The same works in JavaScript (`apify-client`) or with plain HTTP. See the *API* tab on this page.

**Something broke or you need a field?** Open an issue on the Actor's Issues tab. Feature requests are welcome.

# Actor input Schema

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

Company slugs or Reclame Aqui URLs, e.g. <code>nubank</code> or <code>https://www.reclameaqui.com.br/empresa/nubank/</code>.

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

Which complaints to return.

## `search` (type: `string`):

Only complaints matching this text (e.g. <code>cartão</code>, <code>Pix</code>, <code>entrega</code>).

## `maxComplaintsPerCompany` (type: `integer`):

0 = as many as possible. Reclame Aqui lists only ~250 complaints per filter combination; with "Go beyond 250 complaints" on, the Actor splits big companies by problem type to collect many more.

## `splitFilters` (type: `boolean`):

Reclame Aqui shows at most ~250 complaints per list. When you ask for more, split the company by problem type (and by status for very common problems) to reach thousands of complaints. Duplicates are removed before billing.

## `sinceDate` (type: `string`):

Only complaints created on or after this date (Brazil time). Absolute (<code>2026-10-01</code>) or relative (<code>1 day</code>, <code>2 weeks</code>) — perfect for scheduled daily monitoring.

## `untilDate` (type: `string`):

Only complaints created on or before this date (Brazil time). Leave empty for "up to now".

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

Also open each answered complaint to get the company's replies, the consumer's follow-ups and final comment. Slower and charged as an extra event.

## `includeCompanyStats` (type: `boolean`):

Add the company's current reputation to every complaint: RA1000/Bom/Ruim status, final score, solved rate, answered rate, would-do-business-again rate and average response time. Free — no extra charge.

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

Brazilian residential proxies are used by default: Reclame Aqui blocks most datacenter IPs.

## Actor input object example

```json
{
  "companies": [
    "nubank"
  ],
  "status": "ALL",
  "maxComplaintsPerCompany": 20,
  "splitFilters": true,
  "includeCompanyReplies": false,
  "includeCompanyStats": false,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "BR"
  }
}
```

# Actor output Schema

## `complaints` (type: `string`):

No description

## `companyProfiles` (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"
    ],
    "maxComplaintsPerCompany": 20,
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ],
        "apifyProxyCountry": "BR"
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("cleandata/reclame-aqui-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"],
    "maxComplaintsPerCompany": 20,
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
        "apifyProxyCountry": "BR",
    },
}

# Run the Actor and wait for it to finish
run = client.actor("cleandata/reclame-aqui-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"
  ],
  "maxComplaintsPerCompany": 20,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "BR"
  }
}' |
apify call cleandata/reclame-aqui-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,cleandata/reclame-aqui-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/DY2jXfLKKFVODxXPb/builds/T9lTSGgKbZDOyBwOg/openapi.json
