---
title: "Check whether a Google review is removable"
method: POST
path: "/api/agent/v1/check/review-removability"
---

# Check whether a Google review is removable

`POST /api/agent/v1/check/review-removability`

## Request

- Base URL: `https://essentras.com`
- URL: `https://essentras.com/api/agent/v1/check/review-removability`
- Auth: none declared

Free and read-only. Tells a business owner whether a Google review matches one of Google’s named review rules, the same verdict as the free checker on essentras.com. Ask the person for facts only, never the review text, a name or a link: whose review it is, whether the reviewer was a real customer, what the review contains, whether they can show it, and where they are in Google’s process. Returns the verdict (strong match, arguable, or no policy match), Google’s rule with its policy link and the date it was read, where to report, the evidence to attach, Google’s stated timing, the appeal path, report and reply templates, and the Essentras service with its current price only when the page offers it. A genuine negative review gets “No policy match”: Google does not remove a review for being negative, and the tool says so. Google decides every removal. The same checker as the MCP tool check_review_removability.

## Request body

- object
  - `ownership` 'mine' | 'business' | 'other', required: Whose review is it? mine = I wrote it; business = It is about my business; other = It is about another business.
  - `customer` 'yes' | 'no-record' | 'unsure': When ownership is business. Was the reviewer a real customer? Search bookings, orders, invoices and your CRM by name, email, phone and the dates the review mentions. yes = Yes, I can match them to a visit or order; no-record = No record after searching; unsure = Not sure yet.
  - `contains` string[]: When ownership is business. What does the review contain? Select all that apply. Not a genuine experience: conflict = Written by a competitor, a current or former employee, a relative, or someone else with a conflict of interest; incentivized = Paid for or incentivized by anyone (money, discount, free product or service); burst = Part of a sudden burst of similar reviews from accounts you cannot match to customers; duplicate = The same or near-identical text posted more than once, from 1 account or several; impersonation = Posted by someone pretending to be another person, a business or an official. Breaks a rule in the text itself: harassment = Threats, doxxing, or sexualized remarks about a person; hate = Slurs, or calls for violence against a protected group; profanity = Profanity or obscenity used to offend; personal-info = A private person’s home address, phone number, photo, or financial, medical or ID details; advertising = An advert, a phone number or a link; wrong-business = About a different business or location; gibberish = Meaningless characters. Judgment calls (decided case by case): staff-name = Names a staff member or another private person by full or last name (not a first name alone); accusation = Accuses you or your staff of a crime or unethical conduct, with nothing to back it up; false-claims = Describes what you sell or do in a way that is false; rant = Political or social commentary, or a rant that is not about a visit. Not a rule violation: genuine = A real customer describing a bad experience; harsh = Harsh, exaggerated or unfair, but based on a real visit; old = Old, and the business has changed since; star-only = A low star rating with no text, from a real customer. Also happening: extortion = Someone demanded money or a favor to remove, or not post, reviews.
  - `evidence` object: Can you show it? Only for selected items that need proof: yes = the owner has it now, not-yet = not yet. A missing answer counts as not-yet. Items whose proof is the review text itself need no answer.
    - `conflict` 'yes' | 'not-yet': Proof: Employment dates and role (dates only, no HR file); The reviewer’s public profile showing the link to a competitor; Any detail only an insider would know; A dated screenshot of the review.
    - `incentivized` 'yes' | 'not-yet': Proof: The offer, listing or message that paid for reviews; Screenshots with dates; A dated screenshot of the review.
    - `burst` 'yes' | 'not-yet': Proof: Every review link with its date; Your record search for each reviewer name; Matching wording or naming patterns across accounts.
    - `duplicate` 'yes' | 'not-yet': Proof: Links to every copy of the text; A dated screenshot of the review.
    - `impersonation` 'yes' | 'not-yet': Proof: A statement from the person or organization named, saying they did not post it; A dated screenshot of the review.
    - `accusation` 'yes' | 'not-yet': Proof: Documents showing the allegation has no basis; The exact words, quoted.
    - `false-claims` 'yes' | 'not-yet': Proof: Documents that contradict the specific claim (price lists, invoices, logs); The exact words, quoted.
  - `false_facts` 'no' | 'docs' | 'no-docs': Does it state specific facts about your business that are false? no = No, it is opinion or a real experience; docs = Yes, and I have documents that prove it; no-docs = Yes, but no documents yet.
  - `status` 'not-reported' | 'pending' | 'no-violation' | 'escalated' | 'appeal-denied' | 'removed': Where are you in the process? not-reported = Not reported yet; pending = Decision pending; no-violation = Report reviewed - no policy violation; escalated = Escalated - check your email for updates; appeal-denied = Appeal decided, review still up; removed = Removed.
  - `client` string: Optional: the agent’s name, used only to attribute an order to it.

## Response `200`

The checker result

- object: Fields every checker returns. Each checker adds its own (verdict, score, rules, plan); its description lists them.
  - `object` 'checker_result'
  - `checker` string: The MCP tool name.
  - `checked` string, date: The day the official pages behind the rules were read.
  - `status` 'complete' | 'needs_answers'
  - `summary` string
  - `needs` object[]: With status needs_answers: the questions still to ask, with their allowed answers.
    - `field` string
    - `question` string
    - `options` object[]
      - `id` string
      - `label` string
  - `do_it_yourself` object: What the person can do themselves, for free, through the official channels.
  - `service` object, nullable: The matching Essentras service, priced from the same constants as the website. Null where the website offers no paid service for this result.
    - `name` string
    - `url` string, uri
    - `start_url` string, uri, nullable: Where the buyer reviews the service and pays. This API takes no payment.
    - `price` object
      - `currency` 'USD'
      - `amount` number, nullable: The amount charged, or the starting amount for a ladder. Null when priced per case.
      - `label` string
      - `basis` 'flat' | 'from' | 'per_case'
      - `tiers` object[]
    - `terms` string, nullable
    - `note` string, nullable
    - `offered_as` 'main_next_step' | 'alternative_to_diy'
  - `free_tool` object
    - `name` string
    - `url` string, uri
  - `sources` object[]: Official pages behind the answer, with the day each was read.
  - `warnings` string[]: Input fields that were ignored or renamed.
  - `privacy` string

## Other responses

- `400`: Input the checker could not read; details lists each problem and the allowed values
- `429`: Rate limited

---

[API](https://skmtc.dev/essentras/apis/essentras-agent-api.md) · [All operations](https://skmtc.dev/essentras/apis/essentras-agent-api/llms.txt) · [OpenAPI document](https://skmtc.dev/essentras/apis/essentras-agent-api/revisions/17a4d739e1b1?raw)
