# PissedConsumer ⭐ $0.60/1K Complaints & Reviews (`azzouzana/pissedconsumer-scraper`) Actor

From $0.60/1K 💰 Paste a PissedConsumer company page and export each public complaint: the full text, stars, reviewer, date, pros, cons, reported loss, photos, updates, and replies. Built for brand and reputation monitoring. JSON, CSV, Excel, or API. 🚀

- **URL**: https://apify.com/azzouzana/pissedconsumer-scraper.md
- **Developed by:** [Azzouzana](https://apify.com/azzouzana) (community)
- **Categories:** Marketing, E-commerce, Lead generation
- **Security:** Limited permissions
- **Stats:** 3 total users, 2 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.60 / 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

## PissedConsumer Complaints & Reviews

Copying complaints off PissedConsumer by hand is a time-sink. Paste a company review page and get the complaints **in seconds**.

### Engineering Excellence & Reliability 🚀

- **Zero-Friction Resolution**: Drop in a company page such as Walmart, Amazon, or Comcast. A single complaint URL works too.
- **High-Velocity Automation**: Full complaint text, stars, reviewer, date, pros, cons, reported loss, photos, updates, and public replies.
- **Beyond the website limit**: We bypass the website limitation and go beyond it. Duplicates are skipped.
- **Full complaint pages**: Turn on `fetchFullDetails` for the complete title, every photo, the location, updates, and the public comments.
- **Clean exports**: JSON, CSV, Excel, or API, ready for reputation monitoring.

### 🛠️ How to Play

#### Input Parameters

| Field | Type | Description |
|-------|------|-------------|
| `startUrl` | String | **(Required)** Company review page copied from your browser. A single complaint link works too. |
| `maxItems` | Number | How many complaints do you actually need? (Default: 100) |
| `fetchFullDetails` | Boolean | `true` = open each complaint for the full page. `false` = the review card. |

#### Example 1: Walmart complaints

```json
{
    "startUrl": "https://walmart.pissedconsumer.com/review.html",
    "maxItems": 100,
    "fetchFullDetails": false
}
```

#### Example 2: Open every complaint

```json
{
    "startUrl": "https://amazon.pissedconsumer.com/review.html",
    "maxItems": 50,
    "fetchFullDetails": true
}
```

### 🆓 Free tier limitations

We want you to see how this actor works before you commit. To keep things fair for everyone, the **free tier** usually includes these trial limits:

- **Sample data:** up to **5 complaints** per run—enough to check data quality.
- **Daily cap:** **5 runs** per calendar day (UTC).
- **Between runs:** at least **60 seconds** before you can start another run.

> Limits can change with platform load depending on system load and your intended scraping to prevent what we might interpret as free users abuse.

#### Upgrade when you're ready!

Use the free tier to decide if this actor fits your project. Paid Apify plans remove these wait times and caps so you can run at full volume—[**upgrade to a paid plan**](https://apify.com/pricing?fpr=cbgdsf).

### 📦 What’s in the Box?

One complaint, with the full page opened. Every field on this complaint is filled. This is a real Walmart complaint.

```json
{
  "@type": "Review",
  "reviewId": "7450812",
  "url": "https://walmart.pissedconsumer.com/oh-i-love-a-good-cross-country-tour-but-usually-i-like-to-be-the-one-traveling-not-my-walmart-order-202608317450812.html",
  "headline": "Resolved: Oh, I love a good cross-country tour, but usually, I like to be the one traveling—not my Walmart order",
  "reviewBody": "Oh, I love a good cross-country tour, but usually, I like to be the one traveling, not my Walmart order. I placed an order on August 22nd.\n\nSilly me, I actually believed Walmart when they confirmed a delivery date of Tuesday, August 25th. Silly, right? Because come August 25th, the item was suddenly 'delayed.' But don't worry, they generously promised it would arrive the next day! Spoiler alert: August 26th came and went with absolutely no delivery.\n\nInstead, I got to watch my package embark on a scenic, completely illogical road trip. First, it was scanned at a branch in Tennessee. Then, two days later, it magically appeared in California, where it just decided to sit and vacation for a few days without a single tracking update. Fast forward to August 30th, and my well-traveled package finally made it to New Jersey.\n\nAnd today? Today it finally arrived in my home state of Massachusetts! But because Walmart's logistics team apparently can't read a map, they sent it to the incorrect facility. Brilliant.\n\nEvery single day I am greeted with a brand-new, completely fictional delivery date. And the absolute best part? Every time I contact customer service to end this nightmare, they tell me I can't cancel the order because it's 'too far into the delivery process.' Too far into the process? It has traveled across the entire United States, visited multiple time zones, and seen more of the country than I have this year, yet it still isn't in my hands!\n\nNeedless to say, I still don't have my package.\n\nIt is truly impressive how a company this massive can be this aggressively incompetent. Unbelievable.",
  "updates": [
    {
      "label": "Updated by user Sep 15, 2026",
      "text": "Nothing was offered. Rather go into store to purchase or purchase elsewhere online someplace more reputable."
    }
  ],
  "datePublished": "2026-08-31 08:31:06",
  "dateModified": "2026-09-25 22:44:57",
  "author": {
    "@type": "Person",
    "name": "Elaine D Gkt",
    "url": "https://www.pissedconsumer.com/people/31728014.html"
  },
  "reviewRating": {
    "@type": "Rating",
    "ratingValue": "1.0",
    "bestRating": "5",
    "worstRating": "1"
  },
  "commentCount": 2,
  "interactionCount": "132 views",
  "monetaryLoss": "$63",
  "preferredSolution": "Full refund",
  "userRecommendation": "Do your homework before you buy from them or any Store!",
  "pros": [
    "Incompetence"
  ],
  "cons": [
    "Incompetence"
  ],
  "contactedCompanyFirst": false,
  "verifiedReviewer": true,
  "locationCreated": {
    "@type": "Place",
    "address": {
      "@type": "PostalAddress",
      "addressLocality": "Boston",
      "addressRegion": "Massachusetts"
    }
  },
  "image": [
    "https://cdn0.opinion-corp.com/review-media/pictures/2026/08/31/walmart_oh-i-love-a-good-cross-country-tour-but-usually-i-like-to-be-the-one-traveling-not-my-walmart-order-202608317450812_347c-gallery.jpeg"
  ],
  "comment": [
    {
      "@type": "Comment",
      "commentId": "3004018",
      "author": {
        "@type": "Person",
        "name": "Guest-3004018"
      },
      "dateCreated": "2026-08-31 15:54:40",
      "text": "You shopped for the cheapest garbage at the cheapest store. The shipping seemed incompetent to you, but was strategic and cost saving to Walmart.\n\nYour item joined others from southern states in Tennessee, headed west to California to pick up merchandise in-port (which was the main goal) and dropped off merchandise in various warehouses on its way east. Your item and other's were low importance.\n\nPick a better online retailer and a better shipping option. Or don't."
    },
    {
      "@type": "Comment",
      "commentId": "3010571",
      "author": {
        "@type": "Person",
        "name": "Guest-3010571"
      },
      "dateCreated": "2026-09-25 22:44:57",
      "text": "Shipping incompetent?"
    }
  ],
  "itemReviewed": {
    "@type": "Organization",
    "name": "Walmart",
    "url": "https://walmart.pissedconsumer.com/review.html"
  }
}
```

### Contact 📬

**Need a custom solution? Have a feature request or just want to chat?**
We'd love to hear from you!

- 💬 **Discord**: `@azzouzana`
- 📧 **Email**: <labs@azzouzana.com>

### ⚠️ Disclaimer

This actor is not affiliated with PissedConsumer. It collects publicly visible complaint pages. You are responsible for complying with PissedConsumer's terms and with applicable laws. Read more: [Is web scraping legal?](https://blog.apify.com/is-web-scraping-legal?fpr=cbgdsf)

### Keywords

pissedconsumer scraper, pissed consumer reviews, company complaints, consumer complaints, walmart complaints, amazon complaints, reputation monitoring, brand monitoring, review export, customer complaints, complaint data, json csv

# Actor input Schema

## `startUrl` (type: `string`):

Paste a PissedConsumer company review page from your browser, such as https://walmart.pissedconsumer.com/review.html. A single complaint URL works too.

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

Maximum complaints to save. The effective limit also respects the run budget and the free-tier cap (5 for free users).

## `fetchFullDetails` (type: `boolean`):

Open each complaint and save the full page: the complete title, every photo, location, updates, and public comments. Slower.

## Actor input object example

```json
{
  "startUrl": "https://walmart.pissedconsumer.com/review.html",
  "maxItems": 100,
  "fetchFullDetails": 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 = {
    "startUrl": "https://walmart.pissedconsumer.com/review.html",
    "maxItems": 100,
    "fetchFullDetails": false
};

// Run the Actor and wait for it to finish
const run = await client.actor("azzouzana/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 = {
    "startUrl": "https://walmart.pissedconsumer.com/review.html",
    "maxItems": 100,
    "fetchFullDetails": False,
}

# Run the Actor and wait for it to finish
run = client.actor("azzouzana/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 '{
  "startUrl": "https://walmart.pissedconsumer.com/review.html",
  "maxItems": 100,
  "fetchFullDetails": false
}' |
apify call azzouzana/pissedconsumer-scraper --silent --output-dataset

```

## MCP server setup

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