Skip to main content

New Starter Pipeline

The New Starter Pipeline replaces a standalone CRM (such as GoHighLevel) with a fully integrated lead funnel — built into r4ptor at no extra cost.

How it works

  1. A prospective student finds your club (via a Meta ad, a Google search, a link on your website, etc.)
  2. They click through to your public trial booking form at https://yourclub.r4ptor.app/join
  3. They choose a class, pick a trial date, and enter their details — no account, no login
  4. The booking lands in your Trial Starters pipeline dashboard instantly
  5. Automated comms fire in the background (confirmation, 24-hour reminder, nurture emails)
  6. You track the lead through the funnel until they convert to a full member

The /join booking form

The booking form is a public page — no login required, accessible from any device.

What the form collects

FieldRequired
Child's first and last nameYes
Child's date of birthYes
Parent / carer nameYes
Parent / carer phoneYes
Parent / carer emailYes
Class selectionYes
Trial date selectionYes
How did you hear about us?Yes
Medical conditions / allergiesOptional
SMS marketing consentOptional opt-in

Attire acknowledgements

Three configurable checkboxes appear before submission (all required). The default items are:

  • I understand my child should wear comfortable, loose-fitting clothing to their first trial
  • I understand training takes place in bare feet
  • I understand punctuality is important — please arrive 5 minutes before the start time

To customise these for your club, set TRIAL_FORM_ATTIRE_ITEMS in Settings → App Settings as a JSON array of strings.

Earliest bookable trial date

By default the form offers any upcoming date for a class. If a class type shouldn't be bookable until a certain date — for example, holding a class back until a new term starts while another stays open now — set an earliest trial date on that student type in Curriculum Library. The form (and the reschedule page) will only offer dates on or after it for classes of that type; other types are unaffected. Raising the floor never retroactively touches an existing booking, only new date selections.

Rate limiting

The form is rate limited to 5 submissions per IP address per hour to prevent spam.

Disabling the form

To temporarily close online bookings (e.g. over a holiday period), set TRIAL_FORM_ENABLED to false in App Settings. The /join URL will display a "bookings currently closed" message.


Trial Starters pipeline

Access the pipeline from the New Opportunities tile on the home screen.

Lead statuses

Leads move through a defined funnel:

StatusMeaning
NewLead received — not yet contacted
ContactedYou've reached out but no trial booked yet
BookedTrial date confirmed
Trial 1First session attended
Trial 2Second session attended — ready for membership offer
InvitedMembership offer SMS sent
JoinedSigned up as a full member — Direct Debit mandate created
LostNot proceeding (can be re-opened to New)

Filtering

Use the filter tabs at the top of the pipeline list to show leads by status, or view all active leads (any non-terminal status) at once.

Lead detail sheet

Tap any lead to open the detail sheet. From here you can:

  • View all contact details, with one-tap Call, WhatsApp, SMS, and Email buttons — same as on a student profile, so you can reach out without copying the number or address out to another app
  • Move the lead to the next status
  • Edit the lead's name, contact details, date of birth, and class — including assigning a class to a lead that arrived without one (every Meta-sourced lead lands with no class picked)
  • Add or edit internal notes
  • View the full comms history for this lead
  • Delete the lead (admin only)

Adding leads manually

Use the + button to add a lead without them going through the public form — useful for walk-ins, phone enquiries, or referrals.


Automated comms

The following comms fire automatically:

TemplateTriggerChannel
TRIAL_CONFIRMATIONImmediately on form submitSMS
TRIAL_REMINDER_24H24 hours before trial dateSMS

All templates are configurable via Comms → Templates in the admin panel.


Rescheduling or cancelling a trial

Every trial booking gets a unique, token-gated link that the lead can use to reschedule or cancel without calling or emailing you. When the TRIAL_CONFIRMATION template includes {{RESCHEDULE_LINK}} and {{CANCEL_LINK}} in its body, these links are sent automatically with the confirmation message.

The self-service page

