Hi, I'm Ryan Schweighart, founder of Whole Hart Impact. In today's WHInsight, I'll show you how to...
How I Created My Referral and Reward Program with HubSpot, Basecamp, Tremendous, and Zapier
In this post, I’ll walk through exactly how I set up an almost fully automated referral and reward program using HubSpot, Zapier, Basecamp, and Tremendous. If you're building custom automations for yourself or clients, this guide should give you a blueprint—or at least a few useful pieces—to borrow from.
Overview
When someone submits a referral via a HubSpot form, the system:
-
Creates or updates a Basecamp project tracker
-
Logs progress as the referral moves through my pipeline
-
Sends real-time email updates to the referrer
-
Sends a reward via Tremendous if the referral becomes a client
Zapier ties it all together.
Tools Used
-
HubSpot – CRM and form capture
-
Zapier – Automation
-
Basecamp – Public-facing referral tracker
-
Tremendous – Reward fulfillment
Setup Summary
1. Basecamp
-
Create a blank project template with a simple to-do list.
-
Each referral generates a new project from this template.
-
The public link is shared with the referrer to track progress.
2. Tremendous
-
Set up an email-based reward campaign.
-
Allow redemption via options like Visa, Amazon, or charity donations.
-
Use personalization tokens for dynamic messaging.
3. HubSpot Setup
Association Labels:
-
Create a contact-to-contact association:
referrer
andreferee
. -
Limit: one referrer, many referees.
Properties:
-
For deals:
referee HubSpot record ID
(text) -
For contacts:
-
referrer email
,first name
,last name
,phone
-
referral type
(self/other) -
tracker link (public/internal)
– use URL field type
-
Form Logic
Two forms:
-
Self-referral form
-
Refer someone else form
Data from these forms populate contact properties and trigger downstream automation.
Hidden fields are used to tag referral type (self
or other
) for clean Zapier logic.
Zaps Overview
There are two main Zaps: one for each form type. Both:
-
Look up or create the Basecamp tracker
-
Populate HubSpot fields
-
Create the association between referrer and referee
If it’s the referrer’s first submission, the system creates a Basecamp project from the template. If not, it finds the existing tracker.
To avoid duplication, HubSpot’s association labels and conditional logic in Zapier are used.
Here's the code from step 8 of the zap at the 45:20 minute mark of the video. Note you'll want to update the type id in the code below based on the step 7 output. It might be different than the type id you get when viewing the association details in HubSpot's settings.
const associatedContactsJson = inputData.associated_contacts || '{}';
const associatedContacts = JSON.parse(associatedContactsJson).results || [];
// Initialize an array to hold the matching inputs
const matchingInputs = [];
// Iterate through each contact to find the toObjectId where typeId equals 4
associatedContacts.forEach(contact => {
const hasTypeId4 = contact.associationTypes.some(type => type.typeId === 4);
if (hasTypeId4) {
matchingInputs.push({ id: contact.toObjectId });
}
});
// Prepare the JSON output
const outputJson = {
propertiesWithHistory: [
"hs_object_id"
],
inputs: matchingInputs,
properties: [
"email"
]
};
// Output the JSON object
output = { structuredData: JSON.stringify(outputJson) };
Sub-Zap Logic
A shared Sub-Zap handles Basecamp setup and syncing:
-
Creates to-do lists and tasks in Basecamp for each referral milestone
-
Updates HubSpot records
-
Marks progress in the Basecamp tracker
-
Syncs contact name changes across systems
Tracking Progress & Triggering Rewards
The program uses HubSpot pipeline stages and Zapier to update Basecamp and send emails:
-
Connected
-
Engaged in trial
-
Working together long term
-
Reward sent
-
Did not work out
Each pipeline stage triggers:
-
A Basecamp update
-
A real-time email notification to the referrer
If the deal is won:
-
The reward is sent via Tremendous
-
"Did not work out" to-do is removed
If the deal is lost:
-
"Did not work out" is completed
-
Other to-dos are removed
Webhooks & API Use
Custom Webhooks are used for:
-
Creating/refining contact associations in HubSpot
-
Updating Basecamp projects and tasks with API requests (PUT/POST/DELETE)
-
Managing authentication tokens
Zapier’s Storage by Zapier is used to store and refresh the Basecamp token weekly.
Name Sync Logic
If a contact’s name is updated in HubSpot, the change is automatically pushed to Basecamp using separate Zaps and Sub-Zaps.
Final Notes
This setup is tailored, but flexible. Even if you don’t replicate it end-to-end, the structure can help automate your own referral and reward systems.
If you have questions about the setup or want help building something similar, feel free to reach out via my contact information below.
Bye, for now!