Request a tool
All toolsAutomationsGuidesMCP serverRequest a toolPlatformsCategories
Reclame Aqui Scraper icon

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.

20 runs on Apify $0.0092 per row ($9.2 / 1,000)
Run this in the cloudRun on Apify →

Developer & Research Tools

How it works

  1. 1
    Open it on Apify

    Hit Run on Apify — it opens the tool in the cloud, no install.

  2. 2
    Set the inputs

    Adjust companies, maxComplaintsPerCompany, includeCompanyProfile (sensible defaults are pre-filled).

  3. 3
    Click Run

    The tool runs on Apify’s cloud and collects the data for you.

  4. 4
    Export 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 forWhenPrice
Row returnedOne 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

FieldWhat it doesType
companiesOne 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
maxComplaintsPerCompanyHow 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
includeCompanyProfileWrites 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
includeCompanyReplyReads 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
complaintStatusReclame Aqui only filters on these two. "Answered" means the company has replied at least once; "Waiting for a reply" means it has not.string
resolutionOnly 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
onlyRatedKeeps the complaints that have a 0-10 score and a closing comment from the consumer. Most recent complaints do not yet.boolean
sortOrderNewest 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:

rowTypecompanyNamereputationScoretitlestatusresolvedconsumerScorecompanyReplycitystatepublishedAturl

Export 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 iconDeveloper & Research Tools

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.

18 use cases

Stack Overflow / Stack Exchange Scraper iconDeveloper & Research Tools

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.

2 use cases

Package Registry Scraper (npm + PyPI) iconDeveloper & Research Tools

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.

2 use cases

arXiv Scraper iconDeveloper & Research Tools

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.

2 use cases

OpenAlex Scholarly Works Scraper iconDeveloper & Research Tools

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.

2 use cases

Crossref Scholarly Works Scraper iconDeveloper & Research Tools

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.

2 use cases

See all Developer & Research Tools →

Reclame Aqui Scraper: complaints, replies and company reputation

Pulls two things off Reclame Aqui, Brazil's public consumer-complaint platform:

1. The company's reputation card. The score out of 10, the index status (RA1000, Ótimo, Bom, Regular, Ruim, Não Recomendada), how many complaints came in, how many were answered, how many the consumer marked resolved, how many said they would buy again, and the average time to a first answer, for every period the site publishes: last 6 months, last 12 months, last calendar year, the year before that, and the last 3 years. 2. The complaints themselves. Title, the full text the consumer wrote, status, the company's reply, the consumer's closing 0–10 score and comment, whether they would deal with the company again, city, state, the dates, and the public URL.

Give it a company and it returns both. Nothing else to configure.

---

What you put in

Any of these three, one per line, mixed freely:

{
  "companies": [
    "https://www.reclameaqui.com.br/empresa/nubank/",
    "magazine-luiza-loja-online",
    "Casas Bahia"
  ],
  "maxComplaintsPerCompany": 50,
  "includeCompanyProfile": true,
  "includeCompanyReply": true,
  "sortOrder": "newest"
}

A brand typed out gets looked up the same way the site's own search box does, and the best match wins. Big Brazilian retailers are split into several separate pages. "Loja Online", "Loja Física", "Marketplace" and the store card are four different companies with four different scores. If that distinction matters to you, paste the exact URL. When the actor has to guess, the company row carries matchedBy and an otherPagesForThisBrand list so you can see what else it could have picked.

Filters

InputWhat it does
complaintStatusANSWERED (the company replied) or PENDING (it has not). Those are the only two Reclame Aqui itself filters on
resolutiononly resolved, or only unresolved
onlyRatedonly complaints the consumer came back and scored
sortOrdernewest first, or oldest first. Oldest first starts at the company's very first complaint, which for a long-established brand means 2013
maxComplaintsPerCompanyset it to 0 to get the reputation card and skip the complaints entirely

---

What comes out

Two row shapes in one dataset, told apart by rowType.

rowType: "company"

{
  "rowType": "company",
  "companyId": "88850",
  "companyName": "Nubank",
  "shortname": "nubank",
  "url": "https://www.reclameaqui.com.br/empresa/nubank/",
  "cnpj": "18236120000158",
  "segment": "Bancos e Financeiras",
  "defaultPeriod": "last6Months",
  "reputationScore": 8.7,
  "indexStatus": "RA1000",
  "consumerScore": 7.73,
  "answeredPercent": 99.9,
  "resolvedPercent": 93.3,
  "wouldBuyAgainPercent": 81.2,
  "averageAnswerHours": 98.1,
  "complaintsTotalAllTime": 60372,
  "complaintsLast30Days": 9393,
  "periods": [
    {
      "period": "last12Months",
      "from": "2025-09-01T00:00:00",
      "to": "2026-08-31T23:59:59",
      "reputationScore": 8.7,
      "indexStatus": "RA1000",
      "complaints": 115311,
      "complaintsAnswered": 115064,
      "complaintsNotAnswered": 148,
      "complaintsRated": 48845,
      "answeredPercent": 99.8,
      "resolvedPercent": 92.4,
      "wouldBuyAgainPercent": 80.2,
      "averageAnswerHours": 114.2
    }
  ],
  "verifiedCompany": true,
  "socialProfiles": [{ "type": "instagram", "url": "https://www.instagram.com/nubank/" }]
}

