# PissedConsumer Scraper  | Complaints & Reviews API (`ahmed_jasarevic/pissedconsumer-scraper`) Actor

Scrape PissedConsumer company reviews and complaints at $0.005 per result. Get ratings, pros, cons, reported losses, reviewer details, and company replies for brand reputation monitoring, scam checks, and consumer insight research.

- **URL**: https://apify.com/ahmed\_jasarevic/pissedconsumer-scraper.md
- **Developed by:** [Ahmed Jasarevic](https://apify.com/ahmed_jasarevic) (community)
- **Stats:** 3 total users, 2 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $4.50 / 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/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
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.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## 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.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

**Scrape PissedConsumer reviews and complaints at scale** — one dataset row per review with ratings, reviewer details, pros and cons, reported loss, and company replies. API-ready, proxy-aware, and built for **brand reputation monitoring, scambuster research, competitor intelligence, and consumer-insights teams**.

### Main Use Cases

- **Brand reputation monitoring** — track new complaints about your company (or your clients') as they appear, and watch ratings and reported losses over time.
- **"Is this company legit?" research** — pull public complaint history before a purchase, partnership, or vendor decision.
- **Competitor complaint intelligence** — mine what customers dislike about rivals, including recurring product, billing, and service issues.
- **Refund & customer-service escalation research** — find reviews that mention refunds, chargebacks, and unresolved support tickets.
- **Product quality issue tracking** — cluster cons and complaint text to spot defects, shipping problems, and policy violations.
- **Consumer insights & trend analysis** — feed structured complaint data into dashboards, NLP models, and AI agents.

### How It Works

1. Give the Actor one or more **company review feed URLs** (for example `https://walmart.pissedconsumer.com/review.html`) or bare **company slugs** (`walmart`, `amazon`, `delta-airlines`).
2. The Actor expands slugs into review feeds and crawls them with a fast **CheerioCrawler** (plain HTTP, no browser).
3. Pagination is followed automatically and bounded by `maxPagesPerCompany` and `maxRequestsPerCrawl`.
4. Each review is parsed with schema.org microdata selectors and written as one dataset row.
5. If PissedConsumer serves an anti-bot CAPTCHA, the run fails with a clear message — enable Apify Proxy and retry.

### Monitor Brand Reputation With Consumer Complaints Data

PissedConsumer is a US consumer-advocacy platform where people post reviews and complaints about companies. This Actor turns those **public company review feeds** into structured rows you can alert on, score, and chart. Schedule it weekly to catch rising complaint volume, new one-star reviews, or spikes in reported loss before they become a PR problem.

### Research Company Trust Before You Buy

Customers routinely search "\[company name] complaints", "\[company name] scam", or "\[company name] reviews" before spending money. This Actor lets research teams and AI agents assemble that public evidence at scale: aggregate ratings, verified-reviewer flags, reviewer locations, and the exact issues people report — across hundreds of companies in a single run.

### Input

Add company feeds to **Start URLs** or bare slugs to **Company slugs**. See the input tab for full configuration options.

| Field | Type | Required | Default | Notes |
|---|---|---|---|---|
| `startUrls` | array | No | `[{ "url": "https://walmart.pissedconsumer.com/review.html" }]` | Company review feed URLs. Pagination is followed automatically. |
| `companySlugs` | array | No | `["walmart"]` | Bare subdomains expanded to `https://SLUG.pissedconsumer.com/review.html`. |
| `maxReviews` | integer | No | `50` | Max reviews saved per run. Free users are capped at 10. |
| `maxPagesPerCompany` | integer | No | `10` | Max listing pages per company; each page holds ~15 reviews. |
| `maxRequestsPerCrawl` | integer | No | `100` | Global request cap for the whole run. |
| `proxy` | object | No | `{ "useApifyProxy": false }` | Standard Apify Proxy picker. Enable if you see CAPTCHA errors. |

If both `startUrls` and `companySlugs` are empty, the Actor runs a demo feed (`walmart`).

### Output

One dataset item per review. You can download the dataset in various formats such as JSON, HTML, CSV, or Excel.

| Field | Type | Description |
|---|---|---|
| `company` / `companySlug` | string | Company name and PissedConsumer subdomain slug. |
| `companyRating` / `companyReviewCount` | number | Aggregate rating and registered-review count from the page header. |
| `reviewId` / `reviewUrl` | string | Stable review ID and direct review URL. |
| `reviewerName` / `reviewerLocation` | string | Reviewer display name and location. |
| `reviewerVerified` / `reviewerProfileUrl` | boolean / string | Verified-reviewer flag and profile URL. |
| `rating` | number | Star rating of the individual review. |
| `title` / `text` | string | Review headline and full body. |
| `pros` / `cons` | array | Lists attached to the review (often empty). |
| `reportedLoss` | string | Monetary loss text reported by the reviewer (e.g. `"$60"`). |
| `preferredSolution` | string | The reviewer's recommended solution. |
| `date` | string | Publication timestamp. |
| `helpfulVotes` | number | Helpful-vote count when exposed (often `null`). |
| `responseCount` / `responses` | number / array | Comment count and inline response sample (up to 20). |
| `companyReplies` | array | Responses flagged as official company replies. |
| `pageNumber` / `sourceUrl` / `scrapedAt` | number / string / string | Source page, feed URL, and ISO scrape timestamp. |

### Example Input

```json
{
    "companySlugs": ["walmart"],
    "maxReviews": 50,
    "maxPagesPerCompany": 5,
    "maxRequestsPerCrawl": 100,
    "proxy": { "useApifyProxy": true }
}
```

### Example Output

```json
{
    "company": "Walmart",
    "companySlug": "walmart",
    "companyRating": 2.2,
    "companyReviewCount": 4563,
    "reviewId": "7208719",
    "reviewUrl": "https://walmart.pissedconsumer.com/never-ever-again-818384.html",
    "reviewerName": "Nancy M Mqf",
    "reviewerLocation": "Newport News, Virginia",
    "reviewerVerified": true,
    "reviewerProfileUrl": "https://www.pissedconsumer.com/people/30517346.html",
    "rating": 2.0,
    "title": "I was charged $60 for shipping on 2 mattresses",
    "text": "I was charged $60 for shipping on 2 mattresses ordered online...",
    "pros": ["Good prices"],
    "cons": ["Poor customer service"],
    "reportedLoss": "$60",
    "preferredSolution": "disclose all information",
    "date": "2026-05-11 17:40:01",
    "helpfulVotes": null,
    "responseCount": 246,
    "responses": [
        { "commentId": "2849178", "authorName": "Robert M Wrf", "date": "2026-05-02 03:54:16", "text": "...", "isOfficialReply": false }
    ],
    "companyReplies": [],
    "pageNumber": 1,
    "sourceUrl": "https://walmart.pissedconsumer.com/review.html",
    "scrapedAt": "2026-09-17T12:00:00.000Z"
}
```

### Integrations

This Actor works with the whole Apify platform:

- **API** — start runs and pull the dataset programmatically from any language via the Apify API.
- **Webhooks** — trigger downstream jobs (Slack, email, your backend) when a run finishes.
- **Zapier / Make / n8n** — push new complaint rows into spreadsheets, CRMs, or ticketing tools with no code.
- **Scheduling** — run **weekly** for routine brand reputation monitoring, or **daily** for high-risk brands and active incidents.
- **AI agents** — point agents at the dataset URL to power RAG pipelines over consumer complaints.

### Related Actors

- [Trustpilot Scraper (memo23)](https://apify.com/memo23/trustpilot-scraper-ppe) — export Trustpilot reviews with company replies across 40+ fields.
- [Trustpilot Reviews Scraper (automation-lab)](https://apify.com/automation-lab/trustpilot) — ratings, replies, reviewer info, and company data.
- [ConsumerAffairs Reviews Scraper (ahmed\_jasarevic)](https://apify.com/ahmed_jasarevic/consumeraffairs-reviews-scraper) — another major consumer-complaints platform.
- [Trustpilot Reviews Scraper (ahmed\_jasarevic)](https://apify.com/ahmed_jasarevic/trustpilot-reviews-scraper) — cross-check brand trust against Trustpilot.
- [Sitejabber Scraper (zadexinho)](https://apify.com/zadexinho/sitejabber-scraper) — Sitejabber reviews, ratings, and business profiles.

### FAQ

**Does PissedConsumer have an official API?**
No public review API is documented, so this Actor reads the **public, server-rendered review feeds** instead. That means no API keys, no login, and no rate-limited account — just structured data from pages any visitor can see.

**What is an alternative to the official PissedConsumer API?**
Use this Actor as a scraper-based alternative. It returns clean JSON you can query via the Apify API, schedule, or pipe into a database, and it follows pagination automatically.

**How do I check a company's complaints at scale?**
Add every company you care about to `companySlugs`, set `maxReviews` and `maxPagesPerCompany`, and run. You get one row per complaint with rating, text, and reported loss so you can rank companies by severity.

**How do I monitor brand reputation continuously?**
Schedule the Actor (weekly or daily). Each run appends fresh reviews to a dataset you can diff, alert on, or chart.

**Can I get competitor complaint intelligence?**
Yes — run the same input against competitor slugs and compare cons, reported losses, and response behavior side by side.

**Why am I seeing a CAPTCHA?**
PissedConsumer applies IP-reputation checks. Enable the **Proxy configuration** input (residential recommended at scale) and retry.

**How much does it cost?**
This Actor charges **$0.005 per result** (per review row) plus a small per-run start fee. Free Apify users get a capped preview of 10 reviews.

### SEO Keywords

pissedconsumer scraper, pissedconsumer reviews, company complaints data, consumer complaints scraping, company reviews scraper, brand reputation monitoring, complaint data api, company trust research, is company legit research, scam reports data, customer complaint dataset, competitor complaint intelligence, refund complaints research, company rating data, consumer insights data, reputation management data, business trust score, review monitoring api, consumer sentiment analysis, ecommerce seller complaints

### For AI Agents & LLM Apps

**Purpose:** Give AI agents structured access to public PissedConsumer complaint data for company-trust research, brand monitoring, and consumer-insight tasks.

**Minimal input JSON:**

```json
{ "companySlugs": ["walmart"], "maxReviews": 50 }
```

**Key output fields:** `company`, `companySlug`, `companyRating`, `reviewId`, `reviewerName`, `rating`, `title`, `text`, `pros`, `cons`, `reportedLoss`, `preferredSolution`, `date`, `responses`, `companyReplies`.

**Behaviors:**

- **Input priority** — explicit `startUrls` are used first; `companySlugs` are then expanded to review feeds. If both are empty, a demo feed (`walmart`) runs.
- **Pagination** — controlled per company by `maxPagesPerCompany`; total requests capped by `maxRequestsPerCrawl`.
- **Empty results** — if a page yields no review cards, the Actor logs a warning rather than inventing data.
- **Billing** — pay-per-result at **$0.005 per review row** (plus a small start fee). Cap spend with `maxReviews`.
- **Proxies** — if a CAPTCHA is detected the run fails loudly; enable `proxy.useApifyProxy` to continue.

### Legal & Compliance Disclaimer

This Actor is **independent** and is **not affiliated with, endorsed by, or sponsored by PissedConsumer**. It only collects content from **publicly accessible pages**. You are responsible for complying with PissedConsumer's Terms of Service, `robots.txt`, and all applicable laws (including GDPR and other privacy regulations) when you use it.

The output can contain **reviewer-provided personal information** such as display names, locations, and profile URLs, alongside review text that may quote personal details. Use this data responsibly: keep a legitimate reason for processing it, minimize and secure what you store, avoid combining it with other personal data unnecessarily, and respect data-subject rights. Do not use the data for harassment, doxxing, or any unlawful purpose.

Review content reflects the opinions of its authors, not this Actor's developer or PissedConsumer, and should not be treated as verified fact. Found a broken selector or changed markup? Please report it via the Issues tab with the company URL and run ID.

# Actor input Schema

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

Company review feed URLs, e.g. https://walmart.pissedconsumer.com/review.html. The actor follows pagination automatically.

## `companySlugs` (type: `array`):

Bare company subdomains (for https://SLUG.pissedconsumer.com/review.html), e.g. walmart, amazon, delta-airlines.

## `maxReviews` (type: `integer`):

Maximum number of reviews to save per run (free users are capped at 10).

## `maxPagesPerCompany` (type: `integer`):

Maximum listing pages to crawl per company feed (each page holds ~15 reviews).

## `maxRequestsPerCrawl` (type: `integer`):

Maximum number of pages (requests) for the whole run.

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

Select proxies to be used by your crawler.

## Actor input object example

```json
{
  "startUrls": [
    {
      "url": "https://walmart.pissedconsumer.com/review.html"
    }
  ],
  "companySlugs": [
    "walmart"
  ],
  "maxReviews": 50,
  "maxPagesPerCompany": 10,
  "maxRequestsPerCrawl": 100,
  "proxy": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

## `results` (type: `string`):

No description

# 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 = {
    "startUrls": [
        {
            "url": "https://walmart.pissedconsumer.com/review.html"
        }
    ],
    "companySlugs": [
        "walmart"
    ],
    "proxy": {
        "useApifyProxy": false
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("ahmed_jasarevic/pissedconsumer-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 = {
    "startUrls": [{ "url": "https://walmart.pissedconsumer.com/review.html" }],
    "companySlugs": ["walmart"],
    "proxy": { "useApifyProxy": False },
}

# Run the Actor and wait for it to finish
run = client.actor("ahmed_jasarevic/pissedconsumer-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 '{
  "startUrls": [
    {
      "url": "https://walmart.pissedconsumer.com/review.html"
    }
  ],
  "companySlugs": [
    "walmart"
  ],
  "proxy": {
    "useApifyProxy": false
  }
}' |
apify call ahmed_jasarevic/pissedconsumer-scraper --silent --output-dataset

```

## MCP server setup

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