Send CRM deals and calls by webhook
HubSpot, Salesforce and GoHighLevel can send a deal when it is won, and CallRail and CallTrackingMetrics can send a call when it ends. SourceTrack records each one as a conversion and credits it to a source when it carries the SourceTrack visitor ID, a click ID such as gclid, or the buyer’s email address.
WarningThis is a webhook you set up in your own tool, not a native sync, and SourceTrack writes nothing back to your CRM. The templates below follow each tool’s own documentation, read on 30 October 2026. They have not yet been checked against a delivery captured from each tool, so send one test and check it in SourceTrack before you rely on it.
You need: a webhook source in SourceTrack and its URL (Integrations → Webhook sources), and admin access to the workflows or webhooks of your CRM or call-tracking tool. If you do not see Webhook sources there, it is not on your account yet: contact support@sourcetrack.ai.
Your Webhook URL
Every tool posts to your webhook source’s URL with the tool’s name added at the end:
POST https://api.srctk.com/api/webhooks/incoming/<your webhook key>/<tool>| Tool | URL to paste |
|---|---|
| HubSpot | https://api.srctk.com/api/webhooks/incoming/<your webhook key>/hubspot |
| GoHighLevel | https://api.srctk.com/api/webhooks/incoming/<your webhook key>/ghl |
| Salesforce | https://api.srctk.com/api/webhooks/incoming/<your webhook key>/salesforce |
| CallRail | https://api.srctk.com/api/webhooks/incoming/<your webhook key>/callrail |
| CallTrackingMetrics | https://api.srctk.com/api/webhooks/incoming/<your webhook key>/ctm |
- Keep the URL private: anyone who has it can send conversions to your site. If it is shared by mistake, rotate the source in SourceTrack to get a new one.
- Leave request signing off for this source. These tools do not add SourceTrack’s signature header, so a signed source refuses their deliveries.
Not Supported
- HubSpot Webhooks API (a HubSpot app’s subscriptions): it sends a list of events without the deal amount or the contact’s email, and SourceTrack refuses it. Use the HubSpot workflow below.
- Salesforce Outbound Messages: they are XML, and SourceTrack reads JSON only, so they are refused. Use the Salesforce Flow below.
HubSpot: Send a Webhook from a Deal Workflow
- In HubSpot, go to Automation → Workflows and open a deal-based workflow that starts when a deal reaches your won stage.
- Click + to add an action, and under Data ops choose Send a webhook.
- Set the method to POST and the webhook URL to your URL ending in
/hubspot. - Choose Customize request body and add each key below. For a property, type the key and select the HubSpot property. For a static value, type the key and the value.
| Key | Value |
|---|---|
deal_id | Select Record ID |
dealstage | Select Deal stage |
amount | Select Amount |
currency | Select Currency |
email | Select the buyer's email address |
conversion_type | Static value closed_won |
st_aid | Select the property where you store the SourceTrack visitor ID (optional) |
A custom pipeline’s won stage reaches SourceTrack as a stage number, not as “closed won”. The static conversion_type is what marks the deal as won, so keep it in the won-stage workflow only. HubSpot offers the Send a webhook action on Data Hub Professional or Enterprise.
GoHighLevel: Use the Workflow Webhook Action
- In GoHighLevel, go to Automation and open a workflow whose trigger is about an opportunity, for example a status or stage change.
- Click + and add the Webhook action. POST is the default method.
- Paste your URL ending in
/ghl. No custom body is needed.
The action already sends the contact’s email and gclid and the opportunity’s id, status, lead_value and stage name (GoHighLevel spells that key pipleline_stage). A won opportunity is recorded as closed won with its lead value, and an open one by its stage name.
NoteGoHighLevel sends no currency. To send one, add a Custom Data item with the key currency and your currency code as the value. GoHighLevel does not say where Custom Data appears in the body, so check it under Recent payloads on your webhook source.
Salesforce: Send JSON from a Flow
- In Salesforce Setup, create an External Credential and a Named Credential whose URL is
https://api.srctk.com. - In Flow Builder, in a flow that runs when an opportunity is won, add an Action and choose Create HTTP Callout.
- Pick that Named Credential, choose POST, and set the URL path to
/api/webhooks/incoming/<your webhook key>/salesforce. - When Salesforce asks for a sample request, paste the JSON below.
- Set each field from the opportunity:
Id,StageName,IsWon,Amount,CurrencyIsoCode(only in orgs with more than one currency) andEmailfrom the opportunity’s contact. Leave outst_aidandgclidif you do not store them.
{
"Id": "0065e000002ABCXYZ",
"StageName": "Closed Won",
"IsWon": true,
"Amount": 48000,
"CurrencyIsoCode": "EUR",
"Email": "buyer@example.com",
"st_aid": "",
"gclid": ""
}IsWon set to true marks the deal as won, whatever your won stage is called.
CallRail and CallTrackingMetrics: Post-Call Webhooks
Only an answered inbound call of at least 60 seconds becomes a conversion, recorded as a phone call. Other calls are acknowledged and not recorded.
CallRail
- On CallRail’s Integrations page, select the Webhooks tile.
- Paste your URL ending in
/callrailinto the Post-call box, then save.
SourceTrack reads the gclid, fbclid, msclkid and UTM tags CallRail captured from the landing page, and st_aid when CallRail sends one with the call.
CallTrackingMetrics
- Go to Flows → Automation → Webhooks and add a webhook.
- Choose the trigger for the end of a call, once all data has been captured.
- Paste your URL ending in
/ctm, choose the body type Log data and the method POST.
If you store the SourceTrack visitor ID on the call, put it in a custom field whose API name is st_aid.
What Is Checked and What Is Not
- Checked against each tool’s documentation (30 October 2026): the field names in these templates, HubSpot’s Send a webhook steps, GoHighLevel’s Webhook action fields, the Salesforce Opportunity field names, and CallRail’s and CallTrackingMetrics’ webhook settings.
- Not yet checked against a captured delivery: the exact body each tool sends, including how it formats amounts, where GoHighLevel puts Custom Data, and where CallTrackingMetrics puts click IDs other than gclid.
Check That It Works
- Trigger one real event: win a test deal, or make a test call longer than a minute and answer it. In CallTrackingMetrics, testing a webhook sends the most recent activity.
- In SourceTrack, open your webhook source under Integrations → Webhook sources and check Recent payloads and the delivery log.
- Paste the payload into Preview how we read a sample to see the amount and event type SourceTrack reads. The preview reads the body as sent; for GoHighLevel it shows an open opportunity as “open” rather than its stage name.
Not seeing data? See Troubleshooting.
Common Problems
- The tool shows a 401 error: the key in the URL is wrong, or the source was rotated or deleted. Copy the URL again.
- The tool shows a 422 error: SourceTrack could not read the body. Check that the tool sends JSON, and that you used the workflow or Flow above, not HubSpot’s Webhooks API or a Salesforce Outbound Message.
- Deals arrive without an amount: check the amount key in your template. A deal with no amount is recorded without a value rather than as zero.
- Deals have no source: the deal carried no visitor ID, click ID or email that SourceTrack could match.