ds@mcpanalytics.aiEmail your data and your question and get an answer about your own data, with the method shown.Email your data and question. Get an answer.

How to Use eBay Orders Item Performance Analysis: Step-by-Step Tutorial

By MCP Analytics Team | Published , updated

Category: eBay Analytics

Introduction to eBay Orders Item Performance Analysis

Understanding which items drive the most revenue and profit is critical for any eBay seller looking to scale their business. With hundreds or even thousands of SKUs, manually tracking performance becomes nearly impossible. That's where systematic item performance analysis comes in.

This tutorial will guide you through the complete process of analyzing your eBay orders data to identify your best-selling items, most profitable products, and opportunities to optimize your inventory strategy. Whether you're a casual seller or running a full-scale eBay business, these insights will help you make data-driven decisions about what to stock, what to promote, and what to discontinue.

By the end of this guide, you'll have a ranked view of your items by revenue and profit, and a way to sort them into groups that are worth more investment and groups that are costing you money. It is evidence for a decision, not the decision: stock availability, supplier terms and returns also matter.

The figures in the examples below come from a small synthetic data set generated for this tutorial (seven made-up items, 600 order lines, fixed random seed 42; the generator code is in Step 2). They are not from a real store, and your numbers will differ.

What You'll Accomplish

In this tutorial, you will:

Prerequisites and Data Requirements

What You'll Need

Before beginning this analysis, ensure you have the following:

1. Access to eBay Seller Hub

You'll need an active eBay seller account with access to Seller Hub, where eBay offers downloadable order reports. See eBay's Seller Hub Reports help page. Menu names and report options change, so eBay's current help is the reference.

2. Historical Orders Data

Use as many weeks of order data as you can: more orders per item makes each margin less jumpy. eBay's help says a report covers a date range of 1-90 days, so download several ranges and combine them for a longer view. Seasonal businesses may want to analyze a full year to account for fluctuations.

3. Cost Information

To calculate true profitability, you need accurate cost data for your items. This includes:

4. Required Data Fields

The code in this tutorial reads one row per order line with these columns. Your eBay export uses its own column names, so rename them and add the cost columns yourself:

order_number  - from the eBay export
sale_date     - from the eBay export
item_id       - from the eBay export
item_title    - from the eBay export
quantity      - units sold on the line
sale_price    - price per unit
item_cost     - you add: your cost per unit
shipping_cost - you add: what you paid to ship the order
ebay_fees     - you add: fees eBay charged on the order

5. A Place to Run the Calculation

A spreadsheet pivot table can do the grouping in Step 3. The pandas code below does the same in a few lines and is easier to repeat on next month's file.

Step 1: Access Your eBay Orders Data

The first step is extracting your complete orders history from eBay. Here's how to do it properly:

1.1 Download an orders report

eBay describes the download in its Seller Hub Reports help page. In eBay's words, you open the Reports tab in Seller Hub and choose the Download option on the left side, then click the button to download a report, pick Orders as the source, choose the report type you want (the page gives "All orders" and "Awaiting Shipment" as examples), set the date range ("from 1-90 days"), and confirm the download. A report you already generated is under "Recent downloads". We re-read that page on 2026-11-02; eBay can change it, so follow the current page.

1.2 Check the file format

eBay's help page names .xlsx and .csv only for uploads. For the download, open the file you get and, if it is not a CSV, save it as CSV from your spreadsheet program before using the code below. This tutorial works only on the file you export and never asks for access to your eBay account.

Expected Outcome: A file with the orders for the selected period.

1.3 Verify Your Data Export

Open the downloaded file and verify it contains:

Pro Tip: Download smaller date ranges and combine them; eBay's report range is limited (see 1.1).

Step 2: Prepare Your Data for Analysis

Raw eBay data often needs cleaning and enrichment before analysis. This step ensures accurate results.

2.1 Clean and Standardize Your Data

Open your file and perform these data quality checks:

# Example data cleaning checklist:
- Remove cancelled or unpaid orders
- Standardize date formats to YYYY-MM-DD
- Ensure numeric fields contain only numbers
- Remove duplicate order entries
- Verify SKU consistency across variants

2.2 Add Cost Information

To calculate profitability, you need to add cost data. Create or update these columns:

item_cost     - your acquisition cost per unit
shipping_cost - actual shipping cost you paid
ebay_fees     - fees eBay charged on the order, from your own transaction records

