# eBay Product Scraper - Fast & Complete (`viralanalyzer/ebay-product-scraper`) Actor

Search eBay products by keyword. Extract prices, sellers, conditions, shipping, and image URLs. Bypasses anti-bot.

- **URL**: https://apify.com/viralanalyzer/ebay-product-scraper.md
- **Developed by:** [viralanalyzer](https://apify.com/viralanalyzer) (community)
- **Categories:** E-commerce, Marketing
- **Features:** Limited permissions
- **Stats:** 7 total users, 0 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: 5.00 out of 5 stars

## Pricing

from $26.25 / 1,000 product scrapeds

This Actor is paid per event and usage. You are charged both the fixed price for specific events and for Apify platform usage.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## 🛒 eBay Product Scraper — Search Results, Prices, Sellers & Shipping

> 🔗 [View on Apify Store](https://apify.com/viralanalyzer/ebay-product-scraper) | 🇺🇸 English | [🇧🇷 Português](#português)

Search **eBay products by keyword** and extract full listing details including prices, sellers, shipping costs, item condition, and images. Supports all major eBay domains (US, UK, DE, FR, IT, ES, CA, AU). Powered by the official eBay Browse API — real data, no anti-bot, no proxy needed.

### ✨ Features

- 🔍 **Keyword search** — Search any product on eBay by keyword
- 💲 **Price extraction** — Price + currency straight from the API (USD, GBP, EUR, CAD, AUD)
- 📦 **Shipping info** — Shipping costs and delivery details
- 🏷️ **Item condition** — New, Used, Refurbished, etc.
- 🌍 **8 eBay domains** — ebay.com, ebay.co.uk, ebay.de, ebay.fr, ebay.it, ebay.es, ebay.ca, ebay.com.au
- 🔃 **Sort options** — Best match, price ascending/descending, newly listed, ending soon
- 🛡️ **Anti-placeholder guardrails** — Every result validated against placeholder patterns
- ⚡ **Official eBay Browse API** — real data, no anti-bot blocks, fast (seconds per query)

### 📥 Input

| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| `searchQueries` | string\[] | ✅ | — | Keywords to search (1-20 queries) |
| `maxItemsPerQuery` | integer | ❌ | `48` | Max products per query (1-200) |
| `domain` | string | ❌ | `"ebay.com"` | eBay country domain |
| `sortBy` | string | ❌ | `"best_match"` | Sort order: `best_match`, `price_asc`, `price_desc`, `newly_listed`, `ending_soon` |

#### Input Example

```json
{
  "searchQueries": [
    "iphone 15 pro",
    "vintage vinyl records",
    "mechanical keyboard"
  ],
  "maxItemsPerQuery": 48,
  "domain": "ebay.com",
  "sortBy": "best_match"
}
```

### 📤 Output

Every product includes these fields:

| Field | Type | Description |
|---|---|---|
| `itemId` | string | eBay listing ID |
| `title` | string | Product title |
| `price` | number | Price value |
| `currency` | string | Currency code (USD, GBP, EUR, CAD, AUD) |
| `condition` | string | Item condition (New, Used, Refurbished, etc.) |
| `imageUrl` | string | Product image URL |
| `itemUrl` | string | eBay listing URL |
| `shipping` | string | Shipping cost/details |
| `sellerName` | string | Seller username |
| `sellerFeedback` | number | Seller positive feedback percentage |
| `buyingOptions` | string | FIXED_PRICE, AUCTION, BEST_OFFER |
| `itemLocation` | string | Item location city/state/country |
| `searchQuery` | string | Original search query |
| `platform` | string | Always `"ebay"` |
| `scrapedAt` | string | ISO 8601 timestamp |

#### Output Example

```json
{
  "itemId": "256218974831",
  "title": "Apple iPhone 15 Pro 256GB Natural Titanium Unlocked Very Good Condition",
  "price": 749.99,
  "currency": "USD",
  "condition": "Pre-Owned",
  "imageUrl": "https://i.ebayimg.com/thumbs/images/g/rH8AAOSwWkRnK3Vz/s-l300.webp",
  "itemUrl": "https://www.ebay.com/itm/256218974831",
  "shipping": "Free shipping",
  "sellerName": "cellularprofessor",
  "sellerFeedback": 99.5,
  "buyingOptions": "FIXED_PRICE",
  "itemLocation": "New York, NY, United States",
  "searchQuery": "iphone 15 pro",
  "platform": "ebay",
  "scrapedAt": "2026-03-06T14:22:31.456Z"
}
```

### 📋 Use Cases

- **Price Monitoring** — Track product prices across eBay domains over time
- **Competitor Analysis** — Compare seller prices, shipping, and conditions
- **Market Research** — Discover trending products and price ranges by category
- **Dropshipping Research** — Find profitable products with pricing and seller data
- **E-commerce Intelligence** — Monitor listing volumes and price fluctuations

### ✅ Capabilities & Limits

Stated up front, so you do not pay a run to find out.

**Built here:** the actor watches Apify's `APIFY_TIMEOUT_AT` and stops launching new searches once fewer than 20 seconds of the run budget remain - each API call's own timeout shrinks to whatever is left, floor 3 seconds. With the default 300s run timeout and up to 20 queries, a long batch is truncated rather than failed: you get the queries that finished, or one unbilled `DIAGNOSTIC_GUIDE` row if nothing was pushed yet.

| Input / feature | Supported | Notes |
|---|---|---|
| Keyword search | ✅ | `searchQueries` — required |
| Country domain | ✅ | `domain` selects which eBay marketplace to search |
| Sort order | ✅ | `sortBy` |
| Direct item URLs | ❌ | this actor searches; it does not accept item URLs |
| Sold / completed listings | ⚠️ | eBay restricts sold history — availability depends on the domain and sort chosen |
| Seller feedback history | ❌ | current listing data only |
| Bidding or buying | ❌ | read-only; it never places a bid or an order |
| Result volume | ⚠️ | `maxItemsPerQuery` per search term, ceiling 200 |
| Pagination | ❌ | one Browse API request per query; the actor never fetches a second page |
| Rate-limit backoff | ✅ | HTTP 429 and 5xx retry the same search after 1s, then 2s |

### ❓ FAQ

**Q: Which eBay domains are supported?**
A: The actor supports 8 domains: ebay.com (US), ebay.co.uk (UK), ebay.de (Germany), ebay.fr (France), ebay.it (Italy), ebay.es (Spain), ebay.ca (Canada), and ebay.com.au (Australia). Set the `domain` parameter to switch between them.

**Q: How many products can I scrape per run?**
A: Up to 20 queries per run, and `maxItemsPerQuery` caps each one at 200. Each query is a single Browse API request — the actor does not page past that first response, so 200 per query is a ceiling, not a promise: eBay decides how many summaries come back for your keyword. Results are deduplicated by listing ID across queries.

**Q: Do I need an eBay API key?**
A: No — the actor uses ViralAnalyzer's official eBay Browse API keyset. You only provide search keywords; real listing data is returned with no anti-bot blocks.

**Q: What sort options are available?**
A: Five options: `best_match` (default relevance ranking), `price_asc` (lowest price first), `price_desc` (highest price first), `newly_listed` (most recent listings), and `ending_soon` (auction listings ending soonest).

**Q: How does currency detection work?**
A: The currency comes from the Browse API `price.currency` field of each listing, not from parsing a page. When a listing omits it, the actor falls back to the currency of the domain you searched: USD, GBP, EUR, CAD or AUD.

### 💰 Pricing

This actor uses **Pay Per Event (PPE)** pricing:

| Metric | Cost |
|--------|------|
| Per product scraped | $0.05 |

### 🔗 Related Actors

- [Google Trends Scraper](https://apify.com/viralanalyzer/google-trends-scraper) — Trend data for product research
- [CoinGecko Crypto Intelligence](https://apify.com/viralanalyzer/coingecko-crypto-intelligence) — Crypto market data
- [Steam Game Intelligence](https://apify.com/viralanalyzer/steam-game-intelligence) — Steam game market data
- [TikTok Viral Scanner](https://apify.com/viralanalyzer/tiktok-viral-scanner) — Viral product trends

### 📝 Changelog

#### v3.0 (Current)

- ✅ Migrated to the official eBay Browse API — real data, no anti-bot, no proxy needed
- ✅ New output fields: `sellerFeedback`, `buyingOptions`, `itemLocation`
- ✅ Rate-limit handling: HTTP 429 / 5xx retried with 1s then 2s backoff, skipped when the run budget is too tight
- ❌ Pagination removed from the docs — it was never in the shipped code; one request per query

#### v1.0

- ✅ Keyword search on 8 eBay domains
- ✅ Full product data extraction (title, price, condition, seller, shipping, image)
- ✅ Multi-currency support (USD, GBP, EUR, CAD, AUD)
- ✅ 5 sort options (best match, price asc/desc, newly listed, ending soon)
- ✅ Anti-placeholder guardrails + deduplication
- ✅ PPE billing integration

***

<a name="português"></a>

## 🛒 eBay Product Scraper — Resultados de Busca, Preços, Vendedores e Frete

> [🇺🇸 English](#-ebay-product-scraper--search-results-prices-sellers--shipping) | 🇧🇷 Português

Busque **produtos no eBay por palavra-chave** e extraia detalhes completos dos anúncios incluindo preços, vendedores, custos de frete, condição do item e imagens. Suporta todos os principais domínios do eBay (US, UK, DE, FR, IT, ES, CA, AU). Alimentado pela API oficial eBay Browse — dados reais, sem anti-bot, sem proxy.

### ✨ Funcionalidades

- 🔍 **Busca por palavra-chave** — Busque qualquer produto no eBay por keyword
- 💲 **Extração de preços** — Preço + moeda direto da API (USD, GBP, EUR, CAD, AUD)
- 📦 **Informações de frete** — Custos de envio e detalhes de entrega
- 🏷️ **Condição do item** — Novo, Usado, Recondicionado, etc.
- 🌍 **8 domínios eBay** — ebay.com, ebay.co.uk, ebay.de, ebay.fr, ebay.it, ebay.es, ebay.ca, ebay.com.au
- 🔃 **Opções de ordenação** — Mais relevante, preço crescente/decrescente, mais recente, finalizando em breve
- 🛡️ **Guardrails anti-placeholder** — Todo resultado validado contra padrões falsos
- ⚡ **API oficial eBay Browse** — dados reais, sem bloqueios anti-bot, rápido (segundos por query)

### 📥 Entrada

| Parâmetro | Tipo | Obrigatório | Padrão | Descrição |
|---|---|---|---|---|
| `searchQueries` | string\[] | ✅ | — | Palavras-chave para busca (1-20 queries) |
| `maxItemsPerQuery` | inteiro | ❌ | `48` | Máximo de produtos por query (1-200) |
| `domain` | string | ❌ | `"ebay.com"` | Domínio do eBay por país |
| `sortBy` | string | ❌ | `"best_match"` | Ordenação: `best_match`, `price_asc`, `price_desc`, `newly_listed`, `ending_soon` |

#### Exemplo de Entrada

```json
{
  "searchQueries": [
    "iphone 15 pro",
    "vintage vinyl records",
    "mechanical keyboard"
  ],
  "maxItemsPerQuery": 48,
  "domain": "ebay.com",
  "sortBy": "best_match"
}
```

### 📤 Saída

Cada produto inclui estes campos:

| Campo | Tipo | Descrição |
|---|---|---|
| `itemId` | string | ID do anúncio no eBay |
| `title` | string | Título do produto |
| `price` | número | Valor do preço |
| `currency` | string | Código da moeda (USD, GBP, EUR, CAD, AUD) |
| `condition` | string | Condição do item (Novo, Usado, Recondicionado, etc.) |
| `imageUrl` | string | URL da imagem do produto |
| `itemUrl` | string | URL do anúncio no eBay |
| `shipping` | string | Custo/detalhes de frete |
| `sellerName` | string | Nome do vendedor |
| `sellerFeedback` | número | Percentual de feedback positivo do vendedor |
| `buyingOptions` | string | FIXED_PRICE, AUCTION, BEST_OFFER |
| `itemLocation` | string | Localização do item (cidade/estado/país) |
| `searchQuery` | string | Query de busca original |
| `platform` | string | Sempre `"ebay"` |
| `scrapedAt` | string | Timestamp ISO 8601 |

#### Exemplo de Saída

```json
{
  "itemId": "256218974831",
  "title": "Apple iPhone 15 Pro 256GB Natural Titanium Unlocked Very Good Condition",
  "price": 749.99,
  "currency": "USD",
  "condition": "Pre-Owned",
  "imageUrl": "https://i.ebayimg.com/thumbs/images/g/rH8AAOSwWkRnK3Vz/s-l300.webp",
  "itemUrl": "https://www.ebay.com/itm/256218974831",
  "shipping": "Free shipping",
  "sellerName": "cellularprofessor",
  "sellerFeedback": 99.5,
  "buyingOptions": "FIXED_PRICE",
  "itemLocation": "New York, NY, United States",
  "searchQuery": "iphone 15 pro",
  "platform": "ebay",
  "scrapedAt": "2026-03-06T14:22:31.456Z"
}
```

### 📋 Casos de Uso

- **Monitoramento de Preços** — Acompanhe preços de produtos em diferentes domínios do eBay
- **Análise de Concorrentes** — Compare preços, frete e condições entre vendedores
- **Pesquisa de Mercado** — Descubra produtos em alta e faixas de preço por categoria
- **Pesquisa de Dropshipping** — Encontre produtos lucrativos com dados de preço e vendedor
- **Inteligência E-commerce** — Monitore volumes de anúncios e flutuações de preço

### ❓ Perguntas Frequentes

**P: Quais domínios do eBay são suportados?**
R: O actor suporta 8 domínios: ebay.com (EUA), ebay.co.uk (Reino Unido), ebay.de (Alemanha), ebay.fr (França), ebay.it (Itália), ebay.es (Espanha), ebay.ca (Canadá) e ebay.com.au (Austrália). Defina o parâmetro `domain` para alternar entre eles.

**P: Quantos produtos posso extrair por execução?**
R: Até 20 queries por execução, e `maxItemsPerQuery` limita cada uma a 200. Cada query é uma única requisição à Browse API — o actor não avança para uma segunda página, então 200 por query é teto, não promessa: quem decide quantos anúncios voltam para a sua palavra-chave é o eBay. Resultados são deduplicados por ID do anúncio entre as queries.

**P: Preciso de uma chave de API do eBay?**
R: Não — o actor usa o keyset oficial da API eBay Browse da ViralAnalyzer. Você só fornece palavras-chave de busca; dados reais dos anúncios são retornados sem bloqueios anti-bot.

**P: Quais opções de ordenação estão disponíveis?**
R: Cinco opções: `best_match` (relevância padrão), `price_asc` (menor preço primeiro), `price_desc` (maior preço primeiro), `newly_listed` (anúncios mais recentes) e `ending_soon` (leilões finalizando em breve).

**P: Como funciona a detecção de moeda?**
R: A moeda vem do campo `price.currency` de cada anúncio na Browse API, não de leitura de página. Quando o anúncio não traz esse campo, o actor usa a moeda do domínio pesquisado: USD, GBP, EUR, CAD ou AUD.

### 💰 Preços

Este actor usa precificação **Pay Per Event (PPE)**:

| Métrica | Custo |
|---------|-------|
| Por produto extraído | $0.05 |

### 🔗 Actors Relacionados

- [Google Trends Scraper](https://apify.com/viralanalyzer/google-trends-scraper) — Dados de tendências para pesquisa de produtos
- [CoinGecko Crypto Intelligence](https://apify.com/viralanalyzer/coingecko-crypto-intelligence) — Dados de mercado cripto
- [Steam Game Intelligence](https://apify.com/viralanalyzer/steam-game-intelligence) — Dados de mercado de jogos Steam
- [TikTok Viral Scanner](https://apify.com/viralanalyzer/tiktok-viral-scanner) — Tendências virais de produtos

### 📝 Changelog

#### v3.0 (Atual)

- ✅ Migrado para a API oficial eBay Browse — dados reais, sem anti-bot, sem proxy
- ✅ Novos campos de saída: `sellerFeedback`, `buyingOptions`, `itemLocation`
- ✅ Tratamento de rate limit: HTTP 429 / 5xx repetem a mesma busca após 1s e depois 2s, e são abandonados quando o tempo da execução não comporta a espera
- ❌ Paginação retirada da documentação — nunca existiu no código publicado; é uma requisição por query

#### v1.0

- ✅ Busca por palavra-chave em 8 domínios do eBay
- ✅ Extração completa de dados (título, preço, condição, vendedor, frete, imagem)
- ✅ Suporte multi-moeda (USD, GBP, EUR, CAD, AUD)
- ✅ 5 opções de ordenação (relevância, preço asc/desc, mais recente, finalizando)
- ✅ Guardrails anti-placeholder + deduplicação
- ✅ Integração com cobrança PPE

# Actor input Schema

## `searchQueries` (type: `array`):

Keywords to search for on eBay (e.g., 'iphone 15 pro', 'vintage vinyl records').

## `maxItemsPerQuery` (type: `integer`):

Ceiling of products per search query. Each query is ONE eBay Browse API request with no pagination, so this caps the response — it does not force eBay to return that many.

## `domain` (type: `string`):

eBay country domain to search.

## `sortBy` (type: `string`):

Sort order for search results.

## Actor input object example

```json
{
  "searchQueries": [
    "iphone 15 pro"
  ],
  "maxItemsPerQuery": 5,
  "domain": "ebay.com",
  "sortBy": "best_match"
}
```

# Actor output Schema

## `results` (type: `string`):

Dataset containing all scraped results. Each item follows the dataset schema.

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "searchQueries": [
        "iphone 15 pro"
    ],
    "maxItemsPerQuery": 5
};

// Run the Actor and wait for it to finish
const run = await client.actor("viralanalyzer/ebay-product-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "searchQueries": ["iphone 15 pro"],
    "maxItemsPerQuery": 5,
}

# Run the Actor and wait for it to finish
run = client.actor("viralanalyzer/ebay-product-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "searchQueries": [
    "iphone 15 pro"
  ],
  "maxItemsPerQuery": 5
}' |
apify call viralanalyzer/ebay-product-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,viralanalyzer/ebay-product-scraper"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/IM1uv8JaLuKVCkoFk/builds/bcYx7TKAwo0z108uR/openapi.json
