Shopify Flow: Triggers & Actions Reference

Shopify Flow: Triggers & Actions Reference

This feature is available for: Essential and above

Overview

Joy Loyalty exposes a set of triggers (events fired by Joy) and actions (tasks Joy can perform) inside Shopify Flow. Use them to build automated loyalty workflows β€” no code required.

This page is a complete reference. For step-by-step setup, see Integrate with Shopify Flow.


Trigger data properties

Every Joy trigger passes a common set of customer fields plus event-specific fields. When connecting to an email app (e.g. Klaviyo) through Shopify Flow, no variable dropdown is shown β€” you must type the property names manually. The tables below list every field for each trigger.

Klaviyo template syntax: Properties from Shopify Flow are available as event properties in Klaviyo. For multi-word property names, use the lookup filter: {{ event|lookup:'Customer email' }}. For single-word or underscored names, use dot notation: {{ event.customer_id }}.

Common fields (included in every trigger)

Property nameDescriptionExample
Customer emailCustomer's email addressjane@example.com
Customer first nameFirst nameJane
Customer last nameLast nameDoe
Customer pointsCurrent point balance350
customer_idShopify customer numeric ID6123456789

Earn points

Extra fields beyond the common set:

Property nameDescription
Program nameName of the earning program that awarded points
Earned pointsNumber of points earned in this activity
Created atTimestamp of the earn event

Admin manual point adjustment

Property nameDescription
Adjusted pointsPoints added or subtracted
Adjustment reasonReason entered by the admin
Created atTimestamp of the adjustment

Customer has enough points for reward

Property nameDescription
Program idID of the qualifying reward program
Program nameName of the reward program
Program min pointMinimum points required to redeem

Redeem points

Property nameDescription
Redeemed pointsPoints spent on this redemption
Discount codeThe discount code generated

POS point redemption

Property nameDescription
Redeemed pointsPoints redeemed at POS
Discount codeThe discount code generated

30 / 7 / 3 days before point expiration

Property nameDescription
Customer points expireNumber of points that will expire

Upon point expiration

Property nameDescription
Customer points expireNumber of points that just expired

7 days before customer's birthday

Property nameDescription
Customer birthday dateDay of the month (e.g. 14)
Customer birthday monthMonth number (e.g. 7 for July)

Customer's birthday

Property nameDescription
Customer birthday dateDay of the month
Customer birthday monthMonth number
Discount codeBirthday reward code (if a birthday reward is configured)

VIP tier achieved

Property nameDescription
Tier nameName of the tier just achieved
Discount codeTier reward code (if configured)

VIP Tier downgraded / VIP Tier reset

Uses common fields only. No extra properties.

Pre-Tier Demotion / Reset Reminders (4w / 2w / 1d)

Uses common fields only. No extra properties.


Customer comment on Instagram

Fires when Joy detects a customer comment on one of your monitored Instagram posts.

FieldTypeDescription
post_idstringThe Instagram post the user commented on
post_urlstringDirect link to the post
comment_idstringThe comment identifier
comment_textstringThe text of the comment
is_first_commentbooleantrue if this is the user's first comment on this post, false otherwise
comment_countnumberTotal number of comments this user has posted on this post, including this one
commented_atdatetimeWhen the comment was created

Use is_first_comment to keep automated DMs from spamming users who comment repeatedly on the same post. In Shopify Flow, add a Condition after the trigger: only continue when is_first_comment equals true. Alternatively, use comment_count to branch on a custom threshold (e.g., only run on the 3rd comment onwards).

Customer commented on Instagram Live

Fires when Joy detects a customer comment on your Instagram Live broadcast and awards points.

FieldTypeDescription
Comment usernamestringThe commenter's Instagram username
Comment textstringText content of the live comment
Points earnednumberPoints earned from this live comment
Live video idstringID of the Instagram Live video
is_first_commentbooleantrue if this is the customer's first comment on this Live video
TimestampdatetimeWhen the comment was processed (ISO 8601)

Live comments can't be auto-replied to via the Instagram API β€” Joy only sends DM notifications and awards points. Use is_first_comment to keep automated DMs from repeating for customers who comment multiple times during the same broadcast.

Customer joined loyalty program

Fires whenever a customer joins your loyalty program for the first time β€” via the widget, sign-up button, POS, or any custom entry point.

Property nameDescriptionExample
customer_idShopify customer numeric ID6123456789
Customer emailEmail of the joining customerjane@example.com
Customer first nameFirst nameJane
Customer last nameLast nameDoe
Customer phonePhone number (if provided)+1 555-0100
Joined atTimestamp the customer joined (ISO 8601)2026-04-17T10:22:00Z
Initial pointsPoints granted on join, if a Sign-up reward is configured100

Common use cases: send a welcome email with the first earning opportunity, auto-tag the customer in Shopify, sync to Klaviyo / HubSpot, or branch downstream flows based on initial points.

Referral for friend complete

