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 adds and updates Contacts in the Resend Segment you choose, and creates the Contact Properties that hold each participant’s referral link, referral counts, referrer details, and milestone progress.
Use this guide to get the sync running. Once it is, those properties are available to any Broadcast you send to that Segment.
In Resend > API Keys, select + Create API key, name it, and choose Full access under Permission. A sending-only key cannot read Segments or manage Contacts, so it will not work here. Copy the key from the confirmation screen — Resend does not show it again.

Connect Resend before you import participants so the sync covers everyone from the start.

GrowSurf stores the key securely and does not return it to the dashboard.

Pick your Segment from the dropdown. If one you just made in Resend is not listed, select the refresh icon beside the dropdown to reload it. Saving the Segment is what starts the sync and creates the Contact Properties.
GrowSurf creates these account-level Contact Properties in Resend:
| Contact Property | Property key | Type | What it holds |
|---|---|---|---|
| GrowSurf Share URL | grsf_share_url | String | The participant’s unique referral link |
| GrowSurf Participant ID | grsf_participant_id | String | The participant’s GrowSurf ID |
| GrowSurf Referral Status | grsf_referral_status | String | CREDIT_PENDING, CREDIT_AWARDED, or CREDIT_EXPIRED |
| GrowSurf Participant First Name | grsf_participant_first_name | String | The participant’s first name |
| GrowSurf Participant Last Name | grsf_participant_last_name | String | The participant’s last name |
| GrowSurf Referrer First Name | grsf_referrer_first_name | String | The referrer’s first name, when there is one |
| GrowSurf Referrer Last Name | grsf_referrer_last_name | String | The referrer’s last name, when there is one |
| GrowSurf Referrer Email | grsf_referrer_email | String | The referrer’s email, when there is one |
| GrowSurf Total Referral Count | grsf_total_referral_count | Number | All-time referral count |
| GrowSurf Monthly Referral Count | grsf_monthly_referral_count | Number | Referral count for the current month |
| GrowSurf Previous Monthly Referral Count | grsf_prev_monthly_referral_count | Number | Referral count for the previous month |
| GrowSurf Next Milestone | grsf_next_milestone | String | The next milestone message, on programs with milestone rewards |
| GrowSurf Next Monthly Milestone | grsf_next_monthly_milestone | String | The next monthly milestone message, when there is one |
| GrowSurf Total Invite Count | grsf_total_invite_count | Number | All-time invite count |
| GrowSurf Total Impression Count | grsf_total_impression_count | Number | All-time referral-link view count |
If the program already has participants, use the existing-participant sync options to send their current referral data across.
This is the single most common setup failure. The key needs to read Segments and manage Contacts and Contact Properties, which only Full access grants.
If the Segment is removed in Resend, pick an existing one in GrowSurf and save again. The sync has nowhere to write until you do.
Resend treats grsf_share_url and GRSF_Share_URL as different keys. Use the names exactly as GrowSurf creates them when you reference them in a Broadcast.
No. Selecting a Segment in GrowSurf creates them for you and keeps their values current.
GrowSurf retries temporary provider errors for up to seven days. A participant’s activity log shows the result of each attempt.
In Broadcasts sent to that Segment. See adding referral links to Resend Broadcasts for the syntax.
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.
