# ReclameAqui Scraper · Brazil Complaints & Company Reputation (`memo23/reclameaqui-scraper`) Actor

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.

- **URL**: https://apify.com/memo23/reclameaqui-scraper.md
- **Developed by:** [Muhamed Didovic](https://apify.com/memo23) (community)
- **Categories:** Lead generation, Agents, Automation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $10.00 / 1,000 complaint records

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/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.
Actors are written with capital "A".

## 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.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

## ReclameAqui Scraper

Scrape consumer complaints and company reputation data from [ReclameAqui.com.br](https://www.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.

![How the ReclameAqui Scraper works](https://raw.githubusercontent.com/muhamed-didovic/muhamed-didovic.github.io/main/assets/how-it-works-reclameaqui.png)

### 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 convenience `companyAnswer`. 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 `enrichEmails` and 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

1. **Resolve the company** — a slug, name or URL becomes a company profile via ReclameAqui's public company API.
2. **Read the reputation scorecard** — the 6- and 12-month reputation indexes are parsed into clean numeric fields.
3. **Page the complaints** — the complaint feed is walked ten at a time (the platform's fixed page size), filtered by status, date and keyword.
4. **Rebuild each thread** — with `includeInteractions` on, each complaint page is opened and its full company/consumer exchange is reconstructed and decoded.
5. **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 company
- **`complaint`** — one row per complaint, with its reply thread when enabled

### Output sample

A company reputation record:

```json
{
  "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:

```json
{
  "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](https://mcp.apify.com) 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:**

```json
{
    "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:**

- `companies` accepts slugs, names or full URLs interchangeably; complaint URLs in `startUrls` are scraped directly.
- The default `statusFilter` of `LATEST` returns mostly unanswered complaints. To get reply threads, filter to `ANSWERED`, `EVALUATED` or `SOLVED` **and** set `includeInteractions: true`.
- `includeInteractions` costs one extra request per complaint — leave it off for fast, cheap pulls.
- `maxItems` caps kept rows; filters drop rows before they are stored or billed.
- `incrementalMode: true` with a stable `stateKey` makes 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; `enrichEmails` is 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

# Actor input Schema

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

Companies to scrape. Each entry can be a ReclameAqui slug (`nubank`), a company name, or a full company URL (`https://www.reclameaqui.com.br/empresa/nubank/`). The slug is the part of the company page URL after /empresa/.

## `startUrls` (type: `array`):

Paste company URLs or individual complaint URLs. Complaint URLs are scraped directly with their full reply thread. Works alongside the Companies field.

## `includeCompanyProfile` (type: `boolean`):

Emit one company record per company: reputation score and label (Ótimo/Bom/Regular/Ruim), RA status such as RA1000, response/resolution/recommendation rates, average answer time, complaint counts by period, segment, CNPJ, website, phones and address.

## `scrapeComplaints` (type: `boolean`):

Emit complaint records for each company. Turn off if you only want the reputation scorecard.

## `includeInteractions` (type: `boolean`):

Enrich every complaint with the complete back-and-forth thread — company answers, consumer replies and the final evaluation, each with HTML, plain text and Markdown. This costs one extra request per complaint, so runs are slower; leave off for a fast, cheap pull.

## `extractContacts` (type: `boolean`):

Mine emails and phone numbers out of complaint bodies and reply threads into contactEmails / contactPhones.

## `enrichEmails` (type: `boolean`):

Opt-in B2B enrichment. Scrapes the company's own website (taken from its ReclameAqui profile) for business contact emails and adds them as enrichedEmails on the company record. Billed only when an email is actually found.

## `statusFilter` (type: `array`):

Which complaint buckets to pull. LATEST returns the newest complaints regardless of state (mostly not-yet-answered). Choose ANSWERED, EVALUATED or SOLVED to reach complaints that actually carry a company reply.

## `dateFrom` (type: `string`):

Only complaints created on or after this date (YYYY-MM-DD).

## `dateTo` (type: `string`):

Only complaints created on or before this date (YYYY-MM-DD).

## `includeKeywords` (type: `array`):

Keep only complaints whose title, description, problem type or category matches at least one of these terms.

## `excludeKeywords` (type: `array`):

Drop complaints matching any of these terms.

## `solvedOnly` (type: `boolean`):

Keep only complaints the consumer marked as resolved.

## `withReplyOnly` (type: `boolean`):

Keep only complaints that received at least one company answer.

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

Cap how many complaints are pulled per company. 0 means unlimited (large brands have hundreds of thousands).

## `maxItems` (type: `integer`):

Hard cap across all records (complaints + company records). 0 means unlimited.

## `maxConcurrency` (type: `integer`):

How many complaint detail pages to fetch in parallel when the reply thread is enabled.

## `minDelayMs` (type: `integer`):

Politeness delay between requests. ReclameAqui rate-limits bursts, so lowering this raises the chance of retries.

## `compact` (type: `boolean`):

Emit a slim subset of fields (ids, headline reputation, complaint status) for lighter datasets.

## `descriptionFormat` (type: `string`):

Which complaint description variants to keep.

## `descriptionMaxLength` (type: `integer`):

Truncate complaint descriptions to this many characters. 0 means no limit.

## `excludeEmptyFields` (type: `boolean`):

Drop null and empty fields from every record for a leaner dataset.

## `flatten` (type: `boolean`):

Flatten nested objects into underscore-separated top-level keys and JSON-stringify arrays of objects — friendlier for CSV and spreadsheet export.

## `incrementalMode` (type: `boolean`):

Track records across runs and classify each as NEW, UPDATED, UNCHANGED or EXPIRED. Only changed records are emitted by default, so recurring monitoring runs stay cheap.

## `stateKey` (type: `string`):

Override the automatic incremental state key. Advanced — use it to share state across runs with different inputs.

## `detectUpdates` (type: `boolean`):

Re-fetch known complaints and compare content so edits and new company replies surface as UPDATED. Slower, because known records are fetched again.

## `emitUnchanged` (type: `boolean`):

In incremental mode, also emit records with no changes.

## `emitExpired` (type: `boolean`):

Emit records that disappeared from the source. Only applied when the run completed a full sweep, since a capped run cannot tell 'gone' from 'not reached'.

## `telegramToken` (type: `string`):

Send a summary of new records to Telegram.

## `telegramChatId` (type: `string`):

Target Telegram chat ID.

## `slackWebhookUrl` (type: `string`):

Post a summary to Slack.

## `discordWebhookUrl` (type: `string`):

Post a summary to Discord.

## `whatsappAccessToken` (type: `string`):

WhatsApp Cloud API access token.

## `whatsappPhoneNumberId` (type: `string`):

WhatsApp Cloud API sender phone number ID.

## `whatsappTo` (type: `string`):

Recipient phone number in international format.

## `webhookUrl` (type: `string`):

POST new records to any webhook (n8n, Make, Zapier).

## `webhookHeaders` (type: `object`):

Optional headers for the generic webhook. Note: these are stored with your run input — prefer a per-request token over a long-lived secret.

## `notificationLimit` (type: `integer`):

Max records listed in each notification message.

## `notifyOnlyNew` (type: `boolean`):

In incremental mode, only notify about records classified NEW.

## `proxy` (type: `object`):

Optional, and off by default. ReclameAqui gates on the client fingerprint rather than the exit IP, so the actor runs fine with no proxy at all. Configure one only if you want requests routed through your own pool.

## Actor input object example

```json
{
  "companies": [
    "nubank"
  ],
  "startUrls": [],
  "includeCompanyProfile": true,
  "scrapeComplaints": true,
  "includeInteractions": false,
  "extractContacts": false,
  "enrichEmails": false,
  "statusFilter": [
    "LATEST"
  ],
  "includeKeywords": [],
  "excludeKeywords": [],
  "solvedOnly": false,
  "withReplyOnly": false,
  "maxComplaintsPerCompany": 100,
  "maxItems": 1000,
  "maxConcurrency": 5,
  "minDelayMs": 250,
  "compact": false,
  "descriptionFormat": "all",
  "descriptionMaxLength": 0,
  "excludeEmptyFields": false,
  "flatten": true,
  "incrementalMode": false,
  "detectUpdates": false,
  "emitUnchanged": false,
  "emitExpired": false,
  "notificationLimit": 10,
  "notifyOnlyNew": true
}
```

# 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"
    ],
    "startUrls": [],
    "dateFrom": "",
    "dateTo": "",
    "includeKeywords": [],
    "excludeKeywords": [],
    "stateKey": ""
};

// Run the Actor and wait for it to finish
const run = await client.actor("memo23/reclameaqui-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"],
    "startUrls": [],
    "dateFrom": "",
    "dateTo": "",
    "includeKeywords": [],
    "excludeKeywords": [],
    "stateKey": "",
}

# Run the Actor and wait for it to finish
run = client.actor("memo23/reclameaqui-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"
  ],
  "startUrls": [],
  "dateFrom": "",
  "dateTo": "",
  "includeKeywords": [],
  "excludeKeywords": [],
  "stateKey": ""
}' |
apify call memo23/reclameaqui-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,memo23/reclameaqui-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/RtdiMiViMTbhd05oo/builds/FErKURge1aGpdsfin/openapi.json
