Prerequisite You need a Klaviyo account and an admin or owner role in your Growi organization.
Overview
Growi sends two events to your Klaviyo account:- Applied to Ambassador Program, when a customer submits an application to your program.
- Joined Ambassador Program, when they become an active ambassador.
- Trigger flows, such as a welcome email when someone joins.
- Filter flows, so post-purchase invite reminders stop when someone applies or joins.
- Build segments, such as customers who applied but haven’t been accepted yet.
- Personalize emails with each ambassador’s discount code and referral link.
What Growi sends
Metrics
Growi finds the Klaviyo profile by email address and creates it if it doesn’t exist yet. It also fills in first and last name when Growi has them.
Event properties
You can use these in a flow triggered by the metric as{{ event.<property> }}, and in trigger filters.
Applied to Ambassador Program
Joined Ambassador Program
A property with no value isn’t sent. For example, a program set to hide creator links and codes sends no
discount_code or affiliate_link.
Profile properties
Growi also saves these on the person’s Klaviyo profile, so you can use them in any email or segment, not only flows triggered by the metric:Setup
1. Create a private API key in Klaviyo
- In Klaviyo, go to Settings → API keys.
- Click Create Private API Key and name it, for example
Growi. - Choose Custom key and grant these scopes:
- Events: Full access (write)
- Accounts: Read access
- Create the key and copy it. It starts with
pk_.
2. Connect the key in Growi
- In Growi, open Settings → Integrations.
- Open the Klaviyo tile.
- Paste the key into Private API key and click Connect.
3. Send one event of each type
A metric shows up in Klaviyo’s flow trigger list only after Klaviyo has received at least one event for it. Before you build flows:- Apply to your ambassador program with a test email address. Applied to Ambassador Program appears right away.
- Accept that application, or use a program that accepts everyone automatically. Joined Ambassador Program appears about 2 minutes later.
Build your flows
Most brands use three flows that together cover the whole journey:Invite flow (post-purchase)
- Trigger:
Placed Order(or any trigger you use for post-purchase email). - Email 1: Invite them to your ambassador program and link to your Growi signup page.
- Time delay, then Email 2: a reminder.
- Optionally another delay and a final reminder.
Applied to Ambassador Programzero times since starting this flow- AND
Joined Ambassador Programzero times since starting this flow
In review flow
Use this flow if your team reviews applications by hand.- Trigger: metric
Applied to Ambassador Program. - Email: “Thanks for applying, we’re reviewing your application.”
- Optionally a delay, then a follow-up.
Joined Ambassador Program zero times since starting this flow, so it stops as soon as they’re accepted.
If your program accepts everyone automatically, both events arrive about 2 minutes apart. Add a short time delay (for example 10 minutes) before the first email so the filter can remove them before anything is sent.
Welcome flow
- Trigger: metric
Joined Ambassador Program. - Email: welcome them and give them everything they need to start sharing.
campaign_name (or campaign_id) so each program gets its own welcome email.
Use the code in any email
Growi saves the code and link on the profile, so your other emails can show them too: order confirmations, campaigns and newsletters.Segments
How it behaves
- Matching is by email. Reminders only stop if the customer applies with the same email they used to buy. If they use another address, Klaviyo sees two different people.
- One event per person and program. Each application and each membership is sent once. If an ambassador leaves and is reactivated in the same program, Klaviyo drops the repeat
Joined Ambassador Program, so the welcome flow doesn’t trigger again. - Status is checked at send time. If a creator is removed during the 2-minute delay, no
Joined Ambassador Programevent is sent. - Profile properties are updated, not removed. If someone joins a second program,
growi_discount_code,growi_affiliate_linkandgrowi_campaign_namechange to that program’s values. Leaving a program doesn’t clear them. - Events start when you connect. Applications and members from before you connected aren’t sent to Klaviyo.
- Imported creators are skipped. Creators who came in through a bulk import don’t trigger events.
Troubleshooting
Klaviyo rejected this API key
Klaviyo rejected this API key
The key is wrong or doesn’t have the right scopes. Create a private key (
pk_...) with Events: Full access and Accounts: Read access, then connect again.The tile says Klaviyo rejected the saved key
The tile says Klaviyo rejected the saved key
The key was revoked, deleted or changed in Klaviyo after you connected it. Growi stops sending events until you paste a new key and click Replace key. Events from while the key was invalid aren’t sent again.
I can't find the metric when creating a flow
I can't find the metric when creating a flow
Klaviyo lists a metric only after it has received at least one event for it. Do the test in step 3, then refresh Klaviyo.
Someone joined but got no welcome email
Someone joined but got no welcome email
Check that:
- Their Klaviyo profile shows the
Joined Ambassador Programevent. It arrives about 2 minutes after they join. - The welcome flow is Live, not in draft or manual mode.
- They aren’t suppressed or unsubscribed in Klaviyo.
- They weren’t already a member of that program. A reactivation doesn’t trigger the flow again.
Reminders kept going after someone joined
Reminders kept going after someone joined
They most likely applied with a different email from the one on their order. Check whether their Klaviyo profile has the Growi events. If they’re on a different profile, merge the two profiles in Klaviyo.
discount_code or affiliate_link is empty
discount_code or affiliate_link is empty
The program may be set to hide creator links and codes, or the code wasn’t ready in time. Check that the creator has a code in Growi. In emails, use the
{% if %} pattern above so a missing value doesn’t show a blank.