Organizing Customers into Tiers according to Lifetime Spend

Topic summary

A Shopify Plus user is building a tier-based loyalty program using Flow automation, where customers are ranked (Bronze/Silver/Gold) based on lifetime spending ($100+/$250+/$500+) and receive corresponding discount codes (5%/10%/15%).

Initial Challenge:
The original approach used order creation triggers with tag-based filtering, but struggled to handle multiple scenarios: new customer enrollment, tier promotions, customers staying at the same level, and demotions from refunds.

Solution Approach:
Following community advice, the implementation shifted to using customer segments instead of tags as the primary trigger mechanism. This involves:

  • 3 customer segments (one per tier)
  • 3 segment-specific discount codes
  • 8 Flow automations total

Key Flows:

  • 3 “Segment joined” flows: trigger when customers enter Bronze/Silver/Gold segments, sending welcome emails with discount codes
  • 3 “Segment left” flows: handle demotions by checking which new segment the customer entered and sending appropriate notifications
  • 1 “Order created” flow: ensures existing top-tier customers receive their discount code at least once (uses tags to prevent repeat emails)
  • 1 optional flow for general program management

Technical Details:
Tags labeled “VIP Member” track whether customers have received program emails. A 1-5 minute wait step after segment triggers allows time for segment membership to update properly.

The creator has shared detailed screenshots and configuration steps for others implementing similar programs without third-party apps.

Summarized with AI on October 29. AI used: claude-sonnet-4-5-20250929.

Yeah, I would use tags or metafields to track if the customer received a certain email or discount.

That workflow looks like it will, when a customer leaves “gold” it checks if they are now in “silver” or another segment, and then sends an email. I think that will work, but it is possible that it takes some amount of time to appear in the new segment. I might add a “Wait” step after the trigger (maybe 1 min) if you see that happen to give it time.