# Ebay Seller Feedback Scraper (`crawlerbros/ebay-seller-feedback-scraper`) Actor

Scrape seller feedback and reviews from eBay seller feedback profile pages with rating, comment, item, price, buyer, verified-purchase status, and seller reputation stats (total feedback, positive %, Detailed Seller Ratings). Search by seller username or store URL.

- **URL**: https://apify.com/crawlerbros/ebay-seller-feedback-scraper.md
- **Developed by:** [Crawler Bros](https://apify.com/crawlerbros) (community)
- **Categories:**
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.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.
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?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.
Actors are written with capital "A".

## 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.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

## eBay Seller Feedback Scraper

Scrape **eBay** seller feedback and reviews straight from a seller's public feedback profile page — rating,
buyer comment, the item involved, price, verified-purchase status, and the seller's overall reputation stats
(total feedback count, positive feedback percentage, and eBay's 4 Detailed Seller Ratings categories). Look
sellers up by username or by their eBay store URL, and filter by positive, neutral, or negative feedback only.

### What You Can Scrape

- **Feedback rows** — rating (positive/neutral/negative), buyer comment, the item the feedback refers to,
  price, verified-purchase status, and the buyer's attached photo when they left one
- **Buyer info** — masked buyer username (eBay's own privacy format, e.g. "r\*\*\*7") and their own feedback count
- **Seller reputation stats** — total feedback count, 12-month positive feedback percentage, and eBay's 4
  Detailed Seller Ratings categories (accurate description, shipping cost, shipping speed, communication),
  each with its own star rating and number of ratings received
- **Filter by rating type** — positive, neutral, or negative only

### Input

| Field | Type | Default | Description |
|-------|------|---------|-------------|
| `sellerUsernames` | List | `["musicmagpie"]` | eBay seller usernames to fetch feedback for |
| `storeUrls` | List | — | Full eBay store URLs (`https://www.ebay.com/str/<seller>`) — resolved to the same seller automatically |
| `ratingType` | Select | `All` | Filter by rating: All, Positive, Neutral, Negative |
| `maxItems` | Integer | `25` | Maximum feedback rows to return, across all requested sellers combined |

At least one of `sellerUsernames` or `storeUrls` must be provided; if neither is given, the actor falls back to a
default seller so a run always produces real output.

Each seller is capped at roughly 500 feedback rows (20 pages) per run, regardless of `maxItems` — if a single
high-volume seller's feedback exceeds that, the run's logs and status message explain that the cap, not the end
of real data, is why fewer rows than requested came back.

### Output

Each record in the dataset contains:

| Field | Type | Description |
|-------|------|--------------|
| `feedbackId` | String | eBay's own identifier for this feedback entry |
| `sellerUsername` | String | The seller this feedback was left for |
| `rating` | String | `"positive"`, `"neutral"`, or `"negative"` |
| `comment` | String | The buyer's feedback comment |
| `itemTitle` | String | Title of the item the feedback refers to, when shown |
| `itemUrl` | String | Link to the item, when available |
| `itemImageUrl` | String | Photo the buyer attached to their feedback, when they left one |
| `buyerUsername` | String | The reviewer's username, in eBay's own masked format (e.g. "r\*\*\*7") |
| `buyerFeedbackCount` | Integer | The buyer's own total feedback count, when shown |
| `priceFormatted` | String | The item's price with currency code, e.g. "GBP 2.39" |
| `verifiedPurchase` | Boolean | `true` when eBay marks this as a verified purchase |
| `dateRange` | String | A relative time bucket for when the feedback was left, e.g. "Past 6 months" — eBay does not expose an exact date on this page |
| `sellerTotalFeedbackCount` | Integer | The seller's total feedback count across their entire eBay history |
| `sellerPositiveFeedbackPercent` | Float | The seller's positive feedback percentage over the last 12 months |
| `sellerDsrAccurateDescription` | Float | Seller's "Accurate description" Detailed Seller Rating, out of 5 |
| `sellerDsrAccurateDescriptionRatingsCount` | Integer | Number of ratings behind `sellerDsrAccurateDescription` |
| `sellerDsrReasonableShippingCost` | Float | Seller's "Reasonable shipping cost" Detailed Seller Rating, out of 5 |
| `sellerDsrReasonableShippingCostRatingsCount` | Integer | Number of ratings behind `sellerDsrReasonableShippingCost` |
| `sellerDsrShippingSpeed` | Float | Seller's "Shipping speed" Detailed Seller Rating, out of 5 |
| `sellerDsrShippingSpeedRatingsCount` | Integer | Number of ratings behind `sellerDsrShippingSpeed` |
| `sellerDsrCommunication` | Float | Seller's "Communication" Detailed Seller Rating, out of 5 |
| `sellerDsrCommunicationRatingsCount` | Integer | Number of ratings behind `sellerDsrCommunication` |
| `sourceUrl` | String | The seller feedback profile URL this record was scraped from |
| `scrapedAt` | String | ISO 8601 timestamp of when this record was extracted |

The `seller*` fields describe the seller's overall reputation, not this individual feedback entry — they're the
same across every record for a given seller in a given run, so you can also read them off any single record to
get a snapshot of that seller's standing.

Not every field appears on every listing — fields are only included when eBay actually shows them; nothing is
ever emitted as null or a placeholder value.

#### Example Output

```json
{
  "feedbackId": "2905112129019",
  "sellerUsername": "musicmagpie",
  "rating": "positive",
  "comment": "Item received 21 JulyTuesday and is as described, very good price and well packaged.",
  "itemTitle": "Boys Don't Cry DVD (2002) Hilary Swank, Peirce (DIR) cert 18 Fast and FREE P & P",
  "itemUrl": "https://www.ebay.com/itm/301779962726",
  "buyerUsername": "r***7",
  "priceFormatted": "GBP 2.39",
  "verifiedPurchase": true,
  "dateRange": "Past 6 months",
  "sellerTotalFeedbackCount": 21466885,
  "sellerPositiveFeedbackPercent": 99.1,
  "sellerDsrAccurateDescription": 4.9,
  "sellerDsrAccurateDescriptionRatingsCount": 290582,
  "sellerDsrReasonableShippingCost": 5.0,
  "sellerDsrReasonableShippingCostRatingsCount": 682400,
  "sellerDsrShippingSpeed": 4.9,
  "sellerDsrShippingSpeedRatingsCount": 344625,
  "sellerDsrCommunication": 5.0,
  "sellerDsrCommunicationRatingsCount": 607899,
  "sourceUrl": "https://www.ebay.com/fdbk/feedback_profile/musicmagpie",
  "scrapedAt": "2026-08-27T12:34:56.789012+00:00"
}
```

#### Example: check one seller's feedback and reputation

```json
{
  "sellerUsernames": ["musicmagpie"],
  "maxItems": 50
}
```

#### Example: audit negative and neutral feedback only

```json
{
  "sellerUsernames": ["musicmagpie"],
  "ratingType": "Negative",
  "maxItems": 100
}
```

#### Example: monitor multiple sellers in one run

```json
{
  "sellerUsernames": ["musicmagpie", "gamestop", "decluttr"],
  "maxItems": 150
}
```

#### Example: look a seller up by their store URL

```json
{
  "storeUrls": ["https://www.ebay.com/str/musicmagpie"],
  "ratingType": "Positive",
  "maxItems": 50
}
```

### Use cases

- **Seller reputation audits** — sellers checking their own feedback trend and Detailed Seller Ratings over time
- **Buyer due diligence** — review a seller's recent feedback and DSR breakdown before making a purchase
- **Competitive benchmarking** — compare feedback volume, positive-feedback percentage, and DSR scores across
  competing sellers in the same category
- **Complaint mining** — filter to negative/neutral feedback only to surface recurring issues (shipping delays,
  item-not-as-described, communication problems)
- **Marketplace analytics** — track how a seller's reputation and rating breakdown shift across repeated runs
- **Reputation-management lead generation** — identify sellers with declining ratings who may need help

### Data source

This actor scrapes eBay's own public seller feedback profile pages (`ebay.com/fdbk/feedback_profile/<seller>`)
— the same page anyone can view by clicking a seller's feedback score on eBay. No login or account of any kind
is required to view this data on eBay itself, and none is required to use this actor. This actor is not
affiliated with, endorsed by, or sponsored by eBay Inc.

### FAQ

**Q: Why is the buyer's username partially hidden (e.g. "r**\*7")?\*\*
A: eBay itself masks buyer usernames on the public feedback page for privacy — this actor reports exactly
what eBay shows, it does not (and cannot) unmask them.

**Q: Why is there no exact date, only "Past 6 months"?**
A: eBay's feedback page only shows a relative time range, not an exact date, for individual feedback entries.

**Q: Can I filter by store URL instead of username?**
A: Yes — `storeUrls` accepts full store URLs like `https://www.ebay.com/str/musicmagpie` and resolves them
to the same seller automatically. You can mix both `sellerUsernames` and `storeUrls` in the same run.

**Q: What happens if a seller doesn't exist or has no public feedback?**
A: That seller gets a clear error record explaining why, and the run continues with any other requested
sellers rather than failing the whole run.

**Q: Is this actor affiliated with eBay?**
A: No. This is an independent, third-party actor that reads eBay's own public seller feedback pages — it has
no affiliation with, endorsement from, or sponsorship by eBay Inc.

**Q: How fresh is the data?**
A: Every run fetches the feedback page live at request time — nothing is cached or pre-scraped. Each record's
`scrapedAt` timestamp records exactly when it was extracted.

**Q: Do I need to configure a proxy?**
A: No. eBay's feedback pages block ordinary datacenter traffic behind a JS challenge, so this actor
automatically routes every request through a residential-grade connection internally — there's nothing to set
up or configure.

**Q: Can I get a seller's overall reputation stats without pulling every individual feedback entry?**
A: The seller-level stats (`sellerTotalFeedbackCount`, `sellerPositiveFeedbackPercent`, and the 4 Detailed
Seller Ratings) are included on every returned record for that seller, so a `maxItems: 1` run against a single
seller is enough to get a full reputation snapshot.

**Q: Is there a limit on how much feedback I can pull for one seller?**
A: Yes — up to roughly 500 of the most recent feedback entries per seller per run (eBay's feedback pages are
paginated, and this actor caps how many pages it follows per seller). Run again later to pick up newer feedback.

# Actor input Schema

## `sellerUsernames` (type: `array`):

eBay seller usernames to fetch feedback for, e.g. "musicmagpie". At least one of sellerUsernames or storeUrls must be given.

## `storeUrls` (type: `array`):

Full eBay store URLs (https://www.ebay.com/str/<seller>) — resolved to the same seller's feedback page. Accepted as an alternative or supplement to sellerUsernames.

## `ratingType` (type: `string`):

Filter feedback rows by rating.

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

Maximum number of feedback rows to return, across all requested sellers combined.

## Actor input object example

```json
{
  "sellerUsernames": [
    "musicmagpie"
  ],
  "storeUrls": [],
  "ratingType": "All",
  "maxItems": 25
}
```

# Actor output Schema

## `feedback` (type: `string`):

Dataset containing all scraped feedback rows.

# 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 = {
    "sellerUsernames": [
        "musicmagpie"
    ],
    "storeUrls": [],
    "ratingType": "All",
    "maxItems": 25
};

// Run the Actor and wait for it to finish
const run = await client.actor("crawlerbros/ebay-seller-feedback-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 = {
    "sellerUsernames": ["musicmagpie"],
    "storeUrls": [],
    "ratingType": "All",
    "maxItems": 25,
}

# Run the Actor and wait for it to finish
run = client.actor("crawlerbros/ebay-seller-feedback-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 '{
  "sellerUsernames": [
    "musicmagpie"
  ],
  "storeUrls": [],
  "ratingType": "All",
  "maxItems": 25
}' |
apify call crawlerbros/ebay-seller-feedback-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,crawlerbros/ebay-seller-feedback-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/wadFX4aJ9TdCTGUeP/builds/FOJKjhT5w0iuxmETz/openapi.json