The headline numbers on that row are the period the site shows by default, the last six months. The other four are in periods, same shape, so a year-on-year comparison is one map away.

rowType: "complaint"

{
  "rowType": "complaint",
  "complaintId": "l06ktVrFogTC0m_D",
  "complaintNumber": "259446661",
  "companyName": "Nubank",
  "title": "Nubank está retendo os meus contratos de empréstimo consignado do INSS",
  "text": "Nubank retendo meus contratos de empréstimo consignado do inss...",
  "status": "ANSWERED",
  "answered": true,
  "resolved": false,
  "rated": true,
  "consumerScore": 0,
  "consumerComment": "infelizmente continua retendo meus contratos...",
  "wouldBuyAgain": false,
  "companyReply": "Olá. Somos o time do Reclame Aqui do Nubank e recebemos a sua manifestação...",
  "companyReplyAt": "2026-09-18T17:27:49",
  "companyReplyCount": 1,
  "consumerReplies": [{ "text": "Continua sem solução.", "at": "2026-09-18T17:46:20" }],
  "city": "Rio de Janeiro",
  "state": "RJ",
  "publishedAt": "2026-09-18T16:30:22",
  "url": "https://www.reclameaqui.com.br/nubank/nubank-esta-retendo..._l06ktVrFogTC0m_D/"
}

status is the company's side: ANSWERED or PENDING. resolved is the consumer's side, and it only means something once rated is true. Most complaints from the last few days have not been rated yet, so resolved: false on a two-day-old row means "not yet", not "the company failed".

---

What this does not do

  • No consumer names, and none are available. Reclame Aqui does not publish them. The API returns

**** for the complainant's name, e-mail and IP, and the public page shows only the city, the state and the date. So this actor emits the city and the state and nothing else about the person.

  • Free text gets masked before it is written. People do paste their own CPF, phone number or

e-mail into a complaint, and companies sometimes quote it back. Every string field is scanned for e-mail addresses, CPF, CNPJ, CEP and Brazilian phone numbers, and any hit is replaced with [CPF removido] and friends. The run log says how many it caught. It is a pattern match, not magic, and it will not catch a number someone wrote out in words.

  • 5,100 complaints per company, per filter. That is Reclame Aqui's own listing ceiling, not a

choice made here. To go further back, run the same company again with a filter set. Each combination of status, resolution and rating is its own 5,100-row listing, and sortOrder: "oldest" opens the other end of the history.

  • No private or deleted complaints, no "Reclame Aqui Verificada" internal tickets, no

attachments, no images, no audio. Only what a signed-out visitor can read.

  • Sub-brands are separate companies. There is no roll-up for a group. Ask for each page.
  • averageAnswerHours is the site's own figure, carried through unchanged, not something

computed from the complaints in your run.

  • It is paced. Reclame Aqui rate-limits bursts hard, so the actor keeps two requests in the air

and slows itself down when it sees a refusal. Measured: 60 complaints plus the company card came back in 30 seconds with replies on, and 10 seconds with them off. Scale from there, and expect a few thousand complaints to take minutes, not seconds.

  • No sentiment scoring, no categories, no summaries. It returns what the site says.

---

Pricing

Pay per event. You are charged once per data row: one charge for a company profile row, one charge for each complaint row. Nothing else bills.

Free, always:

  • the sample row an empty run returns
  • every diagnostic row: a company Reclame Aqui does not have, a malformed input, a listing that

came back empty, a run cut short by a refusal

  • the company lookup when you type a brand name instead of a short name

If a run returns nothing you asked for, it charges nothing for it.

---

FAQ

Is this the same score I see on the company's page? Yes. reputationScore and indexStatus are the figures Reclame Aqui publishes on the company page, for the same default period the page shows.

Do I need a Reclame Aqui login or an API key? No. Everything here is what a signed-out visitor can see.

Can I track a company over time? Run it on a schedule with maxComplaintsPerCompany: 0. That returns just the reputation card, one row, one charge, and the five periods let you see the trend inside a single run.

Can I get the complaints my own company received? Yes, and it is the main use for it. Put your own Reclame Aqui page in companies, set complaintStatus to PENDING, and you get everything waiting on an answer, with the text, the city and the link.

Why is companyReply null on some rows? Either the company has not replied yet (answered: false), or includeCompanyReply was off. The reply text lives on the complaint's own page, not in the listing, so it needs that extra read.

Why did "Americanas" return a different company than I expected? Because several exist. The company row's otherPagesForThisBrand lists the ones it did not pick. Copy the short name you want and put that in companies instead.

How far back does it go? As far as the company's history runs. Asking for the oldest first on a long-established retailer came back with a complaint filed in May 2013.

What happens if Reclame Aqui refuses mid-run? The rows already returned stay, and stay charged, because they are real. The run then writes one uncharged diagnostic row saying where it stopped and exits successfully rather than failing. A failed run would still bill you the start fee for nothing.

Which fields can be null? consumerScore, consumerComment and wouldBuyAgain until the consumer rates the complaint. companyReply until the company answers. cnpj, website and socialProfiles on companies that never filled them in. reputationScore and the percentages on a company that does not currently carry an index. The site shows -- there and this returns null rather than inventing a zero.