# Fake Review Checker: Incentivized & Duplicates (`ultimatemc/review-integrity-checker`) Actor

Screen Amazon, Trustpilot, Google Play, App Store or any scraped reviews for signs the FTC's 2024 fake-review rule targets: paid or free-product reviews, 5-star-for-reward wording, insider reviews, copied text, rating bursts and rating/text mismatches. Quotes and sources per signal. No AI.

- **URL**: https://apify.com/ultimatemc/review-integrity-checker.md
- **Developed by:** [Ultimate Foresight Inc](https://apify.com/ultimatemc) (community)
- **Categories:** E-commerce, Marketing, Automation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.50 / 1,000 results

This Actor is paid per event and usage. You are charged both the fixed price for specific events and for Apify platform usage.

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

Screen **Amazon, Trustpilot, Google Play, App Store, Tripadvisor or any scraped reviews** for the warning signs the **FTC's 2024 rule on fake reviews (16 CFR 465)** targets. The **Fake Review Checker** gives each review a **0-100 signal score** based on **5-star-for-reward wording**, **free-product or paid reviews**, **reviews by owners, staff or relatives**, **copied text across reviews**, **5-star bursts on one day**, **5-star ratings with negative text** and **reviews written before using the product**. Each signal shows the matched words, its weight and the rule or guide it comes from. Click **Start** with the prefilled example to see it work.

> This is an automated screen for warning signs, not a finding that any review is fake or that anyone broke a law or platform rule. A zero score doesn't mean a review is genuine. Not legal advice; every row carries this disclaimer. Reviewer IDs are only used for matching and are never output.

### What does the Fake Review Checker do?

- ✅ **Reward for a positive review** (40 points): "in exchange for a 5-star review", "if I leave 5 stars" and similar. The FTC rule bans conditioning a reward on the review's sentiment.
- ✅ **Insider reviews** (30): "my brother owns the company", "I work for this brand", "our product".
- ✅ **Copied text** (30): near-identical reviews (12+ words) for the same product in your data.
- ✅ **Disclosed incentives** (15): "received a free sample", "#gifted", "#sponsored", "discounted in exchange for my honest review". Allowed when disclosed, but worth tracking. Vine and other platform programs score 3.
- ✅ **Review suppression** (15): text describing reviews being removed, blocked or paid to be changed.
- ✅ **Review bursts** (15): a day with many reviews (default 5+), at least 4x the product's median, mostly 4.5+ stars.
- ✅ **Rating and text mismatch** (10) and **no experience yet** (10): 5 stars with "terrible, broke after two days", or "haven't tried it yet but...".
- ✅ Output per review: `integrityRiskScore` (0-100), `signalLevel`, `signalCount`, `categoriesFlagged`, `signals` (`signalId`, `category`, `weight`, `quote`, `context`, `sourceUrl`, `whyItMatters`), `rating`, `reviewDate`, `wordCount`, `checkedAt` and a disclaimer.

### Who is it for?

- **Brands and marketplace sellers** auditing their own review pages before the FTC or a platform does.
- **Agencies and review-management firms** checking that client review programs don't use sentiment-conditioned rewards.
- **Shoppers, researchers and journalists** measuring incentivized or copied reviews in scraped data.
- **Marketplaces and review platforms** triaging reviews for moderation.

### How to check reviews for fake review signs

1. Click **Start** with the prefilled example (seven blender reviews with several signals and two ordinary reviews).
2. Replace it with your reviews: `text`, and optionally `rating`, `title`, `date`, `productId`, `reviewer` and `id`. Or paste plain texts into **Texts only**.
3. Or enter a **Dataset ID** from an Amazon, Trustpilot, Google Play or other review scraper. Common fields are found automatically; use **Field map** (dotted paths work) for others.
4. Include `date` and `productId` to enable the burst check, and `rating` for the mismatch check.
5. Turn on **Only save rows with findings** for big runs; you only pay for saved rows.

### Input example

This is the prefilled input:

```json
{
  "reviews": [
    {
      "id": "R1",
      "productId": "EXAMPLE-BLENDER",
      "rating": 5,
      "date": "2026-10-01",
      "reviewer": "a1",
      "text": "I received this blender for free in exchange for a 5-star review. Works great!"
    },
    {
      "id": "R2",
      "productId": "EXAMPLE-BLENDER",
      "rating": 5,
      "date": "2026-10-02",
      "reviewer": "a2",
      "text": "My brother owns the company, but honestly this is the best blender I've ever used."
    },
    {
      "id": "R3",
      "productId": "EXAMPLE-BLENDER",
      "rating": 5,
      "date": "2026-10-03",
      "reviewer": "a3",
      "text": "This blender is powerful and quiet, crushes ice in seconds and cleans up easily in the dishwasher. Highly recommend it to anyone."
    },
    {
      "id": "R4",
      "productId": "EXAMPLE-BLENDER",
      "rating": 5,
      "date": "2026-10-03",
      "reviewer": "a4",
      "text": "This blender is powerful and quiet, crushes ice in seconds and cleans up easily in the dishwasher. Highly recommend it to everyone."
    },
    {
      "id": "R5",
      "productId": "EXAMPLE-BLENDER",
      "rating": 5,
      "date": "2026-10-04",
      "reviewer": "a5",
      "text": "Terrible. Broke after two days and the lid leaks."
    },
    {
      "id": "R6",
      "productId": "EXAMPLE-BLENDER",
      "rating": 4,
      "date": "2026-10-05",
      "reviewer": "a6",
      "text": "Solid blender for smoothies. A bit loud on high, but the jar is sturdy and easy to clean."
    },
    {
      "id": "R7",
      "productId": "EXAMPLE-BLENDER",
      "rating": 2,
      "date": "2026-10-06",
      "reviewer": "a7",
      "text": "The motor smells hot after a minute. Returning it."
    }
  ]
}
```

Dataset mode:

```json
{"datasetId": "YOUR_DATASET_ID", "fieldMap": {"text": "reviewDescription", "rating": "ratingScore", "date": "reviewDate", "productId": "asin"}, "onlyFlagged": true, "maxItems": 50000}
```

### Output example

Real output from a run of the prefilled input on 2026-10-30 (long finding lists are shortened here; the run returns all of them):

```json
[
  {
    "itemNo": 1,
    "reviewId": "R1",
    "productId": "EXAMPLE-BLENDER",
    "reviewTitle": null,
    "integrityRiskScore": 40,
    "signalLevel": "strong signals",
    "signalCount": 1,
    "categoriesFlagged": [
      "incentive"
    ],
    "signals": [
      {
        "signalId": "sentiment_conditioned_incentive",
        "category": "incentive",
        "weight": 40,
        "quote": "in exchange for a 5-star review",
        "context": "I received this blender for free in exchange for a 5-star review. Works great!",
        "sourceUrl": "https://www.ecfr.gov/current/title-16/chapter-I/subchapter-D/part-465",
        "whyItMatters": "Compensation offered for a positive (or negative) review is prohibited by 16 CFR 465.4."
      }
    ],
    "rating": 5,
    "reviewDate": "2026-10-01",
    "wordCount": 15,
    "checkedAt": "2026-10-30T18:52:06+00:00",
    "disclaimer": "Automated screen for warning signs described in the FTC Consumer Reviews and Testimonials..."
  },
  {
    "itemNo": 2,
    "reviewId": "R2",
    "productId": "EXAMPLE-BLENDER",
    "reviewTitle": null,
    "integrityRiskScore": 30,
    "signalLevel": "some signals",
    "signalCount": 1,
    "categoriesFlagged": [
      "insider"
    ],
    "signals": [
      {
        "signalId": "insider_connection",
        "category": "insider",
        "weight": 30,
        "quote": "My brother owns the company",
        "context": "My brother owns the company, but honestly this is the best blender I've ever ...",
        "sourceUrl": "https://www.ecfr.gov/current/title-16/chapter-I/subchapter-D/part-465",
        "whyItMatters": "Reviews by a company's officers, managers, employees or agents without a clear disclosure are restricted by 16 CFR 465.5."
      }
    ],
    "rating": 5,
    "reviewDate": "2026-10-02",
    "wordCount": 15,
    "checkedAt": "2026-10-30T18:52:06+00:00",
    "disclaimer": "Automated screen for warning signs described in the FTC Consumer Reviews and Testimonials..."
  },
  {
    "itemNo": 3,
    "reviewId": "R3",
    "productId": "EXAMPLE-BLENDER",
    "reviewTitle": null,
    "integrityRiskScore": 30,
    "signalLevel": "some signals",
    "signalCount": 1,
    "categoriesFlagged": [
      "duplication"
    ],
    "signals": [
      {
        "signalId": "duplicate_text",
        "category": "duplication",
        "weight": 30,
        "quote": "This blender is powerful and quiet, crushes ice in seconds and cleans up easily ",
        "context": null,
        "sourceUrl": "https://www.ecfr.gov/current/title-16/chapter-I/subchapter-D/part-465",
        "whyItMatters": "The same or nearly the same text appears in 1 other review(s) in this run (rows 4); copied reviews are a common sign of fake reviews.",
        "matchedRows": [
          4
        ]
      }
    ],
    "rating": 5,
    "reviewDate": "2026-10-03",
    "wordCount": 22,
    "checkedAt": "2026-10-30T18:52:06+00:00",
    "disclaimer": "Automated screen for warning signs described in the FTC Consumer Reviews and Testimonials..."
  },
  {
    "itemNo": 4,
    "reviewId": "R4",
    "productId": "EXAMPLE-BLENDER",
    "reviewTitle": null,
    "integrityRiskScore": 30,
    "signalLevel": "some signals",
    "signalCount": 1,
    "categoriesFlagged": [
      "duplication"
    ],
    "signals": [
      {
        "signalId": "duplicate_text",
        "category": "duplication",
        "weight": 30,
        "quote": "This blender is powerful and quiet, crushes ice in seconds and cleans up easily ",
        "context": null,
        "sourceUrl": "https://www.ecfr.gov/current/title-16/chapter-I/subchapter-D/part-465",
        "whyItMatters": "The same or nearly the same text appears in 1 other review(s) in this run (rows 3); copied reviews are a common sign of fake reviews.",
        "matchedRows": [
          3
        ]
      }
    ],
    "rating": 5,
    "reviewDate": "2026-10-03",
    "wordCount": 22,
    "checkedAt": "2026-10-30T18:52:06+00:00",
    "disclaimer": "Automated screen for warning signs described in the FTC Consumer Reviews and Testimonials..."
  },
  {
    "itemNo": 5,
    "reviewId": "R5",
    "productId": "EXAMPLE-BLENDER",
    "reviewTitle": null,
    "integrityRiskScore": 10,
    "signalLevel": "weak signals",
    "signalCount": 1,
    "categoriesFlagged": [
      "consistency"
    ],
    "signals": [
      {
        "signalId": "rating_text_mismatch",
        "category": "consistency",
        "weight": 10,
        "quote": "Terrible",
        "context": "Terrible. Broke after two days and the lid leaks.",
        "sourceUrl": "https://www.ecfr.gov/current/title-16/chapter-I/subchapter-D/part-465",
        "whyItMatters": "A top rating with clearly negative text can mean a misclick, or a review whose rating doesn't reflect the writer's experience."
      }
    ],
    "rating": 5,
    "reviewDate": "2026-10-04",
    "wordCount": 9,
    "checkedAt": "2026-10-30T18:52:06+00:00",
    "disclaimer": "Automated screen for warning signs described in the FTC Consumer Reviews and Testimonials..."
  },
  {
    "itemNo": 6,
    "reviewId": "R6",
    "productId": "EXAMPLE-BLENDER",
    "reviewTitle": null,
    "integrityRiskScore": 0,
    "signalLevel": "no listed signals found",
    "signalCount": 0,
    "categoriesFlagged": [],
    "signals": [],
    "rating": 4,
    "reviewDate": "2026-10-05",
    "wordCount": 18,
    "checkedAt": "2026-10-30T18:52:06+00:00",
    "disclaimer": "Automated screen for warning signs described in the FTC Consumer Reviews and Testimonials..."
  },
  {
    "itemNo": 7,
    "reviewId": "R7",
    "productId": "EXAMPLE-BLENDER",
    "reviewTitle": null,
    "integrityRiskScore": 0,
    "signalLevel": "no listed signals found",
    "signalCount": 0,
    "categoriesFlagged": [],
    "signals": [],
    "rating": 2,
    "reviewDate": "2026-10-06",
    "wordCount": 9,
    "checkedAt": "2026-10-30T18:52:06+00:00",
    "disclaimer": "Automated screen for warning signs described in the FTC Consumer Reviews and Testimonials..."
  }
]
```

### How much does it cost to check reviews?

This Actor uses pay-per-event pricing: **$0.0005 per review saved** plus a **$0.00005 start fee per run**, plus small platform usage paid by you (a few hundredths of a cent for small runs). That's about **$0.50 for 1,000 reviews** and **$5 for 10,000 reviews** plus usage. With **Only save rows with findings** on, reviews with a score of 0 aren't saved or charged. You can set a maximum cost per run in the run options.

### Use it through the API, integrations or AI agents

- Run it and get results in one call: `https://api.apify.com/v2/acts/ultimatemc~review-integrity-checker/run-sync-get-dataset-items`
- Use it from AI agents through the Apify MCP server: `https://mcp.apify.com?tools=ultimatemc/review-integrity-checker`
- Schedule it after a daily scraper run, send flagged rows to Slack or email with webhooks, or connect it to Make, Zapier, n8n or Google Sheets.
- Chain it after a review scraper by passing the scraper's dataset ID.

### How it works

Signals are deterministic English text patterns and simple statistics based on the FTC Trade Regulation Rule on the Use of Consumer Reviews and Testimonials (16 CFR 465, in effect since 2024-10-21) and the FTC Endorsement Guides (16 CFR 255), checked on 2026-10-30. No AI and no outside calls are used, so the same input gives the same result. Each signal type counts once per review and the score is the sum of the weights, capped at 100. Levels: **strong signals** (40+), **some signals** (15-39), **weak signals** (1-14), **no listed signals found** (0). Copy and burst checks only compare reviews in the same run.

Sources:

- [16 CFR Part 465: Use of Consumer Reviews and Testimonials](https://www.ecfr.gov/current/title-16/chapter-I/subchapter-D/part-465)
- [FTC: Final rule banning fake reviews and testimonials (Aug 2024)](https://www.ftc.gov/news-events/news/press-releases/2024/08/federal-trade-commission-announces-final-rule-banning-fake-reviews-testimonials)
- [16 CFR Part 255: Endorsement Guides](https://www.ecfr.gov/current/title-16/chapter-I/subchapter-B/part-255)
- [Trustpilot guidelines for reviewers](https://legal.trustpilot.com/for-reviewers/guidelines-for-reviewers)

### FAQ

#### Does a high score mean the review is fake?

No. It means the text or pattern matches something the FTC rule or guides describe. A disclosed free sample can be a perfectly honest review. Use the score to decide which reviews a person should look at.

#### Which languages does it support?

English only. Other languages will mostly score 0, except for the copy and burst checks.

#### Is it AI?

No. It's a fixed, weighted rule set, so results are repeatable and explainable, and runs cost $0.0005 per review.

#### Why didn't the burst check run?

It needs `date` and `productId` on the reviews and at least the **Min reviews for a burst** on one day.

#### Does it output reviewer names?

No. The `reviewer` field is only used internally to tell reviewers apart and is never saved.

### Limitations

- English text patterns only; paraphrased incentives can be missed.
- Copy and burst checks only see the reviews in one run.
- It can't see platform data like verified-purchase status or reviewer history unless your scraper includes it in the text.
- Patterns reflect the FTC rule and guides as of 2026-10-30.

### Other tools by Ultimate Foresight

- [Fair Housing Listing Checker for Real Estate Ads](https://apify.com/ultimatemc/fair-housing-listing-checker): flags rental and sale listing wording that may raise Fair Housing Act issues, with HUD sources and rewrite tips (screening aid only).
- [Ad Copy Policy Checker for Meta, Google & TikTok](https://apify.com/ultimatemc/ad-copy-policy-checker): checks ad text against Facebook, Instagram, Google Ads and TikTok ad policies before you submit.
- [H-1B Visa Sponsor Checker & Score for Job Listings](https://apify.com/ultimatemc/h1b-visa-sponsor-score): adds Department of Labor H-1B sponsorship history and a 0-100 score to company names or job listings.
- [Chain vs Independent Labeler for Google Maps Leads](https://apify.com/ultimatemc/chain-vs-independent-labeler): labels local businesses as chain, franchise or independent.
- [YouTube Monetization Checker for Scripts & Titles](https://apify.com/ultimatemc/youtube-script-monetization-checker): pre-checks titles, descriptions and scripts for wording that leads to limited or no ads.
- [Etsy & eBay Listing Policy & Banned Item Checker](https://apify.com/ultimatemc/etsy-ebay-listing-policy-checker): pre-checks marketplace listings for prohibited items, counterfeit wording and off-platform contact.
- [Job Scam Detector & Trust Score for Job Postings](https://apify.com/ultimatemc/job-posting-trust-score): scores job postings 0-100 for scam and ghost-job signals.
- [SAM.gov Amendment & Opportunity Change Tracker](https://apify.com/ultimatemc/sam-gov-opportunity-change-detector): shows what changed between versions of a SAM.gov notice: deadlines, set-asides, NAICS and attachments.
- [Product Recall Checker for Brands, UPCs & Products](https://apify.com/ultimatemc/product-recall-matcher): matches your brands, products, UPCs or model numbers against CPSC, FDA and NHTSA recalls.
- [App Store & Google Play Listing Policy Checker](https://apify.com/ultimatemc/app-store-listing-policy-checker): pre-checks app names, subtitles and descriptions against Apple and Google Play metadata rules.
- [Company Name Normalizer & Deduplicator for CRM](https://apify.com/ultimatemc/company-name-canonicalizer): cleans company names (Inc, LLC, d/b/a, aliases) and groups duplicates in CRM, lead or vendor lists.
- [FCC Covered List & Section 889 Bulk Screener](https://apify.com/ultimatemc/fcc-covered-list-screener): screens FCC IDs and brand names against the public FCC Covered List, with sources and timestamps (screening aid only).
- [Green Claims Checker: EU Greenwashing Ban & FTC](https://apify.com/ultimatemc/green-claims-checker): flags risky eco-friendly, carbon neutral and recyclable wording under EU, FTC and UK CMA rules.
- [Influencer #ad Disclosure Checker: FTC & ASA](https://apify.com/ultimatemc/influencer-ad-disclosure-checker): flags influencer posts with missing or unclear #ad labels under FTC, ASA/CAP and CMA rules.
- [Job Title to SOC Code Mapper with O\*NET Data](https://apify.com/ultimatemc/job-title-soc-code-mapper): maps job titles to SOC and O\*NET-SOC codes in bulk, with seniority and tech skills found in the posting.
- [Shrinkflation Detector for Grocery Price Data](https://apify.com/ultimatemc/shrinkflation-detector): finds smaller packs at the same or higher price by comparing two runs of a grocery scraper, with unit price before and after.
- [Job Ad Discrimination Checker for Job Posts (US)](https://apify.com/ultimatemc/job-ad-discrimination-checker): flags age, sex, national origin, citizenship and other discriminatory wording in job posts, with EEOC and DOJ sources (screening aid only).
- [Walmart Listing Policy Checker for Titles & Copy](https://apify.com/ultimatemc/walmart-listing-policy-checker): flags promotional phrases, retailer names, URLs, long titles and pesticide or FDA claims in Walmart Marketplace listings, with policy links and fixes.
- [TikTok Shop Listing Policy Checker for Products](https://apify.com/ultimatemc/tiktok-shop-listing-policy-checker): flags off-platform links, dupe wording, weight-loss, disease and FDA claims and title rule breaks in TikTok Shop listings.
- [Supplement & Cosmetic Claims Checker: FDA & FTC](https://apify.com/ultimatemc/supplement-cosmetic-claims-checker): flags disease, drug and 'FDA approved' claims and missing supplement disclaimers in supplement and beauty product copy, with FDA and FTC sources (screening aid only).
- [Rental Listing Scam Checker for Craigslist & FB](https://apify.com/ultimatemc/rental-listing-scam-checker): scores rental listings 0-100 for FTC-listed scam signs like wire or gift card payment, deposit before viewing and rent far below similar listings.
- [GTIN, UPC & EAN Barcode Validator (Check Digit)](https://apify.com/ultimatemc/gtin-barcode-validator): checks UPC, EAN, GTIN-14 and ISBN codes for wrong check digits, lost leading zeros, scientific notation, restricted prefixes and duplicates before a feed upload.
- [Facebook Marketplace Listing Policy Checker](https://apify.com/ultimatemc/facebook-marketplace-listing-policy-checker): flags Marketplace listings that may break Meta's Commerce Policies (weapons, vapes, Rx, animals, gift cards, services, counterfeits and more), with policy links.
- [Fake Discount Checker: EU 30-Day Prior Price](https://apify.com/ultimatemc/discount-claim-checker): checks 'was' and strikethrough prices against your own price history for 30-day prior-price, raise-then-discount and wrong-badge issues.
- [SMS Marketing Message Checker: STOP & 10DLC](https://apify.com/ultimatemc/sms-marketing-message-checker): pre-checks SMS marketing texts for segment count, STOP opt-out wording, URL shorteners, SHAFT content and quiet hours.
- [Hidden Fee Checker: Hotel, Rental & Ticket Prices](https://apify.com/ultimatemc/hidden-fee-price-checker): flags headline prices that leave out mandatory resort, service or booking fees under the FTC junk fees rule (16 CFR 464), with sources per finding.
- [EU GPSR Listing Checker for Amazon, eBay & Shops](https://apify.com/ultimatemc/gpsr-listing-checker): checks listings for the EU GPSR Article 19 online-sale details: manufacturer, EU responsible person, product identifier, picture and warnings.
- [Food Allergen Label Checker: US, EU & AU](https://apify.com/ultimatemc/food-allergen-label-checker): compares ingredient lists with the 'Contains' statement for US 9, EU/UK 14 and Australian PEAL allergens and flags gaps and conflicting free-from claims.
- [Toy Choking Hazard Warning Checker (CPSC)](https://apify.com/ultimatemc/toy-choking-warning-checker): flags toy listings missing the CPSC choking-hazard warnings for small parts, balloons, small balls and marbles, with age-grade checks.
- [Textile Fiber Label Checker: Bamboo & Origin](https://apify.com/ultimatemc/textile-fiber-label-checker): flags 'bamboo' claims that should say rayon, fiber percentages that don't add up, mismatched silk or cashmere titles and missing Made in USA/Imported.
- [Amazon Listing Policy Checker for Titles & Bullets](https://apify.com/ultimatemc/amazon-listing-policy-checker): flags pesticide, FDA and disease claims and Amazon title and bullet rule breaks in bulk, with policy links and fixes.
- [Prop 65 Warning Checker for Product Listings](https://apify.com/ultimatemc/prop65-warning-checker): flags Prop 65 safe-harbor warnings missing 'WARNING', the P65Warnings.ca.gov link or a chemical name, old short forms, and listed chemicals mentioned with no warning.
- [Unit Price Checker for Grocery & Retail Listings](https://apify.com/ultimatemc/unit-price-checker): parses pack sizes, recomputes the price per kg, litre or item, and flags missing or wrong unit prices in grocery and retail data.
- [Made in USA Claim Checker for Product Listings](https://apify.com/ultimatemc/made-in-usa-claim-checker): flags unqualified 'Made in USA' claims next to imported or foreign-origin details under the FTC rule (16 CFR 323), with sources per finding.
- [Subscription Auto-Renewal Disclosure Checker](https://apify.com/ultimatemc/auto-renewal-disclosure-checker): checks subscription and free-trial offer text for missing renewal, price, billing period and cancellation disclosures under California law and FTC ROSCA.
- [Email CAN-SPAM Checker & Unsubscribe Header Test](https://apify.com/ultimatemc/email-can-spam-checker): pre-checks marketing emails for missing unsubscribe links or postal address, misleading subjects and Google/Yahoo one-click unsubscribe headers.

Found a false positive or a missed pattern? Open an issue on the **Issues** tab with the review text (remove personal details), and we'll review the rule.

# Actor input Schema

## `reviews` (type: `array`):

Array of objects with "text" and optional "rating", "title", "date", "productId", "reviewer" (hashed, never output) and "id". The prefilled example shows several signals and two ordinary reviews; replace it with your own.

## `texts` (type: `array`):

One review text per entry. Burst and rating checks need the full Reviews or dataset mode.

## `datasetId` (type: `string`):

Apify dataset with reviews, for example the output of an Amazon, Trustpilot, Google Play, App Store or Tripadvisor review scraper. Common fields (text, reviewText, rating, stars, date, asin, productId, reviewerId) are detected automatically; override them with Field map.

## `fieldMap` (type: `object`):

Override field names; dotted paths work for nested fields. Example: {"text": "reviewDescription", "rating": "ratingScore", "date": "reviewDate", "productId": "asin", "reviewer": "userId"}.

## `burstMinReviews` (type: `integer`):

A day counts as a review burst for a product when it has at least this many reviews, at least 4x the product's median daily count, and 80%+ of them rated 4.5 or higher.

## `onlyFlagged` (type: `boolean`):

Skip reviews with no signals (you are only charged for saved rows).

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

Maximum number of reviews to check in this run.

## Actor input object example

```json
{
  "reviews": [
    {
      "id": "R1",
      "productId": "EXAMPLE-BLENDER",
      "rating": 5,
      "date": "2026-10-01",
      "reviewer": "a1",
      "text": "I received this blender for free in exchange for a 5-star review. Works great!"
    },
    {
      "id": "R2",
      "productId": "EXAMPLE-BLENDER",
      "rating": 5,
      "date": "2026-10-02",
      "reviewer": "a2",
      "text": "My brother owns the company, but honestly this is the best blender I've ever used."
    },
    {
      "id": "R3",
      "productId": "EXAMPLE-BLENDER",
      "rating": 5,
      "date": "2026-10-03",
      "reviewer": "a3",
      "text": "This blender is powerful and quiet, crushes ice in seconds and cleans up easily in the dishwasher. Highly recommend it to anyone."
    },
    {
      "id": "R4",
      "productId": "EXAMPLE-BLENDER",
      "rating": 5,
      "date": "2026-10-03",
      "reviewer": "a4",
      "text": "This blender is powerful and quiet, crushes ice in seconds and cleans up easily in the dishwasher. Highly recommend it to everyone."
    },
    {
      "id": "R5",
      "productId": "EXAMPLE-BLENDER",
      "rating": 5,
      "date": "2026-10-04",
      "reviewer": "a5",
      "text": "Terrible. Broke after two days and the lid leaks."
    },
    {
      "id": "R6",
      "productId": "EXAMPLE-BLENDER",
      "rating": 4,
      "date": "2026-10-05",
      "reviewer": "a6",
      "text": "Solid blender for smoothies. A bit loud on high, but the jar is sturdy and easy to clean."
    },
    {
      "id": "R7",
      "productId": "EXAMPLE-BLENDER",
      "rating": 2,
      "date": "2026-10-06",
      "reviewer": "a7",
      "text": "The motor smells hot after a minute. Returning it."
    }
  ],
  "burstMinReviews": 5,
  "onlyFlagged": false,
  "maxItems": 5000
}
```

# 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 = {
    "reviews": [
        {
            "id": "R1",
            "productId": "EXAMPLE-BLENDER",
            "rating": 5,
            "date": "2026-10-01",
            "reviewer": "a1",
            "text": "I received this blender for free in exchange for a 5-star review. Works great!"
        },
        {
            "id": "R2",
            "productId": "EXAMPLE-BLENDER",
            "rating": 5,
            "date": "2026-10-02",
            "reviewer": "a2",
            "text": "My brother owns the company, but honestly this is the best blender I've ever used."
        },
        {
            "id": "R3",
            "productId": "EXAMPLE-BLENDER",
            "rating": 5,
            "date": "2026-10-03",
            "reviewer": "a3",
            "text": "This blender is powerful and quiet, crushes ice in seconds and cleans up easily in the dishwasher. Highly recommend it to anyone."
        },
        {
            "id": "R4",
            "productId": "EXAMPLE-BLENDER",
            "rating": 5,
            "date": "2026-10-03",
            "reviewer": "a4",
            "text": "This blender is powerful and quiet, crushes ice in seconds and cleans up easily in the dishwasher. Highly recommend it to everyone."
        },
        {
            "id": "R5",
            "productId": "EXAMPLE-BLENDER",
            "rating": 5,
            "date": "2026-10-04",
            "reviewer": "a5",
            "text": "Terrible. Broke after two days and the lid leaks."
        },
        {
            "id": "R6",
            "productId": "EXAMPLE-BLENDER",
            "rating": 4,
            "date": "2026-10-05",
            "reviewer": "a6",
            "text": "Solid blender for smoothies. A bit loud on high, but the jar is sturdy and easy to clean."
        },
        {
            "id": "R7",
            "productId": "EXAMPLE-BLENDER",
            "rating": 2,
            "date": "2026-10-06",
            "reviewer": "a7",
            "text": "The motor smells hot after a minute. Returning it."
        }
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("ultimatemc/review-integrity-checker").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 = { "reviews": [
        {
            "id": "R1",
            "productId": "EXAMPLE-BLENDER",
            "rating": 5,
            "date": "2026-10-01",
            "reviewer": "a1",
            "text": "I received this blender for free in exchange for a 5-star review. Works great!",
        },
        {
            "id": "R2",
            "productId": "EXAMPLE-BLENDER",
            "rating": 5,
            "date": "2026-10-02",
            "reviewer": "a2",
            "text": "My brother owns the company, but honestly this is the best blender I've ever used.",
        },
        {
            "id": "R3",
            "productId": "EXAMPLE-BLENDER",
            "rating": 5,
            "date": "2026-10-03",
            "reviewer": "a3",
            "text": "This blender is powerful and quiet, crushes ice in seconds and cleans up easily in the dishwasher. Highly recommend it to anyone.",
        },
        {
            "id": "R4",
            "productId": "EXAMPLE-BLENDER",
            "rating": 5,
            "date": "2026-10-03",
            "reviewer": "a4",
            "text": "This blender is powerful and quiet, crushes ice in seconds and cleans up easily in the dishwasher. Highly recommend it to everyone.",
        },
        {
            "id": "R5",
            "productId": "EXAMPLE-BLENDER",
            "rating": 5,
            "date": "2026-10-04",
            "reviewer": "a5",
            "text": "Terrible. Broke after two days and the lid leaks.",
        },
        {
            "id": "R6",
            "productId": "EXAMPLE-BLENDER",
            "rating": 4,
            "date": "2026-10-05",
            "reviewer": "a6",
            "text": "Solid blender for smoothies. A bit loud on high, but the jar is sturdy and easy to clean.",
        },
        {
            "id": "R7",
            "productId": "EXAMPLE-BLENDER",
            "rating": 2,
            "date": "2026-10-06",
            "reviewer": "a7",
            "text": "The motor smells hot after a minute. Returning it.",
        },
    ] }

# Run the Actor and wait for it to finish
run = client.actor("ultimatemc/review-integrity-checker").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 '{
  "reviews": [
    {
      "id": "R1",
      "productId": "EXAMPLE-BLENDER",
      "rating": 5,
      "date": "2026-10-01",
      "reviewer": "a1",
      "text": "I received this blender for free in exchange for a 5-star review. Works great!"
    },
    {
      "id": "R2",
      "productId": "EXAMPLE-BLENDER",
      "rating": 5,
      "date": "2026-10-02",
      "reviewer": "a2",
      "text": "My brother owns the company, but honestly this is the best blender I'\''ve ever used."
    },
    {
      "id": "R3",
      "productId": "EXAMPLE-BLENDER",
      "rating": 5,
      "date": "2026-10-03",
      "reviewer": "a3",
      "text": "This blender is powerful and quiet, crushes ice in seconds and cleans up easily in the dishwasher. Highly recommend it to anyone."
    },
    {
      "id": "R4",
      "productId": "EXAMPLE-BLENDER",
      "rating": 5,
      "date": "2026-10-03",
      "reviewer": "a4",
      "text": "This blender is powerful and quiet, crushes ice in seconds and cleans up easily in the dishwasher. Highly recommend it to everyone."
    },
    {
      "id": "R5",
      "productId": "EXAMPLE-BLENDER",
      "rating": 5,
      "date": "2026-10-04",
      "reviewer": "a5",
      "text": "Terrible. Broke after two days and the lid leaks."
    },
    {
      "id": "R6",
      "productId": "EXAMPLE-BLENDER",
      "rating": 4,
      "date": "2026-10-05",
      "reviewer": "a6",
      "text": "Solid blender for smoothies. A bit loud on high, but the jar is sturdy and easy to clean."
    },
    {
      "id": "R7",
      "productId": "EXAMPLE-BLENDER",
      "rating": 2,
      "date": "2026-10-06",
      "reviewer": "a7",
      "text": "The motor smells hot after a minute. Returning it."
    }
  ]
}' |
apify call ultimatemc/review-integrity-checker --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,ultimatemc/review-integrity-checker"
        }
    }
}
```

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/ViAFFhaMa7LAlzjCf/builds/Ui1t1Y42T6bBsSgZW/openapi.json
