# Etsy & eBay Listing Policy & Banned Item Checker (`ultimatemc/etsy-ebay-listing-policy-checker`) Actor

Check Etsy and eBay listings for policy problems before you publish. For sellers, VAs and listing tools. Flags prohibited items, counterfeit or 'inspired by' wording, character IP, medical claims and off-platform contact, with severity per marketplace, the exact words, policy link and fix.

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

## Pricing

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

**Etsy & eBay Listing Policy Checker** scans your listing **titles, descriptions and tags** for **possible policy problems before you publish**: prohibited and restricted items, counterfeit and "inspired by" wording, character and celebrity IP, medical claims, off-platform contact and keyword spam. For each issue you get its severity **on Etsy and on eBay separately**, the exact words that triggered it, a link to the marketplace's public policy page, and a plain-English fix. Click **Start** with the prefilled example to see a result in a few seconds.

> **A pre-check, not a marketplace decision.** This is a fixed, rule-based text checker built from Etsy's and eBay's public policy pages. A flag means "review this"; a clean result does **not** guarantee a listing stays up. Photos, category, item specifics, your location and local laws also matter. Not legal advice, and not affiliated with Etsy or eBay.

### What does Etsy & eBay Listing Policy Checker do?

- ✅ Checks listings against **30 policy rules**, each with its own Etsy and eBay severity and policy link
- ✅ Catches **counterfeit and IP risk**: "Gucci inspired", "dupe", "replica", "not Adidas", "fits Pandora", plus a curated list of 59 brands and 53 characters (character IP is raised when sold as SVG, PNG, cut or print files)
- ✅ Flags **off-platform contact and payment**: emails, "message me on Instagram", Venmo or Zelle, outside links
- ✅ Flags **medical and health claims**: "cures anxiety", "heals eczema", "FDA approved", "EMF protection"
- ✅ Flags **prohibited and restricted items**: drugs and CBD, alcohol, vapes, weapons and knives, hazardous materials, recalled children's products, animal products, human remains, hate symbols, falsified documents, raffles and gift cards
- ✅ Runs **format checks**: eBay titles over 80 characters, Etsy titles over 140, more than 13 Etsy tags or tags over 20 characters, "L@@K", repeated keywords
- ✅ Avoids common false-positive traps: ivory as a color, faux fur, chef knives, spent shell casings, ammo-can decor, officially licensed items, hemp twine, wine glasses
- ✅ Returns `riskLevel`, `riskByMarketplace`, `categoriesFlagged`, and per issue `category`, `severity`, `field`, `quote`, `context`, per-marketplace `policyUrl` and `rewriteHint`

### Who is it for?

- 🛍️ **Etsy and eBay sellers** who want to avoid removed listings, strikes and suspensions
- 👩‍💻 **VAs, listing services and AI listing generators** that write many listings and need a policy gate
- 🔁 **Cross-listers**: the two marketplaces treat the same words differently (real fur is prohibited on Etsy but not on eBay)
- 🔍 **Marketplace consultants** auditing a shop before an account review

### How to check Etsy and eBay listings for policy issues

1. Click **Try for free** or **Start**. The input is prefilled with two example listings.
2. Replace them with your own listings in **Listings** (`title`, `description`, `tags`, `marketplace`), or paste titles into **Titles**.
3. Pick the **Marketplaces** to check (Etsy, eBay or both).
4. Click **Start**. Each listing becomes one row in the results table.
5. Download the results or fetch them through the API.

### Input example

This is the prefilled input:

```json
{
  "listings": [
    {
      "id": "l1",
      "title": "Lavender Soap Bar, Gucci inspired gift box",
      "description": "Cures anxiety and eczema. Message me on Instagram for 10% off.",
      "tags": [
        "lavender soap",
        "designer dupe"
      ],
      "marketplace": [
        "etsy",
        "ebay"
      ]
    },
    {
      "id": "l2",
      "title": "Ivory lace wedding veil, cathedral length",
      "description": "Soft ivory tulle with faux fur trim. Ships in 3 days.",
      "tags": [
        "ivory veil",
        "boho wedding"
      ]
    }
  ]
}
```

