Ebay Scraper avatar

Ebay Scraper

Pricing

from $3.99 / 1,000 results

Go to Apify Store
Ebay Scraper

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

ScraperX

Maintained by Community

Actor stats

1

Bookmarked

2

Total users

0

Monthly active users

37 days

Issues response

4 days ago

Last modified

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 & subtitleCurrent price (numeric + currency string)eBay item number
"Why to buy" highlightsPrevious / was price for discountsBrand and item type
Full category breadcrumb pathUnits available (number + raw text)EAN, UPC, MPN
Main product imageUnits soldSeller username
Canonical listing URLItem 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. price is a clean float for calculations; priceWithCurrency keeps the original string with its currency symbol. The same pair exists for the struck-through wasPrice, so discounts are trivial to compute.
  • Demand signals. sold and available turn 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 sold to 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 wasPrice exceeds price are live discounts.

How it works

  1. You paste eBay URLs — search results, category pages, listing pages, or a mix.
  2. Search and category URLs are expanded: the Actor reads the results grid and collects the individual listing URLs behind it.
  3. Each listing page is fetched with staggered, randomised timing and an automatic retry/fallback path if eBay refuses the first attempt.
  4. The page is parsed from its structured product data and page body into one flat record with a fixed field set.
  5. 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

  1. Search for something on eBay in your browser and apply any filters you want.
  2. Copy the URL from the address bar.
  3. Open the Actor, paste it into URLs to scrape.
  4. Set Max items — try 20 first, then scale up. Use 0 for no limit.
  5. 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

FieldTypeDefaultDescription
urlsarray— (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.
maxItemsinteger20Ceiling on how many product pages to process after URL discovery. 0 = no limit. Lower is faster and cheaper; higher gives broader coverage.
proxyConfigurationobjectoptionalApify 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.

FieldTypeDescription
urlstringCanonical listing URL.
itemNumberstringeBay item number.
titlestringListing title.
subTitlestringListing subtitle, when present.
whyToBuyarray / stringHighlight bullets eBay shows on the listing.
pricenumberCurrent price as a number, ready for maths.
priceWithCurrencystringCurrent price exactly as displayed, with currency.
wasPricenumberStruck-through original price, when the item is discounted.
wasPriceWithCurrencystringThe same value as displayed.
availablenumberQuantity available as a number.
availableTextstringThe raw availability text (e.g. More than 10 available).
soldnumberUnits sold.
imagestringMain product image URL.
sellerstringSeller username.
itemLocationstringWhere the item ships from.
brandstringBrand, or Unbranded when eBay reports none.
typestringItem type from the listing specifics.
ean, upc, mpnstringProduct identifiers, null when not published.
categoriesarrayCategory 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 ApifyClient
client = 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

  • maxItems applies 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.


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.