eBay Search Scraper: Active Listings & Prices, No Login avatar

eBay Search Scraper: Active Listings & Prices, No Login

Pricing

from $1.89 / 1,000 listing saveds

Go to Apify Store
eBay Search Scraper: Active Listings & Prices, No Login

eBay Search Scraper: Active Listings & Prices, No Login

Search active eBay listings by keyword or category on 16 eBay sites: price, condition, seller feedback, shipping, bids and links. Official eBay Browse API with your own free key. No login.

Pricing

from $1.89 / 1,000 listing saveds

Rating

0.0

(0)

Developer

Cliqto Media

Cliqto Media

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

4 days ago

Last modified

Categories

Share

Search active eBay listings by keyword or category on 16 eBay sites and get price, condition, seller feedback, shipping, bids and links as clean rows. The Actor calls the official eBay Browse API with your own free eBay developer keyset: no eBay account login, no browser, no proxies, no blocked pages.

Good for sellers checking competitor prices, resellers looking for deals, repricing tools and analysts who need a stable eBay search feed. The smallest run is one keyword and 10 listings: about 5 seconds and $0.029.

eBay Active Listings Search: a keyword search on eBay US returns active listings with price, seller feedback and Buy It Now or auction format, using your own eBay keyset with the daily quota checked first

An eBay key is required. You need a free eBay developer keyset (Client ID and Client Secret). Without it the run ends with one free api_key_required row that explains how to get the key. There is no demo mode and no sample data. Apify still charges the small automatic Actor start fee for that run ($0.002).

Table of contents

What it does

For each keyword or category you give, the Actor asks eBay's Browse API for listings that are live right now and saves one row per listing:

  • price and currency, with the current bid and bid count for auctions;
  • condition, seller username, seller feedback percent and score;
  • buying options (Buy It Now, auction, best offer), shipping cost, delivery window;
  • item location, category, listing start and end time, product ID (ePID);
  • clean listing URL and a large image URL.

It works on 16 eBay sites (US, UK, Germany, Australia, Canada, France, Italy, Spain, Netherlands, Belgium, Austria, Switzerland, Ireland, Poland, Hong Kong, Singapore). eBay filters by price, condition, buying format, item country and delivery country on its side.

Good fit

  • You want today's asking prices for a product, not what it sold for.
  • You want eBay data from the official API instead of a page scraper that breaks when eBay changes its pages.
  • You can create a free eBay developer account (5 minutes).

Not a fit

  • Sold or completed listings. The Browse API only returns active listings. For sold prices, see Related Actors.
  • Full item descriptions, all item specifics or seller contact details.
  • Running without an eBay keyset.

How it works

  1. The Actor gets an application token for your keyset (OAuth client credentials).
  2. It reads how many Browse API calls your keyset has left today. If none are left, it stops before searching.
  3. It runs each search page by page (up to 200 listings per call), drops listings already saved by an earlier search in the same run and writes rows to the Dataset.
  4. It writes a RUN_SUMMARY record with counts, quota used, warnings and the stop reason.

How to get your eBay keys

The keyset is free. eBay does not charge for the Developers Program or for Browse API calls.

  1. Sign up at the eBay Developers Program and confirm your email.
  2. Open Application Keys and create a Production keyset (not Sandbox).
  3. Copy the App ID (Client ID) and the Cert ID (Client Secret) into the Actor input. Both fields are secret: Apify stores them encrypted and the Actor never writes them to logs or results.

eBay gives each keyset 5,000 Browse API calls a day (eBay API call limits). One call returns up to 200 listings, so the daily quota covers up to about 1,000,000 listings. The quota resets once a day; the run summary shows the reset time.

eBay's Buy APIs are formally meant for eBay partners, and eBay can limit access for a keyset. Your keyset is used only inside your own run. If eBay refuses the key, the run fails with a clear message instead of returning empty results.

Quick start

  1. Paste your Client ID and Client Secret.
  2. Keep the prefilled search (iphone 13, 10 listings) or type your own keywords.
  3. Click Start. Rows appear in the Output tab in a few seconds.
{
"clientId": "YOUR-CLIENT-ID",
"clientSecret": "YOUR-CLIENT-SECRET",
"queries": ["iphone 13"],
"maxItems": 10
}

Use cases

  • Competitor prices. Search your product with condition: "new" and sort: "priceLowToHigh" to see the cheapest live offers with shipping.
  • Deal finding. Use priceMax and buyingFormat: "auction" with sort: "endingSoonest" to see auctions that end soon.
  • Category feed. Pass only categoryIds to list items in an eBay category without a keyword.
  • Cross-site comparison. Run the same keywords on EBAY_US, EBAY_GB and EBAY_DE and compare price and currency.
  • Repricing input. Schedule a daily run and send itemId, price and shippingCost to your sheet or database.

