Create Share Link on an Event

This article covers the two main implementation options and when to use each.

Overview

Share Links for Everyone is a strategy for pre-generating a unique referral share link for every customer in your database and pushing that link back into your existing systems — your CRM, ESP, or banking platform — so it can be included in any outbound communication without requiring Extole to be in the loop for every email or touchpoint.

The result: every customer already has a share link waiting for them before they ever visit your referral program. You can embed it in welcome sequences, transactional emails, app notifications, and outbound campaigns without any manual intervention.

This article covers the two main implementation options and when to use each.

Why do this?

Most referral programs are reactive — a customer visits the site, lands on the share experience, and only then gets a link to share. Share Links for All flips this model. By the time you reach out to a customer, their personal share link already exists and can be dropped into any message.

Common use cases include:

  • Including a referral link in every email in your post-signup welcome sequence
  • Adding a share link (or QR code) to transactional emails such as order confirmations or account statements
  • Embedding a referral link in your app's "my account" screen without requiring a separate page load
  • Giving field employees or contractors their own personal share link to use in conversations and emails

Option 1: Create Share Link on Event (Extole Extension + Outbound Webhook)

This is the recommended approach for most programs. Extole automatically generates a share link when a specified event occurs (typically converted) and pushes it to your external system via an outbound webhook.

How it works

When a customer triggers the chosen event, Extole creates a share link for them and fires a webhook payload — containing the share link, email, and any other configured fields — to the endpoint you specify. Your system stores the link and makes it available for future communications.

Setup

Step 1 — Enable the Extension

  1. In My Extole, go to **Partners > Extensions. **
  2. Find and enable **Create Share Link on Event. **
  3. Set the triggering event. The default and most commonly used trigger is converted — a link is created the moment a customer converts. For programs where conversion happens before referral program onboarding, signed_up or a custom event like account_opened may be more appropriate. Confirm the correct event name with your CS team.

Step 2 — Create an API Key

You'll need to create a credential in their destination system (e.g., a HubSpot private app token, a Salesforce connected app key, or a Klaviyo API key). This is the token Extole will use to authenticate when posting to their endpoint.

Step 3 — Add the Credential in Extole

  1. Go to Tech Center > Security Center.
  2. Click + New Key and select Webhook as the key type.
  3. Choose the appropriate algorithm:
    1. Password — sends the key as Authorization: Bearer <key>
    2. HTTP Basic — sends as Authorization: Basic <base64EncodedKey>
    3. HS256 — signs the request body and sends as X-Extole-Signature: <signed_value>
  4. Paste the your API key or bearer token and save.

Step 4 — Set up the Extole Webhook

Go to Tech Center > Outbound Webhooks and create a new webhook. To complete this step, you must provide:

RequiredDescription
Endpoint URLThe destination URL Extole will POST to (e.g., your CRM's contacts API endpoint)
Authentication CredentialThe API key or token created in Step 3
Desired Payload FieldsWhich fields to include — at minimum: email, share_link, partner_user_id. Additional fields such as share_code and event_time can be added by Extole’s support team.

Note: Attaching the webhook to the created_share_link controller in the campaign is handled by Extole. Provide the above details to Extole to complete configuration.

Example webhook payload

{
  "event": "Share Link Created",
  "email": "[email protected]",
  "partner_user_id": "USER-12345",
  "timestamp": "2024-03-15T10:30:00.000Z",
  "share_link": "share.yourbrand.com/alex01"
}

Webhook retry behavior

If Extole receives a non-200 response, it will retry 5 times on this schedule: 1 second, 1 hour, 3 hours, 12 hours, 12 hours. After that, the event is placed in a dead-letter queue for 7 days. Your Solutions Architect can access the Webhook Events Report or replay events using the /v6/webhooks/events/send endpoint if needed.

Option 2: Create Share Link via API

Use the Create Share Link API when your system needs to generate or retrieve a share link on demand — for example, when your backend is building a personalized email at send time, or when you need fine-grained control over the share link's code or label.

Endpoint

POST https://api.extole.io/v3/persons/{person_id}/shareables

Example request

curl -X POST "https://api.extole.io/v3/persons/{person_id}/shareables" \
  -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"label": "refer-a-friend"}'

Key parameters

ParameterRequiredDescription
person_idYesExtole's unique identifier for the customer
labelYesThe program label configured in Extole (e.g., refer-a-friend)
codeNoA custom code for the share link — if omitted, Extole assigns a random code
keyNoA unique key for the share link; defaults to the label
contentNoContent to embed in the link (e.g., partner_content_id, title, image_url)
program-urlNoYour Extole program domain (branded or unbranded)

Backfilling existing customers


Before launch, you should generate share links for your existing customer base — not just net-new customers going forward. The standard process is:

  1. Provide Extole with your existing customer list (email and/or partner_user_id).
  2. Extole creates share links for all customers in bulk.
  3. Extole delivers the links back to you via a file or webhook for import into your system.

Once the backfill is complete and your Extension + Webhook is live, new customers will have share links created automatically as they convert, keeping your system of record continuously up to date.

Choosing the right approach