The link points to /trial/manage?t=TOKEN — a public page (no login required). The page shows the lead's current booking and offers two actions:

  • Reschedule — picks a new date from the same class's upcoming slots (reuses the same date picker as the /join form) and sends a fresh TRIAL_CONFIRMATION comms after confirming
  • Cancel — marks the lead as LOST and deactivates the link

Page states

StateWhen it appears
FormNormal state — shows booking summary + action buttons
RescheduledAfter successful reschedule — shows new date
CancelledAfter cancellation — suggests contacting the club to re-book
Already a memberLead has status CONVERTED — link is inactive
InvalidToken not found or already cancelled — "link expired" message

Comms tokens

TokenValue
{{RESCHEDULE_LINK}}Full URL to /trial/manage?t=TOKEN
{{CANCEL_LINK}}Same URL with ?action=cancel appended — pre-selects the cancel flow

The base URL is set from the CORS_ORIGIN environment variable on each instance, so links always resolve to the correct subdomain.

Template activation

The TRIAL_CONFIRMATION template ships inactive in seed data. After activating it via Comms → Templates, ensure the body includes {{RESCHEDULE_LINK}} and {{CANCEL_LINK}} so leads receive the self-service links.


Ad campaign attribution (UTM tracking)

r4ptor automatically captures UTM parameters from the /join URL and stores them against each lead. This tells you exactly which ad or campaign generated each trial booking, without any manual tracking.

How it works

When someone clicks your ad and lands on /join?utm_source=meta&utm_medium=paid&utm_campaign=june-adults, r4ptor reads those parameters silently in the background. The lead is created in the pipeline with the source tagged.

In the pipeline you'll see a coloured attribution chip on each tagged lead card:

UTM sourceChip colour
meta / facebook / fbBlue — Meta
googleGreen — Google
instagramPink — Instagram
tiktokDark — TikTok
Any other valueGrey — value capitalised

Opening a lead's detail sheet shows the full attribution: source chip, medium, and campaign name.

Leads added manually or via the public form without UTM parameters fall back to showing the free-text "How did you hear about us?" answer instead.

Naming conventions

UTM parameters follow a widely-used standard (originally from Google Analytics) that all major ad platforms recognise. Stick to these conventions and your data will be consistent across tools.

Rules:

  • Always lowercase
  • No spaces — use hyphens (adults-june, not Adults June)
  • Be consistent — meta everywhere, not meta sometimes and facebook other times
ParameterWhat it tracksStandard values
utm_sourceWhich platformmeta, google, instagram, tiktok, website, email
utm_mediumThe channel typepaid-social (FB/IG ads), cpc (Google paid search), email, organic-social (free posts)
utm_campaignYour campaign nameadults-june, snakes-cranes-summer, brand
utm_source drives the chip colour in r4ptor

