Back to App
Back to Clients

Creating a Client from a Signed Contract

When a contract is signed, your CRM knows before you do. With a webhook it can tell SalesControl: the client shows up here on its own, with its service, its instalments already worked out, and the signature recorded in the Timeline.

Nobody has to retype anything, and above all no signature gets lost: even when something is missing, the client still comes in and someone is told to finish it.

This is an inbound webhook

Here your CRM calls SalesControl. If you need the other direction — SalesControl notifying an external system when someone signs a contract in here — see Outbound Webhooks: Notify an External System on Signing.

If you do not use an external signing tool

This page is for agencies that have contracts signed outside SalesControl (DocuSign, PandaDoc, their own CRM) and only want the client to land here on signature. If instead you want to write the contracts and have them signed inside SalesControl, that is a different path: see Contracts Overview. The two can coexist.

Plan required

A paid plan is needed (Starter and above), as for the other inbound webhooks. See Subscription Plans.

How to connect it

In the Admin Panel, Integrations tab, look for the Signed contract → client card.

Create the webhook

New webhook, give it a name (“Signed contracts”) and, if you like, pick a default setter and closer: they are used whenever the workflow sends no names.

Copy the address

It ends with /functions/v1/contract-signed-intake?t=…. Everything after t= is the token: whoever holds it can create clients in your agency, so treat it like a password. If it leaks, Regenerate token and the old address stops working at once.

Paste it into the signature workflow

In GoHighLevel: in the workflow that fires on a signed contract, add a Webhook action with method POST. In Zapier or Make: a “Webhooks → POST” step with a JSON body.

Use the ready-made template

How to connect it inside the card opens the JSON body already written, with a copy button. Drop the fields you do not need: none is mandatory except the name.

The field that matters: the service

The service_name field must match the name of one of your services exactly — the one you read on the Services page. Capitals and extra spaces do not count, everything else does. There are no fuzzy matches, and that is deliberate: attaching the wrong service to a contract means wrong instalments, wrong commissions and wrong bonuses.

If it matches, the client is created Active with its instalments. If it is missing or does not match, the client is still created, in the To complete state, and the closer gets the notification “this client signed, choose the service”. You will find it in the Clients list with its own tag and a dedicated box at the top: it cannot slip past you.

Why not a made-up service

The alternative would have been to create the client with a zero-euro, twelve-month contract. It would have looked like a real contract straight away, expiring in a year, sitting in the statistics and in renewals. A client that is to complete tells the truth: the signature is there, the contract is not yet.

If the contact is already a client

SalesControl recognises whoever arrives in three ways, in this order: your CRM’s contact id, then the email, then the exact name. The first is the only one that never changes, so it is worth always sending it.

One handy consequence: if the workflow fires twice, no duplicates appear. On the second call the client already exists and is recognised.

What happens when the client comes in

Setter and closer

You can send names in the setter and closer fields: they are looked up among the people who hold that role, even with just a first name or just a surname. If a name does not identify one single person, SalesControl does not guess: it uses the webhook default. Which is why setting one is worth it.

Two webhooks on the same workflow

If you also want a Timeline entry with a name other than “Contract signed”, you can chain this webhook and then the custom events one. The order matters: the first creates the client, the second finds someone to attach the event to. Reversed, the second event would sit in the “to match” queue waiting for you to assign it by hand.

If something does not work