How to count new against returning Shopify customers
Part of Shopify sales and orders in your MacBook notch
What makes a Shopify customer new?
Their first order falls inside your window. That is it, and the complication is entirely in how Shopify records customers in the first place.
Shopify creates a customer at checkout
You do not need an account for Shopify to record you. Place an order as a guest and Shopify creates a customer record from the email on the order.
That is convenient and it means the customer list is not a list of registered users. It contains buyers, and it also contains anybody who signed up for the newsletter, which is the part that quietly inflates every count built on it.
Two different numbers
New customers counts customer records created in the window. It is the flow.
Customers counts every record the store has ever held. It is a lifetime total, it only goes up, and a window selector does nothing to it.
Those answer different questions and reporting either as "customers" without saying which is how two people in the same company end up arguing about a number they both read correctly.
The query
query Customers($query: String!, $cursor: String) {
customers(first: 250, query: $query, after: $cursor) {
pageInfo {
hasNextPage
endCursor
}
nodes {
createdAt
numberOfOrders
amountSpent {
amount
currencyCode
}
}
}
}
With a search query of
created_at:>='2026-10-01T00:00:00Z' created_at:<'2026-10-08T00:00:00Z'.
numberOfOrders is the useful field here. A record with zero orders is a
newsletter signup, not a buyer, and filtering them out gives you first-time
buyers rather than first-time records.
const firstTimeBuyers = nodes.filter((c) => Number(c.numberOfOrders) > 0);
Returning customers are a subtraction
Shopify does not report returning customers directly. Over a window:
returning = distinct customers who ordered minus customers whose first order was in the window
The first half means paging orders and collecting distinct customer ids, not paging customers. An order carries its customer, and that is the only way to know who bought in a window rather than who was created in it.
Guest checkout inflates everything
A shopper who checks out with a different email each time is a new customer each time. Shopify matches on email, and on the account where one exists.
On a store with no account requirement this is a meaningful distortion, and there is no API field that fixes it. Read the direction of the number rather than the absolute value, and be suspicious of a repeat-purchase rate that looks unusually poor.
Deletions
A customer record removed for a GDPR erasure request is gone, not flagged. So the lifetime total can fall, despite being a number that otherwise only goes up. Worth knowing before you treat a dip as a data problem.
In the notch
Notch Metrics reports Shopify new customers as customer records created in the window, and customers as the lifetime total, which is a snapshot with no sparkline because a window does not apply to it.
Both pages say plainly what they include, newsletter signups and all, because a count whose definition is hidden is a count you cannot act on. Everything Shopify reports, or download Notch Metrics.
- shopify
- customers
- api