Use the actual fees from your records where you can. If you have to estimate them, eBay's selling fees page lists, for most categories on ebay.com, 13.6% of the total amount of the sale up to $7,500 per item and 2.35% of the portion above that, plus a per-order fee of $0.30 for orders of $10.00 or less and $0.40 for orders over $10.00. The total amount of the sale includes the item price, handling and shipping collected from the buyer, and sales tax. These are eBay's published rates as of November 2026; check eBay's fees page. Rates vary by category and seller status and eBay changes them. The 13.6% rate applies to "most categories" only; other categories have other rates.

Cost Calculation Example (illustrative): a $50.00 sale that includes shipping, with no sales tax.

Sale Price: $50.00
Item Cost: $20.00
Shipping Cost: $5.00
eBay Fees: $7.20 (13.6% of $50.00 = $6.80, plus $0.40 per-order fee)
---
Total Cost: $32.20
Net Profit: $17.80
Profit Margin: 35.6%

Payment processing is not a separate line in this example: the fees page says sellers do not have to worry about third-party payment processing fees. If you pay promoted listings or other fees, add them as further cost columns.

2.3 The made-up CSV used below

To show every step end to end, this script writes a made-up file of 600 order lines for seven made-up items over 2024-01-01 to 2024-03-31. It is not eBay data and not a real store. The eBay fee column uses the 13.6% plus $0.40 figures from the fee example above, so margins here only illustrate the arithmetic. The cost, price and sales-mix numbers are invented.

import numpy as np, pandas as pd
rng = np.random.default_rng(42)
catalog = {  # item_id: (title, price, unit_cost)
    101: ("Wireless Earbuds", 30.00, 17.00),
    102: ("USB-C Cable 3-Pack", 15.00, 8.00),
    103: ("Phone Case", 15.00, 5.50),
    104: ("Laptop Stand", 40.00, 24.00),
    105: ("Screen Protector Set", 20.00, 9.50),
    106: ("Camera Lens Cap", 6.00, 4.00),
    107: ("Discontinued Cable Clip", 4.00, 2.20),
}
weights = np.array([0.26, 0.22, 0.22, 0.10, 0.12, 0.05, 0.03])
n = 600
ids = rng.choice(list(catalog), size=n, p=weights)
start = pd.Timestamp("2024-01-01")
rows = []
for i, iid in enumerate(ids):
    title, price, cost = catalog[iid]
    q = int(rng.choice([1, 2, 3], p=[0.7, 0.2, 0.1]))
    rev = q * price
    rows.append(dict(order_number=f"ORD-{1000+i}",
        sale_date=(start + pd.Timedelta(days=int(rng.integers(0, 91)))).strftime("%Y-%m-%d"),
        item_id=iid, item_title=title, quantity=q, sale_price=price, item_cost=cost,
        shipping_cost=round(float(rng.choice([2.5, 3.5, 4.5])), 2),
        ebay_fees=round(0.136 * rev + 0.40, 2)))
pd.DataFrame(rows).to_csv("ebay_orders_prepared.csv", index=False)

Run with python3 gen.py (needs pandas and numpy). It writes ebay_orders_prepared.csv, which starts like this:

order_number,sale_date,item_id,item_title,quantity,sale_price,item_cost,shipping_cost,ebay_fees
ORD-1000,2024-03-30,104,Laptop Stand,1,40.0,24.0,4.5,5.84
ORD-1001,2024-02-16,102,USB-C Cable 3-Pack,3,15.0,8.0,4.5,6.52
ORD-1002,2024-02-26,105,Screen Protector Set,3,20.0,9.5,4.5,8.56

2.4 Group Variant Items

If you sell items with multiple variants (sizes, colors, etc.), decide whether to analyze them:

Expected Outcome: A clean, enriched dataset with all required fields populated and ready for analysis. Save this as a new file (e.g., "ebay_orders_prepared.csv") to preserve your original data.

Step 3: Calculate Item Performance

Now group the order lines by item and compute units, orders, revenue, profit and margin. Profit here is item revenue minus item cost, shipping cost and eBay fees; it leaves out shipping you charged the buyer, so treat it as a conservative figure.

import pandas as pd

# One row per order line, with your own cost columns added (see Step 2)
df = pd.read_csv('ebay_orders_prepared.csv', parse_dates=['sale_date'])

# Keep only orders that were paid; if your export has a status column, filter on it here.
df['revenue'] = df['quantity'] * df['sale_price']
df['total_cost'] = df['quantity'] * df['item_cost'] + df['shipping_cost'] + df['ebay_fees']
df['profit'] = df['revenue'] - df['total_cost']

items = df.groupby(['item_id', 'item_title']).agg(
    units=('quantity', 'sum'),
    orders=('order_number', 'nunique'),
    revenue=('revenue', 'sum'),
    profit=('profit', 'sum'),
).reset_index()
items['margin_pct'] = 100 * items['profit'] / items['revenue']

