eBay Products Scraper

An item id, a link,
or just what you'd type.

All three go in the same box. Paste 364912345678, a ebay.com/itm/… link, or golf clubs, and listings come back as rows - title, the price as shown and as a number, currency, condition, shipping, images, and a link. Twenty-three columns, one row per listing.

one-time 500 free rows$0.002 per row after23 columnsCSV · JSON · Excel
How it works

One box,
three kinds of input.

The thing worth knowing before you start is that what you put in changes which columns come back.

  1. STEP 1Sign in to the platform.
  2. STEP 2Open the eBay Products Scraper.
  3. STEP 3Paste item IDs, ebay.com/itm/… URLs or search terms - one per line, mixed freely - or upload a CSV, XLSX, TXT or Parquet file.
  4. STEP 4Pick a country, and a delivery postcode if you want prices and shipping as that location sees them.
  5. STEP 5Set a limit if you want one. It takes a minimum of 1, defaults to 20, and applies per search query.
  6. STEP 6Click Start scraping and download as CSV, JSON or Excel.

The limit applies per search query, so three search terms at twenty each is sixty rows. An item id returns the one listing.

Why it is useful

Two ways to ask,
and they return different things.

Both are useful. Knowing which is which before you plan a run is what saves you a second one.

A search term reads the results page

Type what a buyer would type and you get that result set as rows, each with its position in the ranking. You get the listing basics - title, price, condition, shipping, images, the link. What you do not get is the seller: on a keyword search the seller and item-detail columns come back empty.

An item id opens the listing itself

Give it 364912345678 or the ebay.com/itm/… link and the columns a search cannot fill start arriving - seller_name and seller_feedback_percent, availability, returns, item_location, brand and type. The usual shape of a job is a search to find the items, then their ids to enrich them.

The price twice, on purpose

price is the string as the listing shows it, symbol and all. price_parsed is the bare number. Keep the first for display and sort on the second - and note that currency is a separate column, so a file spanning several eBay sites stays comparable.

Read this first

What a search returns,
and what it does not.

Worth two minutes before you plan a run, because it decides whether you need one pass or two.

The input box takes three shapes and treats them differently. A bare item id and an ebay.com/itm/… URL both mean this exact listing. Anything else is read as a search term, and you get that result set - which is why position exists, and why the limit is described as applying per search query rather than per run.

Seven columns arrive only when you asked for a specific item. Across every row of every export we hold, availability, item_location, returns, seller_name, seller_feedback_percent, brand and type were populated on item-id and URL lookups and empty on keyword searches. That is not a fault: a results page does not show those things, so nothing is there to read. It does mean a plan built on scraping a search for seller names will come back empty, and the fix is a second pass over the ids the first pass returned.

Two settings sit beside the input and travel onto every row. country and postcode are what you asked for - the site to search and the delivery location to price against - echoed into the export so a file assembled from several runs stays self-describing. They are not where the item is. That is item_location, which is one of the seven above.

One honest caveat about shipping. It usually holds shipping text - Free shipping, Delivery: Varies, or an amount. On a fair share of rows, though, it repeats the price string exactly, which looks like a parse artefact rather than a shipping cost that happens to match. Treat the column as indicative, compare it against price before you trust a row, and do not build a landed-cost calculation on it without checking your own export first.

What you get

Twenty-three columns,
and what actually fills them.

Measured by reading every row of every export we hold, rather than copied from a specification. Where a column depends on how you asked, it says so.

item_id
eBay's own id for the listing, as digits. Present on every row, and the value the url column ends with.
title
The listing title as written by the seller. Present on every row.
price
The price as the listing displays it, symbol and all - the string, not a number. Some listings show text such as See price instead of an amount; see currency below.
price_parsed
The same price as a bare number, still a string. This is the one to sort and compare on. It is empty on the rows where the listing showed text rather than an amount.
currency
The currency, normally a three-letter code, as its own column so a file spanning several eBay sites stays comparable. Caveat: where the price was text rather than an amount, this picks up the leading word instead of a code - filter those rows out with price_parsed.
condition
The condition as the listing states it, free text rather than a fixed set. It includes -- where no condition is given.
availability
How much stock the listing declares, as free text such as More than 10 available rather than a count. Item-id and URL lookups only - empty on keyword searches.
sold
How many have sold, as a number in a string. Present on many search rows and on some item lookups; absent where the listing does not show it.
shipping
Shipping as the listing presents it - Free shipping, Delivery: Varies, or an amount. Read the note above: on a fair share of rows this repeats the price string, so check it against price before relying on it.
item_location
Where the item ships from, as free text. Item-id and URL lookups only. This - not country - is the item's location.
returns
The returns terms as a sentence of listing text. Item-id and URL lookups only.
seller_name
The seller's display name. Item-id and URL lookups only - a keyword search does not carry it.
seller_feedback_percent
The seller's positive-feedback percentage, as a string. Item-id and URL lookups only.
brand
The brand as the listing declares it. Item-id and URL lookups only.
type
The item type as the listing declares it. Item-id and URL lookups only.
image
One image URL, the listing's main picture, as a plain string.
images
A JSON array of image URLs, not a delimited string - sometimes one entry, sometimes several. Present on every row.
url
The listing's canonical link. On every row of every export we hold it ends with the item_id, which makes it safe to derive one from the other.
country
The country you asked for, echoed onto every row - a run setting, not an attribute of the item.
postcode
The delivery postcode you asked for, echoed onto every row. Empty when you left the field blank.
position
Rank within the results for that query, as a number rather than a string. It restarts at 1 for each query, so sort by query then position to rebuild a results page.
query
The exact input this row came from - the id, URL or search term you submitted. Written by the scraper, so it is on every row; group by it whenever a file covers more than one input.

