Customers and retention · complete guide
WooCommerce customer analytics: the complete guide
WooCommerce customer analytics lives mainly in WooCommerce › Customers, a report listing every customer (registered and guest) with their orders, total spend, location and last active date, plus filters and a CSV export. For new vs returning orders, use the Customer type filter in Analytics › Orders. Cohorts and per-customer figures need a spreadsheet or SQL.
This guide maps out what WooCommerce shows about customers, which metrics are worth tracking, where each one comes from, what the built-in reports can't do, and a simple monthly routine. Each section links to a detailed guide.
What does WooCommerce show about customers?
Customer data shows up in three places in a standard WooCommerce store.
| Where | What you get | Best for |
|---|---|---|
| WooCommerce › Customers | One row per customer: name, email, orders, total spend, average order value, country / region, last active, date registered. City, region, postal code and phone numbers are available as extra columns. | Finding, filtering and ranking customers |
| Analytics › Orders | Order totals with a Customer type advanced filter (new or returning) | The share of orders and sales from returning customers |
| The order edit screen | A Customer history box with that customer's total orders, revenue and average order value (added with order attribution in WooCommerce 8.5) | Context while handling one order |
All three read the WooCommerce Analytics tables, which WooCommerce fills in the background. That means they count the same order statuses as your other Analytics reports, and very recent orders can take a short while to appear.
The customer metrics worth tracking
There are dozens of customer metrics. For a small or mid-sized store, these eight cover almost every decision, and each has its own guide:
| Metric | The question it answers | Built into WooCommerce? |
|---|---|---|
| Lapsed customers | Which regulars have stopped buying? | Partly: filter the Customers report |
| Repeat purchase rate | What share of customers ever order twice? | No: two counts in the Customers report, divided |
| Customer lifetime value | How much is a customer worth over time? | Partly: average lifetime spend in the Customers summary |
| Top customers | Who brings in the most revenue? | Yes, as lifetime totals: sort by Total spend |
| New vs returning customers | How much of my business is repeat business? | Yes: Customer type filter in Analytics › Orders |
| Time between orders | How long do customers take to order again? | No: export or SQL |
| First-purchase products | Which products turn first-time buyers into regulars? | No: export or SQL |
| Customers by location | Where are my customers, and which markets spend most? | Partly: Country / Region column and filter |
If you only track two, make them the repeat purchase rate and the lapsed-customer count. Together they tell you whether you're keeping the customers you win.
Which customer metric should you start with?
The right first metric depends on how your customers buy. Start with the one that matches your store, then add others as questions come up.
- You sell consumables (coffee, pet food, supplements, skincare). Your business depends on reorders, so start with time between orders. Once you know the typical gap, the lapsed-customer count and follow-up emails both get easier to set up.
- You sell occasional or durable goods (furniture, bikes, jewelry). Most customers buy once or twice, so repeat rate will be low whatever you do. Focus on customer lifetime value to set a sensible budget for winning new customers, and on referrals from the customers you have.
- You run lots of promotions. Check new vs returning customers during and after each sale. A sale that mostly brings back existing customers is a different result from one that wins new ones, even if the revenue is the same.
- You've just launched new products. A first-purchase analysis after a few months tells you whether the new range is creating regulars or one-time buyers.
- You ship internationally. Look at customers by location to see which markets justify better shipping rates or local campaigns.
- A few big accounts make up much of your revenue. Keep a close eye on your top customers, and check every month that none of them has gone quiet.
Whatever you pick, write down how you measured it (which statuses, which date window, guests included or not). A metric only helps if you can measure it the same way next month.
How to use the WooCommerce Customers report
- In WordPress admin, go to WooCommerce › Customers.
- Click any column header to sort: Total spend for your biggest customers, Orders for your most frequent, Last active for who's been around recently.
- Click Advanced filters to narrow the list. The available filters are average order value, country or region, email, last active date, name, number of orders, registration date, total spend and username. Choose All to require every filter, or Any to match one or more.
- Read the summary under the table: customer count, average orders, average lifetime spend and average order value for the customers currently shown.
- Click Download to export the current view as a CSV. Larger exports are prepared in the background and emailed to you.
The summary is the most underused part of the report. Every filter you apply changes it, so it works as a quick calculator. A few useful combinations:
- Number of orders more than 1: your repeat customers. Divide the count by the unfiltered count to get your repeat purchase rate.
- Number of orders more than 1 and Last active before six months ago: past regulars who've gone quiet, your lapsed customers.
- Registration date before a year ago: an older group whose average lifetime spend is a fairer customer lifetime value.
- Country or region: one market's customers and their average spend.
New vs returning orders in Analytics › Orders
The Customers report is about people. For the business they bring in each month, use Analytics › Orders:
- Pick a date range.
- Under Advanced filters, add Customer type and choose Returning, then New.
- Compare the orders and net sales totals for each.
WooCommerce marks an order as from a returning customer when that customer had placed an order before. That's a judgment about each order, not each person, and it looks at the customer's whole history. The full method, and how it differs from repeat purchase rate, is in new vs returning customers in WooCommerce.
Combine the filter with the date picker's Compare to option to see whether the returning share is growing. The guide on comparing two date ranges covers which comparison to choose.
What WooCommerce doesn't report about customers
Core WooCommerce stops short of several common customer metrics:
- No repeat purchase rate or retention report. You can get the counts, but you have to divide them yourself.
- No cohort analysis. There's no view that groups customers by the month they first bought and follows them over time. See cohort analysis for what that involves.
- No date range on the Customers report. Spend and order counts are lifetime figures, so it can't answer "who were my top customers last quarter".
- No time between orders. Nothing shows how long customers take to reorder.
- No link from first product to repeat buying. You can see best sellers, but not which products create loyal customers.
- No sales by country report. The Customers report has location columns, but sales by country for a period needs an export or SQL. See how to see WooCommerce sales by country.
- No profit per customer. Spend is revenue. A customer who only buys on discount looks as good as one who pays full price.
Each spoke guide shows the workaround, usually an export to a spreadsheet or a short SQL query.
Why WooCommerce customer numbers can look wrong
If customer counts or spend don't match what you expect, check these first:
- Guests are matched by email. A customer who checks out with two email addresses appears as two customers, each with fewer orders. This lowers repeat rates and lifetime value.
- Excluded statuses. Order counts and spend leave out orders with statuses listed under Analytics › Settings › Excluded statuses. A custom status can make real orders disappear from customer totals. See excluded statuses.
- Missing history. If Import historical data under Analytics › Settings was never run, or didn't finish, older orders are missing. Long-time customers then look newer and smaller than they are.
- Last active isn't last ordered. For registered customers, Last active can reflect account activity, not only orders. Check order history before treating it as a purchase date.
- Refunds. Analytics records refunds on the refund date. A customer's spend may not match the sum of their original orders.
- Test, staff and wholesale accounts. These often sit at the top of spend and order rankings. Filter them out before drawing conclusions.
The broader causes of mismatches are covered in why WooCommerce Analytics numbers don't match your orders.
For developers: the customer tables
Two Analytics tables hold almost everything you need, and they're the same whether your store uses HPOS or the older posts storage:
wc_customer_lookup: one row per customer, withcustomer_id,user_id(empty for guests),first_name,last_name,email,date_last_active,date_registered,country,state,cityandpostcode.wc_order_stats: one row per order, withorder_id,parent_id(non-zero for refunds),customer_id,date_created,status,net_total,total_salesandreturning_customer.
wc_order_stats.customer_id links to wc_customer_lookup.customer_id, not to the WordPress user ID. This query gives a one-line customer summary for your store, using each customer's actual order history:
SELECT COUNT(*) AS customers,
SUM(orders >= 2) AS repeat_customers,
ROUND(100 * SUM(orders >= 2) / COUNT(*), 1) AS repeat_rate_pct,
ROUND(AVG(spend), 2) AS avg_lifetime_net_sales,
SUM(orders >= 2 AND last_order < NOW() - INTERVAL 180 DAY) AS lapsed_repeat_customers
FROM (
SELECT customer_id,
COUNT(*) AS orders,
SUM(net_total) AS spend,
MAX(date_created) AS last_order
FROM wp_wc_order_stats
WHERE parent_id = 0
AND status IN ('wc-completed', 'wc-processing')
GROUP BY customer_id
) per_customer;
Statuses are stored with the wc- prefix. Match the list to the statuses your Analytics counts, and change wp_ if your table prefix differs. parent_id = 0 leaves out refund rows, so spend here is before refunds. The spoke guides have queries for each metric, including time between orders and first-purchase analysis, which use window functions (MySQL 8.0+ or MariaDB 10.2+).
What Askshelf can tell you about customers
Askshelf adds Analytics › Askshelf to WordPress admin, where you type a question and get the answer with the numbers behind it. On customers, it answers with counts and averages for the whole store: new vs returning customers in a date range (with each group's net sales), your all-time repeat purchase rate, average orders per customer, average lifetime spend, and how many customers have gone quiet. It can also break sales down by customer country.
How many customers ordered last month, and how many were returning?
How many customers with at least 2 orders haven't ordered since May?
Everything is a count or a total, never a list. Askshelf never reads or sends customer names, emails, phone numbers or addresses, and it declines questions about individual people. Questions that include an email address or phone number are refused before they leave the browser. Because of that design, it can't tell you who your top customers are, give a lifetime value for one customer, build cohort tables, measure time between orders, analyse first-purchase products or list customers by region. For those, the WooCommerce reports and queries in this guide are the way.
The customer analytics use case page explains the approach, and is it safe to give AI your store data covers the privacy side in detail. It's free for 10 questions a month; see pricing.
A monthly customer review in 20 minutes
You don't need a dashboard to keep an eye on customers. Once a month:
- Count lapsed regulars. Customers with 2 or more orders and none in your lapsed window. Is the number rising? Follow up with the highest spenders. (How to find customers who stopped buying)
- Check the returning share. In Analytics › Orders, compare returning-customer orders with last month and the same month last year. (New vs returning customers)
- Update your repeat purchase rate, measured the same way each time. (How to calculate repeat purchase rate)
- Glance at your top customers with a Last active filter, to spot big spenders who've gone quiet. (How to find your top customers)
- Once a quarter, go deeper: lifetime value by registration year, the reorder gap, first-purchase products and location. (Lifetime value, time between orders, first-purchase analysis, customers by location)
Write the numbers down in the same place each month. Customer metrics move slowly, and the trend over six months tells you far more than any single figure.
For the sales side of the same routine, see the WooCommerce sales reports guide.
Common questions
Where is the customer report in WooCommerce?
Go to WooCommerce › Customers in WordPress admin. It lists registered customers and guests with their orders, total spend, average order value, location, last active date and registration date, and it has advanced filters and a CSV download.
Does WooCommerce track repeat customers?
Partly. Analytics marks each order as from a new or returning customer, and the Orders report can filter on it. The Customers report shows each customer's order count. There's no built-in repeat purchase rate, retention or cohort report.
Can WooCommerce show customer lifetime value?
The Customers report summary shows average lifetime spend for the customers in view, which is a simple historical lifetime value. Predictive lifetime value and cohort reports need a plugin, a spreadsheet or SQL.
Are guest customers included in WooCommerce customer reports?
Yes. The Customers report includes guests and links their orders by email address. A guest who checks out with different email addresses shows up as separate customers.
See how Askshelf handles this: Customer analytics for WooCommerce