Quick title check, Etsy only:

```json
{
  "titles": [
    "OTF automatic knife, black",
    "Mickey Mouse SVG bundle for Cricut",
    "Handmade ceramic coffee mug"
  ],
  "marketplaces": [
    "etsy"
  ]
}
```

From the dataset of an Etsy or eBay scraper or your own export (title, description and tags are detected automatically; `fieldMap` is optional):

```json
{
  "datasetId": "YOUR_ETSY_OR_EBAY_SCRAPER_DATASET_ID",
  "fieldMap": {
    "title": "listingTitle",
    "tags": "keywords"
  },
  "marketplaces": [
    "etsy",
    "ebay"
  ]
}
```

### Output example

This is real output from the prefilled input above (run on 2026-10-21), not trimmed:

```json
[
  {
    "listingId": "l1",
    "url": null,
    "title": "Lavender Soap Bar, Gucci inspired gift box",
    "marketplacesChecked": [
      "etsy",
      "ebay"
    ],
    "riskLevel": "high",
    "riskByMarketplace": {
      "etsy": "high",
      "ebay": "high"
    },
    "issueCount": 3,
    "categoriesFlagged": [
      "Counterfeit, brand comparison & IP",
      "Medical / health claims",
      "Off-platform contact, payment or links"
    ],
    "issues": [
      {
        "ruleId": "counterfeit_or_inspired",
        "category": "Counterfeit, brand comparison & IP",
        "severity": "high",
        "field": "title",
        "quote": "Gucci inspired",
        "context": "Lavender Soap Bar, Gucci inspired gift box",
        "marketplaces": [
          {
            "marketplace": "etsy",
            "severity": "high",
            "policyUrl": "https://www.etsy.com/legal/policy/unauthorized-or-counterfeit-goods-policy/1500218520260"
          },
          {
            "marketplace": "ebay",
            "severity": "high",
            "policyUrl": "https://www.ebay.com/help/policies/prohibited-restricted-items/counterfeit-item-policy?id=4276"
          }
        ],
        "rewriteHint": "Replica/dupe/'inspired by'/'style' wording next to a brand or character is treated as counterfeit or infringing. Remove the brand name and describe your design in your own words (materials, shape, color)."
      },
      {
        "ruleId": "off_platform_contact",
        "category": "Off-platform contact, payment or links",
        "severity": "high",
        "field": "description",
        "quote": "Message me on Instagram",
        "context": "Cures anxiety and eczema. Message me on Instagram for 10% off.",
        "marketplaces": [
          {
            "marketplace": "etsy",
            "severity": "high",
            "policyUrl": "https://www.etsy.com/legal/policy/off-platform-transactions-policy/1254654515806"
          },
          {
            "marketplace": "ebay",
            "severity": "high",
            "policyUrl": "https://www.ebay.com/help/policies/payment-policies/offers-buy-sell-outside-ebay-policy?id=4272"
          }
        ],
        "rewriteHint": "Remove emails, phone numbers, outside payment methods, social handles and 'buy on my website' wording. Both marketplaces prohibit taking a sale off-platform, and buyers lose purchase protection."
      },
      {
        "ruleId": "medical_claims",
        "category": "Medical / health claims",
        "severity": "high",
        "field": "description",
        "quote": "Cures anxiety",
        "context": "Cures anxiety and eczema. Message me on Instagram for 10% ...",
        "marketplaces": [
          {
            "marketplace": "etsy",
            "severity": "high",
            "policyUrl": "https://www.etsy.com/legal/policy/medical-claims/239976157654"
          },
          {
            "marketplace": "ebay",
            "severity": "medium",
            "policyUrl": "https://www.ebay.com/help/policies/prohibited-restricted-items/medical-devices-policy?id=4322"
          }
        ],
        "rewriteHint": "Etsy prohibits items that claim to treat, prevent, cure or diagnose a condition; eBay restricts medical devices and unsubstantiated health claims. Describe materials and use ('soothing scent', 'for relaxation') without disease or cure claims."
      }
    ],
    "disclaimer": "Automated text pre-check based on Etsy's and eBay's public policies. Flags are possible issues, not marketplace decisions; a clean result does not guarantee a listing stays up. Photos, item specifics, category, your location and local law also matter. Not legal advice."
  },
  {
    "listingId": "l2",
    "url": null,
    "title": "Ivory lace wedding veil, cathedral length",
    "marketplacesChecked": [
      "etsy",
      "ebay"
    ],
    "riskLevel": "none found",
    "riskByMarketplace": {
      "etsy": "none found",
      "ebay": "none found"
    },
    "issueCount": 0,
    "categoriesFlagged": [],
    "issues": [],
    "disclaimer": "Automated text pre-check based on Etsy's and eBay's public policies. Flags are possible issues, not marketplace decisions; a clean result does not guarantee a listing stays up. Photos, item specifics, category, your location and local law also matter. Not legal advice."
  }
]
```

