E-commerce
eBay Product & Listings Scraper
Search eBay's live active listings by keyword and get clean, structured rows -- title, price, condition, buying format, item URL, and thumbnail -- with sponsored and malformed cards filtered out automatically.
Free Apify credit covers a first run. No credit card to try.
What this Actor scrapes
One row per active eBay listing card matching your search. Sponsored placeholder cards ("Shop on eBay") and malformed cards are filtered out automatically — you only get real listings.
What we handle for you
- Keyword search, no login required — search eBay's live listings the same way a shopper does, no account or API key needed on your end.
- Filter by category, condition, price range, and buying format — narrow results before you pay for a single row.
- Sponsored and malformed cards filtered automatically — placeholder "Shop on eBay" cards and broken cards never reach your dataset.
- We rotate browser fingerprints —
curl-cffiwith Chrome/Firefox/Safari TLS impersonation, so eBay's servers see real-browser traffic, not raw Python. - We handle the warm-up dance — eBay's search endpoint 403s a cold request; we collect the bot-manager cookie first, then reuse that session for every search page.
- We retry with exponential backoff —
408 / 429 / 5xxtrigger a retry sequence (2s → 30s cap, up to 5 attempts), honouringRetry-After. - We rotate proxies and sessions on every block — a fresh
session_idand a fresh impersonation profile on every 403, through Apify Proxy. - Clean, Pydantic-validated rows — every dataset row passes schema validation before it lands. ISO 8601 timestamps, stable column names.
- Pay only for results that land — no data, no charge beyond the small
actor-startwarm-up fee.
Use cases
- Reseller price-checking — pull live asking prices for a product line before you list or restock, filtered by condition and price band.
- Price-intelligence pipelines — feed
price/condition/buying_formatinto a downstream pricing model, refreshed on a schedule. - Market research — sweep a category for buying-format mix (auction vs. fixed-price vs. best-offer) and price distribution.
- Arbitrage scouting — compare
priceacrossmin_price/max_pricebands to spot underpriced listings worth flipping. - Competitive monitoring — track how many active listings and what price range a competitor's product category holds right now.
Input
Paste this into the Apify Console, or send it as the run input over the API. Proxy settings are on by default; you rarely need to touch them.
| Field | Type | Required | What it does |
|---|---|---|---|
query | string | yes | Search keywords, passed to eBay's search box (e.g. iphone 13, fender stratocaster). 1-200 characters. |
maxResults | integer | no | Cap on how many result rows to collect across pages. Range 1-1000. |
categoryId | string | no | eBay numeric category ID to narrow the search (e.g. 9355 for cell phones). Leave blank to search all categories. |
conditionIds | array | no | eBay numeric item-condition IDs to filter by (e.g. 1000 for New, 3000 for Used). Leave blank for all conditions. |
minPrice | number | no | Lowest price to include, in USD. Leave blank for no lower bound. |
maxPrice | number | no | Highest price to include, in USD. Must be >= Minimum price when both are set. Leave blank for no upper bound. |
buyingFormat | string | no | Restrict results to a specific buying format. |
{
"query": "iphone 13",
"maxResults": 100,
"buyingFormat": "any",
"proxyConfiguration": {
"useApifyProxy": true
}
} Output
One row per result, schema-validated before it is written. Export JSON, CSV, Excel or XML from the run, or read it over the API.
item_idtitlepricecurrencyconditionbuying_formatbids_countitem_urlimage_urlqueryscraped_at
{
"item_id": "196123456789",
"title": "Apple iPhone 13 Pro Max 256GB Unlocked",
"price": 270.74,
"currency": "USD",
"condition": "Pre-Owned",
"buying_format": "best_offer",
"bids_count": null,
"item_url": "https://www.ebay.com/itm/196123456789",
"image_url": "https://i.ebayimg.com/images/g/abc123/s-l500.jpg",
"query": "iphone 13 pro max",
"scraped_at": "2026-08-13T12:00:00+00:00"
} Pricing
| Event | Price | When |
|---|---|---|
| Actor start | $0.20 | Once per run, covers warm-up and proxy session setup. |
| Result row emitted | $0.0012 | Per result written to the dataset. |
You pay only for results that land. Cap any run with maxTotalChargeUsd. See pricing & billing for worked examples.
Limitations
- Active listings only — this Actor covers eBay's live "for sale" search. Sold/completed listings are a separate product.
ebay.com(US) only, v1 — other eBay marketplaces and non-USD currencies are out of scope for this version.- Card-level data only — description, seller feedback score, shipping cost, item specifics, and return policy require a detail-page fetch and aren't included.
- No seller identity — seller username, store name, and feedback score aren't exposed on the search-result card.
- Point-in-time runs — this Actor doesn't monitor for new listings continuously; schedule repeat runs via Apify's Scheduler if you need that.
- Unresolvable prices ship as
null— a range or starting-bid price that can't resolve to one number shipsprice: nullrather than a guessed value.
FAQ
Q: Do I need an eBay account or API key?
Q: Can I filter by condition and price at the same time?
conditionIds, minPrice, maxPrice, and buyingFormat all combine in a single search.Q: What happens if eBay blocks the request?
Q: Does this cover sold or completed listings?
Q: Can I get more than 1,000 results per run?
maxResults caps at 1000. Narrow your query or split by categoryId/price band and run multiple queries for larger coverage.Ready to run it?
Open the listing on Apify, paste the input above, and watch rows land. If it ever breaks, it is our problem before it is yours.
Related Actors