This page is unusual for us: the formats above were measured, not described. We hold fourteen run exports for this service carrying real eBay listings, and every statement here comes from reading every row of every one of them. The column list is dependable for a slightly different reason than on our other pages - this service declares no column array anywhere on the platform, so the export is the only source, but all fourteen agree exactly: the same twenty-three keys, in the same order, with no twenty-fourth. The one thing to carry away is that seven of the twenty-three arrive only when you ask for a specific item rather than run a search, and they are the seller and item-detail ones. Plan a search pass to find listings and an id pass to enrich them, and check shipping against price on your own first export. One column is missing from the list above on purpose. The export also carries seller_reviews, which makes twenty-three, but it was empty on every row of every run we hold - so rather than describe a column we have never seen carry anything, we mention it here and leave it out of the table.

Use cases

Three jobs people
run this for.

All of them start from something you can type into the box.

Pricing

Watch a search the way a buyer sees it

Run the term your customers actually type, keep position, price_parsed and currency, and re-run it on a schedule. What moves is not just price but who is above you - and the country and postcode settings let you ask the question as a buyer in that market would.

Pricing · E-commerce
Sourcing

Enrich a list of item ids

If you already have ids - from a search pass, a spreadsheet, an export from somewhere else - feeding them back in is what fills the seller columns, the returns terms and the item location. This is the pass that turns a list of listings into something you can judge a supplier on.

Sourcing · Ops
Resale

Read condition and sold together

condition is free text and sold is a count, and the two together are how a resale desk reads a category: what people are actually buying, in what state, at what price. Keep price_parsed for the arithmetic and price for the screenshot.

Resale · Market research
Pricing

Pay per listing row,
nothing else.

No subscription, no minimum, no per-seat licence. Your first 500 rows are on us - after that it is pay-as-you-go.

Free

500 rows

For every new account, one time. No credit card. All scrapers unlocked - and enough to run one search and one item id side by side, which is the quickest way to see the difference between them for yourself.

One-time · No card
Pay as you go

$0.002 per row

Roughly $2 per 1,000 listings, the same flat rate as every other scraper on the platform. The limit applies per search query, so several search terms multiply - worth the arithmetic before you start.

Credits never expire
Enterprise

Custom - whole categories, on a schedule

Volume pricing, SLAs, dedicated workers and tailored onboarding for teams tracking a category rather than a handful of listings. Tell us your numbers and we will quote.

Talk to sales
10% off your first paid run.Use code LIVESCRAPER10 at checkout.
Sign up
Pairs well with

The same item,
somewhere else.

A price only means something next to another price. These return catalogue data in comparable shapes.

Legal

Is it legal to scrape
eBay listings?

Short answer: a public listing is public - but eBay is a marketplace of individual sellers, and some of these columns name them.

Everything in these columns is shown to any visitor on a public listing or a public search results page, signed in or not. No login is used, no paywall is crossed and no account is touched, and the run goes through our proxy pool rather than your own address. Collecting publicly visible information for pricing and market research is long-settled practice.

Two of these columns are about a person, not a product. seller_name and seller_feedback_percent describe a trader, and on a marketplace like this one plenty of sellers are individuals rather than companies. Publicly visible is not the same as free of obligation: if you store it, you are handling personal data, and the GDPR and similar regimes apply to you regardless of where you got it. Pricing analysis is an easy case; assembling a durable file on named sellers is not, and this service is not intended for it.

eBay's terms restrict automated access, so this remains a question of terms rather than of what is technically reachable; read them before you scale. We run no third-party trackers on the data layer, and your exports self-delete after 30 days.

