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 Sales by Location in Amazon: Step-by-Step Tutorial

By MCP Analytics Team | Published , updated

Group your Amazon orders by ship state and see how many orders, how much revenue and what average order value each state has. The example runs on a small made-up file, with the code and output shown.

Introduction to Sales by Location Analysis

Knowing where your orders ship to can inform inventory placement, advertising and fulfillment questions. A sales-by-location table is a starting point for those questions, not an answer to them.

When you analyze sales by location, you're answering critical business questions: Are your products resonating in urban or rural areas? Which states generate the highest revenue? Should you adjust your FBA vs FBM strategy based on regional performance? Where might a test of your advertising budget be worth running?

This tutorial will walk you through the complete process of accessing, analyzing, and acting on your Amazon sales location data. The example in Step 2 uses a small made-up file generated for this tutorial (200 orders across 6 states, fixed random seed), not a real store, so your numbers will differ.

What You'll Learn

Prerequisites and Data Requirements

Before diving into geographic analysis, ensure you have the following prerequisites in place:

Required Access and Tools

Understanding Your Export

Which reports and columns you can download depends on your account and marketplace, so check what your own export contains before you plan the analysis. Amazon has a help page titled "Order Reports".

Data Quality Checklist

Before proceeding, verify your data quality:

Step 1: Access Your Amazon Order Data

The foundation of geographic analysis is your raw order data from Amazon Seller Central. Here's how to access it:

1.1 Download an Order Report

Download an order report from Seller Central that lists each order with its shipping state. Amazon's help page "Order Reports" is the place to start. This tutorial does not give menu paths, because Amazon changes them; use the page and your account's own menus. Report names and columns differ by report type and marketplace, so check the headers of your own file.

1.2 Choose Your Report Settings

Set the report so that it covers what you need:

Date range: last 90 days (or your preferred period)
Format: CSV or tab-delimited
Columns needed: order id, order date, ship state (ideally also ship city
  and ship postal code), item price, quantity, order status

Request the report, wait until Seller Central says it is ready, and download it.

1.3 Expected Data Structure

For geographic analysis you need a ship state column, a price, a quantity and a status. Here are three made-up rows in that shape (your column names may differ):

order-id | purchase-date | ship-city   | ship-state | ship-postal-code | item-price | quantity-purchased
AMZ-001  | 2024-01-15    | Los Angeles | CA         | 90001            | 29.99      | 1
AMZ-002  | 2024-01-15    | Austin      | TX         | 78701            | 45.50      | 2
AMZ-003  | 2024-01-16    | Seattle     | WA         | 98101            | 29.99      | 1

Verification Point: Ensure your downloaded file contains ship-city, ship-state, and ship-postal-code columns. If these are missing, try another report type, since columns differ by report.

Step 2: Prepare Data for Geographic Analysis

Raw Amazon data requires cleaning and structuring before meaningful analysis can begin.

2.1 Clean Your Dataset

Open your downloaded CSV file and perform these cleaning steps:

  1. Remove Canceled Orders: Filter out any orders with status "Canceled" or "Pending"
  2. Standardize State Codes: Ensure all states use two-letter abbreviations (CA, NY, TX, etc.)
  3. Handle Missing Data: Remove or flag orders with incomplete shipping information
  4. Format Currency: Ensure all price fields are numeric (remove currency symbols)

2.2 Create Analysis Columns

Add calculated fields to enable deeper analysis:

// Layout: A order-id | B purchase-date | C ship-city | D ship-state
//         E ship-postal-code | F item-price | G quantity-purchased | H order-status (completed orders only)
// Cell I2, line revenue, filled down (if your item-price column is already the line total, skip the multiplication):
=F2*G2
// Cell J2, region, filled down (an example grouping of states):
=IF(OR(D2="CA",D2="OR",D2="WA"),"West Coast",IF(OR(D2="NY",D2="MA",D2="CT"),"Northeast",IF(OR(D2="TX",D2="FL",D2="GA"),"South","Other")))

The hyphenated names are column headers in the export. A formula refers to cells such as F2, because a hyphen inside a formula would be read as subtraction. Column I is revenue per item line; to count orders per state, count distinct order ids rather than rows.

2.3 Aggregate by Location (worked example, made-up data)

This code makes a made-up order file with a fixed seed and groups it by ship state. It needs only Python 3. Cancelled orders are dropped first. We ran it with python3 -I ex.py; every number below is its output.

