App integration · All integrations
Connect Med Spa Intake Forms to HubSpot
Med spas and aesthetic clinics collect dozens of intake forms, liability waivers, and consultation questionnaires every week. Without automation, front-desk staff manually retype patient names, treatment interests, and contact details from PDF submissions into HubSpot — one record at a time. A busy clinic running forty-plus appointments weekly can burn several hours on data entry, and signed consent forms sit in email threads instead of the client record where nurses and practitioners actually need them.
Formfy fires a webhook the moment a client signs an intake or consent form. Map the payload to a HubSpot contact once, and every future submission creates or updates the CRM record automatically — no re-keying, no lost waivers, no manual follow-up.
The workflow at a glance
Trigger
A med spa client submits and signs a Formfy intake or consent form
Action
Formfy fires a form.signed webhook to your HubSpot receiver or Zapier catch-hook
Result
A HubSpot contact is created or updated with intake data, treatment interests, and a link to the signed PDF
Step-by-step: connect HubSpot to Formfy
Wire Formfy webhook subscriptions into HubSpot and automatically create or update contact records every time a patient signs an intake or consent form.
Generate a Formfy API key
Open the Formfy dashboard, navigate to Settings → API Keys, and click Create Key. Copy the fk_live_… token to your password manager — it displays once. During setup, use a fk_test_… key so sample submissions do not count against your plan while you wire up the HubSpot receiver.
Subscribe to the form.signed event
POST /api/v1/webhooks with event_types set to ["form.signed"] and target_url pointing to your HubSpot receiver or Zapier catch-hook. Formfy returns a webhook ID and a signing secret — store both. The signing secret lets you verify every delivery via the X-Formfy-Signature header before writing to HubSpot.
POST
/api/v1/webhooksSee in the OpenAPI spec →Configure a HubSpot Private App as the receiver
In HubSpot, create a Private App under Settings → Integrations → Private Apps and grant it crm.objects.contacts.write scope at minimum. Copy the Bearer token — your receiver middleware or Zapier Code step uses it when calling HubSpot's Contacts API to upsert each patient's intake data.
Map intake fields to HubSpot contact properties
Call GET /api/v1/forms/{id} to inspect your intake form field schema. Map standard fields — patient name, email, phone, treatment interest — to HubSpot equivalents. For clinic-specific fields like skin type, contraindications, or prior treatments, create custom HubSpot contact properties before mapping.
GET
/api/v1/forms/{id}See in the OpenAPI spec →Fetch the signed PDF and attach it to the HubSpot contact
After the contact upsert succeeds, call GET /api/v1/forms/{id}/signed-pdf to retrieve the signed intake PDF URL. Attach it as a note or file on the HubSpot contact timeline so nurses and front-desk staff can pull the signed document without leaving the CRM.
GET
/api/v1/forms/{id}/signed-pdfSee in the OpenAPI spec →
Subscribe a HubSpot receiver to Formfy med spa intake events
Register your HubSpot receiver endpoint as a Formfy webhook listener. Formfy returns a signing secret used to verify every form.signed delivery before writing to the CRM.
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-receiver.example.com/formfy-to-hubspot",
"event_types": ["form.signed"]
}'Frequently asked questions
Does Formfy have a native HubSpot integration?
Formfy does not yet ship a one-click app in the HubSpot marketplace. The integration runs over Formfy's public webhook API plus a HubSpot Private App token. You wire them together in a lightweight receiver function — Node, Python, or a Zapier Code step — and the setup takes about 15 minutes with no ongoing maintenance once live.
Which Formfy events can write data to HubSpot?
Five event types are available in Formfy's v1 API: form.created, form.sent, form.viewed, form.signed, and form.expired. For med spa CRM workflows, form.signed is the right trigger — it fires once the patient has completed and signed the intake document. Subscribe to multiple events on a single webhook by passing all of them in the event_types array.
How do I attach the signed consent PDF to the HubSpot contact record?
After Formfy fires the form.signed webhook, your receiver calls GET /api/v1/forms/{id}/signed-pdf to retrieve the signed document URL. Pass that URL to HubSpot's Engagements or Files API to attach it as a note on the contact timeline. Nurses and front-desk staff can then open the signed consent directly from HubSpot without switching tools.
Can different form types route to different HubSpot pipelines?
Yes. Include a form type or template identifier in your Formfy intake form and read it from the webhook payload in your receiver. Use that value to branch your HubSpot write: botox consent completions can create deals in a Neurotoxin pipeline, laser waiver completions in a Laser Services pipeline. Formfy's webhook payload includes the form ID, name, and all field values for routing logic.
How do I avoid creating duplicate HubSpot contacts for returning patients?
Use HubSpot's upsert endpoint — POST /crm/v3/objects/contacts with idProperty set to email. If a contact with that email already exists, HubSpot updates it instead of creating a duplicate. Map the patient email from the Formfy payload to the email identity property so every intake from the same patient enriches the existing CRM record rather than creating a second one.
Is patient intake data encrypted in transit between Formfy and HubSpot?
All Formfy webhook deliveries are sent over TLS. Formfy signs every payload with HMAC-SHA256 using the webhook signing secret, and your receiver should verify the X-Formfy-Signature header before processing. On the HubSpot side, all API calls use HTTPS with your Private App Bearer token. Neither platform transmits patient data over unencrypted channels.
What happens if my HubSpot receiver is down when a form is signed?
Formfy queues the delivery and retries with exponential backoff for up to 24 hours. Once your receiver recovers, queued deliveries fire automatically in order. You can also inspect every delivery attempt in the Formfy dashboard's Webhook Deliveries log and replay any failed delivery manually without asking the patient to re-sign.
How do I rotate my Formfy webhook secret without disrupting HubSpot updates?
POST /api/v1/webhooks/{id}/rotate-secret to receive a fresh signing secret. Update your receiver or environment variable with the new value before deploying — Formfy continues delivering to the same endpoint but now signs with the rotated secret. Rotating the secret does not affect the webhook subscription or its event_types; only the HMAC signing key changes.
Ready to wire HubSpot into Formfy?
Spin up an API key, run your first webhook, and route signed forms wherever your team already works.
