Automation recipe · All recipes

Log Formfy Form Submissions to Google Sheets

Every clinic, agency, or property manager running consent or intake forms needs a running audit log: who signed, when they signed, which form, and where to find the PDF. Without automation that means opening the Formfy dashboard, exporting a CSV, pasting rows into a spreadsheet, and hoping nothing slips through on a busy day. Teams fall behind, compliance audits become stressful, and tracking down a specific signed document means hunting a cluttered download folder.

Connect Formfy webhooks to Google Sheets through Zapier or Make and every signed form appends a new row automatically — signer name, email, form title, signed timestamp, and a direct PDF link — the moment the client completes the form.

How the recipe flows

  1. Trigger (Formfy)

    form.signed fires in Formfy the instant a signer completes and submits any form

  2. Step 1

    Formfy delivers the signed-form webhook payload to your automation platform (Zapier, Make, or any HTTP endpoint)

  3. Step 2

    The automation platform extracts signer_name, signer_email, form_title, signed_at, and form_id from the payload

  4. Step 3

    An optional Formfy API call fetches the signed-PDF download URL and includes it as a column before the row is written

  5. Outcome

    A new row is appended to a Google Sheet with signer name, email, form title, signed timestamp, and a signed-PDF download link — creating a live, searchable audit log without manual exports or CSV imports

Build the recipe step-by-step

Set up a Formfy webhook subscription so every signed form automatically appends a timestamped row to your Google Sheet.

  1. Create a Google Sheet with submission columns

    Open Google Sheets and create a new spreadsheet. Add column headers in row 1: Signer Name, Signer Email, Form Title, Signed At, Form ID, and PDF Link. Freeze the header row so appended data lands in row 2 onward. If you plan to use Make with a service account, share the sheet with that account's Google address before wiring the scenario.

  2. Generate a Formfy API key

    In the Formfy dashboard navigate to Settings → API Keys and click Create key. Copy the fk_live_… token — Formfy shows it once. Keep a fk_test_… variant handy for the wiring phase so test signatures do not pollute your live log with dummy rows.

  3. Subscribe to the form.signed webhook event

    POST to /api/v1/webhooks with your Bearer token, the catch-hook URL from Zapier or Make, and event_types set to ["form.signed"]. Formfy responds with a signing secret — store it immediately in your automation platform as a header variable so every delivery can be verified before a row is written.

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

  4. Fetch the signed PDF URL from the Formfy API

    After your platform receives the webhook, add a step that calls GET /api/v1/forms/{id}/signed-pdf, substituting the form_id from the payload. The response returns a signed download URL. Map that URL into the PDF Link column so every row in your sheet links directly to the completed document without requiring a manual dashboard visit.

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

  5. Map payload fields to Google Sheets columns and append the row

    In Zapier use the Google Sheets "Append Row" action; in Make use the "Add a Row" module. Select the spreadsheet and tab from step 1. Map signer_name, signer_email, form_title, signed_at, form_id, and the PDF URL from the previous step to their respective columns. Run a test signature — a new row should appear within seconds.

  6. Confirm the subscription is live and activate the automation

    Call GET /api/v1/webhooks and verify your subscription shows the correct target URL and event type. Turn the Zap or Make scenario on. Every signed Formfy form — intake, consent, waiver, or converted PDF — will now append a row to your Google Sheet in real time with no manual export steps.

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

  7. Rotate the webhook secret on a quarterly schedule

    POST /api/v1/webhooks/{id}/rotate-secret every quarter or after any suspected credential exposure. Update the stored signing secret in your Zapier or Make scenario before rotating — deliveries fail closed until both sides share the new value. This keeps your Google Sheet safe from spoofed form.signed events written by a third party.

    POST/api/v1/webhooks/{id}/rotate-secretSee in the OpenAPI spec →

Subscribe to form.signed to start logging submissions to Google Sheets

Register the webhook subscription that fires on every completed form. Replace the target_url with the catch-hook endpoint from Zapier or Make. Formfy returns a signing secret you must store in your automation platform 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://hooks.zapier.com/hooks/catch/12345/abc/",
    "event_types": ["form.signed"]
  }'

Frequently asked questions

Does Formfy have a built-in Google Sheets integration?

There is no point-and-click native connector, but Formfy ships a public REST API and webhook firehose that plugs directly into Google Sheets through Zapier, Make, or any HTTP-capable automation tool. You register a webhook on the form.signed event, catch the payload in your automation platform, and use the platform's native Google Sheets append-row action. The whole setup takes about 15 minutes.

Which submission fields does the Formfy webhook payload include?

The form.signed payload includes submission_id, form_id, form_title, signer_email, signer_name, signed_at (ISO 8601 timestamp), and a status field. If you also need the signed PDF, make a follow-up call to GET /api/v1/forms/{id}/signed-pdf — the response returns a download URL you can log as an extra column in your sheet.

Can I log submissions from multiple Formfy forms into a single spreadsheet?

Yes. One webhook subscription covers all your forms — the payload always carries form_id and form_title, so you can filter or sort by form name in the sheet. If you prefer separate tabs per form, add a router step in Zapier or Make that inspects form_id and routes each event to the correct tab before appending the row.

What happens if my automation platform is down when a form is signed?

Formfy queues webhook deliveries and retries with exponential backoff for up to 24 hours. Once your platform recovers, the pending deliveries fire in order and the rows are appended without gaps. You can also inspect every delivery attempt in the Formfy dashboard's Webhook Deliveries log and replay any individual delivery manually if you need to force an immediate retry.

How do I include a signed PDF link in the Google Sheets log row?

After your automation receives the form.signed webhook, add a second step that calls GET /api/v1/forms/{id}/signed-pdf using the form_id from the payload. The API returns a signed download URL. Map that URL into a PDF Link column in your Google Sheets append-row action so every log entry is a one-click path to the completed document — no manual dashboard lookups needed.

Will this recipe capture waivers, PDF upload forms, and clinic intakes?

Yes. Formfy fires form.signed for every completed form regardless of origin — a custom built form, a PDF waiver converted to a fillable form, or a clinic intake generated by the AI builder. The webhook payload structure is identical across all form types, so a single Google Sheets recipe logs your entire form library with no per-form changes required.

Do I need a paid Formfy plan to use webhooks for Google Sheets logging?

Webhook subscriptions and API access are included on all paid Formfy plans. The 15-day free trial also grants API access — generate a fk_test_… key during the trial to validate your Google Sheets log recipe end-to-end before upgrading. Current rate limits are surfaced in the X-RateLimit-Remaining and X-RateLimit-Reset response headers on every API call.

How do I prevent spoofed webhook deliveries from writing fake rows into my sheet?

Every Formfy delivery includes an X-Formfy-Signature header computed as HMAC-SHA256(signing_secret, raw_body). In Zapier, insert a Code by Zapier step before the Google Sheets action: recompute the HMAC using the secret you stored at subscription time and compare it to the header. If they do not match, halt the Zap. In Make, use a custom HTTP module with the same HMAC check before the Google Sheets module fires.

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.