Input

Input fields

FieldTypeDefaultWhat it does
clientIdsecret string—eBay App ID (Client ID). Required.
clientSecretsecret string—eBay Cert ID (Client Secret). Required.
querieslist of strings["iphone 13"] in the formKeywords. Each keyword is one search. Up to 50.
categoryIdslist of strings—eBay category IDs, up to 10. With keywords, every keyword is searched in every category (up to 100 searches). Without keywords, the category is listed.
marketplaceone of 16 sitesEBAY_USeBay site. Prices are in the site's currency.
maxItemsinteger100 (10 in the form)Listings per search, 1–10,000.
sortchoicebestMatchbestMatch, priceLowToHigh, priceHighToLow, newlyListed, endingSoonest. eBay sorts by price plus shipping.
titleMustMatchbooleanfalseKeep only listings whose title has every keyword. See below.
priceMin / priceMaxinteger—Price range in the site's currency.
conditionchoiceanyany, new, used.
buyingFormatchoiceallall, fixed_price, auction, best_offer.
itemLocationCountry2-letter code—Only items located in this country, for example US.
deliveryCountry / deliveryPostalCodecode / text—Only items that ship there; shipping cost is calculated for that place.

Settings that work together

  • Keywords and categories. 3 keywords × 2 categories = 6 searches; maxItems applies to each search.
  • Duplicates. A listing found by two searches is saved once, with the first search's query.
  • titleMustMatch. eBay's API also matches keywords in item specifics, so a search for lego technic can return sets that only mention Technic in their details. With this option the Actor reads full pages of 200 and keeps only titles that contain every keyword. Dropped listings are not saved or charged. Each search scans at most 5 times the pages maxItems needs and never more than 1,600 listings. If no title matches, the search gets one no_results row.
  • Auctions. buyingFormat: "all" includes both Buy It Now and auctions. eBay's own default is Buy It Now only; the Actor asks for both.

Input examples

Cheapest new LEGO Technic sets on eBay Germany, up to €200, titles must say "lego technic":

{
"clientId": "YOUR-CLIENT-ID",
"clientSecret": "YOUR-CLIENT-SECRET",
"queries": ["lego technic"],
"marketplace": "EBAY_DE",
"condition": "new",
"priceMax": 200,
"sort": "priceLowToHigh",
"titleMustMatch": true,
"maxItems": 20
}

Vintage watch auctions on eBay UK that end soonest:

{
"clientId": "YOUR-CLIENT-ID",
"clientSecret": "YOUR-CLIENT-SECRET",
"queries": ["vintage watch"],
"marketplace": "EBAY_GB",
"buyingFormat": "auction",
"sort": "endingSoonest",
"maxItems": 20
}

Output

One Dataset row per listing. The Listings view in the Output tab shows the main columns; export gives all 40 fields.

Output fields

FieldTypeCan be nullMeaning
statusstringnook (a listing), no_results (a search with no listings) or api_key_required (no key given).
itemIdstringyes¹eBay item number, as in the listing URL, e.g. 237128712651.
browseItemIdstringyes¹Item ID in eBay's API format, e.g. `v1
titlestringyes¹Listing title.
pricenumberyesPrice in the site's currency. Auctions without Buy It Now show the current bid.
currencystringyesUSD, GBP, EUR and so on.
priceTypestringyesfixed or current_bid.
currentBidnumberyesCurrent bid; null for listings without an auction.
bidCountintegeryesNumber of bids; null for listings without an auction.
originalPricenumberyesStrike-through price, when the seller shows a discount.
discountPercentnumberyesDiscount from originalPrice, e.g. 15.
conditionstringyeseBay condition name in the site's language, e.g. Pre-owned - Fair or Neu.
conditionIdstringyeseBay condition ID, e.g. 1000 (new).
sellerstringyesSeller username (see FAQ for why it can be null).
sellerFeedbackPercentnumberyesPositive feedback, e.g. 99.8.
sellerFeedbackScoreintegeryesFeedback score, e.g. 3326.
buyingOptionsarray of stringsyese.g. ["FIXED_PRICE", "BEST_OFFER"] or ["AUCTION"].
shippingCostnumberyesCheapest shipping option; 0 for free shipping; null when shipping is CALCULATED and no delivery place is set.
shippingCostTypestringyesFIXED or CALCULATED.
deliveryFrom, deliveryTostring (ISO date)yesEstimated delivery window, when eBay gives one.
locationstringyesItem location, postcode partly hidden by eBay, e.g. NN16***, GB.
locationCountrystringyes2-letter country code, e.g. GB.
categoryId, categoryNamestringyesLeaf category, e.g. 31387, Wristwatches.
listedAtstring (ISO date)yesWhen the listing started.
endsAtstring (ISO date)yesWhen the listing ends (auctions, and some fixed-price listings).
topRatedBuyingExperiencebooleanyeseBay Top Rated Plus listing.
priorityListingbooleanyesPromoted listing.
epidstringyeseBay product ID, when the listing is linked to a catalog product.
itemGroupTypestringyesSet for listings with variations (sizes, colours).
urlstringyes¹Clean listing URL without tracking.
imagestringyesLarge image URL.
marketplacestringnoeBay site of the search, e.g. EBAY_US.
querystringyesKeyword that found the row; null for a category-only search.
categoryFilterstringyesCategory ID of the search, if any.
positionintegeryes¹Place in eBay's order, starting at 1.
sourcestringnoAlways ebay-browse-api.
fetchedAtstring (ISO date)noWhen the row was read.
messagestringyesExplanation on no_results and api_key_required rows; null on listings.

