Built for lean teams,
scaled for category leaders
Thanks. You're signed up.
Something went wrong. Please try again.
Want the full setup walkthrough?
Use these docs for exact setup steps, supported fields, and troubleshooting.
GrowSurf writes referral data straight onto Braze user profiles. Participants are matched by email address, so the profile your team already segments on picks up the participant’s referral link, referral counts, referrer details, and milestone progress.
Use this guide when you want referral data available in Braze for segmentation and Liquid personalization without building the sync yourself. It works the same on a referral program and an affiliate program.
In Braze, open Settings > APIs and Identifiers > API Keys and select Create API Key. Make a dedicated key for GrowSurf, enable the users.track permission, and copy it. On the same tab, note the REST endpoint Braze shows you — something like https://rest.iad-01.braze.com or https://rest.fra-01.braze.eu. You need both pieces in the next step.

Connect Braze before you import participants. Everyone who joins or gets referred after that syncs on their own.

Pick the instance that matches your Braze REST endpoint — US-01 goes with rest.iad-01, for example — paste the key, and select Submit. GrowSurf stores the key securely and does not show it again. Connecting does not call Braze; the first participant sync is what confirms the endpoint, the key, and the permission all line up.
GrowSurf writes 15 custom attributes, each prefixed with grsf_:
| GrowSurf data | Attribute key | Type | What it holds |
|---|---|---|---|
| Share URL | grsf_share_url | String | The participant’s unique referral link |
| Participant ID | grsf_participant_id | String | The participant’s GrowSurf ID |
| Referral Status | grsf_referral_status | String | CREDIT_PENDING, CREDIT_AWARDED, or CREDIT_EXPIRED |
| Participant First Name | grsf_participant_first_name | String | The participant’s first name |
| Participant Last Name | grsf_participant_last_name | String | The participant’s last name |
| Referrer First Name | grsf_referrer_first_name | String | The referrer’s first name, when there is one |
| Referrer Last Name | grsf_referrer_last_name | String | The referrer’s last name, when there is one |
| Referrer Email | grsf_referrer_email | String | The referrer’s email, when there is one |
| Total Referral Count | grsf_total_referral_count | Number | All-time referral count |
| Monthly Referral Count | grsf_monthly_referral_count | Number | Referral count for the current month |
| Previous Monthly Referral Count | grsf_prev_monthly_referral_count | Number | Referral count for the previous month |
| Next Milestone | grsf_next_milestone | String | The next milestone message, on programs with milestone rewards |
| Next Monthly Milestone | grsf_next_monthly_milestone | String | The next monthly milestone message, when there is one |
| Total Invite Count | grsf_total_invite_count | Number | All-time invite count |
| Total Impression Count | grsf_total_impression_count | Number | All-time referral-link view count |
The first sync writes all 15. After that only changed attributes go across, and a string attribute that becomes empty is cleared in Braze rather than left stale.
In Braze, open Audience > User Search and look up a participant by email. The grsf_ attributes appear once the first sync runs. If the program already has participants, use the existing-participant sync options to push their current referral data across.
Once the attributes are on the profile, reference them in any Braze message with Liquid:
<p>Your referral link:</p>
<a href="{{custom_attribute.${grsf_share_url}}}">{{custom_attribute.${grsf_share_url}}}</a>
<p>You have {{custom_attribute.${grsf_total_referral_count}}} referrals so far.</p>Braze wraps custom attribute names in ${}. Keep the grsf_ names exactly as GrowSurf creates them or the tag renders empty.
The sync starts when the integration is connected. Connecting first means you never have to backfill a batch of participants by hand.
Braze profiles are matched by email. If the same person is a participant in two connected GrowSurf programs, the most recent sync wins for the grsf_ attributes on that profile.
A participant’s GrowSurf activity log records each sync and the reason for any failure. That is faster than re-running an export when only one profile is off.
No. The integration writes profile attributes only — no custom events, purchases, or subscription changes.
users.track. A key without it connects fine but fails on the first sync, so create the key with that permission enabled.
Yes. The Braze sync runs on both referral programs and affiliate programs.
Launch a refer-a-friend or affiliate program that lowers your acquisition costs and builds customer loyalty, with little engineering work.
Trusted by marketing and product teams that grow through customer, user, and partner referrals.
