eBay Marketplace Scraper

Export active eBay listings from keywords or public URLs across eight marketplaces, including prices, shipping, auctions, sellers, returns, images, and optional product details.

Data fields

FieldTypeDescription
itemIdstringValue exported as itemId.
titlestringValue exported as title.
urlstringValue exported as url.
querystring | nullValue exported as query.
sourceUrlstringValue exported as sourceUrl.
rankintegerValue exported as rank.
pageintegerValue exported as page.
marketplacestringValue exported as marketplace.

Input preview

searchQueriesSearch queries
startUrlseBay search or category URLs
marketplaceMarketplace
maxItemsPerQueryMaximum listings per query or URL
maxPagesPerQueryMaximum pages per query or URL
sortSort order

API and agents

This actor can be run through Apify API, datasets, webhooks, schedules, and the official Apify MCP server.

Ready-to-run examples

Open a saved Apify example, adjust the input, and run the actor in your own Apify account.

View all examples

How this actor works

See example inputs, outputs, API usage, and practical limits before running this actor on Apify.

Open Apify page

Export active eBay listings from keyword searches and public search or category URLs. Get normalized prices, shipping, landed cost, seller signals, auction data, images, and optional product details across eight marketplaces.

Use the dataset for price monitoring, product sourcing, resale research, assortment analysis, seller tracking, and auction alerts. No eBay account or developer API key is required.

Who is it for?

  • Marketplace sellers and resellers comparing prices, shipping, and competition
  • Retail and brand teams monitoring listings, discounts, and seller activity
  • Sourcing teams finding inventory across countries and conditions
  • Researchers and agencies building repeatable marketplace datasets
  • Auction buyers tracking newly listed and ending-soon inventory

Example input

{
  "searchQueries": ["wireless headphones"],
  "marketplace": "US",
  "maxItemsPerQuery": 20,
  "maxPagesPerQuery": 2,
  "sort": "newly_listed",
  "listingType": "all",
  "includeDetails": false
}

Example output

{
  "itemId": "127946512448",
  "title": "Sony WH-1000XM5 Wireless Noise Canceling Headphones - Black",
  "url": "https://www.ebay.com/itm/127946512448",
  "query": "wireless headphones",
  "rank": 1,
  "page": 1,
  "marketplace": "US",
  "price": 225,
  "currency": "USD",
  "shippingCost": 27.4,
  "totalPrice": 252.4,
  "condition": "Open Box",
  "listingType": "best_offer",
  "bestOffer": true,
  "sellerUsername": "authorizedsales",
  "sellerFeedbackPercent": 99.1,
  "imageUrl": "https://i.ebayimg.com/images/g/example/s-l1600.jpg",
  "detailStatus": "not_requested",
  "scrapedAt": "2026-07-10T12:00:00.000Z"
}

What data can you export?

Each row represents one unique active listing.

  • Identity and context: item ID, title, canonical URL, source URL, query, rank, result page, marketplace, and scrape time
  • Pricing: numeric and displayed price, currency, original price, discount, coupon, shipping cost, shipping text, and normalized total price
  • Listing signals: condition, auction/Buy It Now/Best Offer flags, bids, watchers, sold count, time left, and sponsored status
  • Seller and fulfillment: seller username, feedback percentage/count, item location, ships-from value, return policy, free returns, and free shipping
  • Media: main image and full image URL list
  • Optional details: description, item specifics, brand, model, MPN, UPC, EAN, category path, quantity, full gallery, and enrichment status

Fields that eBay does not expose for a listing are returned as null; values are not invented.

Input settings

Field Type Default Description
searchQueries string[] example query Keywords to search
startUrls URL[] empty Public eBay search or category pages
marketplace enum US US, UK, DE, FR, IT, ES, CA, or AU
maxItemsPerQuery integer 20 Unique listings saved per query or URL
maxPagesPerQuery integer 2 Result pages visited per source, maximum 20
sort enum best_match Best match, newly listed, ending soonest, price low, or price high
listingType enum all All, auction, Buy It Now, or Best Offer
conditions string[] empty Condition shortcuts or numeric eBay condition IDs
minPrice / maxPrice number unset Price range in marketplace currency
freeShippingOnly boolean false Limit keyword searches to free shipping
includeDetails boolean false Visit item pages for product specifics and identifiers
maxRequestRetries integer 2 New-session retries for blocked pages
proxyConfiguration object residential Apify Proxy configuration

