Skip to main content

Sending Us Your Conversion Data (Booked Calls, Clients, Attendance)

How to automatically send us booked calls, new clients, seminar attendance, and lead ratings from your CRM, Calendly, Zapier, Make, or n8n — the exact data format, ready-made recipes, and how to test it safely.

Written by Chris Ross

You know things about your leads that we can't see — who actually booked a call, who became a client, and who showed up to your seminar. When you send that back to us, we can tell the ad platforms which leads were good ones, and they'll go find more people like them. This guide shows you how to send it automatically.

Booking through Calendly? You can skip this entire guide — it's a one-click connection with no Zapier and no JSON. See Connect Calendly (Automatic Booked Calls).

Not technical? You have an easy option. You can upload a spreadsheet instead from My Leads → Import conversions — no setup at all. This guide is for when you'd rather have it happen automatically.

Step 1 — Get your personal address

In your portal, go to Account → Webhooks and find Send us your conversion data. Click Create my endpoint. You'll get a web address that looks like this:

https://nszcgzbqfhiazqfzzsqm.supabase.co/functions/v1/inbound-outcomes/YOUR-TOKEN

That long token on the end is what identifies you, so treat it like a password — don't post it publicly. If it ever leaks, click Rotate and you'll get a new one.

Everything below is just "send some information to that address."

Step 2 — What to send us

Each thing you tell us about is one small record with two required parts:

  • What happened — the event.

  • Who it happened to — their email or phone (either one; both is better).

The simplest possible message we accept:

{ "event": "booked_call", "email": "[email protected]" }

The four things you can tell us

Event

Means

Also accepted

booked_call

They booked an appointment with you

booked · book · call_booked · appointment · schedule · scheduled

converted

They became a client

client · won · purchase · sale

attended

They showed up (great for seminars)

attend · attendance · showed · show

rated

Your rating of the lead's quality

rating · quality

Those alternate words in the last column all work — so if your CRM already calls it "Appointment" or "Won", you can usually send it as-is. Capital letters, spaces, and dashes are fine too: "Booked Call", "booked-call", and "booked_call" are all understood.

Optional extras

  • value — for converted, what the client is worth (e.g. 12500). Dollar signs and commas are fine, we'll clean them up.

  • occurred_at — when it happened, if it wasn't just now.

  • ratingrequired when the event is rated. Must be qualified or unqualified.

  • feedback — an optional note explaining the rating.

Sending several at once

{ "events": [  { "event": "booked_call", "email": "[email protected]" },  { "event": "converted",   "email": "[email protected]", "value": 12500 },  { "event": "attended",    "phone": "(883) 952-7547" },  { "event": "rated",       "email": "[email protected]", "rating": "qualified" }] }

You can send up to 1,000 records in one go.

Step 3 — How we match it to a lead

We look up the person by email first, then phone, and only ever inside your account — your data can never touch another firm's. Phone formatting doesn't matter; (883) 952-7547 and +1 883-952-7547 both match.

If we can't find them, we tell you exactly who we couldn't match and nothing is saved for that row. The rest of the batch still goes through — one bad row never breaks the whole thing.

Tip: send the same email address the person used to register for your event. That's what we have on file.

Step 4 — Test it before you go live

This is the important part, and it's easy. Add ?dry_run=1 to the end of your address:

https://nszcgzbqfhiazqfzzsqm.supabase.co/functions/v1/inbound-outcomes/YOUR-TOKEN?dry_run=1

In dry-run mode we check everything and tell you what would happen — but nothing is saved. Send a few real people through it and read the reply:

{ "ok": true, "dry_run": true, "received": 4,  "matched": 3, "unmatched": 1, "applied": 0,  "unmatched_sample": [ { "email": "[email protected]", "error": "no matching lead" } ] }

Read it like this:

  • received — how many records arrived. If this is 0 or wrong, your automation isn't sending what you think.

  • matched — how many we found. This is the number that matters.

  • unmatched_sample — the actual people we couldn't find, so you can spot the problem (usually a different email address).

When matched looks right, remove ?dry_run=1 and you're live. You can also see every delivery we've received under Account → Webhooks.

Step 5 — Pick your setup

Calendly — one click, no Zapier