livescraper.app · principles
Public listings and search results only
No logins, no paywalls
Seller name and feedback are personal data - handle them as such!
No third-party trackers on the data layer
Exports self-delete (30 days)
The same listings any shopper sees on the site.
FAQ

Things people ask before signing up.

The questions we hear most. Something else? Talk to us - humans write the answers, not bots.

What can I put in the input box?+
Three things, mixed freely, one per line: a bare eBay item id such as 364912345678, an item URL such as ebay.com/itm/364912345678, or a search term such as golf clubs. The first two mean that exact listing; anything else is treated as a search. You can upload a CSV, XLSX, TXT or Parquet file instead of pasting.
What columns will the export contain?+
Twenty-three, in this order: item_id, title, price, price_parsed, currency, condition, availability, sold, shipping, item_location, returns, seller_name, seller_feedback_percent, seller_reviews, brand, type, image, images, url, country, postcode, position and query. Every export we hold carries exactly those keys in exactly that order.
Why are the seller columns empty?+
Because the run was a keyword search rather than an item lookup. Seven columns - availability, item_location, returns, seller_name, seller_feedback_percent, brand and type - are populated only when you submit an item id or an item URL. A search results page does not display them, so there is nothing to read. Run a search to collect the ids, then feed those ids back in as a second pass.
What is the difference between price and price_parsed?+
price is the string exactly as the listing displays it, symbol included. price_parsed is the same amount as a bare number, still stored as a string, and it is the one to sort and compare on. Where a listing shows text such as See price instead of an amount, price_parsed is empty - and currency picks up the leading word rather than a currency code, so filter on price_parsed when you need clean numbers.
Are country and postcode where the item is?+
No. They are the run settings you chose - which eBay site to search and which delivery postcode to price against - echoed onto every row so a combined file stays self-describing. Where the item actually ships from is item_location, which is one of the columns that only appears on item-id lookups.
Can I trust the shipping column?+
Treat it as indicative. It usually carries shipping text such as Free shipping or Delivery: Varies, or an amount, but on a fair share of rows it repeats the price string exactly, which looks like a parse artefact rather than a coincidence. Compare it against price on your own export before you build a landed-cost calculation on it.
How does the limit work?+
It takes a minimum of 1 and defaults to 20, and it applies per search query rather than per run - so three search terms with a limit of twenty is sixty rows, not twenty. An item id or URL returns the single listing it names.
What does it cost?+
The first 500 rows on a new account are free and one-time; after that it is $0.002 per row - about $2 per 1,000 - pay-as-you-go with no subscription. Credits do not expire and there is no monthly reset.

Run one search and one item id,
side by side.

It is the fastest way to see which columns each one fills. Your first 500 rows are free.

Export eBay listings as rows

The eBay Products Scraper turns listings into a spreadsheet. You submit item ids, ebay.com/itm/… URLs or plain search terms - one per line, mixed freely, or uploaded as a CSV, XLSX, TXT or Parquet file - choose a country and optionally a delivery postcode, set a limit, and each listing comes back as a row: the title, the price as displayed and as a number, the currency, the condition, shipping, stock, the images, the seller where available, a link, and the listing's position in the results. Twenty-three columns, one row per listing, downloadable as CSV, Excel or JSON.

The behaviour worth knowing before you plan a run is that what you submit changes what comes back. Seven columns - availability, item_location, returns, seller_name, seller_feedback_percent, brand and type - arrive only when you ask for a specific item by id or URL. On a keyword search they are empty, because a results page does not show them. The practical shape of most jobs is therefore two passes: a search to discover listings, then their ids to enrich them. The limit reflects the same split, applying per search query rather than per run.

Prices come back twice on purpose. price is the string as the listing displays it, symbol and all, and price_parsed is the bare number for sorting and arithmetic, with currency kept separate so a file spanning several eBay sites stays comparable. Where a listing shows text rather than an amount, price_parsed is empty and currency picks up the leading word instead of a code - filter on price_parsed when you need clean numbers. images is a JSON array rather than a delimited string, position is a number that restarts at 1 for each query, and url ends with item_id on every row we have seen, so either can be derived from the other.

Two things deserve stating plainly. country and postcode are the settings you asked for, echoed onto every row - they are not where the item is, which is item_location. And shipping, while it usually carries shipping text, repeats the price string on a fair share of rows, which looks like a parse artefact; compare the two before you build on it. On the legal side, everything collected is shown to any visitor on a public listing, but seller_name and seller_feedback_percent describe a trader who is often an individual, so treat them as personal data. eBay's terms govern automated access; read them before you scale. Start free: your first 500 rows cost nothing and need no credit card, and after that it is $0.002 per row, flat. See pricing for current rates.