print(f"Items analyzed: {len(items)}")
print(f"Total revenue: ${items['revenue'].sum():,.2f}")
print(f"Total profit: ${items['profit'].sum():,.2f}")
print(f"Overall margin: {100 * items['profit'].sum() / items['revenue'].sum():.1f}%")
print(f"Date range: {df['sale_date'].min():%Y-%m-%d} to {df['sale_date'].max():%Y-%m-%d}")
print()
top = items.sort_values('revenue', ascending=False)
print(top[['item_title', 'units', 'orders', 'revenue', 'profit', 'margin_pct']].round(1).to_string(index=False))

Expected Output

Run on the made-up data set above (output copied from the run):

Items analyzed: 7
Total revenue: $18,459.00
Total profit: $3,885.13
Overall margin: 21.0%
Date range: 2024-01-01 to 2024-03-31

             item_title  units  orders  revenue  profit  margin_pct
       Wireless Earbuds    233     159   6990.0  1451.3        20.8
           Laptop Stand     80      61   3200.0   601.9        18.8
             Phone Case    195     137   2925.0   927.4        31.7
     USB-C Cable 3-Pack    192     129   2880.0   449.2        15.6
   Screen Protector Set    105      69   2100.0   551.8        26.3
        Camera Lens Cap     46      31    276.0   -62.5       -22.6
Discontinued Cable Clip     22      14     88.0   -33.9       -38.6

What each column means: units is the sum of quantity sold; orders is the count of distinct order numbers; revenue is quantity times sale price; profit is revenue minus item cost, shipping cost and eBay fees; margin_pct is profit divided by revenue, times 100. A negative profit means that item lost money on these assumed costs.

This is a descriptive ranking of totals and margins. It shows which items brought in the most revenue and profit in this period; it does not test whether one item's margin is truly higher than another's. With few orders per item, a margin can move a lot from one month to the next.

Expected Outcome: One row per item with revenue, profit and margin, and an overall margin you can check against your own records.

Step 4: Group Items by Revenue and Margin

Next, apply a simple rule so the ranking turns into groups. The rule here is a choice, not a law: revenue at or above the median item counts as high revenue, and a margin above 30% counts as high margin. Change both lines to suit your business.

# Segment items by revenue (above or below the median item) and margin (30% line)
median_revenue = items['revenue'].median()
high_revenue = items['revenue'] >= median_revenue
high_margin = items['margin_pct'] > 30

items['segment'] = 'Problem items'
items.loc[high_revenue & high_margin, 'segment'] = 'Stars'
items.loc[high_revenue & ~high_margin, 'segment'] = 'Cash cows'
items.loc[~high_revenue & high_margin, 'segment'] = 'Premium products'

print(items.sort_values('revenue', ascending=False)[['item_title', 'revenue', 'margin_pct', 'segment']].round(1).to_string(index=False))

Expected Output

             item_title  revenue  margin_pct       segment
       Wireless Earbuds   6990.0        20.8     Cash cows
           Laptop Stand   3200.0        18.8     Cash cows
             Phone Case   2925.0        31.7         Stars
     USB-C Cable 3-Pack   2880.0        15.6     Cash cows
   Screen Protector Set   2100.0        26.3 Problem items
        Camera Lens Cap    276.0       -22.6 Problem items
Discontinued Cable Clip     88.0       -38.6 Problem items

In this run, no item is both low revenue and above the 30% margin line, so the Premium products group is empty. The Screen Protector Set sits at 26.3% margin with revenue below the median, so the rule calls it a Problem item even though it is positive. Small changes to a threshold move items between groups, so look at the margin column and not only the label. The 30% line and the median are choices made for this example, not a standard.

Run It on Your Own eBay Export

Download an orders report from eBay (see Step 1), save it as a CSV and upload it at MCP Analytics, then ask the question in plain language; the report names the method. Nothing connects to your eBay account. Profit needs your item costs and actual fees, so add those columns before you upload.

Try it on your data

Step 5: Interpreting Your Results

Understanding what the numbers mean is crucial for taking effective action. Here's how to interpret your item performance data.

5.1 Identify Your Star Performers

Look for items that score high across multiple dimensions:

Star Performer Criteria:
✓ High revenue (at or above the median item, as in Step 4)
✓ High profit margin (>30%)
✓ Consistent sales velocity (check month by month)
✓ Low return rate (needs your returns data)
✓ Positive trend (needs a second period to compare)

Action Items for Stars:

5.2 Categorize Item Performance

Step 4 already sorted the items. Here is what each group usually calls for, with the matching rows from the made-up run above:

Cash Cows (high revenue, margin at or below 30%)

