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.
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.
HubSpot – CRM and form capture
Zapier – Automation
Basecamp – Public-facing referral tracker
Tremendous – Reward fulfillment
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.
Set up an email-based reward campaign.
Allow redemption via options like Visa, Amazon, or charity donations.
Use personalization tokens for dynamic messaging.
Association Labels:
Create a contact-to-contact association: referrer
and referee
.
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
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.
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) };
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
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
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.
If a contact’s name is updated in HubSpot, the change is automatically pushed to Basecamp using separate Zaps and Sub-Zaps.
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!