Looking for the overview — what this API returns, what it costs, and a call you can run without a key? See the Reclame Aqui API page →
Reputation & Reviews

Reclame Aqui API & Scraper

The ReclameAqui API returns Brazilian consumer-complaint data as clean JSON.

6 actionsLive JSON1,000 free credits$0.67–$1.50 / 1,000 creditsMCP-ready
Get a free keyOpen in playground

🤖 Using an AI assistant? Copy this link into ChatGPT / Claude / Cursor — it reads every endpoint and parameter instantly and tells you if this API fits your use case.

The primary company/search endpoint resolves a company (name, slug, reputation), and you can pull company/detail, company/stats, company/complaints, search complaints and a complaint/detail. It is built for reputation monitoring and Brazilian market research that need ReclameAqui data without a scraper. One ReefAPI key, one shared credit pool, the standard envelope.

Reference

The reputation block, and the two identifiers you actually need

RA1000 is not a score and the score is not a percentage, which is the first thing that trips people up. A company carries one headline reputation object plus five separate period windows, each with its own score and date range. The numbers below are a live company/search on nubank in August 2026.

FieldWhat it holdsMeasured (nubank)
reputation.statusThe seal, as a string. RA1000 is a status value, not a numeric ratingRA1000
reputation.scoreThe 0-10 reputation index8.7
reputation.consumer_scoreA separate 0-10 consumer rating, computed from evaluations only7.7
the three percent fields0-100 with one decimal, not fractions100.0 / 93.4 / 81.3
average_response_time_seconds and _hoursBoth are returned; seconds is a long float, hours is rounded378978.2 seconds, 105.27 hours
period_indexesFive windows: SIX_MONTHS, TWELVE_MONTHS, LAST_YEAR, PAST_LAST_YEAR, LAST_THREE_YEARS, each with its own score plus start and end8.7 for the last six months against 8.4 for the year before last
id and shortnameThe numeric company id comes back as a string; shortname is the URL slugid 88850, shortname nubank
Complaint id and legacy_idA 16-character opaque string, alongside the older integer idwet7mKfYp_rT-dXo and 257467727

url_slug is the title slug plus an underscore plus the complaint id, so complaint/detail needs company_slug and that whole string. company/complaints takes company_id (the number), not the slug, so resolve with company/search first.

Live example

Real request and response JSON

Captured from the indexed primary action, company/search, on .

