# eBay Seller Feedback Scraper (`apt_marble/ebay-seller-feedback-scraper`) Actor

Look up any eBay seller's public reputation as structured data: every feedback comment with its positive, neutral or negative rating, the item and price paid, plus a summary with feedback score, 12-month positive share, detailed seller ratings, lifetime items sold and follower count.

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

## Pricing

from $1.00 / 1,000 feedback records

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

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

Look up any eBay seller's public reputation and turn it into a clean, structured dataset. Paste usernames, profile links or store links — mixed together is fine — and get back every public feedback comment with its own positive, neutral or negative rating, the item it was left for and the price paid, plus an at-a-glance seller summary: member-since date, location, Top Rated Seller badge, feedback score, 12-month positive share, the month-by-month feedback counts, the four detailed seller ratings, lifetime items sold and follower count. Built for anyone who sizes up eBay sellers at scale: buyers doing due diligence, marketplace analysts, brand-protection teams tracking resellers, and sellers benchmarking themselves against the competition.

### What you can do with it

- **Vet a seller before you buy or partner** — read their real feedback in one place: the comments, how recent they are, and how the positive/neutral/negative split has moved over the last year.
- **Benchmark competitors** — line up several sellers' feedback scores, 12-month positive percentages and detailed seller ratings side by side.
- **Track a reseller network** — feed in a list of usernames and pull each one's reputation on a schedule to watch it move over time.
- **Surface complaints** — collect the full run of comments and read the negatives and neutrals to see exactly what buyers grumble about.
- **Audit your own reputation** — export your entire feedback ledger with item links and prices paid, so you can answer disputes with the record in hand.
- **Build a seller-quality dataset** — combine identity, badges, the four detailed seller ratings and lifetime sales into one clean table for your own models.

### What you get

Two kinds of row. One row per feedback entry, and — when you leave the summary on — one summary row per seller.

A feedback entry:

```json
{
  "recordType": "feedback",
  "seller": "discountcomputerdepot",
  "role": "received_as_seller",
  "feedbackId": "8712345678",
  "rating": "positive",
  "comment": "Fast shipping, item exactly as described. Would buy again!",
  "itemId": "267641422789",
  "itemTitle": "Dell OptiPlex 7070 SFF Desktop i5 16GB 256GB SSD Win 11 Pro",
  "itemUrl": "https://www.ebay.com/itm/267641422789",
  "itemPrice": { "amount": 189.99, "currency": "USD", "raw": "US $189.99" },
  "buyerRole": "Buyer",
  "buyerMask": "d***r",
  "buyerFeedbackScore": 342,
  "verified": true,
  "date": "Past month",
  "feedbackProfileUrl": "https://www.ebay.com/fdbk/feedback_profile/discountcomputerdepot",
  "marketplace": "US",
  "scrapedAt": "2026-08-18T12:00:00.000Z"
}
```

A seller summary:

```json
{
  "recordType": "seller-summary",
  "seller": "discountcomputerdepot",
  "username": "discountcomputerdepot",
  "storeSlug": "discount-computer-depot",
  "storeUrl": "https://www.ebay.com/str/discount-computer-depot",
  "storeName": "Discount Computer Depot",
  "memberSince": "2009-03-14",
  "memberSinceRaw": "Mar 14, 2009",
  "location": "United States",
  "topRatedSeller": true,
  "feedbackScore": 128743,
  "positivePercent12mo": 99.4,
  "lifetimePositiveCount": 131502,
  "lifetimeNeutralCount": null,
  "lifetimeNegativeCount": 486,
  "counts": {
    "positive": { "month1": 412, "month6": 2680, "month12": 5231 },
    "neutral":  { "month1": 3,   "month6": 21,   "month12": 44 },
    "negative": { "month1": 1,   "month6": 9,    "month12": 18 }
  },
  "lifetimeItemsSoldText": "556K",
  "lifetimeItemsSoldEstimate": 556000,
  "followersText": "12.3K",
  "followersEstimate": 12300,
  "dsr": {
    "itemAsDescribed": { "avg": 4.9, "count": 4821 },
    "shippingCharges": { "avg": 5.0, "count": 4760 },
    "shippingTime":    { "avg": 4.9, "count": 4805 },
    "communication":   { "avg": 5.0, "count": 4788 }
  },
  "feedbackProfileUrl": "https://www.ebay.com/fdbk/feedback_profile/discountcomputerdepot",
  "marketplace": "US",
  "scrapedAt": "2026-08-18T12:00:00.000Z"
}
```

eBay publishes no lifetime neutral total, so `lifetimeNeutralCount` comes back empty on most profiles — that means "not published", never zero. The lifetime positive and negative totals are published and are returned.

### Input reference

