# eBay Keyword Research Tool: Find Keywords That Actually Sell (`epicscrapers/ebay-keyword-tool`) Actor

Find eBay keywords that actually sell. Turn one product idea into hundreds of long-tail keywords, each with eBay's real 90-day sales, sell-through, sold prices and best title words. Pay per keyword, no subscription.

- **URL**: https://apify.com/epicscrapers/ebay-keyword-tool.md
- **Developed by:** [Epic Scrapers](https://apify.com/epicscrapers) (community)
- **Categories:** E-commerce, SEO tools, Automation
- **Stats:** 1 total users, 1 monthly users, 97.2% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $12.00 / 1,000 keyword analyzeds

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
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 Keyword Research: long-tail keywords scored on real 90-day sales, sell-through and sold prices

eBay Keyword Research turns a product idea into hundreds of long-tail eBay keywords and measures each one on eBay itself: how many listings sold in the last 90 days, how many are listed now, how fast supply sells through, what buyers paid, who sells it, and which words the sold titles use. Every run also builds an interactive dashboard with an opportunity map and a title builder.

- **Measured on eBay, not modeled.** Sold and active counts are eBay's own result counts for the keyword. Prices, sellers and title words come from the keyword's latest ~200 sales. Every row links to eBay's sold and active searches so you can check any number.
- **Hundreds of keywords per seed.** Each seed is expanded through eBay's search suggestions, plus the seed followed by every letter and digit, so `leather wallet` returns `leather wallet bifold`, `portland leather goods wallet`, `harley davidson leather wallet with chain` and so on. Deep expansion goes further.
- **Built for volume.** Up to 50,000 keywords per run, 5–7 keywords a second, change tracking between scheduled runs, and rows that export cleanly to CSV, Excel or Google Sheets.
- **17 eBay marketplaces.** ebay.com, .co.uk, .de, .fr, .it, .es, .ca, .com.au, .nl, .at, .ch, .ie, .pl and the Asian sites, each with its own suggestions, currency and item specifics.
- **$2 per 100 keywords, no subscription.** Keywords with no listings or sales are free, and a minimum-sales filter lets you pay only for keywords that sell. No eBay account, API key, browser extension or proxy setup.

![Dashboard overview: summary cards, opportunity map of sales against sell-through, and keyword details](https://api.apify.com/v2/key-value-stores/lrJRPSvda0Qat0FUP/records/dashboard-overview.png)

**Scope:** This actor researches keywords. For every sold listing of a search (dates, prices, Best Offer flags, sellers), use [eBay Sold Listings API](https://apify.com/epicscrapers/ebay-sold-listings-api). For live listings, use [eBay Search Results Scraper](https://apify.com/epicscrapers/ebay-search-results-scraper).

### What can you do with it?

| Goal                             | How                                                                                                                  |
| -------------------------------- | -------------------------------------------------------------------------------------------------------------------- |
| Find what to source              | Sweep many seeds, filter to grade A/B, and sort by `sellThroughPct`: keywords where sales keep up with supply.       |
| Write titles that match buyers   | Use the title builder, or copy `titleKeywordsText`: the words that appear most in the titles of recent sales.        |
| Fill the right item specifics    | `buyerFilters` lists the item specifics buyers filter this search by (Brand, Style, Size…) with their common values. |
| Price a product line             | Compare `soldPriceP25`–`soldPriceP75` with `medianActivePrice` and eBay's own price bands per keyword.               |
| Avoid crowded niches             | `daysOfSupply` and `topSellerSharePct` show whether supply piles up or one seller owns the market.                   |
| Track a niche week by week       | Schedule the same task: every row carries the change in sales, listings, price and score since the last run.         |
| Compare markets                  | Run the same seeds on ebay.com, ebay.co.uk and ebay.de, in each site's language.                                     |
| Feed your own tools or AI agents | Pull the dataset through the API, or connect Make, Zapier, n8n or Google Sheets.                                     |

### How it compares

| What you need                  | eBay Keyword Research                                   | Suggestion-only keyword tools | Research subscriptions           |
| ------------------------------ | ------------------------------------------------------- | ----------------------------- | -------------------------------- |
| Keywords per seed              | Hundreds (suggestions, letters and digits, deep mode)   | Autosuggest list              | Varies, often capped per day     |
| Demand per keyword             | eBay's 90-day sold count and sales per day              | None                          | Modeled "search volume" or sales |
| Supply and sell-through        | Active listings, sell-through, days of supply           | None                          | Sometimes                        |
| Sold prices                    | Median, middle half, min/max, vs eBay's price bands     | None                          | Usually                          |
| Title words and item specifics | Counted from sold titles; eBay's buyer filters          | No                            | Title builders in some tools     |
| Change since last check        | On every row of a scheduled run                         | No                            | In some apps                     |
| Bulk and API                   | Up to 50,000 keywords per run, full API, JSON/CSV/Excel | Yes                           | Limited exports, API rarely      |
| Marketplaces                   | 17                                                      | Several                       | Varies                           |
| Price                          | $0.02 per keyword ($0.012 on Gold), no monthly fee      | About $0.004 per keyword      | A monthly fee, often $40–90      |

eBay doesn't publish search volume, so every "monthly searches" number you see for eBay is a model. This actor reports what eBay does publish, sold and active counts, and shows the listings behind them.

### Quick start

1. Click **Try for free** and sign in to Apify.
2. Add a seed to **Seed keywords**, for example `leather wallet`. Short product ideas work best.
3. Pick the **eBay marketplace**. Write seeds in that site's language (`geldbörse leder` for ebay.de).
4. Click **Start**. 100 keywords take about half a minute.
5. Open the **Output** tab: **Dashboard** opens the visual report, and the dataset has every number.

```json
{
    "keywords": ["leather wallet"],
    "site": "ebay.com",
    "maxKeywordsPerSeed": 100
}
```

### The dashboard

Every run saves `dashboard.html` to its key-value store and links it in the **Output** tab. It's one self-contained file with no outside requests that works on a phone and in dark mode, so you can download it, share it or print it.

- **Summary:** keywords analyzed, grade A/B count, median sell-through, keywords with sales and the best opportunity.
- **Filters** for text, seed, grade, minimum sales, minimum sell-through, price range and verdict. Every chart and the table follow them.
- **Opportunity map:** each keyword by 90-day sales and sell-through (upper right sells a lot and sells through), or by sales and active listings with sell-through diagonals. Hover for numbers, click for details.
- **Keyword details:** sold price range against eBay's price bands, words in sold titles, item specifics buyers filter by, seller concentration, condition mix, change since the last run, and recent sales linked to eBay.
- **Title builder:** the words of recent sales across your keywords, weighted by how much each keyword sells. Click words to build a title with an 80-character counter.
- **Revenue leaders:** keywords by estimated 90-day revenue.
- **Movers:** on scheduled runs, keywords whose sales rose or fell since the previous check.
- **Keyword table:** sortable, with checkboxes to scope the title builder and the export, **Copy keywords** and **Export CSV**.

![Keyword details: sold prices against eBay's price bands, words in sold titles, item specifics, sellers and recent sales](https://api.apify.com/v2/key-value-stores/lrJRPSvda0Qat0FUP/records/dashboard-keyword-detail.png)

![Title builder, revenue leaders, movers and the keyword table](https://api.apify.com/v2/key-value-stores/lrJRPSvda0Qat0FUP/records/dashboard-title-builder.png)

The page holds the 3,000 best keywords of a run; the dataset always has all of them.

### What data can you extract?

Every row is one keyword.

| Group        | Fields                                                                                                                                                                            |
| ------------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Keyword      | `keyword`, `site`, `seed`, `source` (`seed`, `suggestion`, `alphabet`, `deep`, `input`), `suggestPosition`, `suggestedFor`, `suggestCategory`, `searchUrl`, `soldSearchUrl`       |
| Scores       | `opportunityScore`, `grade`, `verdict`, `demandScore`, `competitionScore`                                                                                                         |
| Demand       | `soldListings90d`, `soldPerDay`, `sellThroughPct`, `daysOfSupply`, `estimatedRevenue90d`, `activeWithSalesPct`, `bestSellerQuantitySold`                                          |
| Supply       | `activeListings`, `sellersInSample`, `topSellerSharePct`, `topSellers`, `storeSellerPct`, `medianSellerFeedback`                                                                  |
| Price        | `currency`, `medianSoldPrice`, `averageSoldPrice`, `soldPriceP25`, `soldPriceP75`, `minSoldPrice`, `maxSoldPrice`, `medianActivePrice`, `ebayPriceBands`                          |
| Sales mix    | `auctionPct`, `bestOfferPct`, `freeShippingPct`, `topConditions`                                                                                                                  |
| Listing help | `titleKeywords` (term and share of sold titles), `titleKeywordsText`, `buyerFilters` (item specifics and values), `category` (id, name, path), `topLeafCategory`                  |
| Changes      | `previousCheckedAt`, `soldListings90dChange`, `soldListings90dChangePct`, `activeListingsChange`, `activeListingsChangePct`, `medianSoldPriceChangePct`, `opportunityScoreChange` |
| Evidence     | `recentSales` (title, price, date, seller, URL), `bestSellingListing`, `soldSampleSize`, `activeSampleSize`, `queryRewritten`, `checkedAt`                                        |

### How the score works

All scores are 0–100 and computed from the row's own numbers:

- **Demand** = sales per day on a log scale: 0.1 a day ≈ 10, 1 a day ≈ 35, 10 a day ≈ 67, 100 or more = 100.
- **Competition** = 75% days of supply (active listings ÷ daily sales: 30 days ≈ 19, 90 ≈ 37, 180 ≈ 49, 450 ≈ 65) + 25% the listing count itself (1,000 ≈ 50, 1 million = 100), because a huge result set is hard to rank in even when it sells.
- **Opportunity** = √(Demand × (100 − Competition)), so a keyword needs both sales and room.

Grades: A 70+, B 55–69, C 40–54, D 25–39, F below 25. The verdict uses the sell-through bands resellers use (50%+ sells well, 20–50% average, under 20% slow): for example "Hot: high demand and selling through", "High demand, oversupplied" or "Solid niche: steady sales, selling through".

Busy, healthy niches score mostly C and B, and A is rare. Compare keywords within a run rather than chasing a grade.

### Research at scale

#### Big keyword lists

Turn off **Discover keywords** and paste your own list (thousands of keywords) to measure exactly those. Or sweep many seeds with discovery on. A run analyzes 5–7 keywords a second at the default 4 GB memory; less memory is slower but costs the same.

#### Scheduled tracking

1. Set your seeds and marketplace, then click **Save as a new task**.
2. In Apify Console, go to **Schedules**, click **Create new**, pick a time (for example weekly on Monday at 06:00) and add the task. See [Schedules](https://docs.apify.com/platform/schedules).
3. Keep **Track changes between runs** on. Each row then has the change in 90-day sales, active listings, median price and score since the last check, and the dashboard shows the movers.
4. Connect Google in the task's **Integrations** tab to append every run to Google Sheets, or use Make, Zapier or n8n.

The history lives in the key-value store `ebay-keyword-tool-history` on your account, one small record per marketplace, filters and keyword, so different tasks with the same keywords share it.

| Use case                       | Frequency       | Cron expression |
| ------------------------------ | --------------- | --------------- |
| Sourcing and niche tracking    | Weekly (Monday) | `0 6 * * 1`     |
| Seasonal items (Q4, holidays)  | Daily           | `0 6 * * *`     |
| Monthly market review per site | Monthly         | `0 6 1 * *`     |

#### Use it from code

```bash
curl -X POST "https://api.apify.com/v2/acts/epicscrapers~ebay-keyword-tool/run-sync-get-dataset-items?maxTotalChargeUsd=2" \
  -H "Authorization: Bearer <YOUR_APIFY_TOKEN>" \
  -H "Content-Type: application/json" \
  -d '{"keywords": ["leather wallet"], "site": "ebay.com", "maxKeywordsPerSeed": 100}'
```

`maxTotalChargeUsd` caps the cost of the run: the actor stops exactly at the limit and keeps everything collected. The dashboard is at `https://api.apify.com/v2/key-value-stores/<defaultKeyValueStoreId>/records/dashboard.html` and a run summary at `…/records/SUMMARY`. The actor also works with the [Apify API clients](https://docs.apify.com/api/client/js) for JavaScript and Python.

### Input reference

| Field                | Type             | Default      | Effect                                                                                                     |
| -------------------- | ---------------- | ------------ | ---------------------------------------------------------------------------------------------------------- |
| `keywords`           | Array of strings | Required     | Seeds to expand, or the exact keywords to measure when discovery is off.                                   |
| `expandKeywords`     | Boolean          | `true`       | Expand each seed through eBay's search suggestions. Off: analyze only your list.                           |
| `alphabetExpansion`  | Boolean          | `true`       | Also expand `seed a` … `seed z` and `seed 0` … `seed 9`.                                                   |
| `deepExpansion`      | Boolean          | `false`      | Also expand every keyword found. More long tail; raise the limits with it.                                 |
| `maxKeywordsPerSeed` | Integer          | `100`        | Keywords per seed, 1–5,000. The seed's own suggestions come first, then the top suggestion of each letter. |
| `maxKeywords`        | Integer          | `1000`       | Keywords per run, 1–50,000.                                                                                |
| `site`               | String           | `"ebay.com"` | One of 17 eBay marketplaces. Prices come in its currency.                                                  |
| `categoryId`         | String           | none         | Limit every search to an eBay category ID, e.g. `2996` for Wallets.                                        |
| `condition`          | String           | `"all"`      | `all`, `new` or `used`.                                                                                    |
| `minPrice`           | Integer          | none         | Count only listings and sales at or above this price.                                                      |
| `maxPrice`           | Integer          | none         | Count only listings and sales at or below this price.                                                      |
| `minSoldListings90d` | Integer          | `0`          | Save only keywords with at least this many sales in 90 days. Keywords below it are free.                   |
| `trackChanges`       | Boolean          | `true`       | Add the change since the previous check of each keyword.                                                   |
| `includeListings`    | Boolean          | `true`       | Add the 3 latest sales and the best-selling active listing to each row.                                    |

### Ready-to-run examples

#### Sweep a product line for sourcing ideas

```json
{
    "keywords": ["leather wallet", "leather belt", "leather card holder", "leather keychain"],
    "maxKeywordsPerSeed": 200,
    "minSoldListings90d": 30
}
```

In the dashboard, set **Min sell-through** to 50 and sort the table by score.

#### Measure your own keyword list

```json
{
    "keywords": ["vintage levis 501", "levis 505 orange tab", "carhartt detroit jacket", "patagonia synchilla"],
    "expandKeywords": false,
    "condition": "used"
}
```

#### Research the German market

```json
{
    "keywords": ["geldbörse leder", "gürtel leder herren"],
    "site": "ebay.de",
    "maxKeywordsPerSeed": 150
}
```

Suggestions, item specifics and prices come back in German and euros.

#### Go deep in one category

```json
{
    "keywords": ["lego star wars"],
    "deepExpansion": true,
    "maxKeywordsPerSeed": 1000,
    "categoryId": "19006"
}
```

### Analyze the results with ChatGPT or Claude

Export the dataset as CSV (the **Opportunities** view keeps it small) and attach it to a chat. Some prompts to start with:

**Pick what to source.** "These are eBay keywords with 90-day sales, active listings, sell-through and median sold price. Group them into product ideas and, for each idea, give the three keywords with the best sell-through that sell at least once a day. Recommend two ideas for a reseller with a $500 budget and explain why."

**Write a listing.** "Using the `titleKeywordsText` and `buyerFilters` columns of the grade A and B keywords, write an eBay title of at most 80 characters for \[your item] and list the item specifics I should fill in."

**Compare markets.** "These are the same seeds on ebay.com and ebay.co.uk. Per keyword pair, compare sell-through and median price and list where the UK looks easier."

### Output

Results go to the run's default dataset, with the views **Opportunities**, **Prices and sellers** and **Changes since last run**, and to `dashboard.html` and `SUMMARY` in the key-value store.

This is a real row from a `leather wallet` run on October 9, 2026, with lists shortened:

```json
{
    "keyword": "portland leather goods wallet",
    "site": "ebay.com",
    "seed": "leather wallet",
    "source": "alphabet",
    "suggestPosition": 2,
    "suggestedFor": "leather wallet g",
    "opportunityScore": 60,
    "grade": "B",
    "verdict": "Hot: high demand and selling through",
    "demandScore": 59,
    "competitionScore": 38,
    "activeListings": 486,
    "soldListings90d": 525,
    "soldPerDay": 5.83,
    "sellThroughPct": 108,
    "daysOfSupply": 83.3,
    "currency": "USD",
    "medianSoldPrice": 31.81,
    "averageSoldPrice": 38.24,
    "soldPriceP25": 22.98,
    "soldPriceP75": 40,
    "minSoldPrice": 6.55,
    "maxSoldPrice": 369.99,
    "medianActivePrice": 30,
    "estimatedRevenue90d": 16700,
    "ebayPriceBands": [30, 40],
    "auctionPct": 9,
    "bestOfferPct": 35.5,
    "freeShippingPct": 13.5,
    "topConditions": [
        { "condition": "Pre-Owned", "pct": 51 },
        { "condition": "New (Other)", "pct": 35.5 },
        { "condition": "Brand New", "pct": 13.5 }
    ],
    "sellersInSample": 158,
    "topSellerSharePct": 3,
    "topSellers": [{ "seller": "jle734", "sales": 6 }],
    "storeSellerPct": 3.5,
    "medianSellerFeedback": 521,
    "category": { "id": "260010", "name": "Women", "path": "Clothing, Shoes & Accessories > Women" },
    "titleKeywords": [
        { "term": "zip", "titlesPct": 22.5 },
        { "term": "bifold wallet", "titlesPct": 20 },
        { "term": "brown", "titlesPct": 19 }
    ],
    "titleKeywordsText": "zip (22.5%), bifold wallet (20%), brown (19%), mini (15%), card (14%), women (13%), snap (12.5%), small (11.5%), full (11%), accordion (9.5%)",
    "buyerFilters": [
        { "name": "Color", "values": ["Black", "Blue", "Brown", "Green", "Multicolor"] },
        { "name": "Type", "values": ["Wallet", "Card Wallet", "Envelope Wallet", "Coin Wallet", "Pouch Wallet"] }
    ],
    "soldSampleSize": 200,
    "searchUrl": "https://www.ebay.com/sch/i.html?_nkw=portland+leather+goods+wallet",
    "soldSearchUrl": "https://www.ebay.com/sch/i.html?_nkw=portland+leather+goods+wallet&LH_Sold=1&LH_Complete=1",
    "checkedAt": "2026-10-09T16:52:14.309Z",
    "previousCheckedAt": "2026-10-09T16:15:45.593Z",
    "soldListings90dChange": 0,
    "activeListingsChange": 1,
    "medianSoldPriceChangePct": 0,
    "recentSales": [
        {
            "title": "Portland Leather Goods Green Snap Wallet w/ Zip Coin Pocket, Women’s Credit",
            "price": 24.99,
            "soldAt": "2026-10-09T00:00:00.000Z",
            "seller": "vintage.wrevin",
            "url": "https://www.ebay.com/itm/307196673419"
        }
    ]
}
```

#### Notes on fields

- `soldListings90d` and `activeListings` are eBay's own result counts for the keyword, so they include eBay's loose matches, the same as eBay's website. eBay keeps about 90 days of sold listings, and a multi-quantity listing counts once however many units it sold.
- `sellThroughPct` = 90-day sold listings ÷ active listings × 100, the usual reseller formula. It can go above 100%.
- Prices, sellers, conditions and title words come from the latest ~200 sales (`soldSampleSize`). Best Offer sales are left out of the price figures, because eBay shows the asking price, not the accepted offer.
- On ebay.co.uk, ebay.fr and ebay.it, prices are what buyers saw, including eBay's Buyer Protection fee on private sellers' items.
- `ebayPriceBands` are the price steps eBay offers as a filter for the search, limited to your price range.
- `estimatedRevenue90d` is `medianSoldPrice × soldListings90d`, an estimate.
- `queryRewritten` is true when eBay found nothing for the exact words and showed "results matching fewer words"; those loose results are not counted.
- `suggestPosition` is the keyword's position in the eBay suggestion list that surfaced it (1 = first).
- Missing values are `null`. Every row has `checkedAt` in UTC.

### FAQ

#### Why no search volume?

eBay doesn't publish it, so every eBay "search volume" figure is an estimate. Sold listings show demand that turned into orders, and active listings show the supply you compete with.

#### Why fewer keywords than my limit?

The limit is a maximum. eBay suggests only so many searches for some seeds. Keywords with no listings and no sales are skipped and not charged. Turn on deep expansion or add related seeds to get more.

#### How fresh is the data?

Every run reads eBay live; nothing is cached between runs.

#### Does it work outside the US?

Yes, on 17 eBay sites. eBay has no suggestion list for the Hong Kong, Malaysia, Philippines and Singapore sites, so discovery there uses the US list; the numbers are still from the site you chose.

#### How fast is it?

5–7 keywords a second at the default 4 GB memory: 1,782 keywords took 6 minutes in a test, including discovery.

#### Why did my run stop early?

If the status says the spending limit was reached, the run hit its maximum cost. Everything analyzed before that is saved, and the dashboard covers it.

#### Do I need proxies, an eBay account or an API key?

No. The actor handles connections and retries itself and doesn't log in.

#### Is it legal?

The actor reads publicly visible search data and no buyer data. You are responsible for how you use it, including eBay's terms and laws such as GDPR.

### Cost

Pay per analyzed keyword, with no subscription. Platform usage and proxies are included.

| Event            | Price                                     | Charged when                                                                                    |
| ---------------- | ----------------------------------------- | ----------------------------------------------------------------------------------------------- |
| Keyword analyzed | $0.02 ($20 per 1,000), less on paid plans | A keyword is saved. Keywords without listings or sales, below your minimum, or failed are free. |
| Actor start      | $0.00005                                  | Once per run (per GB of memory).                                                                |

On Apify's paid plans a keyword costs $0.018 (Bronze), $0.015 (Silver) or $0.012 (Gold and above).

| Run                                      | Cost (free plan) |
| ---------------------------------------- | ---------------- |
| 1 seed, 100 keywords                     | $2               |
| 4 seeds × 200 keywords                   | $16              |
| 200 tracked keywords, weekly for a month | $16              |
| 5,000 keywords from your own list        | $100             |

A research subscription costs $40–60 a month whether you use it or not. Here that buys 2,000–3,000 keywords, each with eBay's sold data, and a month without research costs nothing.

Set `minSoldListings90d` to skip keywords that barely sell; they are not charged. Set a maximum cost per run and the actor stops exactly there. The **Pricing** tab always shows the current prices.

### Support

Report problems or request features in the **Issues** tab. Include the run ID, the input and what you expected. We read every issue.

This actor is not affiliated with or endorsed by eBay Inc. "eBay" is a trademark of eBay Inc. Terapeak, ZIK Analytics, Algopix and KeywordTool.io are trademarks of their respective owners; this actor is not affiliated with them.

# Actor input Schema

## `keywords` (type: `array`):

Products or niches to research, e.g. leather wallet. With keyword discovery on, each one is expanded through eBay's search suggestions; with it off, exactly these keywords are analyzed (paste up to thousands).

## `expandKeywords` (type: `boolean`):

Expand each seed into the long-tail keywords eBay suggests to buyers. Turn off to analyze only your own list.

## `alphabetExpansion` (type: `boolean`):

Also ask eBay for suggestions of "seed a" … "seed z" and "seed 0" … "seed 9" (up to ~350 keywords per seed).

## `deepExpansion` (type: `boolean`):

Also ask for suggestions of every keyword found. Finds more long-tail keywords; use with a higher keyword limit.

## `maxKeywordsPerSeed` (type: `integer`):

Cap per seed. The seed's own suggestions come first, then the top suggestion of every letter, then the second, so a low cap keeps the strongest keywords.

## `maxKeywords` (type: `integer`):

Cap for the whole run, across all seeds. The run's spending limit also stops it.

## `site` (type: `string`):

eBay site to research. Counts, prices and suggestions are for this marketplace, prices in its currency.

## `categoryId` (type: `string`):

Limit every search to an eBay category (the number after /b/…/ or \_sacat= in an eBay URL), e.g. 2996 for Wallets.

## `condition` (type: `string`):

Count only new or only used listings and sales.

## `minPrice` (type: `integer`):

Count only listings and sales at or above this price (site currency).

## `maxPrice` (type: `integer`):

Count only listings and sales at or below this price (site currency).

## `minSoldListings90d` (type: `integer`):

Save only keywords with at least this many sold listings in the last 90 days. Keywords below it are not saved and not charged.

## `trackChanges` (type: `boolean`):

Remember each keyword's numbers and add the change since the last check (sales, listings, price, score). Made for scheduled runs. Stored in the key-value store ebay-keyword-tool-history on your account.

## `includeListings` (type: `boolean`):

Add the 3 most recent sales and the best-selling active listing to each keyword, so the numbers can be checked.

## Actor input object example

```json
{
  "keywords": [
    "leather wallet"
  ],
  "expandKeywords": true,
  "alphabetExpansion": true,
  "deepExpansion": false,
  "maxKeywordsPerSeed": 100,
  "maxKeywords": 1000,
  "site": "ebay.com",
  "condition": "all",
  "minSoldListings90d": 0,
  "trackChanges": true,
  "includeListings": true
}
```

# Actor output Schema

## `dashboard` (type: `string`):

No description

## `keywords` (type: `string`):

No description

## `summary` (type: `string`):

No description

# 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 = {
    "keywords": [
        "leather wallet"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("epicscrapers/ebay-keyword-tool").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 = { "keywords": ["leather wallet"] }

# Run the Actor and wait for it to finish
run = client.actor("epicscrapers/ebay-keyword-tool").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 '{
  "keywords": [
    "leather wallet"
  ]
}' |
apify call epicscrapers/ebay-keyword-tool --silent --output-dataset

```

## MCP server setup

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

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/6tXwcYVza3Xyuumko/builds/p9wdu5Lvd7dXKjHNI/openapi.json