Captured request
{
  "method": "POST",
  "url": "https://api.reefapi.com/reclameaqui/v1/company/search",
  "headers": {
    "x-api-key": "$REEF_KEY",
    "content-type": "application/json"
  },
  "body": {
    "query": "nubank"
  }
}
Captured response
{
  "ok": true,
  "meta": {
    "api": "reclameaqui",
    "endpoint": "company/search",
    "mode": "live",
    "latency_ms": 4777.2,
    "record_count": 1,
    "bytes": 0,
    "cache_hit": false
  },
  "data": {
    "companies": [
      {
        "id": "88850",
        "evolution_id": "667af[redacted-phone]ce-b9b3-f013cf1f03d1",
        "name": "Nubank",
        "fantasy_name": "Nubank",
        "shortname": "nubank",
        "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.",
        "website": "http://www.nubank.com.br",
        "company_url": "https://www.reclameaqui.com.br/empresa/nubank/",
        "url_site": "http://www.nubank.com.br",
        "verified": true,
        "category": null,
        "complaints_last_6_months": 57898,
        "reputation": {
          "status": "RA1000",
          "score": 8.7,
          "consumer_score": 7.7,
          "answered_percent": 99.7,
          "solved_percent": 93,
          "would_buy_again_percent": 81.2,
          "average_response_time_seconds": 387707.59291652235,
          "average_response_time_hours": 107.7,
          "total_complaints": 57898,
          "answered": 57740,
          "total_solved": 14507,
          "total_not_solved": 1085,
          "total_deal_again": 12657,
          "total_not_deal_again": 2935,
          "total_evaluations": 15592,
          "evaluation_sum": 120028
        },
        "period_indexes": {
          "SIX_MONTHS": {
            "type": "[trimmed-depth]",
            "status": "[trimmed-depth]",
            "score": "[trimmed-depth]",
            "consumer_score": "[trimmed-depth]",
            "total_complaints": "[trimmed-depth]",
            "total_answered": "[trimmed-depth]",
            "total_not_answered": "[trimmed-depth]",
            "answered_percent": "[trimmed-depth]",
            "solved_percent": "[trimmed-depth]",
            "would_buy_again_percent": "[trimmed-depth]",
            "total_evaluated": "[trimmed-depth]",
            "average_response_time_seconds": "[trimmed-depth]",
            "average_response_time_3m_seconds": "[trimmed-depth]",
            "start": "[trimmed-depth]",
            "end": "[trimmed-depth]"
          },
          "TWELVE_MONTHS": {
            "type": "[trimmed-depth]",
            "status": "[trimmed-depth]",
            "score": "[trimmed-depth]",
            "consumer_score": "[trimmed-depth]",
            "total_complaints": "[trimmed-depth]",
            "total_answered": "[trimmed-depth]",
            "total_not_answered": "[trimmed-depth]",
            "answered_percent": "[trimmed-depth]",
            "solved_percent": "[trimmed-depth]",
            "would_buy_again_percent": "[trimmed-depth]",
            "total_evaluated": "[trimmed-depth]",
            "average_response_time_seconds": "[trimmed-depth]",
            "average_response_time_3m_seconds": "[trimmed-depth]",
            "start": "[trimmed-depth]",
            "end": "[trimmed-depth]"
          },
          "LAST_YEAR": {
            "type": "[trimmed-depth]",
            "status": "[trimmed-depth]",
            "score": "[trimmed-depth]",
            "consumer_score": "[trimmed-depth]",
            "total_complaints": "[trimmed-depth]",
            "total_answered": "[trimmed-depth]",
            "total_not_answered": "[trimmed-depth]",
            "answered_percent": "[trimmed-depth]",
            "solved_percent": "[trimmed-depth]",
            "would_buy_again_percent": "[trimmed-depth]",
            "total_evaluated": "[trimmed-depth]",
            "average_response_time_seconds": "[trimmed-depth]",
            "average_response_time_3m_seconds": "[trimmed-depth]",
            "start": "[trimmed-depth]",
            "end": "[trimmed-depth]"
          },
          "PAST_LAST_YEAR": {
            "type": "[trimmed-depth]",
            "status": "[trimmed-depth]",
            "score": "[trimmed-depth]",
            "consumer_score": "[trimmed-depth]",
            "total_complaints": "[trimmed-depth]",
            "total_answered": "[trimmed-depth]",
            "total_not_answered": "[trimmed-depth]",
            "answered_percent": "[trimmed-depth]",
            "solved_percent": "[trimmed-depth]",
            "would_buy_again_percent": "[trimmed-depth]",
            "total_evaluated": "[trimmed-depth]",
            "average_response_time_seconds": "[trimmed-depth]",
            "average_response_time_3m_seconds": "[trimmed-depth]",
            "start": "[trimmed-depth]",
            "end": "[trimmed-depth]"
          },
          "LAST_THREE_YEARS": {
            "type": "[trimmed-depth]",
            "status": "[trimmed-depth]",
            "score": "[trimmed-depth]",
            "consumer_score": "[trimmed-depth]",
            "total_complaints": "[trimmed-depth]",
            "total_answered": "[trimmed-depth]",
            "total_not_answered": "[trimmed-depth]",
            "answered_percent": "[trimmed-depth]",
            "solved_percent": "[trimmed-depth]",
            "would_buy_again_percent": "[trimmed-depth]",
            "total_evaluated": "[trimmed-depth]",
            "average_response_time_seconds": "[trimmed-depth]",
            "average_response_time_3m_seconds": "[trimmed-depth]",
            "start": "[trimmed-depth]",
            "end": "[trimmed-depth]"
          }
        },
        "raw_keys": [
          "additionalFields",
          "documents",
          "marketplaceConfiguration"
        ],
        "pageviews": 2694596
      }
    ]
  }
}
Actions

What the Reclame Aqui API does

