Make recipe
Make sits between Zapier and n8n: visual scenario builder, generous free tier, fewer apps than Zapier but better pricing at volume.
Setup
1. Create a custom webhook
In Make: Scenarios → New scenario → Webhooks → Custom webhook → Add. Name it (Formspring contact). Make returns a URL — copy it.
Click Re-determine data structure and Make will wait for a sample request to learn the shape.
2. Wire it up
In Formspring: Webhooks → Add webhook → Generic. Paste the Make URL. Hit Send test.
Back in Make, the structure determination completes. You can now reference payload.email, payload.message, meta.ip_country, etc. in downstream modules.
3. Verify the signature
Add a Tools → Set variable module right after the webhook to compute the expected HMAC, then a Tools → Compose a string to compare and a Router that 401s on mismatch. It's clunky in pure Make. The cleaner option is a tiny verifier endpoint (Cloudflare Worker, Vercel function) in front of Make that does the HMAC check and forwards only verified payloads to the Make URL.
If your form has low security requirements (e.g. internal tools), you can skip verification and trust the URL is private — but for anything public-facing, verify.
4. Add scenario steps
Common modules:
- HTTP → Make a request: forward to your API.
- Google Sheets → Add a row: log the submission.
- Email → Send an email: confirmation to the submitter, alert to your team.
- Filter between modules: only route certain
form_namevalues, only whenmeta.spam_score < 0.2, etc.
Conditional routing
Make's Router module fans out into multiple branches with filter conditions on each. Useful patterns:
- Branch by
body.type:submission.created→ CRM + email;submission.flagged→ moderation queue. - Branch by
body.form_id: contact form → Slack; demo request → calendar booking + sales CRM. - Branch by field value:
payload.priority = "urgent"→ page on-call; everything else → standard flow.
Parsing JSON
Make parses the webhook body automatically when structure is determined. If you receive an arbitrary payload (form fields vary across forms), use Parse JSON with a generic structure to access keys dynamically.
For attachments, the payload.attachment.url is a signed URL valid for one hour. Use HTTP → Get a file to fetch the bytes inside that window before the URL expires.
Error handling and retries
Make has built-in error handlers per module. Right-click a module → Add error handler. The recommended setup:
- Break error handler with retry: 3 retries, 5 seconds apart. Make's runtime will pause and resume.
- After Break exhausts, route to a Send email error notification with the failing payload.
This stacks with Formspring's own retry: if Make fails entirely (5xx returned to Formspring), our retry kicks in too. Net result: 3 internal Make retries × up to 7 Formspring retries = generous resilience.
Operations cost
Make charges per operation. A scenario with 5 modules costs 5 ops per execution. Filters that short-circuit don't count beyond the filter point — use them aggressively to keep ops down.