Skip to content
Zapier case study

Course registrations as associated HubSpot deals, LMS seats from a list, and a geocoded member directory

Built white-label inside an Australian digital agency's Zapier workspace, for an industry association of assistive-technology suppliers. Five Zaps feed a fully associated HubSpot CRM: course registrations become deals linked to the member's company, purchased seats create a group in the website's LMS, membership applications publish a geocoded directory listing classed by remoteness, and staff log interactions as notes.

An Australian assistive-technology industry associationIndustry associationBuilt 2025–20265 Zaps for this client, in a 27-Zap agency workspace
Zaps for this client, all switched on
5
steps from a course registration to an associated HubSpot deal
14
code steps behind each geocoded directory listing
3

The business

This work was delivered white-label, inside the Zapier workspace of an Australian digital agency that builds and runs WordPress and Gravity Forms sites for its clients. The agency is not named, and neither is its client. Each client has its own folder in the workspace; this page covers one of them, and the agency's other clients are written up on their own pages.

The client is an Australian industry association whose members supply assistive technology. HubSpot is its CRM for members, companies and deals. Its WordPress site runs Gravity Forms, a LearnDash learning-management system for its training courses, and a public directory of members.

Three things had to line up. A course registration from a current member has to land on that member's existing company in HubSpot, not on a new one. A company buying several seats needs a group in the LMS with the right number of seats and the buyer as its leader. And a new member needs a directory listing that places them on a map and says how remote they are, using the Modified Monash Model (2023), the remoteness classification the association records.

Audited 21 Oct 2026. The agency's workspace holds 27 Zaps for several clients; the audit lists 5 in this client's folder, all on. Pro plan (annual), 750 tasks a month, resetting on the 22nd; this period's 750 plan tasks and 100 pay-per-task tasks are used up. Autoreplay off. Tasks are shown for the current period so far (22 Sep – 21 Oct) and the previous one (22 Aug – 22 Sep). Runs and errors are from Zap history for 22 Sep – 21 Oct: 254 run entries across the workspace.

What we built

01

Course registrations into HubSpot

One instant Zap turns every training-course registration into a HubSpot deal associated with the right contact and company, with members matched to their existing company by email domain.

  • Instant14 steps

    Course registration to an associated HubSpot deal

    • Gravity Forms
    • Paths
    • Formatter
    • HubSpot
    • Filter
    Trigger
    Gravity Forms – Form Submission on the training-course registration form
    What it does
    Paths split on the form's current-member answer. For a member, the email is split at the @ to get the company's domain, the company is found by that domain (and created with an owner if it does not exist), the contact is created or updated against it, and a deal is created, named after the company and the seat count, with amount, entry date, priority, owner, a Xero invoice reference and the Stripe transaction ID; the deal is then associated with the company and the contact. For a non-member, the contact and the deal are created, and a company is created only if they are buying as a company, before the same associations.
    The tricky part
    Matching members to their company by email domain, and creating the HubSpot associations as explicit steps. The Stripe transaction ID and the Xero invoice reference ride on the deal so it can be matched up with accounting.
    Error handling
    The association steps halt the run on an association error. Autoreplay is off.
    Usage
    16 tasks (22 Sep – 21 Oct), 4 (22 Aug – 22 Sep). 4 runs, 0 errors (22 Sep – 21 Oct).
    Status
    On, version 3, last edited 14 Oct 2026
02

Seats in the learning-management system

When a company buys seats on a course, joining the course's HubSpot list creates a group in the website's LMS with the purchaser as group leader and the number of seats bought.

  • 3 steps2 Zaps

    Purchased seats create an LMS group

    • HubSpot
    • Webhooks
    Trigger
    HubSpot – New Contact in Segment, the course's list, retrieving the seat count and primary company
    What it does
    The contact's associated company is fetched, and a POST to a custom endpoint on the website creates a group in the LMS for that course with the purchaser's email, login, company and name, the number of seats and the course.
    The tricky part
    A CRM list drives provisioning in a WordPress LMS through a custom endpoint authenticated with a shared-secret header. There is one Zap per course.
    Error handling
    None. 1 errored run in 30 days, on the second course. Autoreplay is off.
    Usage
    First course: 0 tasks (22 Sep – 21 Oct), 14 (22 Aug – 22 Sep). Second course: 7 tasks (22 Sep – 21 Oct), 30 (22 Aug – 22 Sep); 4 runs, 1 error (22 Sep – 21 Oct).
    Status
    Both on, version 1, last edited 10 Sep and 25 Aug 2026
