eBay Marketplace Scraper
Pricing
from $0.53 / 1,000 listing extracteds
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.
Pricing
from $0.53 / 1,000 listing extracteds
Rating
0.0
(0)
Developer
Hanna Nosova
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
7 days ago
Last modified
Categories
Share
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.
Input recipes
Monitor newly listed products in the UK
{"searchQueries": ["vintage camera"],"marketplace": "UK","sort": "newly_listed","maxItemsPerQuery": 100}
Find auctions ending soon
{"searchQueries": ["pokemon card psa"],"marketplace": "US","listingType": "auction","sort": "ending_soonest","maxItemsPerQuery": 50}
Scrape a filtered eBay page
{"startUrls": [{ "url": "https://www.ebay.de/sch/i.html?_nkw=mechanische+tastatur&LH_BIN=1" }],"maxItemsPerQuery": 40}
Enrich product identifiers
{"searchQueries": ["Sony WH-1000XM5"],"marketplace": "US","maxItemsPerQuery": 10,"includeDetails": true}
Pricing
This Actor uses pay-per-event pricing. You pay a $0.005 run start, then only for records produced.
| Event | Free | Bronze | Silver | Gold | Platinum | Diamond |
|---|---|---|---|---|---|---|
| Listing extracted | $0.0010246 | $0.00089092 | $0.00069492 | $0.00053455 | $0.00035637 | $0.00024946 |
| Successful detail enrichment | $0.00575 | $0.00500 | $0.00390 | $0.00300 | $0.00200 | $0.00140 |
A 100-listing Bronze run without details costs about $0.094 including the start event. Detail charges apply only when includeDetails is enabled and a detail page is successfully enriched. Platform compute and proxy usage may be billed separately according to your Apify plan.
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.
Legality and responsible use
This Actor extracts publicly visible marketplace information. Scraping public data is generally permitted in many jurisdictions, but laws, eBay terms, and your intended use may differ. Collect only what you need, use reasonable volumes, respect intellectual-property and personal-data rights, and obtain legal advice for regulated or high-risk use cases. Do not use this Actor for account pages, private order data, login-protected information, or prohibited automation.
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
detailStatusanddetailError. - 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 ApifyClientclient = 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.
Related Actors
- Google Shopping Results Scraper for cross-market shopping search data
- AliExpress Products Scraper for sourcing and catalog research
- Vinted Search Scraper for resale-market listings
FAQ
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.
Does detail enrichment cost extra?
Yes. Each successful detail enrichment has a separate event charge. Base listing extraction is still charged once per saved listing.
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.