How can I segment based on purchase history? (e.g., frequency, value, category)
Still have a question, spotted an error, or have a better explanation or a source we should cite?
You already know who bought from you. The real power comes from knowing what they bought, how often, and how much they spent. That's the foundation of purchase-history segmentation, and it's one of the most reliable ways to send emails people actually want to open.
Here are the main dimensions to work with and how to turn each one into a real segment.
Segment by purchase frequency
Split your customers into groups based on how many times they've ordered. A one-time buyer needs very different messaging than someone on their fifth order. Common tiers are one purchase, two to four purchases, and five or more. One-time buyers are your win-back opportunity. Repeat buyers are your loyalty and upsell audience. The threshold you pick depends on your product's natural repurchase cycle.
Segment by purchase value
Total spend (or average order value) tells you a lot about who your high-value customers are. You can create tiers like under $100, $100 to $499, and $500 or more. Then reward your top tier with early access, exclusive offers, or a genuine thank-you. Don't send the same "20% off" blast to someone who just spent $800 and someone who bought a $12 item on sale. They're in completely different relationships with your brand.
Segment by product category
If someone has only ever bought from your skincare line, they probably don't need your kitchen accessories email. Category-based segments let you send relevant cross-sells instead of hoping a broadcast email lands on the right person. This also protects your sender reputation because relevant emails get opened, and opens signal to mailbox providers that your emails are worth delivering.
Segment by recency
Now when someone last bought is just as important as what they bought. Someone who purchased yesterday is in a very different mindset than someone who purchased 18 months ago. Common buckets are active (purchased in the last 30 to 90 days), lapsing (90 to 180 days), and at-risk (180 days or more). This pairs naturally with RFM scoring, which combines all three dimensions into one model.
How to actually build these segments
Where this lives depends on your stack. If you're using Klaviyo or Omnisend, purchase data syncs directly from your ecommerce platform and you can build these segments natively with their built-in filters. If you're on Mailchimp, you'll need to use their purchase activity filters or sync via a connector like Zapier. If you're on a more custom setup with Brevo, ActiveCampaign, or Customer.io, you'll map transaction data to custom contact fields or use event-based segmentation to track purchases as events.
If your ESP doesn't have native ecommerce integration, the practical approach is to export your transaction history (from Shopify, WooCommerce, or your order management system), calculate the fields you need (total orders, total spend, last purchase date, categories bought), and either import those as custom fields in your ESP or feed them in via API.
A quick note on data freshness
Segments built on stale purchase data can backfire. If your transaction sync only runs weekly, someone who bought yesterday might still get a "we miss you" win-back email. Set up daily syncs where possible, or at minimum flag your segments with a "last updated" timestamp so you know when the data is reliable.
Not sure how to get your transaction data connected to your email tool? Our SOS hotline is free and we're happy to walk through your specific setup.
Contributors
Who worked on this answer
Every name links to their profile. Every company links to their site. Real people, real accountability.