¹ Always filled on ok rows; null on no_results and api_key_required rows.

Good to know:

  • Variations. For a listing with several sizes or colours, price is the price eBay's API shows for one variation, not the "from – to" range on the eBay page.
  • Auction with Buy It Now. price is the Buy It Now price, priceType is fixed, and currentBid still shows the bid.
  • Freshness. Prices and bids change all the time. Each row has fetchedAt. eBay's terms ask API users not to keep listing data longer than 6 hours; run again for fresh data.

Output example

{
"status": "ok",
"itemId": "237128712651",
"title": "VINTAGE WATCHES SPARES AND REPAIRS ONLY (LOT 59) 12 IN TOTAL, MANY MORE TO LIST",
"price": 25,
"currency": "GBP",
"priceType": "current_bid",
"currentBid": 25,
"bidCount": 6,
"condition": "Pre-owned - Fair",
"seller": "example_seller",
"sellerFeedbackPercent": 100,
"sellerFeedbackScore": 3326,
"buyingOptions": ["AUCTION"],
"shippingCost": 6.2,
"shippingCostType": "FIXED",
"location": "NN16***, GB",
"categoryId": "31387",
"categoryName": "Wristwatches",
"listedAt": "2026-10-17T10:47:23.000Z",
"endsAt": "2026-10-22T10:47:23.000Z",
"url": "https://www.ebay.co.uk/itm/237128712651",
"image": "https://i.ebayimg.com/images/g/9MAAAeSwojpq00~m/s-l1200.jpg",
"marketplace": "EBAY_GB",
"query": "vintage watch",
"position": 2,
"fetchedAt": "2026-10-22T10:46:39.419Z"
}

The seller username is replaced with example_seller in this example.

A search with no listings gives one row like this (charged as an empty result):

{
"status": "no_results",
"marketplace": "EBAY_FR",
"query": "zzqqxxnonexistent987 qwvbn",
"message": "eBay has no active listings for \"zzqqxxnonexistent987 qwvbn\" with these filters on EBAY_FR."
}

Run summary

The RUN_SUMMARY record in the run's key-value store has status (COMPLETE, PARTIAL, NO_RESULTS, API_KEY_REQUIRED, INVALID_INPUT or ERROR), stopReason (QUOTA_LIMIT, CHARGE_LIMIT, TIME_LIMIT, SOURCE_ERROR), counts, quota before the run and calls used, one line per search with eBay's total match count, and warnings.

Coming from an eBay page scraper?

Page-scraper fieldThis Actor
price text / priceValueprice (number) + currency
sellerUsernameseller
sellerFeedbackPercentagesellerFeedbackPercent
buyingFormatbuyingOptions and priceType
itemLocationlocation, locationCountry
totalPriceprice + shippingCost
discountdiscountPercent

Field names differ, so this is not a drop-in replacement for another Actor's output.

Pricing

This Actor uses pay per event. Apify platform usage is included in the event prices. eBay does not charge for the API.

EventWhen it is chargedFreeBronzeSilverGold+
Actor startonce per run, per GB of memory (default 256 MB = 1 event); also on a run without a key$0.002$0.002$0.002$0.002
Listingeach ok row saved to the Dataset$0.0027$0.00243$0.00216$0.00189
Empty resulteach search with no listings (one no_results row)$0.002$0.002$0.002$0.002

That is $2.70 per 1,000 listings on the Free plan and $1.89 on Gold. Duplicates, listings dropped by titleMustMatch and the api_key_required row are not charged.

Cost examples (Free plan)

RunRowsPriceTime (measured)
Prefill: 1 keyword, 10 listings10$0.002 + $0.027 = $0.029~5 s
1 keyword, 100 listings100$0.002 + $0.27 = $0.272~5 s
1 keyword, 1,000 listings1,000$0.002 + $2.70 = $2.702~15 s
1 keyword, maxItems 10,0009,509 unique$0.002 + $25.67 = $25.68~3.5 min
1 keyword, nothing found1 no_results$0.002 + $0.002 = $0.004~3 s
No key1 free row$0.002~1 s
  • Max cost per run: set it in the run options. The Actor stops before a row it cannot pay for, keeps what it saved and ends Succeeded with status PARTIAL / CHARGE_LIMIT.
  • Quota runs out mid-run: the Actor stops before the next call, keeps what it saved and ends Succeeded with PARTIAL / QUOTA_LIMIT and the reset time. You pay only for saved rows.