ActionDescriptionConcrete use caseKey params
company/searchresolve a company by name/slugSupport teams call company/search to resolve a company by name/slug.query, slug
company/detailcompany profile + reputation indexReputation platforms call company/detail to get company profile + reputation index.slug, company_id
company/statsreputation metrics + main/performance problemsMarket researchers call company/stats to get reputation metrics + main/performance problems.slug, company_id
company/complaintspaginated complaints for a companyB2B review analysts call company/complaints to get paginated complaints for a company.company_id, status, statuses, limit, page_size, ...
complaints/searchsearch complaints by keywordSupport teams call complaints/search to search complaints by keyword.query, limit, page_size, date_from, date_to
complaint/detailsingle complaint thread (HTML timeline)Reputation platforms call complaint/detail to get single complaint thread (HTML timeline).company_slug, complaint_url_slug
Code samples

Call company/search from your stack

curl -X POST https://api.reefapi.com/reclameaqui/v1/company/search \
  -H "x-api-key: $REEF_KEY" \
  -H "content-type: application/json" \
  -d '{"query":"nubank"}'
MCP one-liner
Ask your MCP-connected assistant: call reefapi.reclameaqui.company/search with {"query":"nubank"}.
Use cases

Who uses this API and why

  • Reputation teams call company/stats to monitor a brand's ReclameAqui score.
  • Researchers use complaints/search to find recurring complaint themes.
  • Support tools use complaint/detail to review individual cases.
FAQ

Questions developers ask before integrating

Is RA1000 a score out of 1000?

No. RA1000 is a seal, returned as reputation.status, and it sits next to a completely separate numeric score on a 0-10 scale. On a measured nubank lookup status was RA1000 and score was 8.7, with consumer_score at 7.7. The same status string repeats inside every period window, so a company can hold the seal in one window and a lower score in another.

Which complaint status values actually come back?

The filter enum and the returned vocabulary are not the same list. You filter with ANSWERED, EVALUATED, NOT_ANSWERED or PROCESSING, but a measured complaints/search returned rows whose status was PENDING with status_label 'Não respondida'. Read status_label if you want the Portuguese wording the site itself shows. Status is also independent of resolution: a row can be ANSWERED with solved false and status_label 'Respondida • Não resolvida'.

Why are problem_type.name, product_type.name and category.name null?

Complaint rows carry only the taxonomy ids, as 16-digit zero-padded strings such as 0000000000000091, with the name left null. The names live in company/stats, whose main_problems block returns categories, products and problems lists keyed by the same ids — 39, 36 and 43 entries respectively for nubank. Pull that once, cache it, and join locally. Store the ids as strings; parsing them as integers destroys the padding.

What does complaint/detail return that the list actions do not?

The reply thread and nothing else. A measured call returned the complaint url, company_responses[] and consumer_replies[], with a full company reply of about 3,700 characters. Title, body, status and dates are not repeated there, so keep the row from company/complaints and use detail purely to fetch the conversation. Timestamps inside that block are Brazilian format, '26/08/2026 às 18:25', while list rows use ISO 2026-08-26T16:59:43.

Is personal data included in complaints?

Consumer names are masked. Every measured row returned consumer_name as '****' while city and state stayed populated, for example Seropédica and RJ. The complaint title and description are the consumer's own text and are returned verbatim, including raw HTML such as <br/> tags in complaints/search results, so escape them before rendering.

How many complaints can I pull for one company?

255 is the public ceiling and the response tells you where it stopped. meta carries api_cap_records 255, plus stop_reason, pages, duplicates_removed, date_filtered_out and completeness_pct. A measured pull with limit 10 reported stop_reason limit_reached after 2 upstream pages with 0 duplicates removed. Use date_from and date_to to move the window rather than trying to page past the cap.

Why is complaint_url pointing at the company's own website?

In complaints/search that field can carry the company site rather than the complaint page — a measured Banco Safra row returned http://www.safra.com.br. company/complaints does return the real page, https://www.reclameaqui.com.br/nubank/<url_slug>/. If you are working from search results, build the link yourself from company_slug and url_slug instead of trusting the field.

Which window should I quote when comparing companies?

Say which one, because they diverge. For nubank the same reputation object reported 57,057 complaints over six months, 115,622 over twelve, and 347,147 over three years, with the score drifting from 8.4 in PAST_LAST_YEAR to 8.7 in SIX_MONTHS. Each period entry carries explicit start and end timestamps, so store those with the number rather than the label alone.