Fires for the referrer when their friend completes a qualifying order.

Property nameDescription
Referrer emailEmail of the referring customer (same as Customer email)
Referrer reward typeType of reward given (e.g. points, coupon)
Referrer rewardValue of the reward
order_idShopify order ID of the friend's order

Referee claim reward

Fires for the new customer when they claim their referral reward.

Property nameDescription
Discount codeThe reward code issued to the referee
Referrer emailEmail of the friend who referred them

Triggers β€” when they fire

Points

TriggerWhen it fires
Earn pointsA customer earns points from any earning activity
Admin manual point adjustmentAn admin adds or deducts points manually from the customer profile
Customer has enough points for rewardA customer's balance crosses the minimum threshold to redeem a reward
Redeem pointsA customer redeems points for a discount
POS point redemptionA customer redeems points at a physical POS location

Point expiration

TriggerWhen it fires
30 days before the point expiration date30 days before a customer's points are set to expire
7 days before the point expiration date7 days before expiration
3 days before the point expiration date3 days before expiration
Upon point expirationThe moment a customer's points expire

Point expiration triggers only fire if you have point expiration enabled. Go to Settings > Points to configure it.

Birthday

TriggerWhen it fires
7 days before customer's birthday7 days before the customer's saved birthday
Customer's birthdayOn the customer's birthday

VIP Tiers

TriggerWhen it fires
VIP tier achievedA customer reaches a new VIP tier
VIP Tier downgradedA customer drops to a lower tier
VIP Tier resetA customer's tier resets to the starting tier
4-week Pre-Tier Demotion Reminder4 weeks before scheduled demotion
2-week Pre-Tier Demotion Reminder2 weeks before demotion
1-day Pre-Tier Demotion Reminder1 day before demotion
4-week Pre-Tier Reset Reminder4 weeks before scheduled tier reset
2-week Pre-Tier Reset Reminder2 weeks before reset
1-day Pre-Tier Reset Reminder1 day before reset

Demotion and reset reminders only fire when you have a tier evaluation period configured in Joy's VIP Tier settings.

Referrals

TriggerWhen it fires
Referral for friend completeA referred friend places their first qualifying order
Referee claim rewardThe new customer claims their referral reward

Social activity

TriggerWhen it fires
Customer comment on InstagramA customer comments on one of your monitored Instagram posts
Customer commented on Instagram LiveA customer comments on your Instagram Live broadcast

Membership

TriggerWhen it fires
Customer joined loyalty programA customer joins the loyalty program for the first time (widget sign-up, POS, custom entry)

Both Instagram comment triggers expose is_first_comment and comment_count so you can limit automated responses to the first comment per user per post β€” essential for avoiding spam when a user comments many times.


Actions

Actions are tasks that Joy performs when called from a Shopify Flow. All actions require the integration to be enabled in Joy > Integrations > Shopify Flow.

Points

Add point β€” Adds points to a customer's balance.

FieldRequiredDescription
emailβœ…Customer's email address
pointβœ…Points to add (positive integer)
reasonβœ…Label shown in the customer's activity log

Subtract point β€” Deducts points (will not go below zero).

FieldRequiredDescription
email or customer_idβœ…Customer email or Shopify customer GID
pointβœ…Points to subtract
reasonβ€”Internal note for the activity log

Store credit

Requires granting an additional Shopify permission. When you enable the integration, a banner will prompt you to grant access.

Adjust store credit

FieldRequiredDescription
customer_identificationβœ…Customer email or Shopify customer GID
credits_calculationβœ…Credit amount (e.g. 10.00 or a Flow variable)
reasonβ€”Internal note
expiration_daysβ€”Days until credit expires (leave blank for no expiry)

VIP Tiers

Tier actions require Advanced plan or above.

Assign to Tier β€” Assigns a customer directly to an exclusive VIP tier.

FieldRequiredDescription
customer_identifierβœ…Customer email or Shopify customer GID
exclusive_tier_identifierβœ…The tier's name or ID in Joy

Unassign exclusive tier β€” Returns customer to their points-based tier.

FieldRequiredDescription
customer_identifierβœ…Customer email or Shopify customer GID

Coupons

Reward coupon β€” Generates a discount coupon from a reward program.

FieldRequiredDescription
customer_idβœ…Shopify customer GID
reward_program_identifierβœ…Reward program name or ID in Joy
admin_noteβ€”Internal note

Revoke coupon β€” Voids a discount code and refunds any points spent.

FieldRequiredDescription
customer_idβœ…Shopify customer GID
discount_codeβœ…The exact code to revoke
admin_noteβ€”Internal note

Membership

Join loyalty program β€” Converts a guest to active member status.

FieldRequiredDescription
customer_idβœ… (or customer_identifier)Shopify customer GID
customer_identifierβœ… (or customer_id)Customer email, ID, or GID

Exclude from loyalty program β€” Removes a customer from the program.

