How it will work: 3 steps
- Follow us on ApifyThe tool is built and waits in the queue for the Apify Store. Apify is the cloud platform where our tools run.
- Paste your input and press StartNo code needed: you fill in a form (the input). It already has a working example. For example:
iphone 13in Search keywords. Each start is one run. - Download the resultsWhen the run ends, the results are in a table (the dataset). Open Output, press Export and pick Excel or CSV. JSON and the API are there too.
This tool is an Apify Actor: a small program that runs on Apify. You can also run it on a schedule, for example every Monday. New to it? Read how it works, step by step and the 8 words you need first.
What it does
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.
- 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.
Good for
- 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 good 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
- The Actor gets an application token for your keyset (OAuth client credentials).
- It reads how many Browse API calls your keyset has left today. If none are left, it stops before searching.
- 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.
- It writes a
RUN_SUMMARYrecord with counts, quota used, warnings and the stop reason.
Who uses it
Sellers
Check what rivals ask for the same product today.
Deal hunters
Find auctions that end soon, under your price.
Market analysts
Compare prices of one product on the US, UK and German sites.
Price
Prices will be shown after release.
Questions
Do I need an eBay key?
Yes. You make a free eBay developer account and paste your Client ID and Client Secret. Takes about 5 minutes.
Can I get sold prices?
No. The Browse API returns active listings only.
Is there a daily limit?
Yes. eBay gives each keyset 5,000 Browse API calls a day. One call returns up to 200 listings.
Does it need my eBay login?
No. It uses your API keys, not your account password.
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.
Details
Step by step on Apify
- Paste your Client ID and Client Secret.
- Keep the prefilled search (
iphone 13, 10 listings) or type your own keywords. - Click Start. Rows appear in the Output tab in a few seconds.
Use cases
- Competitor prices. Search your product with
condition: "new"andsort: "priceLowToHigh"to see the cheapest live offers with shipping. - Deal finding. Use
priceMaxandbuyingFormat: "auction"withsort: "endingSoonest"to see auctions that end soon. - Category feed. Pass only
categoryIdsto list items in an eBay category without a keyword. - Cross-site comparison. Run the same keywords on
EBAY_US,EBAY_GBandEBAY_DEand comparepriceandcurrency. - Repricing input. Schedule a daily run and send
itemId,priceandshippingCostto your sheet or database.
Tips for better results
- Sort by price low to high to see the cheapest live offers.
- Turn on the title filter so rows must contain your keywords.
- Run the same keywords on more than one eBay site to compare prices.
Limits and good to know
- 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
For developers
Sample result
One result from a real test run, in JSON. Real values change from run to run. In Excel or CSV each field is a column.
{
"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"
}Data fields (40)
| Field | Type | Meaning |
|---|---|---|
status | string | ok = an active listing (paid result); no_results = this search found no active listings (small empty-result fee); api_key_required = free notice when the Client ID or Client Secret is missing. |
itemId | string | eBay item number, as in ebay.com/itm/<itemId>. |
browseItemId | string | Browse API item id (v1|<item number>|<variation>), for eBay getItem calls. |
title | string | Listing title. |
price | number | Buy It Now price, or the current bid of an auction that has no Buy It Now price (see priceType). |
currency | string | Currency of price, e.g. USD, GBP or EUR. |
priceType | string | fixed = Buy It Now price; current_bid = highest bid so far. |
currentBid | number | Auctions only: current highest bid. |
bidCount | integer | Auctions only: number of bids. |
originalPrice | number | Price before the seller's markdown, when eBay shows a discount. |
discountPercent | number | Seller's markdown in percent, when eBay shows a discount. |
condition | string | Condition as eBay shows it on that site, e.g. New, Used, Good - Refurbished, Gebraucht. |
conditionId | string | eBay condition id: 1000 New, 1500 Open box, 2010–2030 Refurbished, 3000 Used, 7000 For parts. |
seller | string | Seller username. |
sellerFeedbackPercent | number | Seller positive feedback, 0–100. |
sellerFeedbackScore | integer | Seller feedback score. |
buyingOptions | array | FIXED_PRICE (Buy It Now), AUCTION, BEST_OFFER, CLASSIFIED_AD. |
shippingCost | number | Cheapest shipping cost eBay quotes for the delivery place; 0 = free shipping; null when eBay gives no amount (calculated at checkout or pickup only). |
shippingCostType | string | FIXED or CALCULATED. |
deliveryFrom | string | Earliest estimated delivery date (UTC, ISO 8601). |
deliveryTo | string | Latest estimated delivery date (UTC, ISO 8601). |
location | string | Item location as eBay shows it in search: masked postal code and country, e.g. 922**, US. |
locationCountry | string | Two-letter country code of the item location. |
categoryId | string | eBay leaf category id of the listing. |
categoryName | string | Category name, e.g. Cell Phones & Smartphones. |
listedAt | string | When the listing was created (UTC, ISO 8601). |
endsAt | string | When the auction or timed listing ends (UTC, ISO 8601); null for Good 'Til Cancelled listings. |
topRatedBuyingExperience | boolean | eBay Top Rated Plus listing. |
priorityListing | boolean | Promoted (sponsored) listing. |
epid | string | eBay catalogue product id, when the listing is matched to a product. |
itemGroupType | string | SELLER_DEFINED_VARIATIONS when the listing has variations such as sizes or colours. |
url | string | Listing page on eBay, without search tracking parameters. |
image | string | Main listing picture (large size). |
marketplace | string | eBay site searched, e.g. EBAY_US or EBAY_DE. |
query | string | Search keywords that found this row. |
categoryFilter | string | Category id the search was limited to, from categoryIds. |
position | integer | 1-based position in this search's results (in the sort order you chose). |
source | string | Always ebay-browse-api: the official eBay Browse API. |
fetchedAt | string | When this row was fetched (UTC, ISO 8601). |
message | string | Why a row is no_results or a key notice; null for listings. |
Input settings (15)
The main fields of the input form. With the API you send them as JSON.
| Setting | Name in the API | Type | Example value |
|---|---|---|---|
| eBay App ID (Client ID) | clientId | string | |
| eBay Cert ID (Client Secret) | clientSecret | string | |
| Search keywords | queries | array | ["iphone 13"] |
| Category IDs | categoryIds | array | |
| eBay site | marketplace | string | "EBAY_US" |
| Max listings per search | maxItems | integer | 10 |
| Sort by | sort | string | "bestMatch" |
| Every keyword in the title | titleMustMatch | boolean | false |
| Min price | priceMin | integer | |
| Max price | priceMax | integer | |
| Condition | condition | string | "any" |
| Buying format | buyingFormat | string | "all" |
| Item located in | itemLocationCountry | string | |
| Ship to country | deliveryCountry | string | |
| Ship to postal code | deliveryPostalCode | string |


