Typeform to Pipedrive Lead Qualification Pipeline
Integrating Typeform with Pipedrive automates outbound lead qualification by parsing submitted form variables and programmatically generating matched Persons and Deals inside Pipedrive's visual sales pipeline via REST APIs.
Comparison matrix
| Feature | Typeform | Pipedrive | Edge |
|---|---|---|---|
| Entry Pricing | $25/month (Basic plan, billed annually) | $14/user/month (Essential plan, billed annually) | Pipedrive |
| Free Tier Availability | Free tier available (10 responses/month limit) | No free tier (14-day free trial only) | Typeform |
| API Authentication | Personal Access Token (Bearer) or OAuth 2.0 | API Token (query param/header) or OAuth 2.0 | Tie |
| API Rate Limits | 2 requests per second (hard cap per account) | 10,000 to 40,000 requests per 10-minute sliding window depending on tier | Pipedrive |
| Webhook Payload Signature | HMAC-SHA256 signature in Typeform-Signature header | HTTP Basic Auth headers on webhook endpoints | Typeform |
| Native Ecosystem Integrations | 120+ direct marketplace integrations | 500+ direct App Marketplace integrations | Pipedrive |
| Custom Field Mapping | Hidden fields, variables, and question reference tags | Custom fields supported across Person, Organization, and Deal objects | Pipedrive |
| Self-Hosting | SaaS only (Cloud-hosted) | SaaS only (Cloud-hosted) | Tie |
| Start free | Try Typeform → | Try Pipedrive → |
ROI metrics
Hours saved / mo
35
Typeform / mo
$50
Pipedrive / mo
$140
Break-even
1.9 wks
Annual savings
$18,900
Automating lead intake saves 35 rep hours monthly; at a $50/hour fully loaded labor rate, the pipeline yields a net positive return within 14 days.
Step-by-step setup guide
1.Provision API Tokens in Typeform and Pipedrive
Navigate to Typeform Account Settings > Personal Tokens and generate a token with 'forms:read' and 'webhooks:write' scopes. In Pipedrive, navigate to Personal Preferences > API and copy your 40-character hexadecimal API token.
2.Configure Typeform Webhook Subscription
Register your webhook listener URL with Typeform's API. Ensure you specify a shared secret to enable HMAC-SHA256 signature verification on incoming responses.
curl -X PUT https://api.typeform.com/forms/{form_id}/webhooks/pipedrive-sync \ -H "Authorization: Bearer TYPEFORM_PERSONAL_TOKEN" \ -H "Content-Type: application/json" \ -d '{"url": "https://api.yourdomain.com/webhooks/typeform", "enabled": true, "secret": "secure_webhook_secret_key"}'3.Verify Payload Signature and Extract Lead Fields
Inspect the 'Typeform-Signature' header on incoming requests. Calculate sha256=HMAC_SHA256(request_body, secret) and match it to verify authenticity. Then extract email, company size, and budget from the 'answers' array using field references.
4.Create or Deduplicate Person in Pipedrive
Execute a search against Pipedrive's '/persons/search' endpoint using the applicant's email address. If no match is found, send a POST request to '/persons' to create the contact record.
curl -X POST "https://api.pipedrive.com/v1/persons?api_token=PIPEDRIVE_API_TOKEN" \ -H "Content-Type: application/json" \ -d '{"name": "Alex Rivera", "email": [{"value": "alex@company.com", "primary": true}], "phone": [{"value": "+15550198421", "primary": true}]}'5.Instantiate Deal in Qualified Pipeline Stage
Post to '/deals' with the person_id returned from step 4. Assign the deal value based on the Typeform budget response and map it to your target sales pipeline stage ID.
curl -X POST "https://api.pipedrive.com/v1/deals?api_token=PIPEDRIVE_API_TOKEN" \ -H "Content-Type: application/json" \ -d '{"title": "Alex Rivera - Qualified Form Lead", "value": 12000, "currency": "USD", "person_id": 48102, "stage_id": 2, "status": "open"}'
Webhook payload example
POST https://api.yourdomain.com/webhooks/typeform · event: form_response
{
"event_id": "01HP4C939VNZS5E1674YGR04XG",
"event_type": "form_response",
"form_response": {
"form_id": "q2Lnmv6K",
"token": "01HP4C939VNZS5E1674YGR04XG",
"submitted_at": "2024-02-14T10:15:30Z",
"definition": {
"id": "q2Lnmv6K",
"title": "Enterprise Sales Qualification",
"fields": [
{"id": "eml_1", "ref": "work_email", "type": "email", "title": "What is your work email?"},
{"id": "num_1", "ref": "team_size", "type": "number", "title": "How many employees?"},
{"id": "cur_1", "ref": "annual_budget", "type": "number", "title": "Expected annual budget?"}
]
},
"answers": [
{"type": "email", "email": "alex@company.com", "field": {"id": "eml_1", "type": "email", "ref": "work_email"}},
{"type": "number", "number": 45, "field": {"id": "num_1", "type": "number", "ref": "team_size"}},
{"type": "number", "number": 12000, "field": {"id": "cur_1", "type": "number", "ref": "annual_budget"}}
]
}
}Typeform: pros & cons
- ✅ Conversational UI generates completion rates 15-30% higher than static forms
- ✅ Payloads contain explicit question reference tags (ref) to prevent broken mappings
- ✅ Native HMAC-SHA256 signature verification secures outbound webhooks
- ⚠️ Strict 2 requests-per-second API throughput cap
- ⚠️ High cost scaling ($83/month for Plus plan if exceeding 1,000 responses)
Pipedrive: pros & cons
- ✅ Straightforward REST API documentation with predictable CRUD endpoints
- ✅ Generous token-based rate limits (up to 40,000 calls per 10 minutes)
- ✅ Pre-configured visual deal stages optimize automated intake workflows
- ⚠️ Requires manual custom field ID resolution prior to POST payloads
- ⚠️ No free tier available after initial trial expiration
FAQ
How do you handle Typeform's 2 req/s rate limit during inbound traffic spikes?
Push incoming webhook payloads directly onto an intermediate message broker (such as AWS SQS or Redis BullMQ) and process worker requests to downstream endpoints at a controlled rate.
How are custom Pipedrive deal fields referenced via the REST API?
Pipedrive generates a 40-character hash for custom fields (e.g., 'a1b2c3d4e5f6g7h8_team_size'). Query the 'GET /dealFields' endpoint once during configuration to retrieve this key, then pass it as a JSON parameter.
What happens if a form respondent already exists in Pipedrive?
Query 'GET /persons/search?term={email}' before creation. If an existing 'item.id' returns, attach the new Deal to that existing person ID instead of running a POST to '/persons'.
How do you validate that the webhook came directly from Typeform?
Read the 'Typeform-Signature' header, compute an HMAC-SHA256 hash using your stored secret over the raw binary request payload, and perform a timing-safe equality comparison.