What is the Reclame Aqui API?

Reclame Aqui API is a ReefAPI endpoint group for brazilian company complaints and reputation. It returns live JSON through POST requests under /reclameaqui/v1.

Is the Reclame Aqui API free to try?

Yes. ReefAPI starts with 1,000 free credits, no card required. Reclame Aqui calls use the same shared credit balance as every other ReefAPI engine.

Do I need a Reclame Aqui login or account?

No login to Reclame Aqui is needed for the API response. You call ReefAPI with your x-api-key header, and the playground can run live examples before you create a production key.

How fresh is the Reclame Aqui data?

The page example is captured from a live company/search call, and production requests fetch live data through ReefAPI rather than a static sample.

How many credits does the Reclame Aqui API use?

Reclame Aqui actions currently cost 1-3 credits per successful call. Failed or blocked calls are free, and all APIs draw from one credit pool.

Can I call Reclame Aqui from an AI assistant or MCP client?

Yes. Connect ReefAPI once through MCP and your assistant can call reclameaqui actions with the same key, credit pool and JSON envelope used by normal REST requests.

docs / reclameaqui

Reclame Aqui

Brazilian company complaints and reputation.

base /reclameaqui/v16 endpoints
post/reclameaqui/v1/company/search1 credit

resolve a company by name/slug

ParameterAllowed / rangeDescription
queryoptionalCompany name (resolved to a slug) or, for complaints/search, the keyword to match in complaint titles/bodies.
slugoptionalReclameAqui company shortname/slug (e.g. 'nubank'). Provide this OR query / company_id.
Try in playground →
post/reclameaqui/v1/company/detail1 credit

company profile + reputation index

ParameterAllowed / rangeDescription
slugoptionalReclameAqui company shortname/slug (e.g. 'nubank'). Provide this OR query / company_id.
company_idoptionalReclameAqui numeric company id (from company/detail or company/search).
Try in playground →
post/reclameaqui/v1/company/stats3 credits

reputation metrics + main/performance problems

ParameterAllowed / rangeDescription
slugoptionalReclameAqui company shortname/slug (e.g. 'nubank'). Provide this OR query / company_id.
company_idoptionalReclameAqui numeric company id (from company/detail or company/search).
Try in playground →
post/reclameaqui/v1/company/complaints1 credit

paginated complaints for a company

ParameterAllowed / rangeDescription
company_idrequiredReclameAqui numeric company id (from company/detail or company/search).
status = ANSWEREDoptionalANSWERED · EVALUATED · NOT_ANSWERED · PROCESSINGComplaint status to page through (default ANSWERED). Use `statuses` to combine several.
statusesoptionalOptional list of statuses to fetch (overrides `status`).
limit = 50optional1–255Maximum complaints to return (public cap is 255).
page_size = 5optional1–50Complaints fetched per upstream page (tuning knob).
date_fromoptionalOnly include complaints on/after this date (YYYY-MM-DD).
date_tooptionalOnly include complaints on/before this date (YYYY-MM-DD).
company_slugoptionalCompany slug (used to build the complaint URL / label rows).
company_nameoptionalOptional company display name to stamp onto returned complaint rows.
Try in playground →
post/reclameaqui/v1/complaints/search1 credit

search complaints by keyword

ParameterAllowed / rangeDescription
queryrequiredCompany name (resolved to a slug) or, for complaints/search, the keyword to match in complaint titles/bodies.
limit = 50optional1–255Maximum complaints to return (public cap is 255).
page_size = 10optional1–50Complaints fetched per upstream page (tuning knob).
date_fromoptionalOnly include complaints on/after this date (YYYY-MM-DD).
date_tooptionalOnly include complaints on/before this date (YYYY-MM-DD).
Try in playground →
post/reclameaqui/v1/complaint/detail2 credits

single complaint thread (HTML timeline)

ParameterAllowed / rangeDescription
company_slugrequiredCompany slug (used to build the complaint URL / label rows).
complaint_url_slugrequiredThe complaint's URL slug (the last path segment of its ReclameAqui page).
Try in playground →