Reclame Aqui Scraper
Scrape Reclame Aqui complaints and company reputation: score, complaint text, company reply, status, city and date. No complainant names, no contact data.
How it works
- 1Open it on Apify
Hit Run on Apify — it opens the tool in the cloud, no install.
- 2Set the inputs
Adjust
companies,maxComplaintsPerCompany,includeCompanyProfile(sensible defaults are pre-filled). - 3Click Run
The tool runs on Apify’s cloud and collects the data for you.
- 4Export the results
Download as JSON, CSV or Excel, or pipe straight into your app, Google Sheets, or an AI agent.
Pricing
$0.0092 per row = $9.2 per 1,000
| You are charged for | When | Price |
|---|---|---|
| Row returned | One complaint or company profile row returned in the dataset. Diagnostic rows and the labelled sample row are not charged. | $0.0092 |
Pay-per-event pricing: you are billed per result, not per subscription. Billing is handled by Apify on your own account. These are the live Apify store prices, in effect since 2026-09-20, and they are what you are actually charged.
Inputs
| Field | What it does | Type |
|---|---|---|
companies | One company per line. A Reclame Aqui page URL (https://www.reclameaqui.com.br/empresa/nubank/), the short name from that URL (nubank), or the brand written out (Magazine Luiza). Written-out names are looked up and the best match is used — big retailers are split into several pages (loja online, loja física, marketplace), so paste the exact URL when you care which one you get. | array |
maxComplaintsPerCompany | How many complaints to pull for each company, newest first. Set 0 to get the company profile only. Reclame Aqui's own listing stops at 5100 complaints per filter combination, so that is the ceiling here too. | integer |
includeCompanyProfile | Writes one row per company with the reputation score, the index status (RA1000, Otimo, Bom, Regular, Nao Recomendada), and the answer, resolution and would-buy-again rates for every period Reclame Aqui publishes. | boolean |
includeCompanyReply | Reads each complaint's own page to get what the company actually wrote back, plus the consumer's follow-ups. This is one extra request per complaint, so a run with it on takes roughly twice as long. Turn it off if you only need titles, status and ratings. | boolean |
complaintStatus | Reclame Aqui only filters on these two. "Answered" means the company has replied at least once; "Waiting for a reply" means it has not. | string |
resolution | Only complaints the consumer marked as resolved, or only the ones they marked unresolved. Both of these imply the consumer came back and rated the outcome. | string |
onlyRated | Keeps the complaints that have a 0-10 score and a closing comment from the consumer. Most recent complaints do not yet. | boolean |
sortOrder | Newest first is what the site shows. Oldest first starts at the company's very first complaint, which is the way to read a company's history from the beginning. | string |
What you get
A structured dataset — each result includes fields like:
rowTypecompanyNamereputationScoretitlestatusresolvedconsumerScorecompanyReplycitystatepublishedAturlExport every run as JSON, CSV or Excel, or send it to your app, a database, Google Sheets, or an AI agent.
Related tools in Developer & Research Tools
Other ready-to-run tools in the same category — all pay-per-use on the Apify cloud.
GitHub Scraper
Search GitHub repos and users: stars, forks, language, topics, licence, plus user bio, company and followers. No token needed. $0.90 per 1,000 rows.
Stack Overflow / Stack Exchange Scraper
Search Stack Overflow and Stack Exchange by keyword or tag. Score, answer count, views, reputation and body text. $2 per 1,000 questions.
Package Registry Scraper (npm + PyPI)
Get npm and PyPI package metadata as JSON. Version, license, author, repo, keywords and npm monthly downloads. $2 per 1,000 packages.
arXiv Scraper
Search arXiv papers by title, author, abstract or category. Get full abstracts, authors, categories, DOI, dates and PDF links. $2 per 1,000 papers.
OpenAlex Scholarly Works Scraper
Search 250M+ OpenAlex papers with no API key. Get titles, authors, venue, year, citations, DOI, OA links and full abstracts. $2.00 per 1,000 papers.
Crossref Scholarly Works Scraper
Search 150M+ papers on Crossref: DOI, title, authors, journal, publisher, date, citations and abstract. No API key. $1.00 per 1,000 works.
Where this tool sits
- Categories
- Developer & Research Tools
Reclame Aqui Scraper: Brazilian consumer complaints, company replies and reputation scores
Give it a company, as a Reclame Aqui link, the short name from that link or the brand typed out. You get one company row with the reputation score, index status and answer, resolution and buy-again rates for five periods, plus one row per complaint with the full text, the company's reply, the consumer's 0 to 10 rating, city, state and dates. Big retailers are split into several pages with separate scores, so a typed brand name picks one of them, and one listing stops at 5,100 complaints.
| Input | Companies, as a Reclame Aqui link, a short name or a brand name |
| Output | One row per company and one row per complaint |
| Ceiling | 5,100 complaints per company for each combination of filters |
| Account needed | None |
| Price | $9.20 per 1,000 rows, flat on every plan |
🔍 What Reclame Aqui Scraper does
The company row carries the figures the company's own page shows, for the site's default period, the last six months. The other periods sit in periods in the same shape: last 12 months, last calendar year, the year before that and the last three years. A year-on-year comparison needs no second run.
Complaint rows come newest first, or oldest first if you ask. Oldest first on Casas Bahia's online store went back to a complaint filed on 7 May 2013.
A typed brand is looked up and the best match wins. That matters, because "Loja Online", "Lojas Físicas" and "Marketplace" are separate companies with separate scores. Typing Casas Bahia picked casas-bahia-loja-online and listed four other pages for the brand in otherPagesForThisBrand. Paste the exact link when you care which one you get.
The company's reply lives on each complaint's own page, so includeCompanyReply reads that page too. Fifty complaints and the company row took 41 seconds with replies on in a test run; sixty without replies took 8.
About personal data. Reclame Aqui withholds the consumer's name, e-mail and IP, so the rows carry only city and state about the person. Every text field is also scanned for e-mail addresses, CPF, CNPJ, CEP and Brazilian phone numbers, which are replaced with [CPF removido] and the like. Names get the same treatment where they usually turn up: the greeting a company's reply opens with (Olá, Maria, Prezado Sr. João), a consumer's sign-off or meu nome é, and that same name anywhere else in the complaint. Each becomes [nome removido]. It is a pattern match, so a name written anywhere else comes through as written, and so do the first names company staff sign with.
📥 What you give it
{
"companies": ["https://www.reclameaqui.com.br/empresa/nubank/", "magazine-luiza-loja-online", "Casas Bahia"],
"maxComplaintsPerCompany": 50,
"includeCompanyReply": true,
"sortOrder": "newest"
}
| Field | If you leave it out | What it is |
|---|---|---|
companies | a free sample row | One per line: a company page link, the short name from it (nubank) or the brand written out (Magazine Luiza). |
maxComplaintsPerCompany | 50 | 0 to 5,100 complaints per company. 0 returns the company row only. |
includeCompanyProfile | on | One row per company with the reputation figures for every period. |
includeCompanyReply | on | The company's reply and the consumer's follow-ups. It reads one more page per complaint, so the run takes longer. |
complaintStatus | any | ANSWERED (the company replied) or PENDING (it has not). The only two Reclame Aqui filters on. |
resolution | any | solved or unsolved, as the consumer marked it. |
onlyRated | off | Only complaints the consumer came back and scored. |
sortOrder | newest | newest or oldest. Oldest starts at the company's very first complaint. |
proxyConfiguration | not used | Only for your own servers. Addresses you list here are used as given. Leave it alone otherwise. |
The form opens with nubank filled in, as an example.
📤 What you get back
A real company row from a real run, with periods cut to one of its five entries and the social links to two:
{
"ok": true,
"rowType": "company",
"companyId": "88850",
"companyName": "Nubank",
"tradingName": "Nubank",
"shortname": "nubank",
"url": "https://www.reclameaqui.com.br/empresa/nubank/",
"website": "http://www.nubank.com.br",
"description": "Somos uma fintech que nasceu para mudar como você lida com o seu dinheiro. Lutamos contra a burocracia para deixar você sempre no controle.",
"cnpj": "18236120000158",
"segment": "Bancos e Financeiras",
"segmentShortname": "bancos-e-financeiras",
"secondarySegments": ["Bancos Tradicionais e Digitais", "Cartões Private Label de Varejo e Mercados", "Bancos Digitais", "Melhores Emissoras e Bandeiras de Cartão de Crédito"],
"logoUrl": "https://raichu-uploads.s3.amazonaws.com/logo_nubank_S5jVIi.png",
"defaultPeriod": "last6Months",
"reputationScore": 8.7,
"indexStatus": "RA1000",
"indexStatusLabel": "RA1000",
"consumerScore": 7.73,
"answeredPercent": 100,
"resolvedPercent": 93.3,
"wouldBuyAgainPercent": 81.2,
"averageAnswerHours": 98.1,
"complaintsTotalAllTime": 60372,
"complaintsLast30Days": 9090,
"periods": [
{
"period": "last6Months",
"periodRaw": "SIX_MONTHS",
"from": "2026-03-01T00:00:00",
"to": "2026-08-31T23:59:59",
"reputationScore": 8.7,
"indexStatus": "RA1000",
"indexStatusLabel": "RA1000",
"consumerScore": 7.73,
"complaints": 56984,
"complaintsAnswered": 56960,
"complaintsNotAnswered": 8,
"complaintsRated": 24921,
"answeredPercent": 100,
"resolvedPercent": 93.3,
"wouldBuyAgainPercent": 81.2,
"averageAnswerHours": 98.1
}
],
"verifiedCompany": true,
"accountStatus": "ACTIVE",
"city": "SAO PAULO",
"state": "SP",
"profileCreatedAt": "2014-12-12T10:47:00",
"profileUpdatedAt": "2026-09-29T09:16:34",
"socialProfiles": [
{ "type": "facebook", "url": "https://www.facebook.com/nubankbrasil" },
{ "type": "instagram", "url": "https://www.instagram.com/nubank/" }
],
"matchedBy": "shortname",
"inputValue": "nubank",
"otherPagesForThisBrand": [],
"scrapedAt": "2026-09-30T02:31:39.934Z"
}
And a real complaint row, with the company's reply cut short:
{
"ok": true,
"rowType": "complaint",
"complaintId": "s0QQZwQobNrF-S6Q",
"complaintNumber": "259386859",
"companyId": "88850",
"companyName": "Nubank",
"companyShortname": "nubank",
"title": "Solicito remoção de negativação de dívida já quitada",
"text": "Gostaria de solicitar a remoção da negativação de uma dívida já quitada com a financeira de vocês está impactando muito em não conseguir crédito com outras financeiras quitei a dívida e ela segue como vencida no Bacen desde já agradeço",
"extraDetails": null,
"status": "ANSWERED",
"answered": true,
"resolved": true,
"rated": true,
"consumerScore": 10,
"consumerComment": "Obrigada",
"wouldBuyAgain": true,
"isCompliment": false,
"companyReply": "Olá! Esperamos que você esteja bem.\n\nSomos da equipe especializada do Nubank e estamos aqui para ajudar a esclarecer qualquer dúvida que você possa ter...",
"companyReplyAt": "2026-09-18T16:12:01",
"companyReplyCount": 1,
"consumerReplies": [{ "text": "Obrigada", "at": "2026-09-18T17:48:51" }],
"resolutionStatus": "SOLVED",
"city": "Taboão da Serra",
"state": "SP",
"publishedAt": "2026-09-18T05:00:22",
"updatedAt": "2026-09-18T17:48:51",
"firstReplyAt": "2026-09-18T16:12:01",
"url": "https://www.reclameaqui.com.br/nubank/solicito-remocao-de-negativacao-de-divida-ja-quitada_s0QQZwQobNrF-S6Q/",
"position": 6,
"scrapedAt": "2026-09-20T02:07:42.375Z"
}
| Field | What it is |
|---|---|
reputationScore, indexStatus, indexStatusLabel | The score out of 10 and the index, such as RA1000, GREAT or REGULAR, exactly as the site publishes them. |
answeredPercent, resolvedPercent, wouldBuyAgainPercent, averageAnswerHours | The site's own figures, carried through, not computed from your rows. |
periods | The same figures for each of the five periods, with their dates and complaint counts. |
matchedBy, otherPagesForThisBrand | How the company was found, and the other pages the brand has when a typed name was matched. |
status, answered | The company's side: ANSWERED or PENDING. |
resolved, rated, consumerScore, consumerComment, wouldBuyAgain | The consumer's side. resolved only means something once rated is true, so false on a two-day-old complaint means "not yet". |
companyReply, companyReplyAt, consumerReplies | The reply and the back-and-forth, when includeCompanyReply is on. |
city, state, publishedAt, url | Where the consumer is, when they posted, and the public page. |
Null means the site has nothing there: the consumer's score and comment until they rate, the reply until the company answers, cnpj, website or socialProfiles when a company never filled them in, and the score and percentages when a company carries no index. [Editado pelo Reclame Aqui] inside a text is the site's own moderation.
🧾 Reading the output
Real rows have no charged field. Every free row carries charged: false, so dropping those leaves only companies and complaints.
| Row | How to spot it | Charged |
|---|---|---|
| A company | rowType: "company" | yes |
| A complaint | rowType: "complaint" | yes |
| The sample | _sample: true | no |
| A note | _diagnostic: true, ok: false, with an errorCode, an error and a hint | no |
The sample row, which a run with no companies returns, carries ok: true and rowType: "complaint" like a real one. Filter on _sample or charged, not on those.
errorCode | What it means |
|---|---|
COMPANY_NOT_FOUND | No company page matches what you typed. Copy the short name out of the page's link. |
BAD_INPUT | Not a Reclame Aqui link, short name or brand. |
NO_COMPLAINTS | No complaints for that company with those filters. Try with the filters cleared. |
FETCH_FAILED, REFUSED | Reclame Aqui stopped answering for that company. The rows before the note are complete; run it again for the rest. |
▶️ How to run it
1. Open Reclame Aqui Scraper and click Try for free. 2. Put one company per line in Companies. 3. Set Complaints per company, or 0 for the company row only. 4. Pick any filters under Complaint status, Resolution and Only complaints the consumer rated. 5. Click Start, then download the dataset as JSON, CSV or Excel.
💰 How much does it cost?
$9.20 per 1,000 rows, flat on every Apify plan. A company row and a complaint row cost the same, so the reputation card alone is one row.
Not charged: the sample row, every note above, the lookup behind a typed brand name, and a company listed twice, which is read once. If you set a maximum cost for the run, it stops there and says so in its status.
💡 What people use it for
- Working through your own company's unanswered complaints, with
complaintStatusset toPENDING. - Tracking a company's reputation on a schedule with
maxComplaintsPerCompanyat0: one row a
run, five periods in it.
- Comparing answer and resolution rates across the banks or retailers in one sector.
- Reading a company's record from its first complaint, oldest first.
🚧 What it does not do
- No consumer names from the site. Reclame Aqui withholds them, and the ones in greetings and
sign-offs are masked. A name typed anywhere else can still get through, see above.
- 5,100 complaints per company for each combination of filters. That is the site's own listing
limit. A different status, resolution or rating filter, or oldest first, opens another slice.
- No private or deleted complaints, and no attachments, images or audio.
- No group roll-up. Sub-brands are separate companies, so ask for each page.
- No sentiment scores, categories or summaries. It returns what the site says.
- No translation. Complaints and replies stay in Portuguese.
🧭 Which review scraper do you need?
| If you want | Use |
|---|---|
| Brazilian consumer complaints and company reputation | This one |
| Trustpilot reviews for any company | Trustpilot Scraper |
| Google Maps reviews for a place | Google Maps Reviews Scraper |
| Software reviews on G2 | G2 Reviews Scraper |
| Software reviews on Capterra, with five scores each | Capterra Reviews Scraper |
❓ Questions people ask
Do I need a Reclame Aqui login or an API key? No. Everything here is what a signed-out visitor can see.
Is the score the same one on the company's page? Yes, for the same default period the page shows.
Can I get the complaints my own company received? Yes. Put your company's page in companies and set complaintStatus to PENDING for everything still waiting on an answer.
Why is companyReply null on some rows? The company has not replied yet, or includeCompanyReply was off.
Why did a brand name give me a different page than I expected? The brand has several. otherPagesForThisBrand lists the ones not picked; copy the short name you want.
Is this legal? The complaints are public, but they are personal data under the LGPD and similar laws, so have a reason for holding them and take care before republishing. Apify's write-up on the legality of web scraping is a good starting point. We are not lawyers.
🆘 If something breaks
Open the Issues tab on the actor page and send the input you used and the run ID. The note rows in the dataset usually name the reason already.