FieldRequiredDescription
customer_idβœ… (or customer_identifier)Shopify customer GID
customer_identifierβœ… (or customer_id)Customer email, ID, or GID
reasonβœ…Reason for exclusion

Custom activity

Trigger custom activity β€” Fires a custom earning program inside Joy.

FieldRequiredDescription
action-keyβœ…Action key from the custom program in Joy
customer_idβœ…Shopify customer GID

First create a Custom program in Joy > Earn points > Custom, then copy its action key into the Flow extension settings.


Flow Templates

1 β€” Birthday points + email (Klaviyo)

Goal: Give bonus points on a customer's birthday and send a personalised email.

Trigger: Customer's birthday
β†’ Action (Joy): Add point
   email: {{ customer.email }}
   point: 200
   reason: Birthday bonus
β†’ Action (Klaviyo): Send email
   To: Customer email
   Subject: Happy birthday, {{ event|lookup:'Customer first name' }}!
   Body variables:
     {{ event|lookup:'Customer email' }}
     {{ event|lookup:'Customer first name' }}
     {{ event|lookup:'Customer points' }}
     {{ event|lookup:'Discount code' }}

2 β€” Point expiration reminder series

Goal: Warn customers before points expire with escalating urgency.

Trigger: 30 days before the point expiration date
β†’ Action (Klaviyo): Send email β€” "Your points expire in 30 days"
   {{ event|lookup:'Customer points expire' }} points expiring

Trigger: 7 days before the point expiration date
β†’ Action (Klaviyo): Send email β€” "Hurry β€” 7 days left"

Trigger: Upon point expiration
β†’ Action (Klaviyo): Send email β€” "Your points have expired"

3 β€” VIP tier upgrade congratulations

Goal: Celebrate a tier upgrade with a bonus and email.

Trigger: VIP tier achieved
β†’ Action (Joy): Add point
   email: {{ customer.email }}
   point: 500
   reason: Welcome bonus β€” new tier
β†’ Action (Klaviyo): Send email
   {{ event|lookup:'Tier name' }}
   {{ event|lookup:'Customer points' }}
   {{ event|lookup:'Discount code' }}

4 β€” Pre-demotion rescue

Goal: Motivate customers to spend before they lose their tier.

Trigger: 4-week Pre-Tier Demotion Reminder
β†’ Action (Klaviyo): Send email β€” "You're at risk of losing your tier"
   {{ event|lookup:'Customer first name' }}
   {{ event|lookup:'Customer points' }}

Trigger: 1-day Pre-Tier Demotion Reminder
β†’ Action (Klaviyo): Send email β€” "Last chance β€” tier demotion tomorrow"

5 β€” Reward any review app

Goal: Give points when a customer submits a review in any app that supports Shopify Flow (Loox, Okendo, Stamped, Yotpo, etc.).

Trigger: [Review App] β€” Review submitted
β†’ Action (Joy): Add point
   email: {{ customer.email }}
   point: 50
   reason: Thanks for your review!

See the individual integration guides (linked from the parent page) for app-specific trigger names.


6 β€” Auto-enrol new customers

Goal: Add customers to the loyalty program the moment they sign up.

Trigger: Customer created  (native Shopify trigger)
β†’ Action (Joy): Join loyalty program
   customer_id: {{ customer.id }}

7 β€” Referral reward notification

Goal: Send the referrer a confirmation email when their friend's order is complete.

Trigger: Referral for friend complete
β†’ Action (Klaviyo): Send email
   To: {{ event|lookup:'Referrer email' }}
   Body variables:
     {{ event|lookup:'Customer first name' }}
     {{ event|lookup:'Referrer reward type' }}
     {{ event|lookup:'Referrer reward' }}
     {{ event|lookup:'Customer points' }}

FAQ

Which plan do I need?

Essential and above. Assign to Tier and Unassign exclusive tier require Advanced or above.

Why is my action not running?

Make sure the integration toggle is On in Joy > Integrations > Shopify Flow. This is the most common cause of silent failures.

Klaviyo doesn't show a variable picker β€” what do I type?

Use {{ event|lookup:'Property name' }} for any property with spaces in its name (see the property tables above). For single-word or underscored names like customer_id, you can use {{ event.customer_id }}.

Can I use multiple Joy actions in one Flow?

Yes. You can chain Joy actions β€” for example, add points and send a coupon in the same automation.

The "Adjust store credit" action isn't available β€” why?

It requires an additional Shopify permission. Enable the integration in Joy and click Grant access in the blue banner that appears.

Can I test triggers without real events?

Use Shopify Flow's built-in Run test feature, or use the Admin manual point adjustment trigger as a safe sandbox since you control exactly when it fires.


Product
Install AppWebsiteBook a Demo
Resources
DocumentationFAQsIntegrations
Company
Avada GroupPrivacy PolicyContact
Β© 2026 Joy Loyalty by Avada Group. All rights reserved.