ScenarioRecommended approach
Automatically generate a share link when a customer converts and push it to a CRM or ESPExtension + Outbound Webhook
Integrate with a system like Iterable or Klaviyo where new customer events flow through automaticallyExtension + Outbound Webhook
Bulk backfill share links for existing customers before launchContact your Solutions Architect — this uses a batch job process
Your backend needs to create or retrieve share links programmatically at send timeAPI
You need a custom share link code (e.g., structured from employee name or ID)API
One-off link creation for a specific personAPI or My Extole UI (User Support > person profile > + New Share Link)

Setting up your ESP or CRM to use the share link

Once Extole is pushing share links to your system via the outbound webhook, you need two things on the receiving end: somewhere to store the link per contact, and a way to insert it into emails. The setup varies by platform.

Hubspot

Implementation Details

Step 1 — Create a custom contact property

The webhook payload lands in HubSpot and needs to be written to a contact property. Create a dedicated property to hold the share link:

  1. In HubSpot, go to Settings > Properties.
  2. Click Create property and select Contact as the object type.
  3. Set the Field type to URL (this makes the value clickable in the contact record and validates the format).
  4. Name it something like Extole Share Link and save.

The Extole webhook should be configured to write share_link to this property, matched on email or partner_user_id. Confirm the field mapping with your Solutions Architect.

Step 2 — Use the share link in email

In any HubSpot marketing email or automated email, insert the link as a personalization token:

Place your cursor in the email body where the link should appear. Click Personalize in the rich text toolbar. Select Contact as the token type, then search for your Extole Share Link property. Set a fallback value (e.g., your main referral program URL) in case the property is empty for some contacts.

The token will resolve to that contact's personal share link at send time. This works in subject lines, body copy, and button URLs.

Note: HubSpot requires a Marketing Hub Professional or Enterprise subscription to use personalization tokens in automated emails.

Salesforce Marketing Cloud (SFMC)

Implementation Details

Step 1 — Add a share link column to your Data Extension

SFMC personalizes emails from Data Extensions. The share link needs to be a column in the Data Extension you send from:

  1. In Email Studio or Contact Builder, open the Data Extension you use for customer sends.
  2. Add a new column: name it extole_share_link, type Text, length 500.
  3. Ensure the column is populated with share link values before sends — Extole pushes these via the outbound webhook, which should be configured to update this field.

Step 2 — Personalize with a personalization string or AMPscript

The simplest approach uses a personalization string directly in the email body:

%%extole_share_link%%

For more control — such as showing a fallback URL if the field is empty — use AMPscript:

%%[
  var @shareLink
  set @shareLink = AttributeValue("extole_share_link")
  if empty(@shareLink) then
    set @shareLink = "https://refer.yourbrand.com"
  endif
]%%
Your personal referral link: %%=v(@shareLink)=%%

This renders each recipient's share link at send time, falling back to the program's main URL if the field isn't populated.

Klaviyo

Implementation Details

Step 1 — Receive the share link as a custom profile property

Klaviyo stores per-contact data as profile properties. Because Klaviyo uses a schema-less database, you do not need to pre-define the property before Extole writes to it — the first webhook payload that includes the field will create it automatically on the matching profile.

The Extole outbound webhook should be configured to POST to Klaviyo's Update Profile endpoint, writing the share link as a custom property (e.g., extole_share_link) matched on email. Confirm the endpoint URL and field name with your Solutions Architect.

Step 2 — Use the share link in email via the lookup filter

In any Klaviyo email or flow template, reference the custom property using Klaviyo's variable syntax with the lookup filter:

{{ person|lookup:'extole_share_link'|default:'https://refer.yourbrand.com' }}

The default filter provides a fallback URL for any profile where the property hasn't been populated yet. This works in email body copy, subject lines, and button URLs.

Note: Custom property names are case-sensitive in Klaviyo. The name used in the template must exactly match the field name set by the webhook — for example, extole_share_link and Extole Share Link are treated as different properties. Agree on a naming convention with your Solutions Architect before going live.

Iterable

Extole has a native integration guide for Iterable. The setup below reflects that documented pattern.

Implementation Details

Step 1 — Create an Iterable API key

  1. In Iterable, go to Integrations > API Keys.
  2. Click New API Key, enter a name, and click Create API Key.
  3. Save the key — you'll paste it into My Extole in the next step.

Step 2 — Add the API key to My Extole

  1. In My Extole, go to Tech Center > Security Center.
  2. Click + New Key and select Webhook as the key type.
  3. Set the algorithm to Password.
  4. Paste your Iterable REST API key and save.

Step 3 — Configure the Extole outbound webhook

The Extole webhook should POST to Iterable's Update User endpoint:

POST https://api.iterable.com/api/users/update

If using Iterable's EU data center, use https://api.eu.iterable.com/api/users/update instead.

The webhook payload writes the share link directly to the user's profile as a dataFields value:

{
  "email": "[email protected]",
  "dataFields": {
    "share_link": "https://share.yourbrand.com/alex01"
  }
}

Step 4 — Use the share link in email templates

In any Iterable message template, reference the user profile field using a Handlebars merge tag:

Your referral link: {{share_link}}

At send time, Iterable replaces the merge tag with the value from the user's profile. You can use this in email body copy, button URLs, or subject lines.

Note: Iterable has a project-level setting called Drop Unrecognized User Fields that, if enabled, will silently ignore fields it doesn't recognize. If the share_link field isn't appearing on user profiles, check Settings > Data Schema Management to confirm the field is allowed or use an API override to add it.