**Severity:** `high` = commonly prohibited, so the listing is likely to be removed and the account put at risk. `medium` = restricted or depends on context (conditions, licensing, category or wording). `low` = a weak signal or a format issue. `riskLevel` is the highest severity found.

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

This Actor uses **pay-per-event** pricing:

- **$0.01 per listing** (one result row per listing)
- a tiny Actor start fee of **$0.00005** per run
- plus the small Apify **platform usage** of the run, paid by you. For the prefilled 2-listing example this was about **$0.0001** (256 MB, about 2 seconds).

So **100 listings cost about $1.00** and **1,000 listings about $10**, plus a few cents or less of platform usage. You pay only for listings actually checked. Apify lets you set a maximum cost per run so a large batch can never exceed your budget.

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

- **API:** run it and get results in one call:
  `POST https://api.apify.com/v2/acts/ultimatemc~etsy-ebay-listing-policy-checker/run-sync-get-dataset-items` with your Apify token and the input JSON as the body. Client libraries for JavaScript and Python are on the **API** tab.
- **AI agents (MCP):** add `https://mcp.apify.com?tools=ultimatemc/etsy-ebay-listing-policy-checker` to Claude, Cursor, ChatGPT or any MCP client, and your agent can check a listing for policy problems before posting it as a tool. See [Apify MCP server](https://docs.apify.com/mcp).
- **Chain it after a scraper:** pass the `datasetId` of another Actor's run, or trigger this Actor with a webhook when the scraper finishes.
- **Automation:** schedule runs, trigger webhooks, or connect Make, Zapier, n8n, Google Sheets and other integrations from Apify Console.

### FAQ

#### Does a clean result guarantee my listing won't be removed?

No. It means none of the rules matched the text. Etsy and eBay also review photos, category, item specifics and reports, and make the final decision.

#### Can it tell whether my item is genuine or licensed?

No. It reads wording only. It can't verify authenticity, licenses or permissions. "Officially licensed" wording lowers character flags, but you still need the license.

#### Does it use AI?

No. It's rule-based (keywords and patterns), so results are repeatable and every flag links to a policy page. No text is sent to any outside service.

#### Which languages and countries are supported?

English text. Rules follow the public U.S. versions of Etsy's and eBay's policies; local rules differ.

#### How current are the rules?

They are our own paraphrased patterns written from the marketplaces' public policy pages, checked on 2026-10-21. Policies change, so always confirm on the linked page.

### Limitations

- Text only. It doesn't see photos, item specifics, category or price.
- English only, keyword-based. It can misread unusual wording, and the brand and character lists are curated, not complete: a brand that isn't on the list won't be flagged.
- Policies differ by country and change often.

### Data and privacy

The checker makes no network calls. Listing text is processed only during the run and saved only to your own Apify dataset.

### Other tools by Ultimate Foresight

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

Found a false positive or a missed phrase? Open an issue on the **Issues** tab with the listing text, and we'll review the rule.

# Actor input Schema

## `listings` (type: `array`):

Array of objects: {"id", "title", "description", "tags" (list or comma string), "marketplace": "etsy"|"ebay" (or a list)}.

## `titles` (type: `array`):

One listing title per entry.

## `marketplaces` (type: `array`):

Default marketplaces to check when a listing doesn't specify one.

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

Apify dataset with listing items (e.g. output of an Etsy or eBay scraper, or your own export). title/name, description, tags are detected automatically; override with Field map.

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

Override dataset field names, e.g. {"title": "listingTitle", "description": "body", "tags": "keywords"}.

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

Maximum number of listings to check in this run.

## Actor input object example

```json
{
  "listings": [
    {
      "id": "l1",
      "title": "Lavender Soap Bar, Gucci inspired gift box",
      "description": "Cures anxiety and eczema. Message me on Instagram for 10% off.",
      "tags": [
        "lavender soap",
        "designer dupe"
      ],
      "marketplace": [
        "etsy",
        "ebay"
      ]
    },
    {
      "id": "l2",
      "title": "Ivory lace wedding veil, cathedral length",
      "description": "Soft ivory tulle with faux fur trim. Ships in 3 days.",
      "tags": [
        "ivory veil",
        "boho wedding"
      ]
    }
  ],
  "marketplaces": [
    "etsy",
    "ebay"
  ],
  "maxItems": 1000
}
```

# 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 = {
    "listings": [
        {
            "id": "l1",
            "title": "Lavender Soap Bar, Gucci inspired gift box",
            "description": "Cures anxiety and eczema. Message me on Instagram for 10% off.",
            "tags": [
                "lavender soap",
                "designer dupe"
            ],
            "marketplace": [
                "etsy",
                "ebay"
            ]
        },
        {
            "id": "l2",
            "title": "Ivory lace wedding veil, cathedral length",
            "description": "Soft ivory tulle with faux fur trim. Ships in 3 days.",
            "tags": [
                "ivory veil",
                "boho wedding"
            ]
        }
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("ultimatemc/etsy-ebay-listing-policy-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 = { "listings": [
        {
            "id": "l1",
            "title": "Lavender Soap Bar, Gucci inspired gift box",
            "description": "Cures anxiety and eczema. Message me on Instagram for 10% off.",
            "tags": [
                "lavender soap",
                "designer dupe",
            ],
            "marketplace": [
                "etsy",
                "ebay",
            ],
        },
        {
            "id": "l2",
            "title": "Ivory lace wedding veil, cathedral length",
            "description": "Soft ivory tulle with faux fur trim. Ships in 3 days.",
            "tags": [
                "ivory veil",
                "boho wedding",
            ],
        },
    ] }

# Run the Actor and wait for it to finish
run = client.actor("ultimatemc/etsy-ebay-listing-policy-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 '{
  "listings": [
    {
      "id": "l1",
      "title": "Lavender Soap Bar, Gucci inspired gift box",
      "description": "Cures anxiety and eczema. Message me on Instagram for 10% off.",
      "tags": [
        "lavender soap",
        "designer dupe"
      ],
      "marketplace": [
        "etsy",
        "ebay"
      ]
    },
    {
      "id": "l2",
      "title": "Ivory lace wedding veil, cathedral length",
      "description": "Soft ivory tulle with faux fur trim. Ships in 3 days.",
      "tags": [
        "ivory veil",
        "boho wedding"
      ]
    }
  ]
}' |
apify call ultimatemc/etsy-ebay-listing-policy-checker --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,ultimatemc/etsy-ebay-listing-policy-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/VUeYW5RNOdyxirsKK/builds/ySVdI4M96fJDpdqf2/openapi.json
