# WalletHub Reviews Scraper — financial product reviews & ratings (`serene_trombone/wallethub-reviews-scraper`) Actor

Scrape WalletHub financial product reviews, ratings, and company profiles. Extract credit card reviews, bank ratings, insurance feedback, brokerage reviews, and personal loan feedback from the largest US personal finance review platform.

- **URL**: https://apify.com/serene\_trombone/wallethub-reviews-scraper.md
- **Developed by:** [Steven Bennett](https://apify.com/serene_trombone) (community)
- **Categories:** Travel, Business
- **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 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.

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

## WalletHub Reviews Scraper 🏦💰

> **The first and only Apify Actor for scraping WalletHub** — the largest US personal finance comparison and review platform.

Scrape financial product reviews, ratings, and company profiles from [wallethub.com](https://wallethub.com). Extract credit card reviews, bank ratings, insurance feedback, brokerage reviews, loan opinions, and more. Perfect for market research, competitive intelligence, lead generation, and financial sentiment analysis.

### ✨ Features

- **🔍 Search mode** — Find companies and products by keyword
- **🏢 Company mode** — Scrape all reviews from specific company/product pages
- **📂 Category mode** — Browse entire categories (credit cards, banking, insurance, etc.)
- **⭐ Full review data** — Ratings, titles, full text, author, dates, helpful votes
- **📊 Company intelligence** — Overall ratings, total reviews, recommend percentage, star distribution
- **🔗 Deduplication** — Built-in ID-based deduplication across runs
- **📄 Pagination support** — Automatic pagination through all review pages
- **🌐 Proxy support** — Apify Residential proxy compatible
- **⚡ Playwright-based** — Handles JavaScript-rendered content

### 💰 Pricing

| Event | Price |
|-------|-------|
| Per run start | $0.50 |
| Per review item | $0.002 |
| Example: 1,000 reviews | $2.50 |

### 🚀 Quick Start

#### Option 1: Use the Apify web interface

1. Go to [WalletHub Reviews Scraper](https://apify.com/serene_trombone/wallethub-reviews-scraper) on Apify Store
2. Click **Try** or **Run**
3. Choose your scrape mode and enter your query/URL
4. Click **Run** and download results as JSON, CSV, XML, or Excel

#### Option 2: Use Apify API

```bash
## Search for reviews about Chase
curl "https://api.apify.com/v2/acts/serene_trombone~wallethub-reviews-scraper/runs?token=YOUR_API_TOKEN" \
  -X POST \
  -H "Content-Type: application/json" \
  -d '{
    "mode": "search",
    "search": "chase banking",
    "maxItems": 50
  }'
````

#### Option 3: Run locally with Crawlee

```bash
git clone https://github.com/apify/wallethub-reviews-scraper
cd wallethub-reviews-scraper
npm install
node src/main.js
```

### 📝 Input Parameters

| Parameter | Type | Default | Description |
|-----------|------|---------|-------------|
| `mode` | enum | `search` | Scrape mode: `search`, `company`, `category`, `product` |
| `search` | string | — | Keyword to search for (required for search mode) |
| `companyUrls` | array | — | Company/product page URLs (required for company/product mode) |
| `category` | string | — | Category URL (required for category mode) |
| `maxItems` | integer | `100` | Maximum reviews to scrape (0 = unlimited) |
| `maxCompanies` | integer | `20` | Maximum companies per category (category mode) |
| `includeCompanyInfo` | boolean | `true` | Include company overview info |
| `sortBy` | enum | `most_recent` | Sort order: `most_recent`, `highest_rating`, `lowest_rating`, `most_helpful` |
| `proxy` | object | Apify residential | Proxy configuration |

### 📤 Output Format

#### Review Item

```json
{
  "id": "review-15273794-abc123",
  "productId": "15273794",
  "companyName": "Chase Banking",
  "productType": "company",
  "sourceUrl": "https://wallethub.com/profile/chase-banking-15273794i",
  "rating": 4.5,
  "title": "Great customer service",
  "review": "I've been banking with Chase for over 10 years...",
  "author": "Sarah M.",
  "datePosted": "January 2025",
  "datePostedRaw": "2025-01-15T00:00:00.000Z",
  "dateOfExperience": "December 2024",
  "recommended": "Yes",
  "helpfulCount": 12,
  "category": "Banking"
}
```

#### Company Info Item

```json
{
  "type": "company_info",
  "companyName": "Chase Banking",
  "overallRating": 4.2,
  "totalReviews": 1250,
  "category": "Banking",
  "subcategory": "Checking Accounts",
  "website": "https://www.chase.com",
  "avgRating": 4.2,
  "recommendPercent": 78,
  "starDistribution": {
    "5": 450,
    "4": 380,
    "3": 200,
    "2": 120,
    "1": 100
  },
  "productType": "company",
  "sourceUrl": "https://wallethub.com/profile/chase-banking-15273794i"
}
```

### 🎯 Use Cases

- **Market Research** — Analyze customer satisfaction across financial products
- **Competitive Intelligence** — Compare ratings and reviews of competing banks, cards, insurers
- **Lead Generation** — Identify companies with poor ratings as potential sales targets
- **Sentiment Analysis** — Extract review text for NLP and sentiment modeling
- **Price Monitoring** — Track credit card and loan offers alongside reviews
- **Product Development** — Understand what customers love and hate about financial products
- **Financial Services SEO** — Build content around trending financial topics

### 🔧 Technical Details

- **Engine**: PlaywrightCrawler (JavaScript-rendered pages)
- **Language**: Node.js (ES Modules)
- **Image**: `apify/actor-node-playwright-chrome:20`
- **Deduplication**: By composite `productId_reviewId`
- **Pagination**: Automatic page-through with sort preservation
- **Error handling**: Automatic retry with logging

### 📋 Supported Categories

WalletHub covers reviews for:

- ✅ Credit Cards (rewards, travel, cash back, balance transfer)
- ✅ Banking (checking, savings, CDs, money market)
- ✅ Insurance (auto, home, life, health, renters)
- ✅ Brokerages & Investing
- ✅ Personal Loans & Mortgages
- ✅ Auto Loans & Leasing
- ✅ Student Loans & Financial Aid
- ✅ Small Business Products

### 🏆 Why This Actor?

- **First-mover advantage** — No other WalletHub scraper exists on Apify Store
- **High-value data** — Financial services reviews are gold for market research
- **Large addressable market** — WalletHub is a top-500 US website with millions of monthly visitors
- **Ready to use** — Just provide a search term or URL and get structured data

### 🐛 Support

Having issues? Check the [GitHub repository](https://github.com/serene_trombone/wallethub-reviews-scraper) for known issues or open a new one.

***

Built with ❤️ by [serene\_trombone](https://apify.com/serene_trombone)

# Actor input Schema

## `mode` (type: `string`):

Choose what to scrape from WalletHub

## `search` (type: `string`):

Keyword to search for (e.g. 'chase', 'american express', 'auto insurance'). Required for search mode.

## `companyUrls` (type: `array`):

One or more WalletHub company or product URLs to scrape reviews from. Required for company/product mode.

## `category` (type: `string`):

WalletHub category URL (e.g. https://wallethub.com/best-credit-cards). Required for category mode.

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

Maximum number of reviews to scrape (0 = unlimited).

## `maxCompanies` (type: `integer`):

Maximum number of companies to scrape in category mode.

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

Select proxy servers

## `includeCompanyInfo` (type: `boolean`):

Also scrape company overview info (rating, category, website).

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

How to sort reviews on the company/product page

## Actor input object example

```json
{
  "mode": "search",
  "maxItems": 100,
  "maxCompanies": 20,
  "proxy": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  },
  "includeCompanyInfo": true,
  "sortBy": "most_recent"
}
```

# 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 = {
    "proxy": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ]
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("serene_trombone/wallethub-reviews-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 = { "proxy": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
    } }

# Run the Actor and wait for it to finish
run = client.actor("serene_trombone/wallethub-reviews-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 '{
  "proxy": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}' |
apify call serene_trombone/wallethub-reviews-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "WalletHub Reviews Scraper — financial product reviews & ratings",
        "description": "Scrape WalletHub financial product reviews, ratings, and company profiles. Extract credit card reviews, bank ratings, insurance feedback, brokerage reviews, and personal loan feedback from the largest US personal finance review platform.",
        "version": "1.0",
        "x-build-id": "VMRMgX1J8LHOLgbgc"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/serene_trombone~wallethub-reviews-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-serene_trombone-wallethub-reviews-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/serene_trombone~wallethub-reviews-scraper/runs": {
            "post": {
                "operationId": "runs-sync-serene_trombone-wallethub-reviews-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/serene_trombone~wallethub-reviews-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-serene_trombone-wallethub-reviews-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",
                "required": [
                    "mode"
                ],
                "properties": {
                    "mode": {
                        "title": "Scrape Mode",
                        "enum": [
                            "search",
                            "company",
                            "category",
                            "product"
                        ],
                        "type": "string",
                        "description": "Choose what to scrape from WalletHub",
                        "default": "search"
                    },
                    "search": {
                        "title": "Search Query",
                        "type": "string",
                        "description": "Keyword to search for (e.g. 'chase', 'american express', 'auto insurance'). Required for search mode."
                    },
                    "companyUrls": {
                        "title": "Company / Product URLs",
                        "type": "array",
                        "description": "One or more WalletHub company or product URLs to scrape reviews from. Required for company/product mode.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "category": {
                        "title": "Category URL",
                        "type": "string",
                        "description": "WalletHub category URL (e.g. https://wallethub.com/best-credit-cards). Required for category mode."
                    },
                    "maxItems": {
                        "title": "Max Reviews",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Maximum number of reviews to scrape (0 = unlimited).",
                        "default": 100
                    },
                    "maxCompanies": {
                        "title": "Max Companies per Category",
                        "minimum": 1,
                        "maximum": 200,
                        "type": "integer",
                        "description": "Maximum number of companies to scrape in category mode.",
                        "default": 20
                    },
                    "proxy": {
                        "title": "Proxy Configuration",
                        "type": "object",
                        "description": "Select proxy servers",
                        "properties": {
                            "useApifyProxy": {
                                "title": "Use Apify Proxy",
                                "type": "boolean",
                                "description": "Route through Apify proxy"
                            },
                            "apifyProxyGroups": {
                                "title": "Proxy groups",
                                "type": "array",
                                "description": "Apify proxy groups (RESIDENTIAL recommended)"
                            }
                        },
                        "default": {
                            "useApifyProxy": true,
                            "apifyProxyGroups": [
                                "RESIDENTIAL"
                            ]
                        }
                    },
                    "includeCompanyInfo": {
                        "title": "Include Company Info",
                        "type": "boolean",
                        "description": "Also scrape company overview info (rating, category, website).",
                        "default": true
                    },
                    "sortBy": {
                        "title": "Sort Reviews By",
                        "enum": [
                            "most_recent",
                            "highest_rating",
                            "lowest_rating",
                            "most_helpful"
                        ],
                        "type": "string",
                        "description": "How to sort reviews on the company/product page",
                        "default": "most_recent"
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
