How to Use Order Cancellation Analysis in Amazon: Step-by-Step Tutorial
By MCP Analytics Team | Published , updated
Introduction to Order Cancellation Analysis
Order cancellations are one of the most frustrating metrics for Amazon sellers. A cancelled order can mean lost revenue and, depending on the order, wasted advertising spend or a worse customer experience. Whether you're seeing a handful of cancellations or experiencing a concerning trend, understanding why your Amazon orders are being cancelled is critical to protecting your bottom line and maintaining a healthy seller account.
Amazon order cancellations happen for various reasons: inventory issues, fulfillment delays, pricing errors, product listing problems, or customer-initiated cancellations before shipment. Without proper analysis, it is hard to distinguish between one-off incidents and systemic problems that could threaten your business.
This tutorial will walk you through a comprehensive order cancellation analysis process. You'll learn how to calculate your cancellation rate, identify which products are most problematic, analyze timing patterns, and ultimately take data-driven action to reduce cancellations. By the end of this guide, you'll have a clear framework for monitoring and improving this critical metric. The example figures in this tutorial are made up to show the layout of each result; they come from no real store and are not benchmarks.
Which route to use: the default route is the spreadsheet. Export your orders, filter them, and use a pivot table for every step below. Python and MySQL are optional, for larger exports where a spreadsheet gets slow; the worked example uses Python only to generate made-up data, and the queries are a SQL version of what a pivot table does.
Prerequisites and Data Requirements
Before diving into the analysis, ensure you have the following in place:
Access Requirements
- Amazon Seller Central Account with administrative access
- Order Report Permissions to download historical order data
- At least 30 days of order history (a longer window helps when order counts are low)
- Spreadsheet software (Excel, Google Sheets) or analytics platform
Data You'll Need
Export an order report from Seller Central. Report names and available columns differ by report type and marketplace, so check the headers of your own file. You need these fields or their equivalents:
- Order ID
- Order Date
- Order Status (including cancelled orders)
- Product SKU / ASIN
- Product Title
- Cancellation Reason (if available)
- Cancellation date and time (only some reports include one; Step 3 needs it for the timing analysis)
- Fulfillment Method (FBA vs FBM)
- Order Total
Recommended Timeframe
For your first analysis, 90 days is a starting window, not a rule. Whether it is enough depends on how many orders and how many cancellations it contains, and on seasonality: a window with only a handful of cancellations will give unstable rates, and a window that covers only a peak or a quiet season may not represent the rest of the year. Widen it if counts are small, and adjust it if you're investigating a specific issue.
Worked Example: Cancellation Rate by SKU
Steps: 0 Prerequisites | 1 Calculate the overall rate | 2 Find the products cancelled most | 3 Check when cancellations occur | 4 Interpret and act
Question: Which item has the highest cancellation rate in this sample?
Inputs: Simulated data, seed 41. The script makes 160 orders with one SKU on each order, four SKUs, a status and an order value. It gives SKU-A a 25% cancellation chance and the other three SKUs 6%. That 25% versus 6% difference was built into the simulation. The data are simulated, not from a store.
Method: Group orders by SKU. Divide cancelled orders by all orders for that SKU. Add the full order value once for each cancelled order.
Result: SKU-A has the highest rate, 30.77% (12 of 39 orders), and a cancelled order value of 698 in the sample's units. Because the simulation gave SKU-A a 25% cancellation chance and the other three SKUs 6%, the example recovers a difference that was built in; it is not a finding about a real store. The other SKUs show 1, 2 and 3 cancellations, too few to rank. The sample cannot say why any order was cancelled.
| SKU | Orders | Cancelled | Rate (%) | Cancelled order value |
|---|---|---|---|---|
| SKU-A | 39 | 12 | 30.77 | 698 |
| SKU-B | 28 | 1 | 3.57 | 67 |
| SKU-C | 43 | 2 | 4.65 | 122 |
| SKU-D | 50 | 3 | 6.00 | 123 |
Limit: This made-up sample has one SKU per order and cannot show why a real buyer or seller cancels.
Exact printed output of the script below:
Simulated data, seed 41
Input: 160 orders, one SKU per order, four SKUs
SKU | orders | cancelled | rate_pct | cancelled_order_value
SKU-A | 39 | 12 | 30.77 | 698
SKU-B | 28 | 1 | 3.57 | 67
SKU-C | 43 | 2 | 4.65 | 122
SKU-D | 50 | 3 | 6.00 | 123
Finding: SKU-A has the highest cancellation rate (30.77%).
Built in: SKU-A was given a 25% cancellation chance and the other three SKUs 6%, so the highest rate is the one that was set up.
The data cannot say why orders were cancelled.
Show the script
import numpy as np
# Simulated order-level data for a small shop.
seed = 41
rng = np.random.default_rng(seed)
skus = np.array(["SKU-A", "SKU-B", "SKU-C", "SKU-D"])
order_count = 160
sku = rng.choice(skus, size=order_count)
order_value = rng.integers(18, 91, size=order_count)
chance = {"SKU-A": 0.25, "SKU-B": 0.06, "SKU-C": 0.06, "SKU-D": 0.06}
status = np.array([
"Cancelled" if rng.random() < chance[item] else "Complete"
for item in sku
])
print(f"Simulated data, seed {seed}")
print(f"Input: {order_count} orders, one SKU per order, four SKUs")
print("SKU | orders | cancelled | rate_pct | cancelled_order_value")
for item in skus:
mask = sku == item
total = int(mask.sum())
cancelled = mask & (status == "Cancelled")
count = int(cancelled.sum())
rate = 100 * count / total
value = int(order_value[cancelled].sum())
print(f"{item} | {total} | {count} | {rate:.2f} | {value}")
rates = {item: (status[sku == item] == "Cancelled").mean()
for item in skus}
focus = max(rates, key=rates.get)
mask = sku == focus
count = int((mask & (status == "Cancelled")).sum())
pct = 100 * count / int(mask.sum())
print(f"Finding: {focus} has the highest cancellation rate "
f"({pct:.2f}%).")
print("Built in: SKU-A was given a 25% cancellation chance and "
"the other three SKUs 6%, so the highest rate is the one "
"that was set up.")
print("The data cannot say why orders were cancelled.")
Step 1: Calculate Your Overall Cancellation Rate
Your first objective is to establish a baseline: what percentage of your orders are being cancelled? This single metric provides immediate context about whether you have a significant problem or just normal marketplace friction.
How to Calculate Cancellation Rate
The formula is straightforward:
Cancellation Rate = (Number of Cancelled Orders / Total Orders) × 100
Step-by-Step Calculation
- Filter your order data to include all orders within your analysis period (e.g., last 90 days)
- Count total orders regardless of status
- Count cancelled orders by filtering where Order Status = "Cancelled"
- Apply the formula to get your percentage
Example Calculation (made-up numbers)
Total Orders (90 days): 2,847
Cancelled Orders: 142
Cancellation Rate = (142 / 2,847) × 100 = 4.99%
Reading Your Cancellation Rate
This rate counts cancelled orders in the data and period you choose. It is not Amazon's account-health metric.
Expected Output
At this stage, you should have a single percentage that represents your overall cancellation rate. Document this number. It's your key performance indicator for tracking improvement over time.
Step 2: Identify Which Products Get Cancelled Most
Not all products contribute equally to your cancellation rate. Often, a small number of SKUs account for the majority of cancellations. Identifying these problematic products allows you to focus your efforts where they'll have the greatest impact.
Creating a Product-Level Cancellation Report
You'll need to group your order data by product (SKU or ASIN) and calculate cancellation metrics for each:
- Create a pivot table or use GROUP BY in your analysis tool
- Group by Product SKU (or ASIN if you prefer)
- Calculate for each product:
- Total orders
- Cancelled orders
- Cancellation rate (%)
- Associated full-order value of cancelled orders (see the note below the query)
- Sort by cancellation count or cancellation rate (descending)
Example Analysis Query
The query is written for MySQL (DATE_SUB and INTERVAL are MySQL syntax) against a table amazon_orders that you create by importing your export. For item rows, first make one row per order and SKU. Count distinct order IDs for both the total and cancelled counts. The query assumes that order date and order_total match across the rows for each order and SKU, and that order_total is the full order value. If they differ, MAX keeps one of them. The outer query groups by product_sku alone and takes the title with MAX(product_title), so a SKU whose title changed between rows stays one row; MAX returns the alphabetically last title, not necessarily the newest. An order and SKU counts as cancelled if any of its rows has status Cancelled, so a partly cancelled order counts as cancelled here. The query adds that value once per cancelled order and SKU, and labels the sum associated_full_order_value. If an order has more than one SKU, its full value appears in every SKU group, so these values must not be added across SKUs to get a store total or a revenue impact.
WITH order_sku AS (
SELECT
order_id,
MAX(order_date) AS order_date,
product_sku,
MAX(product_title) AS product_title,
MAX(CASE WHEN order_status = 'Cancelled' THEN 1 ELSE 0 END) AS is_cancelled,
MAX(order_total) AS order_total
FROM amazon_orders
GROUP BY order_id, product_sku
)
SELECT
product_sku,
MAX(product_title) AS product_title,
COUNT(DISTINCT order_id) AS total_orders,
COUNT(DISTINCT CASE WHEN is_cancelled = 1
THEN order_id END) AS cancelled_orders,
ROUND(100.0 * COUNT(DISTINCT CASE WHEN is_cancelled = 1
THEN order_id END)
/ NULLIF(COUNT(DISTINCT order_id), 0), 2) AS cancellation_rate,
SUM(CASE WHEN is_cancelled = 1
THEN order_total ELSE 0 END) AS associated_full_order_value
FROM order_sku
WHERE order_date >= DATE_SUB(CURRENT_DATE, INTERVAL 90 DAY)
GROUP BY product_sku
HAVING COUNT(DISTINCT order_id) >= 10
ORDER BY cancelled_orders DESC
LIMIT 20;
Example Output
These rows are invented to show the layout of the result; they come from no real store.
| Product SKU | Product Title | Total Orders | Cancelled | Cancel Rate | Associated Full-Order Value (cancelled) |
|---|---|---|---|---|---|
| SKU-9472 | Premium Wireless Headphones | 387 | 53 | 13.7% | $3,869 |
| SKU-2156 | Stainless Steel Water Bottle | 521 | 41 | 7.9% | $738 |
| SKU-8834 | Organic Cotton T-Shirt | 298 | 35 | 11.7% | $612 |
What to Look For
- High-volume, high-rate products: These are your biggest problems (e.g., SKU-9472 above)
- Products with 100% cancellation rates: May indicate listing errors or stock issues
- New products with high cancellation: Possible listing quality issues or inaccurate descriptions
- Order value: Even low-rate cancellations on high-value items need attention. Remember the value column double counts multi-SKU orders across SKU groups, so treat it as a rough size, not revenue lost
Understanding these product-level patterns is crucial for effective Amazon performance optimization. For sellers comparing fulfillment methods, our Amazon FBA vs FBM performance analysis can help identify whether your fulfillment strategy is contributing to cancellation issues.
Step 3: Analyze When Cancellations Occur
Timing patterns can suggest hypotheses about the why behind cancellations. Are orders being cancelled immediately after placement (which may point to pricing or listing issues)? Days later (which may point to fulfillment problems)? Timing alone does not show the cause, so check each hypothesis against cancellation reasons or fulfillment events.
Time-Based Metrics to Calculate
A. Time-to-Cancellation
How long after order placement do cancellations occur?
Time to Cancellation = Cancellation Date - Order Date
This needs a cancellation date and time for each order, which only some reports include. If your export has none, skip the timing table below rather than estimating it.
B. Day-of-Week Patterns
Are certain days more prone to cancellations?
This query uses the same one-row-per-order-and-SKU step as Step 2. An order and SKU counts as cancelled if any of its rows has status Cancelled, so a partly cancelled order counts as cancelled here.
WITH order_sku AS (
SELECT
order_id,
MAX(order_date) AS order_date,
product_sku,
MAX(CASE WHEN order_status = 'Cancelled' THEN 1 ELSE 0 END) AS is_cancelled
FROM amazon_orders
GROUP BY order_id, product_sku
)
SELECT
DAYNAME(order_date) AS day_of_week,
COUNT(DISTINCT order_id) AS total_orders,
COUNT(DISTINCT CASE WHEN is_cancelled = 1
THEN order_id END) AS cancelled_orders,
ROUND(100.0 * COUNT(DISTINCT CASE WHEN is_cancelled = 1
THEN order_id END)
/ NULLIF(COUNT(DISTINCT order_id), 0), 2) AS cancellation_rate
FROM order_sku
WHERE order_date >= DATE_SUB(CURRENT_DATE, INTERVAL 90 DAY)
GROUP BY DAYNAME(order_date)
ORDER BY
FIELD(DAYNAME(order_date), 'Monday', 'Tuesday', 'Wednesday',
'Thursday', 'Friday', 'Saturday', 'Sunday');
One order can have several rows in an export (one per item or SKU), so counting rows would count the same order more than once. This query uses the same order_sku step as Step 2 and counts distinct order IDs. An order with several SKUs is still one order, because COUNT(DISTINCT order_id) counts it once per weekday. It groups orders by the weekday they were placed. Raw counts of cancelled orders would mostly show which days are busy, so the query divides by all orders placed that weekday. A weekday with few orders gives a noisy rate, so read the counts next to it. To see which days cancellations are made, group by the cancellation date instead, if your data has one.
C. Cancellation Timing Distribution
This table is an illustration with made-up percentages (they sum to 100); it is not measured from any data set. The right-hand column lists hypotheses to test, not causes.
| Time Period | Percentage | Possible explanation (hypothesis) |
|---|---|---|
| Within 1 hour | 23% | Buyer's remorse, price surprise |
| 1-24 hours | 31% | Reconsideration, found a better price |
| 1-3 days | 28% | Fulfillment delays, inventory issues |
| 3+ days | 18% | Shipping delays, change of mind |
Analyzing Cancellation Reasons
If your order data includes cancellation reasons (who initiated and why), break these down:
- Customer-initiated: Buyer changed mind, found better price, ordered by mistake
- Seller-initiated: Out of stock, pricing error, can't fulfill in time
- Amazon-initiated: Payment issues, fraud detection, policy violations
Expected Insights
By the end of this step, you should understand:
- How quickly cancellations happen after order placement
- Whether certain days or times see more cancellations
- Who is initiating cancellations and why
- Whether cancellations correlate with fulfillment events
These temporal patterns, combined with your product-level analysis, form the foundation for actionable improvements. If you're running promotions or testing different strategies, consider applying A/B testing statistical significance principles to measure the impact of your changes.
Interpreting Your Results and Taking Action
Now that you've calculated your cancellation rate, identified problematic products, and analyzed timing patterns, it's time to transform data into decisions. Here's how to interpret your findings and take corrective action.
Common Cancellation Patterns and Solutions
Pattern 1: High Cancellation on Specific Products
Symptoms: 1-3 SKUs account for 50%+ of all cancellations
Possible causes to check:
- Inaccurate product descriptions or images
- Pricing significantly different from competitors
- Inventory sync issues causing overselling
- Long fulfillment times compared to alternatives
Actions to Take:
- Audit product listings for accuracy and completeness
- Compare pricing against top 5 competitors
- Review inventory management system for sync delays
- Consider switching fulfillment method (FBA vs FBM) for these items
- Add clearer product specifications and expectations in listing
Pattern 2: Quick Cancellations (Within Hours)
Symptoms: Majority of cancellations occur within 1-6 hours of order
Possible causes to check:
- Customer price-shopping (found better deal elsewhere)
- Unclear shipping timeline at checkout
- Customer didn't notice total price with shipping
- Order placed accidentally (one-click purchases)
Actions to Take:
- Review competitor pricing daily and adjust strategically
- Ensure delivery promises are clear and realistic
- Consider offering Prime shipping if not already
- Improve product page clarity about total costs
- Send immediate order confirmation with clear value proposition
Pattern 3: Delayed Cancellations (2+ Days After Order)
Symptoms: Cancellations cluster 2-5 days post-order
Possible causes to check:
- Fulfillment delays or lack of tracking updates
- Inventory issues discovered after order acceptance
- Customer found alternative source with faster shipping
- Payment processing delays
Actions to Take:
- Improve inventory accuracy and how often stock counts are updated
- Reduce time-to-ship for merchant-fulfilled orders
- Proactively communicate shipping status to customers
- Consider switching problem SKUs to FBA for faster fulfillment
- Review and optimize payment processing workflows
Setting Up Ongoing Monitoring
Cancellation analysis isn't a one-time exercise. Establish a monitoring cadence:
- Weekly: Check overall cancellation rate for anomalies
- Bi-weekly: Review product-level cancellation trends
- Monthly: Deep-dive analysis including timing patterns and reason codes
- Quarterly: Compare against your own earlier quarters and set new targets
To make the check routine, save the rate query or spreadsheet so that each new export gives you the weekly numbers without rebuilding anything.
Run It on Your Own Amazon Export
Export your orders as a CSV and upload it at MCP Analytics.
Troubleshooting Common Issues
Issue 1: Cancellation Data is Incomplete or Missing
Problem: Your order reports don't include cancellation reasons or timing data.
Solution:
- Verify the report you downloaded includes cancelled orders and not only shipped ones
- Check that your date range includes the full order lifecycle (orders may cancel days later)
- Report names and columns differ by report type, so check the headers of your file for status and date fields
- If your own script reads orders through an API, store each order's status changes as well as its current status
Issue 2: Cancellation Rate Seems Artificially High
Problem: Your calculated rate is higher than expected.
Solution:
- Ensure you're excluding test orders or internal orders from your dataset
- Verify that "Pending" orders aren't being counted as cancellations
- Check if you're accidentally counting order modifications as cancellations
- Filter to completed time periods (don't include partial weeks/months)
Issue 3: Can't Identify Root Cause for Specific Products
Problem: A product has high cancellations but the reason isn't clear from data.
Solution:
- Review recent customer questions and negative reviews for that ASIN
- Check competitor listings for pricing, shipping speed, and features
- Verify product images and descriptions match what's actually shipped
- Compare these cancellations with your own earlier periods
- Contact recent customers who cancelled to gather qualitative feedback
Issue 4: Changes Aren't Reducing Cancellation Rate
Problem: You've made improvements but cancellations remain high.
Solution:
- Allow sufficient time (2-4 weeks) for changes to impact metrics
- Ensure changes are actually live (check product pages while logged out)
- Verify inventory is actually available and syncing correctly
- Test the full customer journey yourself (place and track a test order)
- Consider that external factors (seasonality, market changes) may be influencing rates
Issue 5: Different Results Between FBA and FBM
Problem: Cancellation rates vary significantly between fulfillment methods.
Solution:
- Rates can differ between FBA and FBM; the reasons depend on your products and process
- Segment your analysis by fulfillment method to identify method-specific issues
- For FBM items, focus on reducing time-to-ship and improving tracking
- Consider migrating high-cancellation FBM products to FBA
- Review our detailed guide on Amazon FBA vs FBM performance for optimization strategies
Next Steps: Continuous Improvement
Completing this analysis is just the beginning. To maintain healthy cancellation rates and protect your Amazon business, implement these ongoing practices:
Immediate Actions (This Week)
- Document your baseline: Record your current overall cancellation rate and top 5 problematic products
- Fix critical issues: Look first at the products with the highest cancellation rates
- Set up monitoring: Create a weekly reminder to check your cancellation metrics
- Audit top products: Manually review listings, inventory, and pricing for your highest-cancellation items
Short-Term Actions (Next 30 Days)
- Implement fixes: Apply the pattern-specific solutions identified in your analysis
- Test improvements: Use controlled changes and measure impact over 2-4 week periods
- Expand analysis: Include additional dimensions like customer segments, advertising source, or device type
- Benchmark competitors: Research cancellation-related complaints in competitor reviews
Long-Term Strategy (Ongoing)
- Automate the calculation: Save the queries or spreadsheet so each new export gives you the weekly rate
- Integrate with other metrics: Connect cancellation analysis with inventory management, pricing strategy, and customer service data
- Quarterly deep dives: Perform comprehensive analysis every quarter to identify new trends
- Optimize fulfillment: Continuously evaluate FBA vs FBM performance and adjust accordingly
- Customer feedback loops: Systematically collect and analyze feedback from customers who cancel
Additional Resources
- Performance Optimization: Compare fulfillment methods using our FBA vs FBM performance analysis
Remember, reducing cancellations is an ongoing process, not a one-time fix. Markets change, customer expectations evolve, and new competitors emerge. By establishing systematic analysis and continuous improvement practices, you'll stay ahead of issues before they impact your bottom line.
Conclusion
Order cancellations are an inevitable part of selling on Amazon, but they don't have to be a mystery or a major revenue drain. By following this step-by-step tutorial, you've learned how to:
- Calculate your cancellation rate and track it against your own history
- Identify specific products driving the majority of cancellations
- Analyze timing patterns to understand when and why cancellations occur
- Interpret results and take targeted corrective action
- Set up ongoing monitoring to catch issues early
The key to success is treating cancellation analysis as an ongoing discipline rather than a one-time project. With regular monitoring, data-driven decision-making, and the right tools, you can systematically reduce cancellations, protect revenue, and improve customer satisfaction.
Start with one export, look first at the products with the highest cancellation rates, and compare your rate with your own earlier periods as you make changes.
Explore more: Amazon Seller Analytics: all tools, tutorials, and guides →
Not sure which plan? Compare plans →