# CFPB Consumer Complaints Scraper - 17M+ Records (`fervent_bus/cfpb-complaints-scraper`) Actor

Scrape 17M+ CFPB Consumer Complaint records by product, company, state, issue, and date. Get structured data: complaint\_id, date\_received, company\_response, timely, and more. Ideal for fintech compliance, banking, and legal research. Works with Claude, ChatGPT & AI agents via Apify MCP.

- **URL**: https://apify.com/fervent\_bus/cfpb-complaints-scraper.md
- **Developed by:** [Archit Khurana](https://apify.com/fervent_bus) (community)
- **Categories:** Automation, Lead generation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $5.00 / 1,000 results

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

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

## CFPB Consumer Complaints Scraper

**Extract 17M+ consumer financial complaints from the official U.S. CFPB database — no API key required. Works with Claude, ChatGPT, and AI agents via Apify MCP.**

### What This Actor Does

Scrapes the [CFPB Consumer Complaint Database](https://www.consumerfinance.gov/data-research/consumer-complaints/) — the U.S. government's official public record of consumer financial complaints filed against banks, credit bureaus, debt collectors, mortgage lenders, and other financial institutions.

Data is sourced directly from the CFPB's own public API (`consumerfinance.gov/data-research/consumer-complaints/search/api/v1/`). No authentication needed. Government open data.

### Who This Is For

- **Fintech compliance teams** — monitor complaint trends for competing products
- **Banking & insurance analysts** — track company response rates and dispute outcomes
- **Legal & regulatory researchers** — analyze complaint patterns by product/issue/state
- **AI agents via Claude/ChatGPT MCP** — query financial complaint data conversationally
- **Data scientists** — build NLP models on 17M+ consumer narratives
- **Journalists & policy researchers** — investigate consumer protection issues

### What Data You Get

Each complaint record includes:

| Field | Description |
|---|---|
| `complaint_id` | Unique CFPB complaint ID |
| `date_received` | Date CFPB received the complaint |
| `product` | Financial product category (e.g. "Mortgage", "Credit card") |
| `sub_product` | Sub-product type |
| `issue` | Primary complaint issue |
| `sub_issue` | Specific sub-issue |
| `company` | Name of the financial company |
| `state` | US state of the consumer |
| `zip_code` | Consumer ZIP code |
| `submitted_via` | How complaint was filed (Web, Phone, etc.) |
| `date_sent_to_company` | When CFPB forwarded complaint to company |
| `company_response` | Company's official response |
| `company_public_response` | Public-facing company statement |
| `timely` | Whether company responded on time |
| `consumer_disputed` | Whether consumer disputed the response |
| `has_narrative` | Whether complaint includes consumer's written narrative |
| `tags` | Special tags (Servicemember, Older American, etc.) |
| `complaint_what_happened` | Consumer's written narrative (when available) |
| `cfpb_url` | Direct URL to complaint on CFPB website |
| `scraped_at` | ISO timestamp when record was scraped |

### Example Input

```json
{
  "product": "Mortgage",
  "company": "BANK OF AMERICA",
  "state": "CA",
  "dateReceivedMin": "2024-01-01",
  "dateReceivedMax": "2024-12-31",
  "sortBy": "created_date_desc",
  "maxResults": 100
}
```

### Example Output

```json
[
  {
    "complaint_id": "9876543",
    "date_received": "2024-06-15",
    "product": "Mortgage",
    "sub_product": "Conventional home mortgage",
    "issue": "Trouble during payment process",
    "sub_issue": "Payment processing",
    "company": "BANK OF AMERICA, NATIONAL ASSOCIATION",
    "state": "CA",
    "zip_code": "90210",
    "submitted_via": "Web",
    "date_sent_to_company": "2024-06-15T00:00:00.000Z",
    "company_response": "Closed with explanation",
    "company_public_response": "Company has responded to the consumer and the CFPB",
    "timely": "Yes",
    "consumer_disputed": "N/A",
    "has_narrative": false,
    "tags": null,
    "complaint_what_happened": "",
    "cfpb_url": "https://www.consumerfinance.gov/data-research/consumer-complaints/search/?complaint_id=9876543",
    "scraped_at": "2025-01-15T12:00:00Z"
  }
]
```

### AI Agent Queries This Actor Answers

- "Show me mortgage complaints against Wells Fargo in Texas in 2024"
- "Get the 50 most recent credit reporting complaints"
- "Find debt collection complaints from California consumers"
- "What issues are consumers complaining about with credit cards?"
- "Export CFPB complaint data for compliance research"
- "Give me complaints where company responded late"
- "Find complaints with consumer narratives about identity theft"
- "Analyze complaint patterns for a specific financial company"
- "Get CFPB data for my fintech compliance dashboard"
- "Monitor new consumer complaints filed this week"

### How to Use with AI Agents (Claude MCP / ChatGPT)

1. Connect Apify to Claude or ChatGPT via [Apify MCP](https://mcp.apify.com)
2. Ask: *"Use the CFPB complaints scraper to get the 20 most recent mortgage complaints against Bank of America"*
3. The AI agent will run this actor automatically and return structured data

### Tags

`cfpb` `consumer complaints` `financial data` `government data` `compliance` `fintech` `banking` `mortgage` `credit reporting` `debt collection` `open data` `B2B` `lead generation`

### Notes

- Data is sourced from the **official CFPB public API** — no login or API key required
- The CFPB database contains 17M+ complaints going back to 2011
- Consumer narratives (`complaint_what_happened`) are only populated when `has_narrative: true`
- Government open data — freely reusable under US government open data policy
- Works with **Claude, ChatGPT, and any AI agent via Apify MCP**

# Actor input Schema

## `product` (type: `string`):

Filter by financial product (e.g. 'Credit reporting', 'Mortgage', 'Credit card', 'Debt collection'). Leave empty for all products.

## `company` (type: `string`):

Filter by company name (e.g. 'EQUIFAX', 'EXPERIAN', 'BANK OF AMERICA'). Leave empty for all companies.

## `state` (type: `string`):

Two-letter US state code (e.g. 'CA', 'TX', 'NY'). Leave empty for all states.

## `issue` (type: `string`):

Filter by complaint issue type (e.g. 'Incorrect information on your report'). Leave empty for all issues.

## `dateReceivedMin` (type: `string`):

Earliest complaint date in YYYY-MM-DD format (e.g. '2024-01-01').

## `dateReceivedMax` (type: `string`):

Latest complaint date in YYYY-MM-DD format (e.g. '2024-12-31').

## `sortBy` (type: `string`):

Sort order for results.

## `maxResults` (type: `integer`):

Maximum number of complaints to return.

## Actor input object example

```json
{
  "product": "Credit reporting or other personal consumer reports",
  "sortBy": "created_date_desc",
  "maxResults": 10
}
```

# Actor output Schema

## `complaint_id` (type: `string`):

Unique CFPB complaint identifier

## `date_received` (type: `string`):

Date CFPB received the complaint

## `product` (type: `string`):

Financial product category

## `sub_product` (type: `string`):

Sub-product type

## `issue` (type: `string`):

Primary complaint issue

## `company` (type: `string`):

Name of the financial company

## `state` (type: `string`):

US state of the consumer

## `company_response` (type: `string`):

Company's official response

## `timely` (type: `string`):

Whether company responded on time

## `cfpb_url` (type: `string`):

Direct URL to complaint on CFPB website

## `scraped_at` (type: `string`):

ISO timestamp when record was scraped

# 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 = {
    "product": "Credit reporting or other personal consumer reports",
    "sortBy": "created_date_desc",
    "maxResults": 10
};

// Run the Actor and wait for it to finish
const run = await client.actor("fervent_bus/cfpb-complaints-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 = {
    "product": "Credit reporting or other personal consumer reports",
    "sortBy": "created_date_desc",
    "maxResults": 10,
}

# Run the Actor and wait for it to finish
run = client.actor("fervent_bus/cfpb-complaints-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 '{
  "product": "Credit reporting or other personal consumer reports",
  "sortBy": "created_date_desc",
  "maxResults": 10
}' |
apify call fervent_bus/cfpb-complaints-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,fervent_bus/cfpb-complaints-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/GNZU1gExsnCqJ25ir/builds/riplXBzZyJJo59zY6/openapi.json