If your consultations are booked through Calendly, this is by far the easiest path: you paste one token and we build the connection for you. Nothing on this page — no address, no JSON, no testing — applies to it.

👉 Connect Calendly (Automatic Booked Calls) — the full walkthrough, including the exact permissions your token needs and how to choose which meetings count as a booked call.

⚠️ Calendly needs a paid Calendly plan (Standard or above) for this.

Everything else — use a connector

Most other tools can only send data in their own format, which won't match ours. For those the recipe is: your CRM → a connector (Zapier or Make) → us. The connector is what translates.

Zapier

  1. Trigger: your CRM — pick the event that means "booked" or "became a client" (see the table below).

  2. Action: search for Webhooks by Zapier and choose POST.

  3. URL: paste your address (with ?dry_run=1 while testing).

  4. Payload Type: choose json.

  5. Data: add the rows below — the left side you type yourself, the right side you pick from your CRM's fields.

Key (type this)

Value (pick this)

event

booked_call — just type the word

email

the lead's email field

phone

the phone field (optional)

Turn the Zap on and confirm the reply says matched: 1.

⚠️ Two Zapier gotchas. First, Webhooks by Zapier is a paid feature — it isn't on Zapier's free plan, so you'll need a Professional plan or higher. Second, never leave the Data section empty — if you do, Zapier quietly forwards every field from the previous step and we won't understand any of it.

Make (formerly Integromat)

  1. Start your scenario with your CRM module.

  2. Add the HTTP app → Make a request.

  3. URL: your address. Method: POST.

  4. Set the body to Raw with content type JSON (application/json), then paste the snippet below and drag your fields into the quotes.

  5. Run it once and check the response.

{ "event": "booked_call", "email": "{{email}}" }

n8n (for technical teams)

If you already run n8n, use an HTTP Request node: Method POST, your URL, Send Body on, Body Content Type JSON, and Specify Body Using JSON with our format. If you've never heard of n8n, use Zapier or Make instead.

Working from a spreadsheet

Lots of firms track this in a spreadsheet — especially seminar sign-in sheets. Here's the good part: you don't have to reshape it. Send your sheet the way you already keep it and we'll work out the columns.

Your sheet only needs two things:

  1. A column that identifies the person — Email (or Phone).

  2. A column that says what happened — either a yes/no column, or an Event column.

The easy way — yes/no columns

This is how most people already track it, and it works as-is:

Name

Email Address

Booked Call

Booked Call Date

Attended

Converted

Amount

Jane Doe

yes

07/19/2026

yes

Bob Smith

yes

yes

yes

$12,500

Sue Jones

no

yes

We read yes · y · true · 1 · x · done · completed as "it happened" — and a date in the cell counts as a yes too. Blank or no means it didn't happen.

One row can say several things. Bob above booked, attended, and converted — that becomes three separate records automatically.

