ReclameAqui Scraper · Brazil Complaints & Company Reputation
Pricing
from $10.00 / 1,000 complaint records
ReclameAqui Scraper · Brazil Complaints & Company Reputation
Monitor any Brazilian brand on ReclameAqui. Get every complaint with the company's full reply thread, plus the reputation scorecard buyers judge on — score, RA status, response and resolution rates, average answer time, CNPJ. Incremental runs emit only what changed. No browser.
Pricing
from $10.00 / 1,000 complaint records
Rating
0.0
(0)
Developer
Muhamed Didovic
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
a day ago
Last modified
Categories
Share
ReclameAqui Scraper
Scrape consumer complaints and company reputation data from ReclameAqui.com.br — Brazil's largest consumer-complaints platform, where shoppers publicly post problems and companies answer in the open.
Every complaint comes back with its full company reply thread, and every company with a complete reputation scorecard: final score, RA status, response / resolution / recommendation rates, average answer time, CNPJ, segment and contacts. Pure HTTP, no browser.

Why use this scraper
- The whole conversation, not just the complaint. Each complaint carries
interactions[]— the ordered thread of company answers and consumer replies, each with HTML, plain text and Markdown, plus a conveniencecompanyAnswer. The reply thread does not exist in ReclameAqui's list feed; this actor reconstructs it from the complaint page. - A real reputation scorecard. ReclameAqui publishes its reputation index as a Java map dump rather than JSON. This actor parses it into clean numbers:
finalScore,reputationLabel,raStatus(RA1000),responseRate,resolutionRate,recommendationRate,averageAnswerTimeHuman, plus 6- and 12-month breakdowns. - Cheapest in its category. $0.01 per complaint — see the Pricing tab.
- Built for monitoring. Incremental mode classifies every record NEW / UPDATED / UNCHANGED / EXPIRED and emits only what changed, so a daily brand-watch run costs a fraction of the first pull.
- Push results where you work. Telegram, Slack, Discord, WhatsApp and generic webhooks (n8n, Make, Zapier) are built in.
- Optional B2B enrichment. Turn on
enrichEmailsand the actor scrapes each company's own website for business contact emails — billed only when an email is actually found.
What it does
Give it a company slug (nubank), a company name, or any reclameaqui.com.br URL. The actor resolves the company, reads its reputation scorecard, pages through its complaints with the filters you set, and — when you ask for it — opens each complaint to rebuild the full back-and-forth with the company. One clean row per record, as JSON, CSV or Excel.
Supported inputs
- Company slug —
nubank,magazine-luiza(the part of the company URL after/empresa/) - Company name — free text, slugified automatically
- Company URL —
https://www.reclameaqui.com.br/empresa/nubank/ - Complaint URL —
https://www.reclameaqui.com.br/nubank/titulo-da-reclamacao_ABC123/, scraped directly with its reply thread
Not supported: private or moderated-out complaints, anything behind a ReclameAqui login (company dashboards, HugMe/RA Chat tickets), consumer personal data that the platform itself masks, and platform-wide free-text complaint search (ReclameAqui's own public search route is currently broken server-side — scrape by company instead).
Use cases
| Audience | What they get |
|---|---|
| Brand & reputation teams | Track your RA score, response and resolution rates over time, and read every complaint the moment it lands |
| Competitive analysts | Compare rivals' reputation scorecards, resolution rates and top problem types side by side |
| Customer-experience teams | Mine recurring problemType / productType clusters to find what actually breaks |
| Market researchers | Quantify consumer pain by segment across Brazil's biggest complaint dataset |
| Support & ops | Get a Telegram or Slack ping the moment a new complaint is filed against your brand |
| Sales teams | Find companies with poor resolution rates, enriched with business contact emails |
How it works
- Resolve the company — a slug, name or URL becomes a company profile via ReclameAqui's public company API.
- Read the reputation scorecard — the 6- and 12-month reputation indexes are parsed into clean numeric fields.
- Page the complaints — the complaint feed is walked ten at a time (the platform's fixed page size), filtered by status, date and keyword.
- Rebuild each thread — with
includeInteractionson, each complaint page is opened and its full company/consumer exchange is reconstructed and decoded. - Classify and emit — in incremental mode every record is diffed against the previous run, then pushed as a clean row and optionally sent to your notification channels.
Proxy requirement
None. ReclameAqui gates on the client's TLS fingerprint rather than the exit IP, which this actor handles natively — the default Apify proxy is enough and datacenter IPs work fine. The platform does rate-limit bursts, so the actor ships a politeness delay and a retry ladder that escalates automatically. Configure the proxy input only if you want traffic routed through your own pool.
Input configuration
| Field | Type | Default | Description |
|---|---|---|---|
companies | array | ["nubank"] | Company slugs, names or URLs to scrape |
startUrls | array | [] | Direct company or complaint URLs |
includeCompanyProfile | boolean | true | Emit one reputation record per company |
scrapeComplaints | boolean | true | Emit complaint records |
includeInteractions | boolean | false | Rebuild the full company reply thread (one extra request per complaint) |
extractContacts | boolean | false | Mine emails and phones out of complaint text |
enrichEmails | boolean | false | Scrape each company's own website for business emails |
statusFilter | array | ["LATEST"] | LATEST, PENDING, ANSWERED, EVALUATED, SOLVED, UNSOLVED |
dateFrom / dateTo | string | "" | Restrict complaints to a date range (YYYY-MM-DD) |
includeKeywords / excludeKeywords | array | [] | Keep or drop complaints by keyword |
solvedOnly | boolean | false | Only complaints the consumer marked resolved |
withReplyOnly | boolean | false | Only complaints with a company answer |
maxComplaintsPerCompany | integer | 100 | Per-company cap (0 = unlimited) |
maxItems | integer | 1000 | Hard cap across all records |
maxConcurrency | integer | 5 | Parallel detail fetches |
minDelayMs | integer | 250 | Politeness delay between requests |
compact | boolean | false | Slim field projection |
descriptionFormat | string | all | all, text, html, markdown |
descriptionMaxLength | integer | 0 | Truncate descriptions (0 = no limit) |
excludeEmptyFields | boolean | false | Drop null/empty keys |
flatten | boolean | true | Flatten nested objects for CSV export |
incrementalMode | boolean | false | Emit only what changed since the last run |
stateKey | string | "" | Override the incremental state key |
detectUpdates | boolean | false | Re-fetch known complaints to catch edits and new replies |
emitUnchanged / emitExpired | boolean | false | Also emit unchanged / disappeared records |
telegramToken + telegramChatId | string | "" | Telegram notifications |
slackWebhookUrl / discordWebhookUrl | string | "" | Slack / Discord notifications |
whatsappAccessToken + whatsappPhoneNumberId + whatsappTo | string | "" | WhatsApp Cloud API notifications |
webhookUrl + webhookHeaders | string / object | "" | Generic JSON webhook |
notificationLimit | integer | 10 | Records listed per notification |
notifyOnlyNew | boolean | true | Only notify on NEW records |
proxy | object | Apify proxy | Optional proxy override |
Output overview
Two record types land in the same dataset, tagged by recordType:
company— one reputation scorecard per companycomplaint— one row per complaint, with its reply thread when enabled
Output sample
A company reputation record:
{"recordType": "company","id": "88850","shortname": "nubank","companyName": "Nubank","cnpj": "18236120000158","url": "https://www.reclameaqui.com.br/empresa/nubank/","website": "http://www.nubank.com.br","segment": "Bancos e Financeiras","finalScore": 8.7,"reputationLabel": "Ótimo","raStatus": "RA1000","hasStamp": true,"consumerScore": 7.69,"responseRate": 99.1,"resolutionRate": 92.9,"recommendationRate": 81.1,"averageAnswerTimeHuman": "4d 8h","totalComplaints": 57833,"complaints6Months": 57133,"complaintsLast30Days": 9112,"phones": ["0800 591 2117"]}
A complaint record with its reply thread:
{"recordType": "complaint","id": "3PwlaEaLWR4wGswj","url": "https://www.reclameaqui.com.br/nubank/problema-com-emprestimo_3PwlaEaLWR4wGswj/","title": "Problema com empréstimo","description": "No dia 14 de maio de 2026 fui vítima de [Editado pelo Reclame Aqui] onde a pessoa se apresentava como gerente do banco …","status": "ANSWERED","createdAt": "2026-08-03T15:12:30.000Z","solved": false,"evaluated": false,"consumerCity": "Belo Horizonte","consumerState": "MG","companyId": "88850","companyName": "Nubank","problemType": "Outro problema","productType": "Outro Tipo de produto/Serviço","hasReply": true,"interactionCount": 1,"interactions": [{"author": "company","type": "ANSWER","createdAt": "2026-08-03T17:33:59.000Z","messageText": "Olá, Adelisete.\n\nSomos o time especialista de Reclame Aqui do Nubank e recebemos a sua manifestação …"}]}
Key output fields
Complaint records
| Field | Description |
|---|---|
id, url, title | Complaint identity and public link |
description / descriptionHtml / descriptionMarkdown | Complaint body in three formats |
status | PENDING, ANSWERED, REPLY, SOLVED, … |
createdAt, modifiedAt, firstReplyAt, expiresAt, daysRemaining | ISO-8601 timeline |
solved, evaluated, dealAgain, consumerScore | Outcome as rated by the consumer |
consumerName, consumerCity, consumerState | Who complained and from where |
problemType, productType, category | ReclameAqui's own taxonomy |
interactions[] | Ordered thread: author (company/consumer), type, createdAt, message in HTML / text / Markdown |
companyAnswer, interactionCount, hasReply | Reply-thread shortcuts |
contactEmails, contactPhones | Mined from the text when extractContacts is on |
Company records
| Field | Description |
|---|---|
companyName, fantasyName, shortname, cnpj | Company identity |
finalScore, reputationLabel, raStatus, hasStamp | Headline reputation (0–10, Ótimo/Bom/Regular/Ruim, RA1000 seal) |
responseRate, resolutionRate, recommendationRate, consumerScore | The rates buyers actually judge a brand on |
averageAnswerTimeSeconds / averageAnswerTimeHuman | How fast the company replies |
totalComplaints, complaints6Months, complaints12Months, complaintsLast30Days | Volume by period |
scorecard6Months, scorecard12Months | Full parsed index for each period |
segment, secondarySegments | Market segment and ranking context |
website, phones, emails, address | Contact surface |
enrichedEmails | Business emails discovered on the company's own site (enrichEmails) |
FAQ
How many complaints can I get?
As many as the company has — large brands carry hundreds of thousands. Use maxComplaintsPerCompany and maxItems to cap a run. ReclameAqui serves its feed ten complaints per request, so very large pulls take time; the politeness delay is there to keep the run stable.
Why do some complaints have no reply thread?
Turn on includeInteractions — the reply thread is not in ReclameAqui's list feed and is only fetched when you ask for it. Also note the default LATEST bucket returns the newest complaints, most of which have not been answered yet. Use statusFilter: ["ANSWERED"] or ["SOLVED"] to target complaints that carry a company reply.
Why is some complaint text replaced with asterisks or "[Editado pelo Reclame AQUI]"? That masking is applied by ReclameAqui itself to profanity and personal data before publication. The actor returns the text exactly as the platform publishes it.
Does it support recurring monitoring?
Yes. Set incrementalMode: true and schedule the actor. Each run emits only NEW and UPDATED records, so ongoing brand monitoring costs a fraction of the initial pull. Add detectUpdates: true to catch new company replies on complaints you already have.
Do I need a proxy? No. The default works, and datacenter IPs are fine — see the Proxy requirement section above.
Support
Found a bug or need a field that isn't there? Open an issue on the actor's Issues tab — issues are read and acted on.
Additional services
Need a custom scraper, an enrichment pipeline, or this data delivered on a schedule to your warehouse? Get in touch through the Apify profile.
Explore more scrapers
Check the publisher's profile for the rest of the reviews and reputation suite — Trustpilot, G2, Capterra, TrustRadius, Google Maps reviews and more — plus job-board and directory scrapers.
🤖 For AI Agents & LLM Apps
Compact reference for AI agents calling this actor via the Apify MCP server or the Apify API (actor: memo23/reclameaqui-scraper).
Purpose: Scrapes ReclameAqui.com.br consumer complaints and company reputation scorecards, optionally reconstructing each complaint's full company/consumer reply thread, with incremental diff runs and webhook notifications.
Minimal input:
{"companies": ["nubank"],"statusFilter": ["ANSWERED"],"includeInteractions": true,"maxItems": 25,"compact": true}
Output: two record types in one dataset, distinguished by recordType. company rows carry the reputation scorecard (finalScore, reputationLabel, raStatus, responseRate, resolutionRate, recommendationRate, averageAnswerTime, complaint counts, CNPJ, segment, website, phones). complaint rows carry id, url, title, description (text/HTML/Markdown), status, ISO dates, solved/evaluated, consumer city and state, problemType, productType, and interactions[] when enabled. compact: true returns core fields only, ideal for LLM context.
Behaviors an agent should know:
companiesaccepts slugs, names or full URLs interchangeably; complaint URLs instartUrlsare scraped directly.- The default
statusFilterofLATESTreturns mostly unanswered complaints. To get reply threads, filter toANSWERED,EVALUATEDorSOLVEDand setincludeInteractions: true. includeInteractionscosts one extra request per complaint — leave it off for fast, cheap pulls.maxItemscaps kept rows; filters drop rows before they are stored or billed.incrementalMode: truewith a stablestateKeymakes repeat calls return only new or changed records — the cheapest way to poll a brand.- Platform-wide free-text complaint search is not available (ReclameAqui's public search route returns a server error); scrape by company.
- Billing: pay-per-event — see the Pricing tab. Company records cost more than complaints;
enrichEmailsis billed per email found and never charged for misses.
⚠️ Disclaimer
This actor collects only publicly available complaint and company-reputation data, exactly as ReclameAqui publishes it — including the platform's own masking of personal data and profanity. Use it for legitimate research, brand monitoring and competitive analysis, and respect ReclameAqui's terms of service along with applicable laws in your jurisdiction, including Brazil's LGPD and other data-protection rules. Complaints contain personal narratives from real consumers; you are responsible for how you store and use that data.
SEO Keywords
reclame aqui scraper, reclameaqui scraper, reclame aqui api, reclameaqui.com.br scraper, brazil consumer complaints scraper, brazilian complaints data, company reputation scraper brazil, ra1000 reputation data, brand monitoring brazil, consumer complaint analysis, cnpj company reputation, customer complaint api, reclame aqui reviews export, brazil customer experience data, complaint reply thread scraper, reputation score scraper, competitor complaint analysis, brazil market research data, lgpd compliant complaint data, reclame aqui monitoring