Most loyalty programmes charge a monthly fee to track things you can track yourself with two metafields and a Liquid snippet. A milestone tracker is one of them. It counts how many times a customer has bought from you, and shows them a celebration message when they hit a round number. Fifth purchase, tenth, twentieth. No points, no tiers, no app.
What You Need
- Shopify store (any plan with checkout extensions or Order Status Page additional scripts)
- Access to Shopify Flow (free on Basic and above) or a single custom webhook
- 10 minutes
Step 1: Create a Customer Metafield
Go to Settings > Custom data > Customers. Add a metafield:
- Namespace: custom
- Key: purchase_count
- Type: Integer
- Default value: 0
This stores the running tally of how many orders each customer has placed.
Step 2: Increment the Counter on Every Order
Set up a Shopify Flow trigger for “Order Created”. The flow should:
- Get the customer from the order
- Read the current value of custom.purchase_count (default to 0 if empty)
- Add 1 to the value
- Update the customer metafield with the new value
If you do not have Shopify Flow, use an order-created webhook pointing to a small automation (Zapier, Make, or a custom endpoint) that does the same thing.
Step 3: Show the Milestone on the Order Status Page
In Checkout Settings > Order Status Page > Additional Scripts, add a Liquid snippet:
<{% if customer %}>
{% assign count = customer.metafields.custom.purchase_count.value | default: 0 %}
{% assign milestone = count | modulo: 5 %}
{% if milestone == 0 and count >= 5 %}
<div style="text-align:center;padding:24px;background:#f9f5f0;border-radius:12px;margin:16px 0;">
<h2>This is order number {{ count }}!</h2>
<p>You just unlocked a milestone. Check your inbox for a little something from us.</p>
</div>
{% endif %}
{% endif %}
Step 4: Send a Milestone Email (Optional)
Back in Shopify Flow, add a conditional branch after the metafield update. If the new count is divisible by 5 (use the modulo operation), send a customer email. Keep it short:
“Five orders. Thank you for coming back that many times. Here is a small token: [discount code or free shipping link].”
Step 5: Show Milestones on the Customer Account Page
If your theme has a customer account page, add a small banner showing their purchase count and the next milestone:
<p>You have made {{ customer.metafields.custom.purchase_count.value | default: 0 }} orders. Next milestone: order number {{ customer.metafields.custom.purchase_count.value | default: 0 | plus: 5 | minus: customer.metafields.custom.purchase_count.value | default: 0 | modulo: 5 }}.</p>
Adjust the maths to show “X orders until your next reward” if you prefer.
Why This Works Better Than a Plugin
Loyalty apps charge between $9 and $47 per month for features most small stores never use. Points, tiers, referral engines, VIP clubs. A milestone tracker does one thing: it acknowledges repeat behaviour. That is the core of loyalty. The rest is decoration.
When a customer sees “This is your 10th order” on the confirmation page, they feel seen. When they get a short email with a discount code after their 5th purchase, they feel rewarded. You spent zero dollars on software and 10 minutes of setup.
What to Avoid
- Do not show the counter on the product page. It belongs on the order status page and the account page, not in the shopping experience.
- Do not make the milestone reward a percentage discount. Flat rewards (free shipping, a free sample, a small fixed credit) feel more genuine.
- Do not skip the email. The order status page is a moment. The email is a memory.
Want more like this? Join MOKU Club for free. Weekly resources, early access to new guides, and occasional templates you can actually use. Join below.


