PissedConsumer Company Reviews Scraper
Pricing
Pay per event
PissedConsumer Company Reviews Scraper
Export public PissedConsumer company reviews, complaint text, ratings, authors, dates, status signals, responses, and aggregate reputation metrics.
Pricing
Pay per event
Rating
0.0
(0)
Developer
Stas Persiianenko
Maintained by CommunityActor stats
0
Bookmarked
4
Total users
3
Monthly active users
15 days ago
Last modified
Share
Export public PissedConsumer company reviews as structured data.
Provide company review-page URLs or subdomain slugs and receive one dataset row per review. The Actor captures complaint text, ratings, authors, dates, status signals, responses, and company-level reputation context.
It is designed for recurring reputation monitoring, customer-experience research, complaint analysis, and competitor benchmarking.
What does PissedConsumer Company Reviews Scraper do?
The Actor reads public company review feeds such as:
https://walmart.pissedconsumer.com/review.html
It follows public pagination and converts review cards into integration-ready JSON records.
The extraction includes:
- stable review IDs;
- direct review URLs when the listing exposes them;
- review title and body;
- review rating when supplied;
- reviewer name and public profile URL;
- publication date;
- resolved or other status badges;
- reported monetary loss;
- pros, cons, and preferred solution;
- public discussion responses;
- company aggregate rating and registered-review count;
- source-page and scrape timestamps.
Records are deduplicated by PissedConsumer review ID within each run.
Who is it for?
Brand and reputation teams
Track new public complaints and route relevant records into dashboards or response workflows.
Customer-experience teams
Analyze recurring service problems, preferred resolutions, and reported loss signals.
Agencies
Export comparable complaint data for several client or competitor brands on a schedule.
Market and competitor researchers
Compare complaint themes, review volume, response activity, and aggregate ratings across companies.
Data and analytics teams
Load normalized review rows into a warehouse, BI tool, spreadsheet, or sentiment pipeline.
Why use this Actor?
- URL and slug inputs: use a full company review URL or a short subdomain slug.
- Structured output: avoid maintaining selectors and cleanup logic in downstream jobs.
- Bounded pagination: control both records and pages for predictable runs.
- Useful context: every row carries company aggregate data and source provenance.
- HTTP-first extraction: no browser or residential proxy is used in the current implementation.
- Visible failures: changed or blocked markup causes a failed run rather than a misleading empty success.
This Actor focuses on PissedConsumer. Use a source-specific Actor when you need reviews from another website.
What data can I extract?
| Field | Meaning |
|---|---|
companyName | Company name shown by PissedConsumer |
companySlug | Company subdomain slug |
companyDomain | Public company domain when exposed, otherwise null |
aggregateRating | Company aggregate rating on the fetched page |
aggregateReviewCount | Registered-review count used by the aggregate rating |
reviewId | Stable PissedConsumer review identifier |
reviewUrl | Direct review URL when exposed in the listing |
authorName | Public reviewer display name |
authorProfileUrl | Public reviewer profile URL |
rating | Review-level rating when supplied |
title | Complaint or review headline |
body | Review body text |
publishedAt | Source publication timestamp |
status | Status badge such as Resolved, when present |
monetaryLoss | Reported loss text, when present |
pros | Public pros attached to the review |
cons | Public cons attached to the review |
preferredSolution | Reviewer's preferred resolution |
responses | Public response/comment objects |
responseCount | Number of responses captured on the listing |
sourceUrl | Exact listing page fetched |
pageNumber | Pagination page where the review appeared |
scrapedAt | UTC extraction timestamp |
Fields that are not present on a source card are returned as null or an empty array.
How to scrape PissedConsumer company reviews
- Open the Actor input page.
- Add one or more PissedConsumer company review URLs, or enter company slugs.
- Set the maximum reviews for each company.
- Keep the page limit low for a first test.
- Start the run.
- Open the default dataset when the run succeeds.
- Export JSON, CSV, Excel, XML, or another supported dataset format.
- Save the task or schedule it if you need recurring monitoring.
A small first run can use:
{"companySlugs": ["walmart"],"maxReviewsPerCompany": 20,"maxPagesPerCompany": 3}
Input parameters
startUrls
An array of public PissedConsumer company URLs.
Example:
{"startUrls": [{ "url": "https://amazon.pissedconsumer.com/review.html" }]}
URLs on non-PissedConsumer domains are rejected. Company detail URLs are normalized to the matching company review feed.
companySlugs
An array of PissedConsumer subdomain slugs.
For https://target.pissedconsumer.com/review.html, use target.
{"companySlugs": ["walmart", "target", "amazon"]}
maxReviewsPerCompany
Maximum review rows saved for each company.
The allowed range is 1 to 5,000. The default is 50.
maxPagesPerCompany
Pagination safety limit for each company.
The allowed range is 1 to 200. The default is 20. Public pages normally contain around 15 review cards, but the count can vary.
Output example
A representative dataset item looks like this:
{"companyName": "Walmart","companySlug": "walmart","companyDomain": null,"aggregateRating": 2.2,"aggregateReviewCount": 4766,"reviewId": "7358378","reviewUrl": null,"authorName": "Tabbatha Lht","authorProfileUrl": "https://www.pissedconsumer.com/people/31272255.html","rating": null,"title": "Your Contractor or running a scam on your customers at Sam's club at the Tucker Ga location","body": "No one came to the phone at all...","publishedAt": "2026-07-25 15:34:18","status": null,"monetaryLoss": null,"pros": [],"cons": [],"preferredSolution": null,"responses": [],"responseCount": 0,"sourceUrl": "https://walmart.pissedconsumer.com/review.html","pageNumber": 1,"scrapedAt": "2026-07-26T02:50:25.071Z"}
Review text is normalized for whitespace while preserving its readable content. The Actor does not download review images or other media assets.
How much does it cost to scrape PissedConsumer reviews?
The Actor uses pay-per-event pricing:
- a $0.0001 start fee per run;
- a tiered price per review saved;
- the current BRONZE-tier item price is $0.00004029 per review.
At the BRONZE tier, example Actor charges are:
| Reviews saved | Example charge |
|---|---|
| 20 | 0.000906 USD |
| 100 | 0.004129 USD |
| 1,000 | 0.040390 USD |
The formula is the start fee plus the applicable tier price multiplied by saved reviews. Higher usage tiers have lower per-review prices. Apify platform usage can be billed separately according to your Apify plan.
The Actor only charges the item event after a valid review record is accepted for the dataset. Duplicates, failed pages, and rejected cards are not charged as review items.
Pagination, limits, and deduplication
Pagination uses the public review.html?page=N form.
The Actor stops when any of these conditions is reached:
maxReviewsPerCompanyhas been saved;maxPagesPerCompanyhas been fetched;- a page contains no new valid reviews;
- the source returns fewer cards than a normal full page.
Each company is processed independently. A review ID is emitted at most once per company during a run.
For a full historical export, raise both limits deliberately. For scheduled monitoring, prefer a smaller review limit to reduce repeated transfer and processing.
Reliability and failure behavior
The Actor validates HTTP status, response content type, and recognizable review markup.
Transient timeouts, HTTP 429, and temporary 5xx responses are retried a bounded number of times. Malformed inputs and stable 4xx responses are not retried indefinitely.
If PissedConsumer changes its markup or serves an unrecognized challenge page, the run fails with a diagnostic message. This avoids treating a blocked page as a valid zero-result dataset.
No proxy is enabled in the current version because representative company pages work through anonymous direct HTTP.
Monitoring and sentiment-analysis workflows
Scheduled reputation monitoring
Create one saved task per monitored company or one multi-company task.
Schedule it daily or weekly.
Send the dataset to a webhook, Make, Zapier, or your warehouse.
Deduplicate across runs using reviewId.
Complaint escalation
Filter new rows by keywords, reported loss, status, or low rating.
Create tickets for high-risk complaints.
Keep reviewUrl and sourceUrl as audit links.
Competitor benchmarking
Run the same limits for several company slugs.
Group by companySlug.
Compare aggregate rating, complaint themes, status signals, and response activity.
Text analytics
Send title and body into a classifier or language model.
Use pros, cons, and preferredSolution as additional labels.
Store model output beside the stable reviewId.
Export and integrations
The default dataset works with standard Apify integrations.
Common destinations include:
- Google Sheets;
- Airtable;
- Make;
- Zapier;
- Slack or email alerts;
- webhooks;
- Amazon S3;
- BigQuery and other warehouses;
- Python or JavaScript ETL jobs.
Use dataset transformations or downstream code when you only need a subset of fields.
Run with the Apify API using cURL
curl -X POST \"https://api.apify.com/v2/acts/automation-lab~pissedconsumer-company-reviews-scraper/runs?token=$APIFY_TOKEN" \-H "Content-Type: application/json" \-d '{"companySlugs": ["walmart"],"maxReviewsPerCompany": 20,"maxPagesPerCompany": 3}'
To wait for completion and receive dataset items, use the synchronous dataset endpoint supported by the Apify API.
Run with JavaScript
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: process.env.APIFY_TOKEN });const run = await client.actor('automation-lab/pissedconsumer-company-reviews-scraper').call({companySlugs: ['walmart', 'target'],maxReviewsPerCompany: 50,maxPagesPerCompany: 5,});const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(items);
Keep your token in an environment variable or secret manager.
Run with Python
import osfrom apify_client import ApifyClientclient = ApifyClient(os.environ['APIFY_TOKEN'])run = client.actor('automation-lab/pissedconsumer-company-reviews-scraper').call(run_input={'startUrls': [{'url': 'https://amazon.pissedconsumer.com/review.html'}],'maxReviewsPerCompany': 25,'maxPagesPerCompany': 3,})items = client.dataset(run['defaultDatasetId']).list_items().itemsprint(items)
Use with MCP and AI agents
Add the Actor to Claude Code through Apify MCP:
claude mcp add --transport http apify \"https://mcp.apify.com?tools=automation-lab/pissedconsumer-company-reviews-scraper"
For Claude Desktop, Cursor, and VS Code, add this equivalent MCP server configuration:
{"mcpServers": {"apify": {"url": "https://mcp.apify.com?tools=automation-lab/pissedconsumer-company-reviews-scraper"}}}
Example prompts:
- “Export the latest 50 Walmart complaint records from PissedConsumer.”
- “Collect 100 reviews each for Walmart, Target, and Amazon.”
- “Summarize unresolved complaint themes and include source review IDs.”
An MCP client still needs valid Apify authentication and sufficient account permissions.
Responsible use and legality
This Actor extracts information visible on public PissedConsumer company pages.
You are responsible for your use of the data. Review the source website's terms, applicable privacy law, copyright rules, and your organization's retention policies. Do not use the output to harass reviewers, infer sensitive traits, or make solely automated high-impact decisions about individuals.
Collect only fields needed for a legitimate purpose. Protect exported reviewer information. Honor deletion, correction, and access obligations that apply to your organization.
This documentation is operational guidance, not legal advice.
Limitations
- Source fields vary by review, so nullable fields are expected.
- Some listing cards do not expose a direct review URL.
- Review-level ratings are absent from some complaint cards.
- Responses are limited to comments rendered on the fetched listing page.
- The Actor does not log in, submit reviews, or respond to complaints.
- The Actor does not download images or attachments.
- Source markup and access controls can change without notice.
- A run is a snapshot, not a guarantee of complete historical coverage.
Troubleshooting
The Actor says my URL is unsupported
Use a public company subdomain URL ending in .pissedconsumer.com, or provide only the subdomain slug.
Do not use the www.pissedconsumer.com homepage or a different review website.
I received fewer reviews than requested
Check maxPagesPerCompany first.
The source may also have reached its end, returned duplicate IDs, or omitted valid review bodies on some cards.
Inspect run logs for the stop reason.
The run failed on recognizable markup
The source may have changed its page structure or returned a temporary challenge. Retry later after checking the exact source URL in a normal browser. Repeated blind retries are not recommended.
Why are some ratings or review URLs null?
PissedConsumer does not expose every field on every listing card.
The Actor reports missing source data as null rather than inventing a value.
How do I avoid duplicates across scheduled runs?
Use reviewId as the durable key in your database or automation.
The Actor deduplicates within a run, while your downstream store should deduplicate across runs.
Related Automation Lab Actors
- Trustpilot Scraper for Trustpilot business-review workflows.
- Sitejabber Reviews Scraper for Sitejabber and SmartCustomer review exports.
Use separate source Actors when you need platform-specific fields and pagination behavior. Combine their datasets downstream using source name, company identity, and stable review IDs.
FAQ
Does the Actor require a PissedConsumer account?
No. The current version reads anonymous public company review pages.
Does it use a browser or proxy?
No. The current version uses direct HTTP and Cheerio parsing.
Can it scrape multiple companies in one run?
Yes. Add multiple URLs, multiple slugs, or both. Duplicate slugs are fetched once.
Can I export all historical reviews?
You can raise the review and page limits up to their schema maximums. Actual coverage depends on what the public paginated company feed exposes. Start with a bounded test before requesting a large export.
Does it perform sentiment analysis?
No. It returns source data suitable for a downstream sentiment or topic-analysis step.
Are company replies distinguished from ordinary comments?
The current output preserves public response/comment objects rendered with the review. It does not claim that every response is an official company reply.
What happens when a page is blocked?
The Actor fails after bounded retries when the response is an HTTP error or lacks recognizable review markup. It does not silently return an empty successful run.