Ebay Scraper
Pricing
from $3.99 / 1,000 results
Ebay Scraper
eBay Scraper extracts product listings, prices, seller details, ratings, shipping information, item condition, categories, and other marketplace data from eBay. Automate product research, price tracking, competitor analysis, market research, and e-commerce lead generation.
Pricing
from $3.99 / 1,000 results
Rating
0.0
(0)
Developer
ScraperX
Maintained by CommunityActor stats
1
Bookmarked
2
Total users
0
Monthly active users
37 days
Issues response
4 days ago
Last modified
Categories
Share
eBay Scraper — Extract Product Listings, Prices, Sellers & Stock from eBay
Paste any eBay link — a search results page, a category page, or a single listing — and get back clean, structured product data: title, subtitle, current and previous price, quantity available, units sold, brand, item location, seller username, product identifiers (EAN / UPC / MPN), category path and image.
Perfect for price tracking, product research, competitor analysis, reselling and catalog building — with no code and no eBay developer account.
What you get
| 🛒 Listing data | 💵 Pricing & stock | 🏷️ Identifiers & seller |
|---|---|---|
| Title & subtitle | Current price (numeric + currency string) | eBay item number |
| "Why to buy" highlights | Previous / was price for discounts | Brand and item type |
| Full category breadcrumb path | Units available (number + raw text) | EAN, UPC, MPN |
| Main product image | Units sold | Seller username |
| Canonical listing URL | Item location |
Key features
- Search pages and single listings. Give it a search or category URL and it discovers the listings in the results grid; give it a listing URL and it extracts that item directly. Mix both in one run.
- Bulk input. Paste as many eBay URLs as you like — every filter you set in your browser (condition, price range, Buy It Now, location, sort order) travels with the link.
- Numeric and display prices.
priceis a clean float for calculations;priceWithCurrencykeeps the original string with its currency symbol. The same pair exists for the struck-throughwasPrice, so discounts are trivial to compute. - Demand signals.
soldandavailableturn a listing into a data point about actual market movement, not just an asking price. - Product identifiers for matching. EAN, UPC, MPN and brand let you join eBay data to Amazon, Google Shopping or your own catalog.
- Honest failure rows. If a listing page cannot be loaded, the Actor writes a row containing the URL and the reason instead of silently dropping it — and does not charge for it. You always know exactly what was and wasn't collected.
- Polite, resilient fetching. Requests are staggered and jittered, with an automatic fallback path when a page is refused, so large jobs stay stable.
- Optional Apify Proxy. Enable it — and pick a country if you need region-specific pricing — for large or international runs.
Use cases
- Price monitoring & repricing — track competitor prices on the same items daily and feed the numbers into your pricing rules.
- Reseller & arbitrage research — compare eBay prices against your sourcing cost, using
soldto gauge real demand. - Product & market research — pull an entire category to see price distribution, brand share and stock levels.
- Competitor analysis — monitor a specific seller's listings, prices and sell-through.
- Catalog building & enrichment — populate a product database with titles, images, identifiers and categories.
- Dropshipping product discovery — find high-sold, in-stock items in a niche.
- Lead generation — identify active sellers by username and location within a category.
- Deal and discount tracking — rows where
wasPriceexceedspriceare live discounts.
How it works
- You paste eBay URLs — search results, category pages, listing pages, or a mix.
- Search and category URLs are expanded: the Actor reads the results grid and collects the individual listing URLs behind it.
- Each listing page is fetched with staggered, randomised timing and an automatic retry/fallback path if eBay refuses the first attempt.
- The page is parsed from its structured product data and page body into one flat record with a fixed field set.
- Rows stream into the dataset as they complete, with a progress log showing how many full product records have been saved so far.
Quick start
- Search for something on eBay in your browser and apply any filters you want.
- Copy the URL from the address bar.
- Open the Actor, paste it into URLs to scrape.
- Set Max items — try 20 first, then scale up. Use
0for no limit. - Click Start and export the Output tab as CSV, Excel or JSON.
Minimal input
{"urls": ["https://www.ebay.com/sch/i.html?_nkw=mechanical+keyboard"],"maxItems": 20}
Input configuration
| Field | Type | Default | Description |
|---|---|---|---|
urls | array | — (required) | One or more eBay URLs. Search / category pages are expanded into their listings; single listing pages are scraped directly. Accepts plain strings or { "url": "…" } objects. |
maxItems | integer | 20 | Ceiling on how many product pages to process after URL discovery. 0 = no limit. Lower is faster and cheaper; higher gives broader coverage. |
proxyConfiguration | object | optional | Apify Proxy settings. Enable — and optionally choose a country or group — for large jobs or region-specific pricing. |
Tip: for country-specific prices, use the matching eBay domain (
ebay.co.uk,ebay.de,ebay.com.au…) and a proxy in that country.
Output data
One row per product listing.
| Field | Type | Description |
|---|---|---|
url | string | Canonical listing URL. |
itemNumber | string | eBay item number. |
title | string | Listing title. |
subTitle | string | Listing subtitle, when present. |
whyToBuy | array / string | Highlight bullets eBay shows on the listing. |
price | number | Current price as a number, ready for maths. |
priceWithCurrency | string | Current price exactly as displayed, with currency. |
wasPrice | number | Struck-through original price, when the item is discounted. |
wasPriceWithCurrency | string | The same value as displayed. |
available | number | Quantity available as a number. |
availableText | string | The raw availability text (e.g. More than 10 available). |
sold | number | Units sold. |
image | string | Main product image URL. |
seller | string | Seller username. |
itemLocation | string | Where the item ships from. |
brand | string | Brand, or Unbranded when eBay reports none. |
type | string | Item type from the listing specifics. |
ean, upc, mpn | string | Product identifiers, null when not published. |
categories | array | Category breadcrumb path. |
Diagnostic rows. If a listing cannot be fetched, the dataset receives { "url": …, "error": "unavailable", "errorReason": … } instead. These rows are not charged — they exist so nothing disappears from your export without explanation. Filter them out by keeping only rows where title is present.
Example output
{"url": "https://www.ebay.com/itm/123456789012","itemNumber": "123456789012","title": "Mechanical Gaming Keyboard RGB Hot-Swappable 75% Wireless","subTitle": "Brand New · Free Shipping","whyToBuy": ["Hot-swappable switches", "Tri-mode connectivity"],"price": 59.99,"priceWithCurrency": "US $59.99","wasPrice": 79.99,"wasPriceWithCurrency": "US $79.99","available": 12,"availableText": "More than 10 available","sold": 348,"image": "https://i.ebayimg.com/images/g/abc/s-l1600.jpg","seller": "example_tech_store","itemLocation": "Shenzhen, China","brand": "Example","type": "Keyboard","ean": "0712345678901","upc": "712345678901","mpn": "EX-KB75","categories": ["Computers/Tablets & Networking", "Keyboards, Mice & Pointers", "Keyboards & Keypads"]}
Illustrative values — a live run returns current eBay data.
Usage examples
Track a keyword across a whole category
{"urls": ["https://www.ebay.com/sch/i.html?_nkw=vintage+film+camera&_sop=12"],"maxItems": 200}
Monitor a specific seller's inventory
Open the seller's store page on eBay, copy the URL, and run:
{"urls": ["https://www.ebay.com/str/example-tech-store"],"maxItems": 0}
Watch exact listings for price changes
{"urls": ["https://www.ebay.com/itm/123456789012","https://www.ebay.com/itm/210987654321"]}
Save as a Task, attach a daily Schedule, and compare price between runs.
Find live discounts
Run any search, export to CSV, then keep rows where wasPrice is greater than price — the difference is the current markdown.
Run it from your own code
Python
from apify_client import ApifyClientclient = ApifyClient("<YOUR_APIFY_API_TOKEN>")run = client.actor("scraperx/ebay-scraper").call(run_input={"urls": ["https://www.ebay.com/sch/i.html?_nkw=mechanical+keyboard"],"maxItems": 100,})for item in client.dataset(run["defaultDatasetId"]).iterate_items():if item.get("title"):print(item["title"], item["price"], item.get("sold"))
JavaScript
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: '<YOUR_APIFY_API_TOKEN>' });const run = await client.actor('scraperx/ebay-scraper').call({urls: ['https://www.ebay.com/sch/i.html?_nkw=mechanical+keyboard'],maxItems: 100,});const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(items);
cURL
curl -X POST "https://api.apify.com/v2/acts/scraperx~ebay-scraper/runs?token=<YOUR_APIFY_API_TOKEN>" \-H "Content-Type: application/json" \-d '{"urls":["https://www.ebay.com/sch/i.html?_nkw=mechanical+keyboard"],"maxItems":100}'
Integrations
Push results to Google Sheets, Airtable, Slack, Make, Zapier, Google Drive or any endpoint via webhooks, and use Schedules for automatic daily price snapshots.
Pricing
Pay-per-event: a small Actor-start charge plus a charge for each fully extracted product record. Failed or unavailable listings are written to the dataset as diagnostic rows and are not billed — you only pay for real data. Current rates are on the Pricing tab of this Actor's page, and Apify shows an estimated cost before and during each run.
Limits & good to know
maxItemsapplies after URL discovery, i.e. it caps how many listing pages get processed in total across all your input URLs.- eBay search pages are paginated by eBay itself — to go deeper, add more search URLs (different keywords, sort orders or filters).
- Fields appear only when eBay publishes them. Many listings have no EAN/UPC/MPN; those come back as
null. - Prices reflect what an anonymous visitor sees on the domain you used. For local currency and availability, use the matching eBay country domain and a proxy in that country.
- Auction-specific data (bid counts, time remaining) is outside this Actor's field set; it targets product, price, stock and seller data.
- Default run options are 4 GB memory and a 1-hour timeout — raise the timeout for very large jobs.
FAQ
Do I need an eBay account or developer API key? No. The Actor reads public listing pages only.
Which URLs can I paste? eBay search result URLs, category pages, seller/store pages and individual item pages — from any eBay country domain.
Can I scrape sold/completed listings? You can paste an eBay search URL that already has the Sold items filter applied; the Actor scrapes whatever that URL returns.
Why do some rows only contain a URL and an error? That listing page failed to load (removed, region-blocked, or temporarily refused). The row documents it, and you are not charged for it.
How do I get prices in EUR or GBP?
Use the corresponding eBay domain (ebay.de, ebay.co.uk) and, ideally, a proxy located in that country.
Can I export to Excel? Yes — JSON, CSV, Excel (XLSX), XML and RSS, from the UI or the API.
Can it run automatically every day? Yes. Save your input as a Task and attach an Apify Schedule.
Legal & responsible use
This Actor collects only publicly available information from eBay listing pages — the same data any visitor can see. It does not log in, bypass protections, or access private account data. You are responsible for ensuring your use of the exported data complies with eBay's terms and applicable law.
Support
Missing a field, hit a bug, or need a custom eBay workflow? Open an issue on the Issues tab.