Webhooks with n8n and other tools
Send PageFork leads to n8n, or to Zapier and Make through a plain webhook, when the native apps are not the right fit.
For Zapier and Make, start with the native apps: the PageFork Zapier app and the PageFork Make app. They connect with an API key, offer your sites and forms as dropdowns, hand you clean field names, and can also create leads in PageFork.
This page covers the other route: pointing a webhook destination at an automation tool’s own webhook address. Use it when:
- You use n8n, which has no PageFork app.
- You use another tool that can receive a webhook.
- You want the raw, signed payload in Zapier or Make rather than the native app’s tidied fields.
Webhook destinations are part of the Pro plan. See Basic and Pro plans.
The setup is the same in every tool:
- Create a webhook trigger in the automation tool and copy its URL.
- Add a PageFork webhook destination pointing at that URL.
- Send a sample so the tool learns your field names.
- Map the fields and turn the automation on.
Before you start: send a real submission
Every one of these tools builds its field mapping from the first request it receives. Whatever it sees, it treats as the shape of your data.
So make the first request a real one. Publish your site and submit the form yourself once. PageFork’s Send test also carries your real field names and works fine, but a genuine submission additionally proves the whole path — endpoint, spam checks, queue, delivery — in one go.
Either way, the field names your automation sees are the ones your form actually uses. PageFork refuses to send a test at all rather than invent placeholder names, precisely because a wrong mapping here fails silently later.
Zapier, through a plain webhook
The native Zapier app is easier and doesn’t need a paid Zapier plan. If you still want the webhook route:
- Create a Zap and choose Webhooks by Zapier → Catch Hook as the trigger.
- Copy the custom webhook URL Zapier gives you.
- In PageFork, open the site’s Settings → Forms → Destinations, click Add, choose Webhook, paste the URL, pick the form, and save.
- Submit your form once, then click Test trigger in Zapier.
- Add your action step and map fields from
data__submission__fields__*— Zapier flattens nested JSON with double underscores, soemailappears asdata__submission__fields__email.
Webhooks by Zapier is a premium app and needs a paid Zapier plan. The native PageFork app does not.
Zapier’s Catch Hook does not verify signatures. That’s fine — the URL is
secret and unguessable — but it means the X-PageFork-Signature header
goes unused on this path.
Make, through a plain webhook
The native Make app is the simpler path. For the webhook route:
- Add a Custom webhook trigger to a scenario and copy its address.
- Create the PageFork destination pointing at it.
- Click Re-determine data structure in Make, then submit your form.
- Map fields from the nested structure Make derives — it preserves the
nesting, so you’ll drill into
data→submission→fields.
Custom webhooks are available on Make’s free tier.
n8n
- Add a Webhook node, method
POST, and copy the production URL. - Create the PageFork destination pointing at it.
- Submit your form to capture a sample.
- Continue your workflow from
data.submission.fields.
n8n is the one tool here that can verify the signature, since you can run a Code node. If you do:
- Enable the raw body option on the Webhook node. Verification hashes the exact bytes PageFork signed, and n8n’s parsed-and-re-serialised JSON will not match.
- Follow the HMAC example in Webhook destinations.
Self-hosted n8n needs a public HTTPS address. PageFork refuses to
deliver to private or loopback addresses, so an instance on your LAN,
a localhost address, or a private VPN address will be rejected when
you save the destination. Put it behind a real domain or a tunnel.
n8n Cloud works out of the box.
Choosing a route
| Native Zapier app | Native Make app | Plain webhook | |
|---|---|---|---|
| Setup | API key, then dropdowns | API key, then dropdowns | Copy and paste a URL |
| Field names | Clean, top level | Clean, in a Fields collection | Nested in the raw payload |
| Can create leads in PageFork | Yes | Yes | No |
| Works with n8n and other tools | No | No | Yes |
| Signature you can verify | No | No | Yes |
Troubleshooting
The automation fires but every field is empty. The tool learned its mapping from a different payload shape than it’s now receiving. Re-capture the sample and re-map — this is what the “send a real submission first” step prevents.
Nothing arrives at all. Check the delivery log under the destination
in PageFork. A dead status with a 4xx means the tool rejected the
request; a timeout means it took longer than 15 seconds to respond.
It worked, then stopped. Check whether the destination auto-disabled. Fifty consecutive failures turn it off; re-enable it after fixing the receiver.
Duplicate rows. Retries can deliver the same submission twice. Use
X-PageFork-Idempotency-Key, which stays stable across attempts, to
deduplicate.