| Setting | Type | Default | What it does |
| --- | --- | --- | --- |
| Sellers | list of text | — | The eBay sellers to look up. Usernames, profile links (`ebay.com/usr/...`) and store links (`ebay.com/str/...`) all work, mixed in one list. Duplicates are collapsed; entries with no usable seller name are reported and skipped. **Required.** Up to 500 per run. |
| Feedback to read | choice | Received as a seller | Which side of the member's ledger to read: feedback received as a seller (the reputation that matters for seller research), feedback received as a buyer, or feedback the member left for others. |
| Maximum feedback entries per seller | whole number | `200` | Stop after this many entries for each seller, newest first. Maximum 5,000. |
| Include seller profile summary | true/false | `true` | Also produce one summary row per seller: identity, Top Rated badge, store link, feedback score, 12-month positive share, month-by-month counts, the four detailed seller ratings, lifetime items sold and follower count. |
| eBay site | choice | United States (ebay.com) | Which country's eBay site to read. Feedback text, dates and prices paid follow that site's own language and currency. |
| Parallel sellers | whole number | `4` | How many sellers to work on at the same time. Higher is faster, but eBay serves fewer complete pages when pushed hard. Maximum 10. |

### Output fields

**Feedback entry** (`recordType: "feedback"`)

| Field | Type | Description |
| --- | --- | --- |
| `recordType` | text | Always `feedback` for these rows. |
| `seller` | text | The seller whose ledger this entry belongs to. |
| `role` | text | Which ledger it came from: received as a seller, received as a buyer, or left for others. |
| `feedbackId` | text | eBay's own identifier for the entry. |
| `rating` | text | `positive`, `neutral` or `negative`, taken from the entry's own mark. |
| `comment` | text | The feedback comment as written. |
| `itemId` | text | The item the feedback was left for, when it is still linked. |
| `itemTitle` | text | Title of that item. |
| `itemUrl` | text | Clean link to the item. |
| `itemPrice` | object | Price paid: `amount`, `currency` and the text exactly as shown. |
| `buyerRole` | text | Whether the other member was the buyer or the seller in that transaction. |
| `buyerMask` | text | The other member's name as eBay masks it, for example `d***r`. |
| `buyerFeedbackScore` | number | That member's own feedback score. |
| `verified` | true/false | Whether eBay marks it a verified purchase. |
| `date` | text | When eBay says the feedback was left, in eBay's own wording (for example "Past month"). |
| `feedbackProfileUrl` | text | Link to the profile the row came from. |
| `marketplace` | text | The eBay site the row was read from. |
| `scrapedAt` | text | When the row was collected. |

**Seller summary** (`recordType: "seller-summary"`)

| Field | Type | Description |
| --- | --- | --- |
| `recordType` | text | Always `seller-summary` for these rows. |
| `seller` / `username` | text | The member's username. |
| `storeSlug` / `storeUrl` / `storeName` | text | Their eBay Store, when they run one. Empty when they do not, or when the store page could not be read. |
| `memberSince` / `memberSinceRaw` | text | Join date as a plain date, plus eBay's original wording. |
| `location` | text | Where eBay lists the member. |
| `topRatedSeller` | true/false | Whether they carry the Top Rated Seller badge. |
| `feedbackScore` | number | The ± feedback score next to the username. This is **not** the number of items sold. |
| `positivePercent12mo` | number | Headline positive feedback share over the last 12 months. |
| `lifetimePositiveCount` / `lifetimeNegativeCount` | number | Lifetime positive and negative totals. |
| `lifetimeNeutralCount` | number | Lifetime neutral total when eBay publishes one; empty when it does not. |
| `counts` | object | Positive, neutral and negative entry counts for the last 1, 6 and 12 months. |
| `lifetimeItemsSoldEstimate` / `lifetimeItemsSoldText` | number, text | Lifetime items sold: the figure expanded from eBay's abbreviated display (for example "556K"), and that display text. A different, usually larger figure than the feedback score. |
| `followersEstimate` / `followersText` | number, text | Store followers, expanded and as displayed. |
| `dsr` | object | The four detailed seller ratings — item as described, shipping charges, shipping time and communication — each with its 12-month average and how many ratings it is based on. |
| `feedbackProfileUrl` | text | Link to the profile. |
| `marketplace` | text | The eBay site. |
| `scrapedAt` | text | When the row was collected. |

### Pricing

You pay per result, with no monthly minimum.

| What you are charged for | Price |
| --- | --- |
| Feedback record — one feedback entry added to your dataset | **$1.00 per 1,000** |
| Seller profile summary — one summary row per seller (identity, scores, month-by-month counts, detailed seller ratings, lifetime items sold and followers) | **$5.00 per 1,000** |

The summary charge applies once per seller, and only when the summary option is left on. Sellers eBay has no public feedback profile for are reported in the run summary and never charged.

**Worked example.** One seller, the default 200 feedback entries, summary on: 200 × $0.001 + 1 × $0.005 = **$0.205**. A due-diligence batch of 100 sellers at 200 entries each, all with summaries: 20,000 entries × $0.001 + 100 summaries × $0.005 = $20.00 + $0.50 = **$20.50**.

### Limits & what this actor cannot do