Wireless Earbuds: revenue 6990.0, margin 20.8%
Laptop Stand: revenue 3200.0, margin 18.8%
Question: can price or costs move so the margin rises?

Premium Products (revenue below the median, margin above 30%)

No item landed here in this run. If one does in your data, ask whether more stock would sell at the same margin.

Problem Items (revenue below the median, margin at or below 30%)

Camera Lens Cap: revenue 276.0, margin -22.6%
Discontinued Cable Clip: revenue 88.0, margin -38.6%
Question: are the costs wrong, or is the price too low to cover fees and shipping?

5.3 Analyze Profitability vs. Volume

Create a matrix to visualize the relationship:

           High Margin
                 |
   Premium  |  Stars
   Products |  (Invest)
  __________|__________
   Problem  |  Cash
   Items    |  Cows
  (Remove)  | (Maintain)
                 |
            Low Margin

5.4 Spot Trends and Opportunities

Look for these patterns:

Expected Outcome: A clear understanding of your inventory's performance landscape and specific action items for each category of product.

Next Steps with eBay Performance Optimization

Once you've completed your initial item performance analysis, here are strategic next steps to further optimize your eBay business:

1. Implement Dynamic Pricing

Use your performance data to optimize pricing:

2. Optimize Inventory Investment

Allocate your capital more effectively:

3. Expand Your Best Categories

Leverage what's already working:

4. Set Up a Regular Review

Make performance analysis a regular practice:

Recommended Schedule:
Weekly: Review top 20 items for stock levels
Monthly: Full item performance analysis
Quarterly: Strategic portfolio review
Annually: Category and supplier evaluation

5. Integrate Multi-Channel Analysis

If you sell on multiple platforms, compare performance. Just as sellers analyze Amazon FBA vs FBM performance to optimize fulfillment, comparing eBay to other channels reveals where each item sells best:

6. Enhance Your Listings

Use performance insights to improve listing quality:

Common Issues and Solutions

Issue 1: Incomplete or Missing Cost Data

Problem: Your eBay export doesn't include cost information, making profit calculations impossible.

Solution:

Issue 2: Variants Counted as Separate Items

Problem: A t-shirt in 5 sizes shows as 5 different items instead of one product line.

Solution:

Option A: Create a parent SKU field
- T-Shirt-Blue-Small → Parent: T-Shirt-Blue
- T-Shirt-Blue-Medium → Parent: T-Shirt-Blue
- Analyze by parent SKU to group variants

Option B: Analyze both ways
- Run separate analyses for variant-level and product-level
- Use variant analysis for inventory planning
- Use product-level for category decisions

Issue 3: Seasonal Items Skew Results

Problem: Christmas decorations show poor performance in summer data.

Solution:

Issue 4: High Return Rates Distort Profitability

Problem: An item shows good sales but returns eat into profit.

Solution:

Calculate adjusted profitability:
1. Export return/refund data separately
2. Match returns to original item sales
3. Subtract return costs from gross profit:
   - Refunded amount
   - Return shipping costs
   - Restocking costs or item losses
4. Calculate net profit after returns

Issue 5: New Items Have Insufficient Data

Problem: Products launched recently don't have enough sales history for meaningful analysis.

Solution:

Issue 6: Data Export Limits

Problem: eBay's help says report date ranges run from 1-90 days.

Solution:

Issue 7: Analysis Shows No Clear Winners

Problem: All items perform similarly with no standout stars or obvious problems.

Solution:

Issue 8: Promoted Listings Costs Not Factored In

Problem: Your profit calculations don't account for eBay advertising spend.

Solution:

Download promoted listings report:
1. Find the Promoted Listings campaign report in Seller Hub (names change; see eBay's help)
2. Export campaign performance by item
3. Match ad spend to item IDs
4. Add ad cost to total cost calculation:
   Total_Cost = Item_Cost + Shipping + eBay_Fees + Ad_Spend
5. Calculate true ROAS (Return on Ad Spend)

Conclusion: Turning Insights into Action

Item performance analysis is not a one-time exercise. It's an ongoing practice that separates successful eBay businesses from those that plateau. By systematically analyzing which items drive revenue and profit, you can make confident decisions about where to invest your capital, time, and marketing budget.

The key is moving from data to action. Use the insights you've gained to:

Remember that performance can change over time due to seasonality, competition, and market trends. Make item performance analysis a monthly habit to stay ahead of shifts and continuously optimize your product mix.

Run the two steps on a fresh export each month and compare the groups over time.

Your turn

Bring your own data and the question you actually need answered.

MCP AnalyticsData science by email Send us your data and your question, and we will reply. ds@mcpanalytics.ai

Explore more: eBay Seller Analytics: all tools, tutorials, and guides →