# eBay Reviews & Seller Feedback Scraper (`epicscrapers/ebay-reviews-scraper`) Actor

Scrape eBay product reviews by product, item or EPID and seller feedback by username, store or item. Star rating, positive/neutral/negative, period and keyword filters. 17 eBay marketplaces.

- **URL**: https://apify.com/epicscrapers/ebay-reviews-scraper.md
- **Developed by:** [Epic Scrapers](https://apify.com/epicscrapers) (community)
- **Categories:** E-commerce, AI, Automation
- **Stats:** 1 total users, 1 monthly users, 92.9% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.60 / 1,000 review or feedback saveds

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

### eBay Reviews & Seller Feedback Scraper: product reviews and seller feedback from 17 eBay sites

eBay Reviews & Seller Feedback Scraper exports two kinds of eBay ratings: **product reviews** (star ratings and written reviews of an eBay catalog product) and **seller feedback** (the positive, neutral and negative ratings buyers leave for a seller). Paste product, item, profile or store URLs, item IDs, EPIDs or usernames, pick filters, and get one clean row per review or feedback entry. Use it for product research, competitor and supplier checks, sentiment analysis, or to monitor what buyers say about your own shop.

- **Reviews and feedback in one Actor.** Product pages give product reviews, sellers and stores give feedback, and an item URL gives either or both.
- **Filters on both.** Star ratings, verified purchases and keyword for reviews; positive/neutral/negative, period, photos, keyword and eBay's automated feedback for sellers.
- **Every side of a feedback profile.** Feedback a member received as a seller (default), received as a buyer, both, or left for others.
- **Seller replies included.** Feedback rows carry the seller's public response and any follow-ups.
- **17 marketplaces.** ebay.com, ebay.co.uk, ebay.de, ebay.fr, ebay.it, ebay.es, ebay.ca, ebay.com.au, ebay.nl, ebay.at, ebay.ch, ebay.ie, ebay.pl, ebay.com.hk, ebay.com.my, ebay.ph and ebay.com.sg.
- **Only what eBay shows publicly.** Names appear exactly as eBay prints them: buyers masked (`d***s`), sellers in full.
- **A run summary you can check.** The `RUN_SUMMARY` record lists per source the product or seller found, the totals eBay reported, rows saved, rows filtered out and errors.

### What can you do with it?

| Goal                               | How                                                                                                               |
| ---------------------------------- | ----------------------------------------------------------------------------------------------------------------- |
| Find the weak points of a product  | Add the product URL, set **Star ratings** to 1 and 2 stars and **Sort** to lowest rating.                         |
| Check a supplier before you buy    | Add the seller's profile or store URL, set **Feedback ratings** to negative and **Feedback period** to 12 months. |
| Compare a product across countries | Add the same product on ebay.com, ebay.co.uk and ebay.de: each site returns the reviews written there.            |
| Monitor your own shop              | Schedule a run on your username with **Sort feedback by** newest and **Feedback period** last month.              |
| Collect review text for analysis   | Add many product URLs, keep **Verified purchases only** on and export to CSV or JSON.                             |

### Quick start

1. Click **Try for free** and sign in to Apify.
2. Paste an eBay product URL and a seller username into **eBay URLs, IDs or usernames**.
3. Keep **Max items per source** at `100` for a first run.
4. Click **Start**, then open the **Output** tab and export the data.

```json
{
    "startUrls": ["https://www.ebay.com/p/4062765295", "https://www.ebay.com/usr/recelle_69"],
    "maxItemsPerSource": 100
}
```

### What you can put in

| Input                                                                 | Gives                                                                                                                        |
| --------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------- |
| Product URL `ebay.com/p/4062765295` or `/p/<name>/<epid>`             | Product reviews                                                                                                              |
| Product review URL `ebay.com/urw/<name>/product-reviews/<epid>`       | Product reviews                                                                                                              |
| EPID `4062765295` or `epid:4062765295`                                | Product reviews                                                                                                              |
| Item URL `ebay.com/itm/365888322068` or item ID (12 digits, `item:…`) | Product reviews of the item's catalog product; the seller's feedback if it has none (or both with **What to scrape** = Both) |
| Username `recelle_69`, profile URL `/usr/name`, feedback profile URL  | Seller feedback                                                                                                              |
| Store URL `ebay.com/str/<store name>`                                 | Seller feedback of the store owner                                                                                           |

A URL's own site (ebay.de, ebay.co.uk, ...) wins over the **Marketplace** setting, which only applies to plain IDs and usernames.

### What data do you get?

Every row is one product review or one feedback entry. Both types share one set of columns; fields that don't apply are `null`.

| Group             | Fields                                                                                                                                              |
| ----------------- | --------------------------------------------------------------------------------------------------------------------------------------------------- |
| Entry             | `type` (`productReview` or `sellerFeedback`), `id`, `rating` (1–5 stars), `feedbackRating` (positive/neutral/negative), `title`, `text`, `language` |
| Author            | `author`, `authorFeedbackScore`, `recipient`, `feedbackRole`, `isAutomated`, `isVerifiedPurchase`                                                   |
| Time              | `date`, `editedDate` (reviews), `dateText`, `period` (feedback)                                                                                     |
| Engagement        | `helpfulVotes`, `totalVotes` (reviews), `sellerResponse`, `replies`, `imageUrls` (feedback)                                                         |
| Item              | `itemId`, `itemTitle`, `itemUrl`, `itemPrice` (feedback), `itemCondition`, `itemImageUrl` (reviews)                                                 |
| Seller and member | `sellerUsername` (seller in the transaction), `memberUsername`, `memberFeedbackScore`, `memberPositivePercent` (the profile scraped)                |
| Product           | `productId` (EPID), `productTitle`, `productUrl`, `productAverageRating`, `productReviewCount`, `reviewedOn`                                        |
| Source            | `site`, `source`, `sourceType`, `scrapedAt`                                                                                                         |

The dataset has three views: **Overview**, **Product reviews** and **Seller feedback**.

#### Notes on fields

- **Feedback has no exact date.** eBay shows only a time bucket ("Past month", "Past 6 months", "Past year", "More than a year ago"). `dateText` is that text in the site language, `period` the same bucket as `pastMonth`, `past6Months`, `pastYear` or `olderThanYear`.
- **Names.** Product reviewers appear with the username eBay prints under the review. In feedback eBay masks buyers (`r***o`) and shows sellers in full; eBay's automated feedback has no author (`isAutomated: true`).
- **Feedback type.** `feedbackRole` is `receivedAsSeller` (a buyer rated the member), `receivedAsBuyer` (a seller rated the member) or `leftForOthers` (the member rated someone). `author` wrote it, `recipient` received it, and `sellerUsername` is the seller in that transaction. eBay shows no item for feedback received as a buyer.
- **Product reviews depend on the site.** eBay returns the reviews written on that marketplace, sometimes mixed with reviews from related sites; `reviewedOn` says where each review was written. Seller feedback is the same on every site; only labels, links and prices change.
- **Items in feedback.** For feedback older than about 90 days eBay prints the item ID in the title instead of linking it; the Actor still fills `itemId` and builds `itemUrl`.
- **`sellerResponse`** is the reply written by the seller. `replies` lists every reply or follow-up eBay shows under the entry.
- **Product reviews have no seller responses or photos** on eBay, so these stay empty for reviews.

### Input reference

| Field                      | Default            | Effect                                                                                                                                  |
| -------------------------- | ------------------ | --------------------------------------------------------------------------------------------------------------------------------------- |
| `startUrls`                | —                  | URLs, IDs or usernames, one per line (see above).                                                                                       |
| `mode`                     | `auto`             | `auto`, `productReviews`, `sellerFeedback` or `both`. Sources that have nothing to fetch in the chosen mode are skipped with a warning. |
| `site`                     | `ebay.com`         | Marketplace for plain IDs and usernames.                                                                                                |
| `maxItemsPerSource`        | `100`              | Most rows per input line and type. `0` = no limit.                                                                                      |
| `maxItems`                 | `0`                | Stop the run after this many rows in total. `0` = no limit.                                                                             |
| `reviewSort`               | relevance          | `relevance`, `newest`, `oldest`, `highestRating`, `lowestRating` or `mostHelpful`.                                                      |
| `reviewStarRatings`        | all                | Keep only these star ratings (`"1"` … `"5"`).                                                                                           |
| `verifiedPurchasesOnly`    | `false`            | Keep only verified purchase reviews.                                                                                                    |
| `reviewKeyword`            | empty              | eBay's review search: keep reviews that mention this text.                                                                              |
| `feedbackRole`             | `receivedAsSeller` | `receivedAsSeller`, `receivedAsBuyer`, `allReceived` (both) or `leftForOthers`.                                                         |
| `feedbackRatings`          | all                | Keep only `positive`, `neutral` and/or `negative` feedback.                                                                             |
| `feedbackPeriod`           | `all`              | `all`, `1m`, `6m` or `12m`.                                                                                                             |
| `feedbackSort`             | `newest`           | `newest` or `relevance`.                                                                                                                |
| `includeAutomatedFeedback` | `false`            | Include the positive feedback eBay leaves automatically when a buyer leaves none.                                                       |
| `feedbackWithPhotosOnly`   | `false`            | Keep only feedback with buyer photos.                                                                                                   |
| `feedbackKeyword`          | empty              | eBay's feedback search by item title word or item ID (last 5 years; ignores the period).                                                |
| `proxyConfiguration`       | Residential        | Apify Residential proxy in the marketplace's country.                                                                                   |

#### Filters and speed

- eBay filters feedback by rating only together with a period. **Feedback ratings + a period of 1, 6 or 12 months** is fast: eBay returns only the matching entries. With **All time** the Actor reads every entry and keeps the matching ones, which takes longer for big sellers.
- With several feedback ratings and a period, the Actor fetches one rating after the other, and **Max items per source** counts across them (per feedback type).
- eBay has no star rating filter for reviews, so the Actor reads reviews and keeps the matching ones. Sort by **Lowest rating** or **Highest rating** and the run stops as soon as no more matches can follow.

### Ready-to-run examples

#### Critical reviews of a product

```json
{
    "startUrls": ["https://www.ebay.com/p/4062765295"],
    "reviewSort": "lowestRating",
    "reviewStarRatings": ["1", "2"],
    "maxItemsPerSource": 200
}
```

#### Negative and neutral feedback of a seller in the last 12 months

```json
{
    "startUrls": ["https://www.ebay.co.uk/usr/recelle_69"],
    "feedbackRatings": ["negative", "neutral"],
    "feedbackPeriod": "12m",
    "maxItemsPerSource": 500
}
```

#### Product reviews and seller feedback for a listing

```json
{
    "startUrls": ["https://www.ebay.com/itm/820095821635"],
    "mode": "both",
    "maxItemsPerSource": 50
}
```

### Output examples

Real rows from runs on October 3, 2026 (texts shortened).

A product review:

```json
{
    "type": "productReview",
    "id": "10000000333186858",
    "site": "ebay.com",
    "source": "https://www.ebay.com/p/4062765295",
    "sourceType": "product",
    "rating": 4,
    "feedbackRating": null,
    "title": "Second gen far better than first gen",
    "text": "Had first gen since, I don’t know when. Battery was finally giving out. ...",
    "language": "en",
    "author": "cooknaked",
    "isAutomated": false,
    "date": "2026-05-14T21:47:04Z",
    "isVerifiedPurchase": true,
    "helpfulVotes": 0,
    "totalVotes": 0,
    "reviewedOn": "EBAY_US",
    "itemId": "117174184506",
    "itemTitle": "Apple AirPods Pro 2nd Generation with MagSafe Wireless Charging Case (USB‑C)...",
    "itemUrl": "https://www.ebay.com/itm/117174184506",
    "itemCondition": "Pre-Owned",
    "sellerUsername": "adreplica",
    "productId": "4062765295",
    "productUrl": "https://www.ebay.com/p/4062765295",
    "productAverageRating": 4.16,
    "productReviewCount": 355,
    "scrapedAt": "2026-10-03T11:58:37.448Z"
}
```

A seller feedback entry:

```json
{
    "type": "sellerFeedback",
    "id": "2686663823015",
    "site": "ebay.co.uk",
    "source": "https://www.ebay.co.uk/usr/recelle_69",
    "sourceType": "seller",
    "rating": null,
    "feedbackRating": "negative",
    "text": "Earbud won't pair with my other bud. Waste of 30 dollars.",
    "feedbackRole": "receivedAsSeller",
    "author": "a***a",
    "authorFeedbackScore": 242,
    "recipient": "recelle_69",
    "isAutomated": false,
    "dateText": "Past year",
    "period": "pastYear",
    "isVerifiedPurchase": true,
    "sellerResponse": null,
    "replies": [],
    "imageUrls": [],
    "itemId": "365811594637",
    "itemTitle": "Samsung Galaxy Buds2 Pro Right Ear Replacement (SM-R510)",
    "itemUrl": "https://www.ebay.co.uk/itm/365811594637",
    "itemPrice": "US $24.99",
    "sellerUsername": "recelle_69",
    "memberUsername": "recelle_69",
    "memberFeedbackScore": 11921,
    "memberPositivePercent": 99.6,
    "scrapedAt": "2026-10-03T12:02:24.379Z"
}
```

The run also writes `RUN_SUMMARY` to the key-value store: `itemsSaved`, `productReviewsSaved`, `sellerFeedbackSaved`, `requests`, `filteredOut` (`starRating`, `unverifiedPurchase`, `feedbackRating`), `errors`, `invalidSources`, `skippedSources`, one entry per source in `sources` (resolved `productId` or `memberUsername`, `productReviewTotal`, `feedbackTotals` per feedback type, rows saved, `notes`, `error`), and `stopReason` (`allSourcesDone`, `finishedWithErrors`, `maxItemsReached`, `chargeLimitReached`, `blocked`, `noValidSources` or `aborted`).

### Pricing

You pay per saved row: **$0.90 per 1,000 reviews or feedback entries** on the free plan, $0.80 on Bronze, $0.70 on Silver and $0.60 on Gold and above, plus $0.00005 per run start. Platform usage and the residential proxy are included. Rows your filters remove, store lookups and `RUN_SUMMARY` cost nothing. Set a spending limit on the run and the Actor stops cleanly when it is reached (`stopReason: "chargeLimitReached"`).

### Limits

- Items that are not linked to an eBay catalog product have no product reviews; in `auto` mode the Actor then scrapes the seller's feedback.
- A store URL is resolved to the seller through eBay search and an item page. Stores without active listings can't be resolved; use the seller's username instead.
- eBay can hide some old feedback, so a seller's feedback list may end before the total eBay prints.
- Private feedback profiles and unknown usernames return no rows and are reported in `RUN_SUMMARY`.

### FAQ

**Is it legal to scrape eBay reviews and feedback?** The Actor collects only data that eBay shows publicly to every visitor and keeps buyer names masked as eBay does. Check eBay's terms and the data protection rules that apply to you before using the data, especially if you store author names.

**Why are there fewer reviews than eBay says?** `productReviewCount` is eBay's total for the product. Your filters, the per-source limit, or reviews eBay counts but doesn't list can make the saved number smaller. `RUN_SUMMARY` shows how many rows each filter removed.

**Can I get feedback a member received as a buyer or left for others?** Yes: set **Feedback type** to received as buyer, all received, or left for others. **Max items per source** applies to each type separately.

**Do I need a proxy?** The default Apify Residential proxy in the marketplace's country is recommended; eBay may block requests without it.

# Actor input Schema

## `startUrls` (type: `array`):

What to scrape, one per line. Product reviews: product URLs (`ebay.com/p/4062765295`), product review URLs (`/urw/.../product-reviews/...`), item URLs (`ebay.com/itm/...`) or IDs (a 12-digit number is an item ID, any other number an EPID; force it with `epid:` or `item:`). Seller feedback: usernames, profile URLs (`/usr/name`), feedback profile URLs (`/fdbk/feedback_profile/name`), store URLs (`/str/name`) or item URLs. The site of a URL wins over the Marketplace setting.

## `mode` (type: `string`):

Auto: products give product reviews, sellers and stores give seller feedback, items give product reviews when the item belongs to an eBay catalog product and the seller's feedback otherwise. The other modes force one type for items, or both.

## `site` (type: `string`):

eBay site for plain IDs and usernames. Product reviews depend on the site (eBay shows the reviews written on that marketplace, sometimes with reviews from related sites mixed in). Seller feedback is the same everywhere, but labels, item links and prices follow the site.

## `maxItemsPerSource` (type: `integer`):

Most reviews or feedback entries to save per input line and type. 0 means no limit.

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

Stop the run after this many saved items across all sources. 0 means no limit.

## `reviewSort` (type: `string`):

Order in which eBay returns product reviews.

## `reviewStarRatings` (type: `array`):

Keep only reviews with these star ratings. Empty keeps all. eBay has no rating filter for reviews, so the Actor reads all reviews and filters them; sort by highest or lowest rating to stop early.

## `verifiedPurchasesOnly` (type: `boolean`):

Keep only reviews eBay marks as verified purchases.

## `reviewKeyword` (type: `string`):

Keep only reviews that mention this word or phrase (eBay's own review search).

## `feedbackRole` (type: `string`):

Which feedback of the member to scrape: received as a seller (from buyers), received as a buyer (from sellers), both, or the feedback the member left for others. Feedback from sellers names the seller unmasked and has no item details on eBay.

## `feedbackRatings` (type: `array`):

Keep only positive, neutral or negative feedback. Empty keeps all. Combined with a period, eBay filters on its side (fast); with the period "All time" the Actor reads all feedback and filters it.

## `feedbackPeriod` (type: `string`):

Only feedback left within this period.

## `feedbackSort` (type: `string`):

Order in which eBay returns feedback.

## `includeAutomatedFeedback` (type: `boolean`):

eBay leaves automated positive feedback ("Order delivered on time with no issues") when a buyer leaves none. Off by default because it carries no buyer text.

## `feedbackWithPhotosOnly` (type: `boolean`):

Keep only feedback where the buyer added photos.

## `feedbackKeyword` (type: `string`):

eBay's feedback search: an item title word or an item ID. eBay searches the last 5 years and cannot combine this with a period or rating filter (ratings are then filtered by the Actor; the period is ignored).

## `proxyConfiguration` (type: `object`):

Apify Residential proxy in the marketplace's country is recommended. Without a proxy eBay may block the run.

## Actor input object example

```json
{
  "startUrls": [
    "https://www.ebay.com/p/4062765295",
    "https://www.ebay.com/usr/recelle_69"
  ],
  "mode": "auto",
  "site": "ebay.com",
  "maxItemsPerSource": 100,
  "maxItems": 0,
  "reviewSort": "relevance",
  "reviewStarRatings": [],
  "verifiedPurchasesOnly": false,
  "reviewKeyword": "",
  "feedbackRole": "receivedAsSeller",
  "feedbackRatings": [],
  "feedbackPeriod": "all",
  "feedbackSort": "newest",
  "includeAutomatedFeedback": false,
  "feedbackWithPhotosOnly": false,
  "feedbackKeyword": "",
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}
```

# Actor output Schema

## `results` (type: `string`):

One row per product review or seller feedback entry.

## `summary` (type: `string`):

Items saved per source, product and feedback totals eBay reported, requests, rows filtered out, errors and why the run stopped.

# 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 = {
    "startUrls": [
        "https://www.ebay.com/p/4062765295",
        "https://www.ebay.com/usr/recelle_69"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("epicscrapers/ebay-reviews-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 = { "startUrls": [
        "https://www.ebay.com/p/4062765295",
        "https://www.ebay.com/usr/recelle_69",
    ] }

# Run the Actor and wait for it to finish
run = client.actor("epicscrapers/ebay-reviews-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 '{
  "startUrls": [
    "https://www.ebay.com/p/4062765295",
    "https://www.ebay.com/usr/recelle_69"
  ]
}' |
apify call epicscrapers/ebay-reviews-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,epicscrapers/ebay-reviews-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/SwnZGNLeFxTYUSwRp/builds/mg0OYjq1GmgGrG5MX/openapi.json