03

Member directory listings

A membership application publishes a geocoded listing in the website's member directory, classed by remoteness, and writes the class back to the member's company in HubSpot.

  • Instant8 steps

    Membership application to a geocoded directory listing

    • HubSpot
    • Code by Zapier
    • Webhooks
    • Delay
    Trigger
    HubSpot – New Form Submission on the membership application form
    What it does
    Three JavaScript steps prepare the listing: the first normalises the Australian state field (abbreviations and full names to VIC, NSW and so on), the second escapes line breaks in the description so the JSON payload stays valid, and the third geocodes the address and looks up its Modified Monash Model (2023) remoteness category. A POST then creates the listing in the website directory with title, description, category, address, latitude and longitude, remoteness category, map view and public contact details. After a two-minute delay the contact's primary company is found in HubSpot and updated with the remoteness category.
    The tricky part
    Three custom code steps (normalisation, JSON-safe escaping, and geocoding with remoteness classification), a direct REST call to the website, and a delay so HubSpot has finished its own association processing before the company is looked up.
    Error handling
    None. All 4 runs in the last 30 days errored; an unpublished fix is in draft. Autoreplay is off.
    Usage
    13 tasks (22 Sep – 21 Oct), 12 (22 Aug – 22 Sep). 4 runs, 4 errors (22 Sep – 21 Oct).
    Status
    On, version 5 plus an unpublished draft, last edited 28 Sep 2026
04

Staff notes on member records

A simple internal form that puts each logged member interaction on the contact in HubSpot.

  • 4 steps

    Staff interactions logged as HubSpot notes

    • Gravity Forms
    • HubSpot
    • Formatter
    Trigger
    Gravity Forms – Form Submission on an internal staff form
    What it does
    Staff log a member interaction on an internal website form. The contact is created or updated in HubSpot, the date is formatted as DD/MM/YYYY, and an engagement note is created with its type, date, notes, organisation and phone, assigned to an owner and associated with the contact.
    The tricky part
    A HubSpot engagement created from a plain form, associated with the contact and assigned to an owner.
    Error handling
    None.
    Usage
    0 tasks in both periods.
    Status
    On, version 4, last edited 9 Sep 2025

What the counters show

  • 12 runs from 22 Sep to 21 Oct 2026 across this client's Zaps: 4 course registrations, 4 membership applications and 4 seat purchases on the second course. That is the sum of the counters above.

  • 5 errored runs in that window: all 4 runs of the directory-listing Zap and 1 seat purchase. The 4 registrations all became deals without an error.

  • 36 tasks in the current period so far and 60 in the previous one: 36 of the 886 tasks the workspace's Zaps have counted this period.

What we would change

  • The directory-listing Zap errored on all 4 of its runs in the last 30 days, and with autoreplay off each failed run stays failed until someone replays it. An unpublished fix sits in draft; we would test it against the failed runs, publish it, replay the four and add an error path that emails the team.

  • Only the deal Zap has an error strategy (its association steps halt). We would switch autoreplay on and alert on the LMS and directory requests, where a failure means a buyer without seats or a member without a listing.

  • Members are matched to their company by email domain, so a member writing from a personal address, or a company with more than one domain, does not find its existing company. We would fall back to a lookup by company name and flag what still does not match.

  • There is one seat-provisioning Zap per course, so a new course needs a new Zap. We would pass the course from the list into a single Zap.

Every Zap the audit lists for this client is described. The workspace's other Zaps belong to the agency's other clients and are written up separately.

Built with

  • Zapier
  • HubSpot
  • Gravity Forms
  • WordPress
  • LearnDash
  • Code by Zapier
  • Webhooks
  • Formatter
  • Paths

Page copy drafted with AI assistance. Skofi is accountable for it. Editorial policy

Start here

Have a Zapier account like this one?

We start by reading what is already there: every Zap, its counters and its failures. A short call is the fastest way to find out what yours needs.

Book a 15-minute callsaveez@skofi.tech

What happens on the call

  • 15 minutes, no deck
  • We map the process on the call
  • A written scope, or an honest no
Book a call