The pipeline chip is based on utm_source. Use meta for all Facebook and Instagram ads (even if they run on Instagram — they're managed through Meta Ads Manager). Use instagram only if you're tracking organic Instagram posts separately.

Building your URL

Take your base /join URL and append the parameters with ? then & between each one:

https://yourclub.r4ptor.app/join?utm_source=meta&utm_medium=paid-social&utm_campaign=adults-june

You can also use Google's Campaign URL Builder (free, no account needed) to build URLs without typing manually — search "Google Campaign URL Builder" and paste your /join URL as the website URL.

Ready-to-use examples

Meta (Facebook/Instagram) paid ad:

https://yourclub.r4ptor.app/join?utm_source=meta&utm_medium=paid-social&utm_campaign=adults-june

Google paid search ad:

https://yourclub.r4ptor.app/join?utm_source=google&utm_medium=cpc&utm_campaign=kung-fu-london

Link on your own website:

https://yourclub.r4ptor.app/join?utm_source=website&utm_medium=organic&utm_campaign=homepage-cta

Organic social post (Instagram/Facebook):

https://yourclub.r4ptor.app/join?utm_source=instagram&utm_medium=organic-social&utm_campaign=june-post

Adding the URL in Meta Ads Manager

Meta has a built-in URL parameter builder so you don't have to construct the string manually:

  1. In Meta Ads Manager go to the Ad level (not campaign or ad set)
  2. Under Destination → Website URL, paste your base URL: https://yourclub.r4ptor.app/join
  3. Click Build a URL Parameter (appears below the URL field)
  4. Fill in the fields — Meta will append them automatically
  5. Alternatively, just paste the full UTM-tagged URL directly into the Website URL field

Use the same utm_campaign value for all ads within one campaign. Only change it when you start a genuinely new campaign push — this lets you count total bookings per campaign across all creatives.

What you can and can't track

Traffic sourceUTM chip in r4ptor?Notes
Meta / Facebook paid ad✅ YesYou set the URL in Ads Manager
Instagram paid ad✅ YesSame — managed through Meta Ads Manager
Google paid search✅ YesSet destination URL in Google Ads
Organic Google search❌ NoGoogle doesn't pass UTMs on organic results
Link on your website✅ YesAdd ?utm_source=website to your CTA
Organic social post✅ YesAdd UTMs to the link in your post caption
Word of mouth / walk-in❌ NoUse the manual add + free-text source field

Meta Pixel integration

If you run Meta (Facebook/Instagram) ads, connect your Pixel so that every trial booking fires a CompleteRegistration conversion event. This combines with UTM tracking: Meta can optimise for bookings and r4ptor tells you which leads actually came from Meta.

  1. Go to Settings → App Settings
  2. Add your Pixel ID as META_PIXEL_ID
  3. Save — the Pixel fires automatically on the /join/confirmed page after every successful submission

Switch your campaign objective to Conversions

Once your Pixel is firing, go to Meta Ads Manager and change your campaign objective from Traffic or Reach to Conversions, setting CompleteRegistration as the conversion event.

This makes your ad spend work significantly harder: Meta's algorithm shifts from finding people who click to finding people who are most likely to actually book. You'll typically see fewer clicks but a much higher proportion that convert.

This also unlocks:

  • Lookalike audiences — built from people who completed the booking form
  • Retargeting — people who visited /join but didn't submit
  • Cost-per-result reporting — actual cost per trial booking, not per click

WordPress / website integration

There are two ways to put trial booking on your own website — link out to the full page, or embed the form directly on your own page.

The simplest integration. /join is a standalone full-page experience — just link to it from your existing website:

<a href="https://yourclub.r4ptor.app/join">Book Your Free Trial</a>
Iframe embedding

r4ptor sets X-Frame-Options: SAMEORIGIN on the /join page (and everywhere else in the app), which prevents it being embedded in a third-party iframe. Use a direct link, or the embeddable widget below.

Option 2 — Embed the form on your own page

A slimmed-down version of the booking form, /embed/join, is designed to be pasted directly into your own WordPress site (or any site) inside an <iframe> — visitors book without ever leaving your page.

To get your embed code:

  1. Go to Marketing & Ads from the home screen
  2. Scroll to Embed on Your Website
  3. Click Copy embed code
  4. Paste it into a Custom HTML block on your WordPress page (or the equivalent on your site builder)

The snippet includes a small script that automatically resizes the iframe to fit the form's current step, so it never shows a scrollbar or cuts content off. It reuses the exact same booking flow as /join — same classes, same dates, same comms — the only difference is where it's displayed.

One page is embeddable, the rest of your site isn't

Only /embed/join allows third-party framing. Every other page — including the full /join form, the admin app, and everything else — keeps the standard X-Frame-Options: SAMEORIGIN protection. This is a deliberate, narrow exception for the one page designed to be embedded.


AppSettings keys

KeyPurposeDefault
TRIAL_FORM_ENABLEDtrue / false — enables or disables the formtrue
TRIAL_FORM_ATTIRE_ITEMSJSON array of attire checkbox labelsThree default items
META_PIXEL_IDYour Meta Pixel ID for conversion trackingNone
VENUE_ADDRESSAddress shown in confirmation commsNone

Membership conversion

When a lead reaches Trial 2, the instructor taps Send Membership Offer from the lead detail sheet. This sends the personalised SMS and automatically moves the lead to Invited. The parent follows the secure link to complete the Direct Debit mandate, at which point the lead becomes Joined automatically.

See Membership & Direct Debit for the full flow.