- Only the feedback eBay shows publicly on a member's profile is returned — that public profile is the ceiling. There is no hidden or private feedback behind it to reach.
- eBay dates each entry in relative wording ("Past month", "Past 6 months") rather than an exact day and time, so `date` carries eBay's own wording and no precise moment is invented.
- A seller has four different headline numbers and they are not interchangeable: the **feedback score** (the ± number by the name), the **lifetime items sold**, the **12-month positive percentage**, and their **current live inventory**. This actor returns the first three, each under its own field name; it does not read live inventory at all. If you need the current count of items a seller has listed, use the eBay Seller Inventory Monitor.
- eBay publishes no lifetime neutral total, so `lifetimeNeutralCount` comes back empty on most profiles. Empty there means "not published", never zero — the lifetime positive and negative totals are published and are returned.
- Every entry's rating is read from that entry's own mark, and positives, neutrals and negatives are returned together. eBay does not offer a negatives-only view, so filter by `rating` after the run.
- Buyers' names are shown masked by eBay (for example `d***r`); the full buyer identity is not published and is not returned.
- Reputation is a snapshot at the moment of collection and keeps changing afterwards — scores, percentages and counts all move.
- Members with no public feedback profile on the selected eBay site are reported as unavailable rather than returned as empty rows.
- Speed depends on the size of the job and on eBay's own response times; no fixed throughput is promised.
- eBay's terms govern automated access. You are responsible for using the data lawfully and in line with the source site's terms, and — because feedback comments are written by real members — for handling any personal data in line with applicable privacy law.

### FAQ

**Do I need an eBay account?**
No. The actor reads only what eBay shows the public on a member's feedback profile.

**Does it need my login or password?**
No. There is nothing to connect and nothing to fill in — paste the sellers and press start.

**Can I schedule it?**
Yes. Schedule it from the Apify console and each run writes a fresh dataset, so you can diff a seller's reputation against the previous run.

**Is the data complete?**
It is complete for everything eBay publishes openly on the feedback profile. Where eBay keeps something back — the exact date of an entry, a full buyer name, a lifetime neutral total, or a seller's current live inventory — the actor leaves it empty or points you to the right tool rather than guessing.

**Can I read only negative feedback?**
Not up front — eBay serves a mixed list whatever you ask for. The actor labels every entry positive, neutral or negative, so you filter down to the negatives after the run.

**What is the difference between the feedback score and items sold?**
The feedback score is the ± number next to the username; lifetime items sold is a separate, usually larger figure from the store header. They measure different things, and both are returned, under `feedbackScore` and `lifetimeItemsSoldEstimate`.

# Actor input Schema

## `sellers` (type: `array`):

The eBay sellers to collect. Paste usernames, profile links (ebay.com/usr/...) or store links (ebay.com/str/...) — mixed freely, up to 500 per run.

## `role` (type: `string`):

Which side of the member's feedback ledger to collect: feedback they received when selling (the reputation that matters for seller research), feedback they received when buying, or feedback they left for other members.

## `maxFeedbackPerSeller` (type: `integer`):

Stop after this many feedback entries for each seller (up to 5,000). Entries come newest first.

## `includeSellerSummary` (type: `boolean`):

Also produce one summary row per seller: member-since date, location, Top Rated badge, store link, feedback score, 12-month positive share, monthly feedback counts, detailed seller ratings, lifetime items sold and follower count.

## `marketplace` (type: `string`):

Which country's eBay site to read. Feedback text, dates and prices paid follow that site's own language and currency.

## `maxConcurrency` (type: `integer`):

How many sellers to work on at the same time. Higher is faster, but eBay serves fewer complete pages when pushed hard. Leave at 4 unless you have a reason.

## Actor input object example

```json
{
  "sellers": [
    "discountcomputerdepot"
  ],
  "role": "received_as_seller",
  "maxFeedbackPerSeller": 200,
  "includeSellerSummary": true,
  "marketplace": "US",
  "maxConcurrency": 4
}
```

# Actor output Schema

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

Every feedback entry and seller summary this run produced.

## `runSummary` (type: `string`):

What this run collected, and anything it could not read.

# 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 = {
    "sellers": [
        "discountcomputerdepot"
    ],
    "role": "received_as_seller",
    "maxFeedbackPerSeller": 200,
    "includeSellerSummary": true,
    "marketplace": "US",
    "maxConcurrency": 4
};

// Run the Actor and wait for it to finish
const run = await client.actor("apt_marble/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 = {
    "sellers": ["discountcomputerdepot"],
    "role": "received_as_seller",
    "maxFeedbackPerSeller": 200,
    "includeSellerSummary": True,
    "marketplace": "US",
    "maxConcurrency": 4,
}

# Run the Actor and wait for it to finish
run = client.actor("apt_marble/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 '{
  "sellers": [
    "discountcomputerdepot"
  ],
  "role": "received_as_seller",
  "maxFeedbackPerSeller": 200,
  "includeSellerSummary": true,
  "marketplace": "US",
  "maxConcurrency": 4
}' |
apify call apt_marble/ebay-seller-feedback-scraper --silent --output-dataset

```

## MCP server setup

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