Automation recipe · All recipes
Sync Formfy Form Submissions to HubSpot
Teams send consent forms, intake packets, and waivers through Formfy, but the moment a client signs, someone still has to open HubSpot and create or update the contact by hand. That double-entry loop breaks at scale — a clinic running 50 intakes a week, an agency processing 30 leads a month, or a coaching practice closing a dozen waivers a day cannot afford to have a person copying signer emails into a CRM one at a time.
Formfy fires a webhook the instant a form is signed. Subscribe HubSpot to that event via the Formfy API and every signer's name, email, and signature timestamp write to your CRM automatically — no middleware tax, no copy-paste, no bottleneck between your forms and your pipeline.
How the recipe flows
Trigger (Formfy)
A client signs a Formfy intake, consent, or waiver form
Step 1
Formfy fires a form.signed webhook to your registered relay endpoint
Step 2
Your relay verifies the X-Formfy-Signature header, then calls the HubSpot Contacts API
Outcome
A HubSpot contact is created or updated with the signer's name, email, and signed timestamp — the lead is in your CRM pipeline within seconds of the signature landing
Build the recipe step-by-step
Subscribe to Formfy's form.signed webhook and relay signer data to HubSpot Contacts so every signed intake, consent, or waiver appears in your CRM automatically.
Generate a Formfy API key
Open the Formfy dashboard, navigate to Settings → API Keys, and click Create key. Copy the fk_live_… token to a password manager — Formfy shows it once. During development use a fk_test_… key so test signings do not count against your live quota.
Subscribe to the form.signed webhook
POST /api/v1/webhooks with your target_url (the relay endpoint you control) and event_types set to ["form.signed"]. Formfy returns a webhook ID and a signing secret. Store both — the secret is shown once and you will use it to verify every delivery against the X-Formfy-Signature header.
POST
/api/v1/webhooksSee in the OpenAPI spec →Create a HubSpot private app access token
In HubSpot, go to Settings → Integrations → Private Apps and create an app with the crm.objects.contacts.write scope (add crm.objects.contacts.read if you need duplicate-checking before writing). Copy the access token — you will pass it as a Bearer token on every Contacts API call.
Wire the relay: receive the Formfy payload and write to HubSpot
Your relay receives the form.signed payload (submission_id, signer_email, signer_name, signed_at, form_id). Verify the X-Formfy-Signature header, then POST to HubSpot's /crm/v3/objects/contacts/batch/upsert with email as the deduplication key. Map signer_name to firstname and lastname, and signed_at to a custom formfy_signed_date property.
Retrieve the signed PDF and attach it to the HubSpot contact
If your workflow needs the signed document in HubSpot, call GET /api/v1/forms/{id}/signed-pdf to get a pre-signed download URL, then upload the file to HubSpot's Files API and link it to the contact via a note or a custom file-URL property. This step is optional — many teams sync contact data only.
GET
/api/v1/forms/{id}/signed-pdfSee in the OpenAPI spec →Test end-to-end with a live form signing
Sign a test form in Formfy using a throwaway email address. Within 30 seconds confirm your relay received the webhook, verify the signature check passed, and inspect HubSpot's Contacts view for the new or updated record. Check the Formfy Webhook Deliveries log if the relay does not fire.
Rotate the webhook signing secret on schedule
Quarterly — or immediately on suspected exposure — POST /api/v1/webhooks/{id}/rotate-secret to receive a fresh signing secret. Update the value in your relay's environment variables before rotating in production; deliveries fail closed until both sides agree on the new secret.
POST
/api/v1/webhooks/{id}/rotate-secretSee in the OpenAPI spec →
Subscribe to Formfy form.signed events and relay to HubSpot
Register the webhook that fires every time a signer completes a form. Your target_url receives the payload; Formfy returns a signing secret used to verify each delivery.
curl -X POST https://formfy.ai/api/v1/webhooks \
-H "Authorization: Bearer fk_live_YOUR_KEY" \
-H "Content-Type: application/json" \
-d '{
"target_url": "https://your-relay.example.com/hooks/formfy-to-hubspot",
"event_types": ["form.signed"]
}'Frequently asked questions
Do I need Zapier or Make to sync Formfy submissions to HubSpot?
No. Formfy exposes a public REST API and a webhook firehose you can wire directly to HubSpot's Contacts API. A lightweight relay — a Cloudflare Worker, a Vercel serverless function, or a small Express server — is all the middleware required. If you prefer a no-code path, Zapier and Make both accept the same Formfy webhook subscription as a trigger and offer native HubSpot actions on the other end.
Which Formfy event should trigger the HubSpot contact sync?
Use form.signed for CRM sync — it fires only after a signer has completed the form with a valid electronic signature, so every contact written to HubSpot represents a confirmed, signed record. Formfy also publishes form.created, form.sent, form.viewed, and form.expired. For lead-capture pipelines where you want contacts created before signing completes, subscribe to form.sent and update the record again on form.signed.
What signer fields does the Formfy webhook payload include?
The form.signed payload includes submission_id, form_id, signer_email, signer_name, signed_at (ISO 8601 timestamp), and the values of any form fields the signer completed. Map signer_email to the HubSpot email property, signer_name to firstname + lastname, and signed_at to a custom date property such as formfy_signed_date. The form_id field lets you route different forms to different HubSpot pipelines.
How do I avoid creating duplicate HubSpot contacts for repeat signers?
Use HubSpot's batch upsert endpoint — POST /crm/v3/objects/contacts/batch/upsert with idProperty set to email. HubSpot deduplicates on email address by default: if a contact already exists it updates the record, otherwise it creates one. A client who signs multiple Formfy forms over time accumulates a single enriched HubSpot contact rather than separate duplicate entries.
Can I attach the signed PDF to the HubSpot contact record?
Yes. After the form.signed event fires, call GET /api/v1/forms/{id}/signed-pdf to receive a pre-signed download URL for the completed document. Download the file, upload it to HubSpot's Files API, then associate the file URL with the contact via a note or a custom file-URL property. Some teams skip the upload and store only the Formfy download URL as a text property — HubSpot renders it as a clickable link in the contact timeline.
Does this recipe work for PDF forms converted inside Formfy?
Yes. Formfy's PDF upload feature lets you convert an existing PDF into a signable form. Once a recipient signs the converted document, Formfy fires the same form.signed webhook as any other form type. The payload structure is identical, so your HubSpot relay handles converted PDFs, native intake forms, and custom-built forms without any modification.
What happens if the HubSpot API fails after a form is signed?
Formfy retries failed webhook deliveries with exponential backoff for up to 24 hours, so a transient HubSpot outage will not permanently drop the event. Your relay should respond 2xx to Formfy immediately after verifying the signature, then process the HubSpot write asynchronously with its own retry queue. The Formfy Webhook Deliveries log lets you inspect every delivery attempt and replay any payload manually from the dashboard.
Does the Formfy API plan include webhook access for this sync?
Yes. The Formfy public API and webhook subscriptions are available on all paid plans, and the 15-day free trial includes API access so you can validate the HubSpot relay before upgrading. There is no per-webhook fee — subscriptions are included in your plan. Rate limits scale with your tier and are reported in the X-RateLimit-Remaining and X-RateLimit-Reset headers on every API response.
Ship this automation in under 15 minutes
Spin up a Formfy API key, paste the example, and run your first end-to-end signed-form workflow today.