Limits

  • 10,000 listings per search. eBay's Browse API serves only the first 10,000 results of one search (and a few listings repeat on neighbouring pages, so expect about 9,500 unique). For more, split the search by category, price range or more specific keywords.
  • Up to 100 searches per run (50 keywords × 10 categories at most).
  • Daily quota of your keyset: 5,000 calls; each call is up to 200 listings. eBay can raise it through its Application Growth Check.
  • Speed: calls are sequential to save your quota. About 3–4 seconds per 200 listings: 1,000 listings in about 15 seconds, 5 searches × 10,000 in about 13 minutes (measured). The default run timeout is 30 minutes; the Actor stops 15 seconds before it, keeps saved rows and ends Succeeded with PARTIAL / TIME_LIMIT. If the timeout is so short that nothing was saved yet, the run fails with the same reason.
  • Active listings only. No sold listings, no full descriptions, no seller contacts.
  • eBay's terms forbid using this data for average selling prices or aggregated seller data; the Actor does not compute them.

API, export and integrations

  • API: start a run with POST https://api.apify.com/v2/acts/cliqtomedia~ebay-browse-search/runs and the input JSON; read rows from the run's Dataset.
  • Export: JSON, CSV, Excel, XML or HTML from the Output tab.
  • Scheduling: save your input as a Task and add a schedule, for example daily with sort: "newlyListed".
  • Webhooks / no-code: send the Dataset to Google Sheets, Make, Zapier or n8n with Apify integrations.

Use with AI agents (MCP)

  • MCP server with only this Actor: https://mcp.apify.com?tools=cliqtomedia/ebay-browse-search
  • Smallest useful input (the agent also needs the user's clientId and clientSecret):
{ "queries": ["iphone 13"], "maxItems": 10 }
  • Key output fields: title, price + currency (number in the site's currency), condition, seller + sellerFeedbackPercent, url.
  • A 10-listing run takes about 5 seconds and costs $0.029. Up to 10,000 listings per search; the keyset allows 5,000 calls a day.

Troubleshooting

The run has one api_key_required row

Symptom: no listings, one row with a message about the key. Reason: clientId or clientSecret is empty. Action: create a Production keyset as in How to get your eBay keys and paste both values.

The run failed with "eBay rejected your keyset"

Symptom: run status Failed, RUN_SUMMARY.status ERROR. Likely reason: Sandbox keys, a typo, a deleted keyset, or eBay limited Buy API access for this keyset. Check: the keys in Application Keys under Production. Action: copy both values again. If eBay limited access, contact eBay developer support.

The run stopped with QUOTA_LIMIT

Symptom: status Succeeded, PARTIAL / QUOTA_LIMIT, fewer rows than asked. Reason: your keyset used its 5,000 calls for today (other apps using the same keyset count too). Action: run again after the reset time in the status message, or lower maxItems.

Search results look unrelated to my keyword

Reason: eBay's API also matches words in item specifics, and price sorting adds shipping. Action: turn on titleMustMatch, add a category, or use more specific keywords.

shippingCost is empty

Reason: the seller uses calculated shipping and eBay needs a destination. Action: set deliveryCountry and deliveryPostalCode.

FAQ

Do I need an eBay account or a paid plan?

You need a free eBay developer account to create the keyset. You do not log in to eBay in the Actor, and eBay does not charge for Browse API calls.

Is my key safe?

The key fields are secret inputs: Apify stores them encrypted, and the Actor sends them only to eBay's token endpoint. They are not written to the log, the Dataset or the run summary.

Why is seller sometimes null?

Since September 2025 eBay hides US seller usernames from some API developers. The field is then null; feedback percent and score are still filled when eBay gives them.

Why did a search return fewer rows than maxItems?

eBay has fewer active listings for those filters, or the search hit eBay's 10,000-result cap. The run summary shows eBay's total and a moreAvailable flag for each search.

Do I pay for a run that finds nothing?

You pay the start fee and $0.002 per search with no listings. A run without a key costs only the start fee.

Can I get sold prices?

No. The Browse API returns only active listings. See Related Actors.

  • eBay Sold Listings Scraper — what items actually sold for: sold price, sale date, condition and bids. Use it next to this Actor to compare asking prices with real sale prices.

Support

For a bug, question or feature request, open the Issues tab of this Actor on Apify. Include the run ID, the marketplace and the input without your keys. Never post your Client ID or Client Secret.