import csv, io, random
from collections import defaultdict
random.seed(7)
states = ["CA","TX","NY","FL","WA","WY"]
weights = [30, 22, 17, 15, 12, 2]
rows = [["order-id","ship-state","item-price","quantity-purchased","order-status"]]
for i in range(1, 201):
    s = random.choices(states, weights)[0]
    price = random.choice([19.99, 29.99, 45.50, 59.00])
    qty = random.choice([1, 1, 1, 2])
    status = random.choices(["Shipped","Cancelled"], [92, 8])[0]
    rows.append([f"A-{i:04d}", s, price, qty, status])
buf = io.StringIO(); csv.writer(buf).writerows(rows)
open("orders.csv","w").write(buf.getvalue())
print("first 4 rows:"); print("\n".join(buf.getvalue().splitlines()[:5]))
data = list(csv.DictReader(open("orders.csv")))
print("rows:", len(data), "cancelled:", sum(r["order-status"]=="Cancelled" for r in data))
agg = defaultdict(lambda: [0, 0.0])
for r in data:
    if r["order-status"] != "Shipped": continue
    a = agg[r["ship-state"]]; a[0] += 1; a[1] += float(r["item-price"])*int(r["quantity-purchased"])
tot_o = sum(v[0] for v in agg.values()); tot_r = sum(v[1] for v in agg.values())
print("state orders revenue aov share")
for s,(o,rv) in sorted(agg.items(), key=lambda kv:-kv[1][1]):
    print(f"{s:5} {o:6} {rv:9.2f} {rv/o:6.2f} {100*rv/tot_r:5.1f}%")
print("total", tot_o, f"{tot_r:.2f}")

Output:

first 4 rows:
order-id,ship-state,item-price,quantity-purchased,order-status
A-0001,TX,29.99,2,Shipped
A-0002,CA,19.99,1,Shipped
A-0003,WA,29.99,1,Shipped
A-0004,TX,29.99,1,Shipped
rows: 200 cancelled: 15
state orders revenue aov share
CA        54   2492.20  46.15  27.7%
TX        42   2186.26  52.05  24.3%
FL        34   1721.24  50.62  19.1%
NY        29   1271.34  43.84  14.1%
WA        22   1153.93  52.45  12.8%
WY         4    174.47  43.62   1.9%
total 185 8999.44

What each output column means:

Verification Point: The state revenues should add up to the total. Here the six states add up to $8,999.44 over 185 shipped orders (15 of the 200 rows were cancelled and left out). Compare your own total to the total in your report for the same dates.

Limits: the file is made up, so the ranking says nothing about real Amazon sellers. Wyoming has 4 orders, so its average order value of $43.62 could change a lot with one more order. Read every figure next to its order count.

Step 3: Analyze Geographic Distribution Patterns

Now that your data is prepared, it's time to extract meaningful insights from geographic patterns.

3.1 Identify Top Performing Regions

Sort your aggregated data by total revenue to identify your strongest markets:

  1. Create a bar chart showing top 10 states by revenue
  2. Calculate each state's percentage of total sales
  3. Identify concentration: Do 80% of sales come from 20% of states?

3.2 Analyze Population-Adjusted Performance

Raw numbers can be misleading. A state with high population naturally generates more orders. Calculate revenue per capita to find true opportunities:

// Revenue per 100,000 residents = state revenue / state population * 100000
// Use a population table you download yourself (for example, official
// state population estimates) and join it on the two-letter state code.

Raw totals follow population, so dividing by population shows where you sell more than population alone would predict. Be careful with small places. In the example data, WY has 4 orders and $174.47 of revenue (1.9% of the total), so a single extra order moves its per-resident figure a lot. A high figure built on few orders is a lead to check against order counts, repeat purchases and advertising exposure. It is not evidence of product-market fit.

3.3 Map Urban vs Rural Distribution

To split orders into urban and rural, join their postal codes to a classification table from a source you trust and report how many orders have codes that are not in the table. This tutorial does not include a worked example of that join. Once you have the split, it can inform fulfillment method decisions and shipping cost optimization.

3.4 Seasonal and Temporal Patterns

Compare geographic distribution across different time periods:

Verification Point: You should be able to answer: What are my top 5 states by revenue? Are there any surprising geographic strongholds for my products, and how many orders sit behind each?

Step 4: Combine Location With Other Measures

Once state totals are in place, you can set other measures beside them.

4.1 Add Other Measures

Join your own files to the state totals on the state code:

Analysis dimensions:
- State + advertising spend = regional ROAS (return on ad spend:
  revenue attributed to ads divided by ad spend)
- State + return rates = returns by region
- State + delivery times = fulfillment speed by region
- State + repeat purchases = repeat behavior by region

Each pairing needs the second measure in a file of your own, with the same state codes. Read each result with the order counts beside it.

4.2 Review Changes Each Month

