Skip to content

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 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


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:

  1. Connected

  2. Engaged in trial

  3. Working together long term

  4. Reward sent

  5. 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!