Column names we already understand (capitals, spaces and punctuation don't matter):

If your column says…

We read it as

Booked Call · Booked · Appointment · Scheduled · Consultation

they booked a call

Attended · Showed · Showed Up · Came

they attended

Converted · Became A Client · Client · Won · Signed · Sale

they became a client

Email · Email Address · E-mail

their email

Phone · Phone Number · Mobile · Cell · Telephone

their phone

Amount · Deal Value · Revenue

what the client is worth

Date · When · Timestamp

when it happened

Rating · Quality (qualified / unqualified)

your rating of the lead

Note · Notes · Comment

a note on the rating

Want to date one specific outcome? Add "Date" or "On" to that column's name — Booked Call Date, Converted On. Otherwise a plain Date column applies to the whole row.

If you'd rather be explicit, add an Event column containing booked_call, converted, attended, or rated. An Event column always wins over the yes/no columns.

Google Sheets

Open Extensions → Apps Script, clear the editor, paste this in, put your own address in the first line, then click Run. Google will ask you to authorise it the first time. You don't need to change anything else — it sends each row using your own column headings.

function sendConversions() {  var URL = 'https://nszcgzbqfhiazqfzzsqm.supabase.co/functions/v1/inbound-outcomes/YOUR-TOKEN?dry_run=1';  var data = SpreadsheetApp.getActiveSheet().getDataRange().getValues();  var headers = data.shift();  var events = data    .filter(function (row) { return row.join('').trim() !== ''; })    .map(function (row) {      var obj = {};      headers.forEach(function (h, i) {        if (h && row[i] !== '' && row[i] !== null) obj[h] = row[i];      });      return obj;    });  if (!events.length) { Logger.log('Nothing to send'); return; }  var res = UrlFetchApp.fetch(URL, {    method: 'post',    contentType: 'application/json',    payload: JSON.stringify({ events: events }),    muteHttpExceptions: true  });  Logger.log(res.getContentText());}

The reply appears in the Execution log at the bottom — check that matched looks right. When you're happy, remove ?dry_run=1 from the address and run it for real. To make it automatic, open Triggers (the clock icon) and schedule it daily.

Excel

Excel can't send data out by itself, so you have two choices:

  • Simplest — save and upload. Save the sheet as a CSV and use My Leads → Import conversions. For a once-a-month seminar list, this is honestly the right answer.

  • Automatic — Power Automate. Keep the file in OneDrive or SharePoint and format your data as a Table. Then build a flow: trigger "When a row is added or modified in a table" (Excel Online) → action HTTP, set to POST, your address as the URI, and a JSON body containing the row's columns under their own names. Note the HTTP action is a premium Power Automate feature, so it needs a paid plan.

Find your CRM

Here's where to start for the systems advisors use most. In every case you're picking a trigger, then sending it on with a connector.

Your CRM

Best route

Trigger to use

Watch out for

Wealthbox

Zapier

New Event (booked), New Opportunity, Contact Updated

No built-in webhooks, so delivery isn't instant. "Contact Updated" is only on higher Wealthbox plans.

Redtail CRM

Zapier

Activity Created (booked), Opportunity Updated, Workflow Step Completed

No built-in webhooks either. API access has to be requested from Redtail before Zapier will connect.

HubSpot

Built in

Workflow action Send a webhook → Customize request body

Needs a higher HubSpot tier for webhooks.

Zoho CRM

Built in

Workflow Rule → Webhook (POST, Raw/JSON)

Works well; map only the fields we need.

GoHighLevel

Built in

Workflow → Custom Webhook (raw JSON body)

Custom Webhook is a premium action on some accounts.

Salesforce

Built in or Zapier

Record-triggered Flow → HTTP Callout

Don't use "Outbound Message" — it sends a format we can't read. API access is limited on lower editions.

⚠️ Because neither Wealthbox nor Redtail can notify Zapier directly, Zapier has to check them periodically — so expect a short delay rather than instant delivery. That's fine for conversion tracking; nothing is lost, it just arrives a few minutes later.

Don't see yours? If it connects to Zapier or Make at all, the recipe above will work — and if it can't send data out, the spreadsheet route always will. Send us a message and we'll help you find the right trigger.

A reality check on "became a client"

Most systems don't have a single button that means "this lead became a client" — it's usually a stage, status, or pipeline change that you defined. So before you build anything, answer this: in my system, what exactly changes when someone becomes a client? Once you know that field and value, pick the trigger that watches it and add a filter for that value. That one decision is 90% of the setup.

If something isn't working

  • "couldn't tell what happened for this row" — the row has a person but nothing saying what they did. Add an Event column, or a column like Booked Call / Attended / Converted set to yes.

  • "unknown event" — the event word isn't one we recognize. Check it against the table above.

  • "row needs an email or phone" — no identifying column came through. Usually a blank cell or a field picked from the wrong step.

  • "no matching lead" — we don't have that person, or they registered with a different email. Compare against My Leads.

  • "rated rows need a rating" — add rating as qualified or unqualified.

  • Anything to do with Calendly — see the troubleshooting section of Connect Calendly.

  • Nothing arrives at all — check the address is exactly right, and look at Account → Webhooks to see whether anything reached us.

Send the same thing twice? No harm — we won't double-count it. That means you can re-send a corrected spreadsheet safely.

What we do with it

  • Booked calls and conversions are sent to the ad platforms so they can optimize toward people who actually book and buy.

  • Ratings are the most valuable signal you can give us — marking a lead qualified tells the platforms to find more like them.

  • Attendance is used for your reporting and show-up rates only.

Stuck at any point? Use Chat with us in the portal — send us a screenshot of your setup and the reply you got back, and we'll sort it out.

Did this answer your question?