# Consumer Complaints Scraper (CFPB) (`scrapemint/cfpb-complaints-scraper`) Actor

Search the US government's Consumer Financial Protection Bureau complaint database: complaints against banks, lenders and fintechs by company, product, issue, state and date, with the consumer narrative and company response. Monitor mode for new complaints. No API key.

- **URL**: https://apify.com/scrapemint/cfpb-complaints-scraper.md
- **Developed by:** [Ken M](https://apify.com/scrapemint) (community)
- **Categories:** Business, News
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

Pay per usage

This Actor is paid per platform usage. The Actor is free to use, and you only pay for the Apify platform usage, which gets cheaper the higher subscription plan you have.

Learn more: https://docs.apify.com/platform/actors/running/actors-in-store#pay-per-usage

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
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.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js/docs.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python/docs.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/integrations/mcp.md).

If your project is in a different language, use 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

## Consumer Complaints Scraper (CFPB)

Search the US government's public record of consumer complaints against banks, credit-card issuers, lenders, debt collectors and fintechs - the Consumer Financial Protection Bureau (CFPB) database. No API key, no login, no browser.

### What you get

One row per complaint:

- company, product, sub-product, issue, sub-issue
- consumer state and ZIP, how it was submitted, date received
- the company's response, its public response, and whether it responded on time
- the **consumer narrative** - the complainant's own description of what happened (about a third of complaints have one)
- a link to the complaint on consumerfinance.gov

### Ways to search

Point it at specific companies, run free-text searches, or filter by product, state and date - and combine them:

```json
{
    "companies": ["WELLS FARGO & COMPANY"],
    "product": "Mortgage",
    "state": "CA",
    "sinceDays": 90,
    "withNarrativeOnly": true
}
````

- **companies** - exact CFPB company names, one per line
- **searchTerms** - free text ("zelle scam", "overdraft fee") when you do not know the exact company or want an issue across companies
- **product / state / sinceDays** - narrow every search
- **withNarrativeOnly** - keep only complaints where the consumer wrote a description

### Monitor mode

Turn on **newOnly**, put the actor on a schedule, and each run emits only complaints it has not returned before. Point it at your own company or a competitor and get a new-complaint alert feed. Runs where nothing new arrived cost nothing.

### Who uses this

- **Companies and their support/compliance teams**: monitor complaints filed against you or your competitors, and how they were resolved.
- **Analysts and investors**: spot rising complaint trends about a bank or product before they show up elsewhere.
- **Journalists and researchers**: study patterns in consumer harm with structured, quotable data.
- **Fintech and product teams**: learn the real issues customers report about a category.

Pairs with our US Bank Data Finder for a fuller picture of a financial institution.

### Pricing

A small fee per complaint row. Searches that match nothing are free note rows, and the first 2 rows of every run are free.

### Notes

- Source: the CFPB Consumer Complaint Database, a US government public dataset, updated daily. Complaints are published as submitted and are not verified by the CFPB; a complaint is not proof of wrongdoing.
- Narratives are published only with the consumer's consent and after personal information is removed.

# Actor input Schema

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

Companies to pull complaints for, one per line, as the CFPB spells them ("WELLS FARGO & COMPANY", "CAPITAL ONE FINANCIAL CORPORATION"). Matched exactly. If a company returns nothing, try a keyword under Search terms instead.

## `searchTerms` (type: `array`):

Free-text searches across complaints, one per line ("zelle scam", "overdraft fee"). Use these when you do not know a company's exact name or want an issue across companies.

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

Limit to one product type (applied to every company and search). Leave empty for all.

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

Limit to one US state by two-letter code ("CA", "NY"). Leave empty for nationwide.

## `sinceDays` (type: `integer`):

Only complaints received in the last N days. 0 = no date limit (goes back through history as far as the row cap allows).

## `withNarrativeOnly` (type: `boolean`):

Only complaints where the consumer wrote a description of what happened (the most useful ones). About a third of complaints have a published narrative.

## `includeNarrativeText` (type: `boolean`):

Include the full consumer narrative in each row. Turn off for smaller rows when you only need the structured fields.

## `newOnly` (type: `boolean`):

Remember complaints already returned and emit only ones not seen before. Run on a schedule for a clean feed of new complaints - quiet runs cost nothing.

## `maxPerQuery` (type: `integer`):

How many complaints to return per company or search term, newest first.

## `maxRows` (type: `integer`):

Stop after this many rows in total.

## Actor input object example

```json
{
  "companies": [
    "WELLS FARGO & COMPANY"
  ],
  "sinceDays": 90,
  "withNarrativeOnly": false,
  "includeNarrativeText": true,
  "newOnly": false,
  "maxPerQuery": 100,
  "maxRows": 2000
}
```

# 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": [
        "WELLS FARGO & COMPANY"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("scrapemint/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 = { "companies": ["WELLS FARGO & COMPANY"] }

# Run the Actor and wait for it to finish
run = client.actor("scrapemint/cfpb-complaints-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).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": [
    "WELLS FARGO & COMPANY"
  ]
}' |
apify call scrapemint/cfpb-complaints-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=scrapemint/cfpb-complaints-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Consumer Complaints Scraper (CFPB)",
        "description": "Search the US government's Consumer Financial Protection Bureau complaint database: complaints against banks, lenders and fintechs by company, product, issue, state and date, with the consumer narrative and company response. Monitor mode for new complaints. No API key.",
        "version": "0.1",
        "x-build-id": "SrdZpOdWdvWvta9m1"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/scrapemint~cfpb-complaints-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-scrapemint-cfpb-complaints-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/scrapemint~cfpb-complaints-scraper/runs": {
            "post": {
                "operationId": "runs-sync-scrapemint-cfpb-complaints-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/scrapemint~cfpb-complaints-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-scrapemint-cfpb-complaints-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "properties": {
                    "companies": {
                        "title": "Companies",
                        "type": "array",
                        "description": "Companies to pull complaints for, one per line, as the CFPB spells them (\"WELLS FARGO & COMPANY\", \"CAPITAL ONE FINANCIAL CORPORATION\"). Matched exactly. If a company returns nothing, try a keyword under Search terms instead.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "searchTerms": {
                        "title": "Search terms",
                        "type": "array",
                        "description": "Free-text searches across complaints, one per line (\"zelle scam\", \"overdraft fee\"). Use these when you do not know a company's exact name or want an issue across companies.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "product": {
                        "title": "Product",
                        "enum": [
                            "",
                            "Checking or savings account",
                            "Credit card",
                            "Credit reporting or other personal consumer reports",
                            "Debt collection",
                            "Mortgage",
                            "Money transfer, virtual currency, or money service",
                            "Payday loan, title loan, or personal loan",
                            "Vehicle loan or lease",
                            "Student loan",
                            "Prepaid card"
                        ],
                        "type": "string",
                        "description": "Limit to one product type (applied to every company and search). Leave empty for all."
                    },
                    "state": {
                        "title": "State",
                        "type": "string",
                        "description": "Limit to one US state by two-letter code (\"CA\", \"NY\"). Leave empty for nationwide."
                    },
                    "sinceDays": {
                        "title": "Received within (days)",
                        "minimum": 0,
                        "maximum": 7300,
                        "type": "integer",
                        "description": "Only complaints received in the last N days. 0 = no date limit (goes back through history as far as the row cap allows).",
                        "default": 90
                    },
                    "withNarrativeOnly": {
                        "title": "Only complaints with a narrative",
                        "type": "boolean",
                        "description": "Only complaints where the consumer wrote a description of what happened (the most useful ones). About a third of complaints have a published narrative.",
                        "default": false
                    },
                    "includeNarrativeText": {
                        "title": "Include narrative text",
                        "type": "boolean",
                        "description": "Include the full consumer narrative in each row. Turn off for smaller rows when you only need the structured fields.",
                        "default": true
                    },
                    "newOnly": {
                        "title": "Monitor mode: new complaints only",
                        "type": "boolean",
                        "description": "Remember complaints already returned and emit only ones not seen before. Run on a schedule for a clean feed of new complaints - quiet runs cost nothing.",
                        "default": false
                    },
                    "maxPerQuery": {
                        "title": "Complaints per company or search",
                        "minimum": 1,
                        "maximum": 20000,
                        "type": "integer",
                        "description": "How many complaints to return per company or search term, newest first.",
                        "default": 100
                    },
                    "maxRows": {
                        "title": "Max rows",
                        "minimum": 1,
                        "maximum": 100000,
                        "type": "integer",
                        "description": "Stop after this many rows in total.",
                        "default": 2000
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