When you re-run the analysis on a new export, look for changes such as these (the cutoffs are examples to adjust):

Step 5: Interpret Your Results and Take Action

Data without action is just numbers. Here's how to translate geographic insights into business improvements.

5.1 Optimize Fulfillment Strategy

As an example, if most of your orders came from the West Coast and your stock sat in one fulfillment center far away, shipping cost and delivery time could be worth checking for that market. Check your own shipping data before acting.

Action Items:

5.2 Refine Advertising Targeting

Geographic data can suggest where to test more (or less) advertising spend. These are ideas to check against your own results:

Regions to consider testing more spend:
- States with high revenue per capita
- Growing markets (month-over-month increase)
- Markets with high conversion rates

Regions to consider testing less spend:
- High ad cost with low conversion
- Returns significantly above average
- Persistently low order values

5.3 Identify Expansion Opportunities

Look for adjacent markets showing promise:

5.4 Understand Competitive Dynamics

Weak results in an expected market have many possible causes, local competition among them:

5.5 Seasonal Planning

Different regions may show different seasonal patterns:

Verification Point: Create an action plan with at least three concrete changes you'll implement based on your geographic analysis. Each action should have a measurable outcome.

Step 6: Advanced Geographic Insights

Once you've mastered basic geographic analysis, these advanced techniques can provide competitive advantages.

6.1 Repeat Purchases by Region

Repeat purchase rate and lifetime value by state need a customer identifier on each order, a fixed observation window and a formula (for example, orders per customer or revenue per customer over that window). An order export may not carry a usable customer identifier, so this may not be possible from your file. If you can compute it, show the number of customers behind each state beside the figure, since small counts make it unstable.

6.2 Product Performance by Region

Different products may sell differently in different markets. Check your own data for questions such as:

6.3 Competitive Intelligence

Compare your geographic distribution to any category data you have access to:

6.4 Integrating External Data

Enhance your analysis by incorporating external datasets:

Joining state sales totals to state population estimates, as in Step 3.2, is one example of combining an outside data set with your orders.

Run It on Your Own Amazon Export

You upload a CSV export of your Amazon orders to MCP Analytics and ask for the analysis you want. The method is shown for every result, and the same file gives the same numbers. Nothing connects to your Amazon account.

Try it on your data

Common Issues and Solutions

Even with careful execution, you may encounter challenges. Here are solutions to the most common problems:

Issue 1: Missing Geographic Data in Order Reports

Symptoms: Downloaded order report lacks ship-city, ship-state, or ship-postal-code columns.

Solution:

  1. Try another order report type, since columns differ by report
  2. Check the headers for a ship state column under a different name

Issue 2: Inconsistent State Abbreviations

Symptoms: Some states appear as "California" while others show "CA," splitting data.

Solution:

// Excel/Google Sheets formula to standardize
=IF(LEN(A2)>2, VLOOKUP(A2, StateConversionTable, 2, FALSE), A2)

// Or use find-and-replace:
Find: California → Replace: CA
Find: New York → Replace: NY
// Repeat for all full state names

Issue 3: Insufficient Data for Analysis

Symptoms: You have only a few orders per state, making patterns unreliable.

Solution:

Issue 4: PO Box Addresses Skewing Results

Symptoms: Large clusters of orders at single postal codes that don't match typical residential patterns.

Solution:

Issue 5: Seasonal Skew Distorting Patterns

Symptoms: Q4 data shows completely different geographic patterns than other quarters.

Solution:

Issue 6: Privacy Concerns with Customer Data

Symptoms: Uncertainty about handling customer shipping information.

Solution:

Issue 7: FBA vs FBM Orders Show Different Patterns

Symptoms: Geographic distribution differs significantly between fulfillment methods.

Solution:

Next Steps with Amazon Geographic Analysis

You've now learned how to extract, analyze, and act on geographic sales data from Amazon. Here's how to continue improving your geographic strategy:

Immediate Actions (This Week)

  1. Download Your Data: Download your most recent 90 days of order data following Step 1
  2. Create Your First Analysis: Build a simple state-by-state revenue breakdown
  3. Identify One Opportunity: Find your single most actionable geographic insight
  4. Implement One Change: Adjust advertising, inventory, or targeting based on your findings

Ongoing Optimization (Monthly)

Advanced Techniques (Quarterly)

Continuous Learning

Geographic analysis is just one dimension of Amazon success. Continue developing your analytical capabilities:

Conclusion

You downloaded an order report as Amazon describes it, grouped orders by ship state, and read orders, revenue, average order value and share side by side. Keep the order count next to every figure, and treat each pattern as a question to check, not a conclusion.

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

Not sure which plan? Compare plans →

Sources

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