Typeform to Slack: Real-Time Lead Alert Integration
Integrating Typeform with Slack delivers sub-second inbound lead alerts to internal sales channels using HMAC-signed form_response webhooks and Slack Block Kit incoming webhooks. This architecture replaces manual CSV exports and polling scripts, preventing lead decay by notifying sales representatives the moment a prospect completes a form.
Explore: Forms · Team Communication
Comparison matrix
| Feature | Typeform | Slack | Edge |
|---|---|---|---|
| Entry Pricing | $25/month (Basic plan, 100 responses/month) | $8.75/user/month (Pro plan billed annually) | Tie |
| Free Tier Limits | 10 responses/month across all forms | 90-day message history, 10 app integrations | Slack |
| Authentication Method | Bearer token (Personal Access Token or OAuth2) | Bot user token (xoxb-) or Incoming Webhook URL | Slack |
| API Rate Limits | Strict 2 requests per second per account | Tiered: Tier 1 (1/min) to Tier 4 (100+/min) | Slack |
| Webhook Security | SHA256 HMAC signature via Typeform-Signature header | Unique secret webhook URL tokens or Slack signature headers | Typeform |
| Self-Hosting | Cloud SaaS only; no on-premises deployment | Cloud SaaS only; no on-premises deployment | Tie |
| Native App Ecosystem | 120+ direct pre-built integrations | 2,600+ apps in Slack App Directory | Slack |
| Message Formatting Payload | Static field definitions with nested answers array | Dynamic Block Kit JSON with interactive buttons and sections | Slack |
| Start free | Try Typeform → | Try Slack → |
ROI metrics
Hours saved / mo
18.5
Typeform / mo
$25
Slack / mo
$88
Break-even
1.2 wks
Annual savings
$9,640
Integrating Typeform and Slack pays for itself within 9 business days by eliminating manual lead distribution and reducing inbound lead response times from 3 hours to under 30 seconds.
Step-by-step setup guide
1.Create a Slack App and Enable Incoming Webhooks
Navigate to api.slack.com/apps, click 'Create New App' (From scratch), select your development workspace, and toggle 'Incoming Webhooks' to On.
curl -X POST -H 'Content-type: application/json' --data '{"text":"Webhook initialized"}' https://hooks.slack.com/services/T00000000/B00000000/XXXXXXXXXXXXXXXXXXXXXXXX2.Provision an Incoming Webhook URL to the Target Lead Channel
Click 'Add New Webhook to Workspace' under the Incoming Webhooks panel, choose your target channel (e.g., #sales-leads), and copy the generated Webhook URL containing workspace, service, and token identifiers.
3.Generate a Typeform Personal Access Token
Open Typeform Account Settings > Personal Tokens and click 'Generate a new token'. Name the token 'slack-alerts' and check scopes 'forms:read' and 'webhooks:write'.
export TYPEFORM_PAT="tfp_v2_xxxxxxxxxxxxxxxxxxxxxxxxxxxx"
4.Register the Webhook Endpoint on Typeform
Use the Typeform Create/Update Webhook API to register the receiver endpoint or intermediary worker URL with a secret key for signature verification.
curl -X PUT "https://api.typeform.com/forms/{form_id}/webhooks/slack-lead-alert" -H "Authorization: Bearer $TYPEFORM_PAT" -H "Content-Type: application/json" -d '{"url":"https://your-worker.example.com/webhook","enabled":true,"secret":"your_shared_webhook_secret"}'5.Transform Typeform Payload to Slack Block Kit
Deploy an intermediary serverless function (AWS Lambda or Cloudflare Worker) to verify the Typeform-Signature HMAC SHA256 header, map the nested answers array to key-value pairs, and post the formatted Block Kit payload to Slack.
curl -X POST https://hooks.slack.com/services/T00000000/B00000000/XXXXXXXXXXXXXXXXXXXXXXXX -H 'Content-Type: application/json' -d '{"blocks":[{"type":"header","text":{"type":"plain_text","text":"New Enterprise Lead"}},{"type":"section","fields":[{"type":"mrkdwn","text":"*Name:* Jane Doe"},{"type":"mrkdwn","text":"*Email:* jane@example.com"}]}]}'
Webhook payload example
POST https://hooks.slack.com/services/T00000000/B00000000/XXXXXXXXXXXXXXXXXXXXXXXX · event: form_response
{
"event_id": "01HP4M19R9XYZ8B12CDEFGH456",
"event_type": "form_response",
"form_response": {
"form_id": "vK3l9x",
"token": "01HP4M19R9XYZ8B12CDEFGH456",
"landed_at": "2024-03-24T10:14:22Z",
"submitted_at": "2024-03-24T10:15:05Z",
"hidden": {
"utm_source": "google",
"utm_campaign": "q1_enterprise"
},
"definition": {
"id": "vK3l9x",
"title": "Enterprise Contact Form",
"fields": [
{
"id": "name_field_01",
"ref": "lead_name",
"type": "short_text",
"title": "What is your name?"
},
{
"id": "email_field_02",
"ref": "lead_email",
"type": "email",
"title": "What is your work email?"
}
]
},
"answers": [
{
"type": "text",
"text": "Jane Doe",
"field": {
"id": "name_field_01",
"type": "short_text",
"ref": "lead_name"
}
},
{
"type": "email",
"email": "jane@example.com",
"field": {
"id": "email_field_02",
"type": "email",
"ref": "lead_email"
}
}
]
}
}Typeform: pros & cons
- ✅ Significantly higher conversion rates due to conversational single-question UX
- ✅ Built-in SHA256 HMAC payload signing provides native tamper detection
- ✅ Rich field types including file uploads, ratings, and hidden UTM parameters
- ⚠️ Base $25/mo plan caps volume at 100 responses per month
- ⚠️ API strictly rate-limited to 2 requests per second across all endpoints
Slack: pros & cons
- ✅ Block Kit allows flexible, interactive visual formatting of form responses
- ✅ Incoming webhooks support direct target channel overrides via app configurations
- ✅ Instant push notifications reach desktop and mobile sales teams simultaneously
- ⚠️ Free tier limits workspace search history to 90 days
- ⚠️ Per-seat pricing increases rapidly when scaling a 10+ person sales organization
FAQ
Can I route Typeform responses directly to Slack without an intermediary server?
Yes, Typeform offers a native direct Slack integration within the Connect tab of your form builder, which maps form fields into standard Slack message text without custom middleware. However, deploying a lightweight proxy or serverless function is necessary if you require custom Block Kit formatting, response routing based on conditional logic, or HMAC signature validation.
How do I verify the authenticity of a Typeform webhook payload?
Compute the HMAC SHA256 hash of the raw HTTP request body using the shared secret configured during webhook creation. Compare the computed digest against the base64-encoded string supplied in the 'Typeform-Signature' header; if they match, the payload is authentic.
What happens if Slack hits a rate limit when receiving high-volume submissions?
Slack incoming webhooks throttle excessive bursts with HTTP 429 Too Many Requests responses and include a 'Retry-After' header indicating wait seconds. Your webhook receiver architecture must queue payloads (e.g., using AWS SQS or Redis) and retry delivery exponentially to prevent message loss.
Can I pass hidden URL parameters like UTM tags from Typeform to Slack?
Yes. Any hidden fields appended to the form URL (e.g., ?utm_source=linkedin) appear under the 'form_response.hidden' object in the webhook payload and can be extracted directly into your Slack message text or Block Kit elements.