Automation recipe · All recipes

Send an Intake Form After a Calendly Booking

Most appointment-based businesses collect intake information the hard way: a PDF attached to a reminder email that most clients never open, a paper clipboard filled out in the waiting room, or a rushed verbal intake the moment the client walks in. Health and wellness clinics, legal consultants, fitness coaches, and beauty professionals all share the same gap — by the time the appointment starts, key intake information is missing, unsigned, or sitting in an inbox no one checked. The intake form exists, but the workflow to deliver it reliably does not.

Connect Calendly to Formfy in under fifteen minutes. Every confirmed booking triggers Formfy to send a branded intake form by email or SMS. The client signs before they arrive, and you start the appointment with a complete, legally-signed record already in hand.

How the recipe flows

  1. Trigger (Calendly)

    A new appointment is confirmed in Calendly and Calendly fires an invitee.created webhook

  2. Step 1

    A relay (Zapier Zap, Make scenario, n8n workflow, or serverless function) receives the Calendly payload and extracts the booker's email and appointment type

  3. Step 2

    The relay calls POST /api/v1/forms/{id}/send with the client's email address and an optional appointment-specific message

  4. Outcome

    The client receives a tailored intake form within seconds of booking, signs it before arrival, and the completed PDF is waiting in the operator's Formfy dashboard — ready to review before the first appointment word is spoken

Build the recipe step-by-step

Wire Calendly booking events into Formfy to automatically send, collect, and store signed intake forms before every appointment.

  1. 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 displays it only once. Use your fk_test_… key while wiring up the Calendly relay so live client credits are not consumed during setup and testing.

  2. Select or create your intake form template

    In the Formfy dashboard, browse the template library for a form that matches your intake type — health history, legal onboarding, fitness assessment, or beauty consultation. Note the form ID from the URL bar. If no template fits, call POST /api/v1/forms to build one from scratch, or use POST /api/v1/forms/generate to draft a form from a plain-language description.

    GET/api/v1/templatesSee in the OpenAPI spec →

  3. Configure a Calendly webhook for booking confirmations

    In Calendly, navigate to Integrations → Webhooks and add a subscription on the invitee.created event. Point the destination to your relay server — the lightweight middleware that bridges Calendly and Formfy. Calendly posts the booker's name, email, appointment type, and start time to that URL the moment every booking is confirmed.

  4. Send the intake form on every new booking

    In your relay handler, parse the invitee's email from the Calendly payload and call POST /api/v1/forms/{id}/send with your Formfy Bearer token. Include the recipient's email and an optional note referencing the appointment time. Formfy routes the intake form to the client's inbox — or SMS if you pass a phone number — within seconds of the booking.

    POST/api/v1/forms/{id}/sendSee in the OpenAPI spec →

  5. Subscribe to form.signed to confirm completion before the appointment

    Create a Formfy webhook by posting to POST /api/v1/webhooks with event_types: ["form.signed"] and a target_url pointing at your relay. When the client signs the form, Formfy fires the payload with the signer's email and a signed_at timestamp — use it to mark intake complete in your booking tool, EHR, or a Slack notification channel.

    POST/api/v1/webhooksSee in the OpenAPI spec →

  6. Retrieve the signed PDF for your records

    After the form.signed event fires, fetch the completed document by calling GET /api/v1/forms/{id}/signed-pdf. The endpoint returns a signed download URL valid for a limited window. Store the PDF in Google Drive, attach it to the client chart, or forward it to the practitioner before the session begins.

    GET/api/v1/forms/{id}/signed-pdfSee in the OpenAPI spec →

Send a Formfy intake form after a Calendly booking

Call POST /api/v1/forms/{id}/send from your relay when Calendly fires invitee.created. Pass the booker's email and a personalized message that references the appointment. Formfy delivers the intake link by email (or SMS if you include a phone number) within seconds.

curl -X POST https://formfy.ai/api/v1/forms/YOUR_FORM_ID/send \
  -H "Authorization: Bearer fk_live_YOUR_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "recipient_email": "jane.doe@example.com",
    "message": "Hi Jane — please complete your intake form before your appointment on Thursday at 2 PM."
  }'

Frequently asked questions

Do I need a custom integration to connect Calendly and Formfy?

No dedicated connector is required today. Calendly exposes outgoing webhooks on the invitee.created event, and Formfy has a public REST API. A lightweight relay — a Zapier Zap, a Make scenario, an n8n workflow, or a serverless function on Vercel or AWS Lambda — bridges the two. The relay receives the Calendly payload, extracts the booker's email, and calls POST /api/v1/forms/{id}/send. Most teams wire this up in well under an hour.

Which intake form types work best with this recipe?

Health and wellness forms — health history, medication disclosure, liability waiver — are the most common match for clinics and spas. Legal intake questionnaires, fitness assessments, beauty consultation sheets, and real estate lead qualification forms work equally well. Any scenario where you need a signed, time-stamped record from a client before a scheduled interaction is a strong candidate. Formfy supports signature fields, date capture, file uploads, and multi-page layouts on every form.

How quickly does the intake form arrive after a Calendly booking?

Formfy delivers the form link within seconds of the API call. The total delay — from Calendly firing the invitee.created webhook to the client's email or SMS inbox — is typically under 30 seconds, assuming your relay responds promptly. If you prefer the intake form to arrive a few minutes after the booking confirmation email rather than simultaneously, add a small delay inside your relay before calling POST /api/v1/forms/{id}/send.

What if the client does not fill out the intake form before the appointment?

Formfy does not send automatic follow-up reminders today, but your relay can schedule a second POST /api/v1/forms/{id}/send call — for example, 24 hours before the appointment — if the form.signed event has not yet fired. You can also subscribe to the form.expired event via POST /api/v1/webhooks to catch forms that were sent but never signed within their validity window, then decide whether to resend or follow up directly.

Can I send different intake forms depending on the Calendly appointment type?

Yes. Calendly includes the event_type name in every invitee.created payload. In your relay, map each appointment type to a specific Formfy form ID — for example, new-client maps to your full health history form and follow-up maps to a shorter progress note. Each branch calls POST /api/v1/forms/{id}/send with the corresponding form ID, so every client automatically receives the correct intake document for their visit.

Does the Formfy free trial support this recipe?

The 15-day Formfy free trial includes full API access. Use a fk_test_… key to wire up and validate the entire Calendly-to-Formfy flow before committing to a paid plan. Both POST /api/v1/forms/{id}/send and POST /api/v1/webhooks are available on every paid tier. Check the X-RateLimit-* response headers to see your current quota — rate limits scale with your plan.

How do I handle rescheduled or cancelled Calendly appointments?

Calendly fires invitee.canceled and invitee.rescheduled events on the same webhook subscription you use for invitee.created. In your relay, skip the Formfy send call for cancellations. For reschedules, check whether the form.signed webhook already arrived before re-triggering POST /api/v1/forms/{id}/send — if the client already signed, there is no need to send a duplicate. Subscribe to form.expired via Formfy webhooks to catch forms that lapsed between the original booking date and the rescheduled one.

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.