Shopify Flow: Triggers & Actions Reference

Shopify Flow: Triggers & Actions Reference

Complete reference of all Joy Loyalty triggers and actions available in Shopify Flow, with payload properties, plan requirements, and ready-to-use flow templates.

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 address[email protected]
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 customer[email protected]
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
emailCustomer's email address
pointPoints to add (positive integer)
reasonLabel shown in the customer's activity log

Subtract point — Deducts points (will not go below zero).

FieldRequiredDescription
email or customer_idCustomer email or Shopify customer GID
pointPoints to subtract
reasonInternal 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_identificationCustomer email or Shopify customer GID
credits_calculationCredit amount (e.g. 10.00 or a Flow variable)
reasonInternal note
expiration_daysDays 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_identifierCustomer email or Shopify customer GID
exclusive_tier_identifierThe tier's name or ID in Joy

Unassign exclusive tier — Returns customer to their points-based tier.

FieldRequiredDescription
customer_identifierCustomer email or Shopify customer GID

Coupons

Reward by program — Rewards a customer from any active Joy program. Most programs only need Customer + Reward program identifier — a couple of program types need one extra field, see the table below.

FieldRequiredDescription
customerShopify customer (Flow's built-in customer picker)
reward_program_identifierProgram ID or Program name in Joy
admin_noteOptional note for internal reference
program_input (Extra input)Required only for: Google Maps review (the review URL), Submit receipt (image URL(s), comma or newline separated), Survey/Form (the submitted content). Leave blank for every other program type.
milestone_valueRequired only for Milestone programs — the milestone value to reward (e.g. 12000). Leave blank for non-milestone programs.

Which program types this action supports

This action dispatches by how the target program's reward is configured, not by which earning event it is — the same program type behaves differently depending on its own reward setting:

Program's reward settingWhat this action does
Points — Sign up, Newsletter sign-up, Social (Facebook, Instagram follow, Twitter/X, Pinterest, TikTok, YouTube, Discord/Telegram/WhatsApp/Line/Reddit), Interact website / Streak, Google Maps review, Submit receipt, Survey / Form, Member anniversary, or Birthday when set to reward PointsAwards points, using that program's normal earn flow
Discount (amount / percentage / Buy X Get Y / free gift / store credit) — any of the above programs when instead configured with a discount reward, plus dedicated Redeeming/Discount programsIssues a coupon for free — no points are deducted (same mechanism used for VIP tier rewards, not a normal redemption)
MilestoneNeeds milestone_value — grants the reward for that specific milestone directly (whichever type it is), regardless of the customer's tracked progress toward it

Joy deduplicates by customer + program, so if the same Flow condition matches more than once for a customer (e.g. two qualifying orders in the same sale), they're still only rewarded once.

Not available through this action:

  • Custom programs (purchase condition, page visit, custom trigger, its own Shopify Flow trigger) — use the Trigger custom activity action below instead.
  • Instagram engagement (comment, story mention/reply, live comment) — already tracked and rewarded automatically by Joy's Instagram integration; routing it through this action too would double-reward.
  • Place order / Place order subscription — already handled automatically by Joy's native order webhook; calling this action for them is a no-op.
  • Reviews from third-party review apps (Judge.me, Air Reviews, etc.) — the review app is the source of truth for approval status, which this action has no way to check.

Revoke coupon — Voids a discount code and refunds any points spent.

FieldRequiredDescription
customer_idShopify customer GID
discount_codeThe exact code to revoke
admin_noteInternal 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
reasonReason for exclusion

Custom activity

Trigger custom activity — Fires a custom earning program inside Joy.

FieldRequiredDescription
action-keyAction key from the custom program in Joy
customer_idShopify 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' }}

8 — Reward a flash-sale coupon that isn't usable until later

Goal: Reward customers who place a qualifying order during a flash sale with a free coupon that only becomes usable once the sale ends (so it can't be stacked on sale pricing).

Trigger: Order created  (native Shopify trigger)
→ Condition: Order total ≥ [threshold]
→ Action (Joy): Reward by program
   customer: {{ order.customer }}
   reward_program_identifier: [Discount program ID]

On the Discount program side, set Coupon validity → Usable from to a date after the sale ends — see Coupon validity. Customers see the coupon in their wallet as soon as they earn it, labeled "Active from [date]," and it unlocks automatically on that date.


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.

Does "Reward by program" deduct points when I target a redeeming/discount program?

No — a reward issued this way is free. It uses the same mechanism as VIP tier rewards, so no points are deducted from the customer, unlike a normal points redemption.

What if the same Flow condition matches twice for one customer?

Joy rewards once per customer per program regardless of how many times the condition matches — for example, two qualifying orders in the same sale still only produce one coupon.


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