Provide at least one search query or start URL. When both are supplied, the Actor processes both. A start URL determines its marketplace from the eBay domain; marketplace applies to keyword searches.

Tips for reliable runs

  • Start with 20 listings and increase the limit after checking the dataset.
  • Use keyword mode when you want consistent filters across marketplaces.
  • Use start URLs to preserve complex filters selected on eBay.
  • Keep detail enrichment off for fast price monitoring; enable it only when identifiers or item specifics are needed.
  • For recurring monitoring, schedule the Actor and export results to your database or webhook workflow.
  • Keep the default proxy configuration unless you have a tested alternative.
  • When multiple queries or URLs are supplied, one exhausted source does not discard rows from the others. Inspect RUN_SUMMARY for partial runs and per-source errors.

Limits and important behavior

  • Only public active search/category and item pages are supported. Account, order, message, and private pages are rejected.
  • Sold/completed-listing history is outside this Actor's active-marketplace scope.
  • eBay may localize shipping and availability according to the request region.
  • Some cards do not expose seller, return, watcher, coupon, or shipping details; those fields are null.
  • Detail pages can be more restrictive than search pages. A detail failure does not remove the base listing; inspect detailStatus and detailError.
  • Results can change between pages while auctions and new listings are updated. Item-ID deduplication prevents duplicate dataset rows.
  • Respect eBay's terms, robots policies, applicable law, and personal-data obligations.

API usage

curl -X POST \
  "https://api.apify.com/v2/acts/fetch_cat~ebay-marketplace-scraper/runs?token=$APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "searchQueries": ["wireless headphones"],
    "marketplace": "US",
    "maxItemsPerQuery": 20
  }'

JavaScript

import { ApifyClient } from 'apify-client';

const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('fetch_cat/ebay-marketplace-scraper').call({
  searchQueries: ['wireless headphones'],
  marketplace: 'US',
  maxItemsPerQuery: 20,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);

Python

from apify_client import ApifyClient

client = ApifyClient(token="YOUR_APIFY_TOKEN")
run = client.actor("fetch_cat/ebay-marketplace-scraper").call(run_input={
    "searchQueries": ["wireless headphones"],
    "marketplace": "US",
    "maxItemsPerQuery": 20,
})
items = client.dataset(run["defaultDatasetId"]).list_items().items

Use with AI agents through MCP

Connect the Actor to Claude, Cursor, or another MCP client with:

https://mcp.apify.com/?tools=fetch_cat/ebay-marketplace-scraper

Example Claude CLI setup:

claude mcp add apify-ebay "https://mcp.apify.com/?tools=fetch_cat/ebay-marketplace-scraper"

Or add a JSON MCP server configuration:

{
  "mcpServers": {
    "apify-ebay": {
      "url": "https://mcp.apify.com/?tools=fetch_cat/ebay-marketplace-scraper"
    }
  }
}

Agents can then run product searches and work with the resulting structured dataset.

Support

If a run fails or a field is missing, open an issue on the Actor page and include:

  • The run ID and complete input JSON (remove any secrets)
  • A short description of the expected output
  • A sample of the actual output or error message
  • One reproducible public URL or search query
  • The marketplace and whether detail enrichment was enabled

Do not include account credentials, private order data, or other sensitive information.

Common questions

Questions and answers reused from the canonical actor README.

Do I need an eBay account or API key?

No. The Actor extracts publicly visible marketplace pages.

Can I scrape multiple countries in one run?

Yes. Add start URLs from multiple supported eBay domains. Keyword queries use the single marketplace selected in marketplace; run separate inputs when each keyword needs a different marketplace.

How are duplicate listings handled?

Rows are deduplicated by eBay item ID across all queries, URLs, and pages in the run. The first occurrence retains its query and rank context.

Why is shippingCost sometimes null?

A listing can say that shipping is not specified, calculated at checkout, unavailable to the current destination, or visible only on the item page. shippingText preserves the displayed message.

What happens if eBay serves an error page with HTTP 200?

The Actor validates response size, page markers, and listing cards before parsing. It retries malformed/block pages with a new session and fails clearly after the retry limit instead of returning a misleading successful run with zero items.