App integration · All integrations
Connect GoHighLevel to Formfy
Agencies running GoHighLevel funnels book dozens of leads a week, but intake forms, consent waivers, and service agreements live in separate tools that never talk to GHL. Leads get booked and never sign onboarding paperwork. Signed PDFs pile up in inboxes instead of attaching to GHL contacts. Sales reps copy data by hand between platforms, and by the time operations reviews a new client file, half the required signatures are still missing.
Formfy's public REST API plugs directly into GoHighLevel workflows and custom webhooks. Set a pipeline-stage trigger in GHL, call Formfy's send endpoint, and the lead receives a branded intake form or waiver by email or SMS. The moment they sign, a Formfy webhook fires back to update the GHL contact record.
The workflow at a glance
Trigger
A lead reaches a pipeline stage or books an appointment in GoHighLevel
Action
GHL fires a webhook that calls Formfy to send an intake form, waiver, or contract
Result
Lead signs via email or SMS; signed PDF is routed back to the GHL contact record
Step-by-step: connect GoHighLevel to Formfy
Wire GoHighLevel pipeline triggers to Formfy form delivery and route signed documents back to GHL contacts via webhooks.
Generate a Formfy API key
Open the Formfy dashboard, go to Settings → API Keys, and click Create key. Copy the fk_live_… token to a password manager — Formfy displays it once. For development and testing, use the fk_test_… key so test signatures do not count against your live plan limits.
Choose or create the form you will send from GoHighLevel
In Formfy, pick an existing template or build a new intake form, client agreement, or service waiver. Call GET /api/v1/templates to browse the template library, then POST /api/v1/forms to create a fresh form instance. Record the form id — GHL's Webhook action will reference it when sending to each lead.
POST
/api/v1/formsSee in the OpenAPI spec →Build a GoHighLevel workflow with a Webhook action
In the GHL Automation builder, create a workflow triggered by a pipeline-stage move, appointment booked, or contact tag applied. Add a Webhook action and point it at the Formfy send endpoint. Map GHL contact merge fields — {{contact.email}}, {{contact.phone}}, {{contact.full_name}} — into the request body so Formfy knows who to contact.
Send the Formfy form to the lead from the GHL workflow
In the GHL Webhook action body, call POST /api/v1/forms/{id}/send with the lead's email or phone number and an optional personal message. Formfy delivers the form link within seconds. For clinical or high-ticket workflows, include both email and SMS delivery so the lead can sign on whatever device they are using.
POST
/api/v1/forms/{id}/sendSee in the OpenAPI spec →Subscribe GoHighLevel to the form.signed event
POST /api/v1/webhooks with your GHL inbound-webhook catch URL as target_url and event_types: ["form.signed"]. Formfy returns a signing secret. In GHL, configure a second workflow with an Inbound Webhook trigger to receive the payload and update the contact, advance the pipeline stage, or apply a "Signed" tag the moment the document is complete.
POST
/api/v1/webhooksSee in the OpenAPI spec →Retrieve the signed PDF and attach it to the GHL contact
When the form.signed webhook fires, extract the form id from the payload and call GET /api/v1/forms/{id}/signed-pdf to receive a time-limited download token. Fetch the PDF bytes via GET /api/v1/files/pdf/{token} and upload them to a cloud storage bucket or paste the download URL into a GHL contact custom field for one-click retrieval.
GET
/api/v1/forms/{id}/signed-pdfSee in the OpenAPI spec →Test the full loop and rotate the webhook secret on schedule
Move a test contact to the trigger stage in GoHighLevel. Confirm Formfy sends the form by checking the Formfy dashboard Deliveries log and the lead's email or SMS inbox. Sign the form with a test address, verify the form.signed webhook fires, and confirm the GHL contact record updates. Rotate the signing secret quarterly via POST /api/v1/webhooks/{id}/rotate-secret.
POST
/api/v1/webhooks/{id}/rotate-secretSee in the OpenAPI spec →
Send a Formfy intake form from a GoHighLevel workflow
Call Formfy's send endpoint from a GHL Webhook action. Replace {id} with your form ID and map GHL contact merge fields into the request body so each lead receives a personalized form link.
curl -X POST https://formfy.ai/api/v1/forms/{id}/send \
-H "Authorization: Bearer fk_live_YOUR_KEY" \
-H "Content-Type: application/json" \
-d '{
"email": "{{contact.email}}",
"phone": "{{contact.phone}}",
"name": "{{contact.full_name}}",
"message": "Hi {{contact.first_name}}, please complete your intake form before your appointment."
}'Frequently asked questions
Does Formfy have a native GoHighLevel integration in the GHL marketplace?
Not yet. Today you connect Formfy to GoHighLevel using GHL's built-in Webhook action inside an Automation workflow. This gives you full control over which pipeline stage triggers the form send and what contact data gets mapped. A native GHL marketplace integration is on the Formfy roadmap but is not required to automate lead onboarding right now — the REST API approach ships in under 20 minutes.
Can Formfy send forms via SMS to GoHighLevel leads?
Yes. When you call POST /api/v1/forms/{id}/send you can pass an email address, a phone number, or both in the same request. Formfy delivers the form link by SMS when a phone number is present. For agencies managing high-volume SMS pipelines inside GHL, SMS delivery through Formfy ensures leads on mobile can open and sign without switching to a desktop.
Which GoHighLevel workflow triggers work best for firing a Formfy form send?
Three triggers produce the most reliable automations: pipeline stage moves (contact reaches "Intake Required"), appointment booked events, and contact tags applied by a GHL funnel page. All three support a downstream Webhook action that calls Formfy's send endpoint. Appointment-booked is especially valuable for clinics and service businesses that require signed consent before each session.
How does the LeadConnector white-label version of GoHighLevel affect this setup?
It does not change the setup at all. LeadConnector is GoHighLevel under a white-label brand used by many SaaS resellers. The Automation builder, Webhook action, and Inbound Webhook trigger behave identically. You connect to Formfy using the same API key and endpoint URLs regardless of whether the GHL account is branded as LeadConnector or a custom agency label.
How do I update a GHL contact automatically when a Formfy form is signed?
Create a second GHL workflow with an Inbound Webhook trigger. Subscribe that catch URL to the form.signed event by adding it to the event_types array when you POST /api/v1/webhooks. When the webhook fires, GHL receives a payload containing signer_email, signed_at, and form_id. Use GHL workflow actions to update a custom field, move the pipeline stage, apply a tag, or send the lead a confirmation SMS.
Can I attach the signed PDF to a GoHighLevel contact or opportunity?
Yes, through a two-call sequence. First, GET /api/v1/forms/{id}/signed-pdf returns a time-limited download token. Then GET /api/v1/files/pdf/{token} streams the PDF. Upload the file to a cloud storage service connected to your GHL account — Google Drive, Dropbox — or store the token URL in a GHL contact custom field so any team member can pull the signed document with one click.
Does this workflow support GoHighLevel sub-accounts and agency setups?
Yes. Each GHL sub-account can connect to its own Formfy workspace with separate API keys and form libraries. Agencies running multiple client sub-accounts typically create one Formfy workspace per sub-account to keep intake libraries and signed-document archives cleanly separated. Every workspace uses the same Formfy REST API, so the automation pattern is identical across all sub-accounts.
What happens if a lead never signs the Formfy form sent from GoHighLevel?
Formfy fires a form.expired webhook when a form link passes its expiration window without a signature. Add "form.expired" to the event_types array on the same webhook subscription you created for form.signed. The GHL inbound-webhook workflow can then send a follow-up SMS reminder, move the contact to a "Follow-Up Required" pipeline stage, or notify the assigned rep to call the lead directly.
Ready to wire GoHighLevel into Formfy?
Spin up an API key, run your first webhook, and route signed forms wherever your team already works.
