Typeform to Airtable: Survey Analysis Pipeline
Integrating Typeform and Airtable pairs high-completion conversational data collection with relational database analysis. By routing Typeform's form_response webhook directly into Airtable's REST API or native automations, teams eliminate CSV exports and enable immediate sentiment categorization, respondent segmentation, and automated reporting.
Explore: Forms · Databases & Spreadsheets
Comparison matrix
| Feature | Typeform | Airtable | Edge |
|---|---|---|---|
| Entry Pricing | $25/mo (Basic, 100 responses/mo) | $20/user/mo (Team, billed annually) | Airtable |
| Free Tier Availability | Free (10 responses/mo cap) | Free (Up to 1,000 records/base) | Airtable |
| API Rate Limit | 2 requests/second | 5 requests/second per base | Airtable |
| Authentication Standard | OAuth 2.0 / Personal Access Token (Bearer) | Personal Access Token (Scopes + Base restrictions) | Tie |
| Webhook Payload Signing | HMAC-SHA256 signature via Typeform-Signature header | HMAC secret validation via Webhook specifications | Typeform |
| Relational Data Modeling | Flat structure (JSON responses, hidden fields) | Multi-table relational schema with linked records | Airtable |
| Direct Integrations Count | 120 native integrations | 1000+ native & ecosystem connections | Airtable |
| Self-Hosting Capability | Cloud-only (SaaS) | Cloud-only (SaaS) | Tie |
| Start free | Try Typeform → | Try Airtable → |
ROI metrics
Hours saved / mo
24
Typeform / mo
$25
Airtable / mo
$200
Break-even
3.8 wks
Annual savings
$15,820
For a 10-person team spending 6 hours weekly on manual exports, cleansing, and charting, automated synchronization breaks even in under one month and saves over $15,000 annually in engineering and operational overhead.
Step-by-step setup guide
1.Create Airtable Schema and Obtain Credentials
Create an Airtable Base named 'Survey Analysis' with a table named 'Responses'. Add columns: Response ID (single line text), Respondent Email (email), Score (number), and Feedback (long text). Generate a Personal Access Token with 'data.records:write' scope limited to this base.
curl -X POST https://api.airtable.com/v0/appXXXXXXXXXXXXXX/Responses \ -H "Authorization: Bearer patXXXXXXXXXXXXXX" \ -H "Content-Type: application/json" \ -d '{"fields": {"Response ID": "test_001", "Respondent Email": "test@example.com", "Score": 10, "Feedback": "Initial test."}}'2.Retrieve Typeform Form ID and Question Field Keys
Fetch the Typeform form definition using the Typeform API to identify field IDs and question references. Note down the 'form_id' and the respective IDs for the rating and text questions.
curl https://api.typeform.com/forms/FORM_ID \ -H "Authorization: Bearer tfp_XXXXXXXXXXXXXX"
3.Register the Webhook Endpoint in Typeform
Create a webhook on Typeform pointing to your ingestion handler (e.g., AWS Lambda, Cloudflare Worker, or piped intermediary) using a PUT request. Set a secret to enable HMAC-SHA256 signature verification.
curl -X PUT https://api.typeform.com/forms/FORM_ID/webhooks/airtable-sync \ -H "Authorization: Bearer tfp_XXXXXXXXXXXXXX" \ -H "Content-Type: application/json" \ -d '{"url": "https://api.yourdomain.com/typeform-webhook", "enabled": true, "secret": "supersecret_hmac_key"}'4.Implement Webhook Verification and Payload Normalization
Inspect the 'Typeform-Signature' header, compute the SHA256 HMAC of the raw request body with your secret, and ensure matches. Extract the answers array, indexing by field 'id' or 'ref' into an Airtable fields object.
const crypto = require('crypto'); function verify(rawBody, signature, secret) { const hash = 'sha256=' + crypto.createHmac('sha256', secret).update(rawBody).digest('base64'); return crypto.timingSafeEqual(Buffer.from(hash), Buffer.from(signature)); }5.Forward Processed Survey Payload to Airtable API
Map the parsed Typeform responses to Airtable fields and issue a POST request to Airtable's record creation endpoint using batch operations or single inserts while respecting the 5 req/s rate limit.
curl -X POST https://api.airtable.com/v0/appXXXXXXXXXXXXXX/Responses \ -H "Authorization: Bearer patXXXXXXXXXXXXXX" \ -H "Content-Type: application/json" \ -d '{"records": [{"fields": {"Response ID": "resp_12345", "Respondent Email": "user@acme.com", "Score": 9, "Feedback": "Seamless integration."}}]}'
Webhook payload example
POST /api/v1/typeform-ingest · event: form_response
{
"event_id": "01HEX5Y8G3A78KJ6VR1Q5BTYNZ",
"event_type": "form_response",
"form_response": {
"form_id": "tYp3F0rm",
"token": "01HEX5Y8G3A78KJ6VR1Q5BTYNZ",
"landed_at": "2023-10-24T10:14:00Z",
"submitted_at": "2023-10-24T10:15:32Z",
"definition": {
"id": "tYp3F0rm",
"title": "Q4 Customer Satisfaction",
"fields": [
{
"id": "email_field_1",
"ref": "respondent_email",
"type": "email",
"title": "What is your email address?"
},
{
"id": "rating_field_2",
"ref": "nps_score",
"type": "opinion_scale",
"title": "How likely are you to recommend us?"
},
{
"id": "text_field_3",
"ref": "feedback_comments",
"type": "long_text",
"title": "Additional comments:"
}
]
},
"answers": [
{
"field": {
"id": "email_field_1",
"type": "email",
"ref": "respondent_email"
},
"type": "email",
"email": "alex.dev@example.com"
},
{
"field": {
"id": "rating_field_2",
"type": "number",
"ref": "nps_score"
},
"type": "number",
"number": 9
},
{
"field": {
"id": "text_field_3",
"type": "text",
"ref": "feedback_comments"
},
"type": "text",
"text": "The API speed is great, but documentation needs more payload examples."
}
]
}
}Typeform: pros & cons
- ✅ Conversational UI delivers 15-30% higher completion rates than static forms
- ✅ Native webhook payload delivery with SHA256 HMAC verification
- ✅ Supports dynamic hidden fields to track user identifiers without manual input
- ⚠️ Strict response limits on lower plans ($25/mo covers only 100 responses)
- ⚠️ API rate limit is constrained to 2 requests per second
Airtable: pros & cons
- ✅ Relational model links survey feedback directly to Customer and Product tables
- ✅ Built-in Interface Designer allows real-time executive survey dashboards
- ✅ Higher base throughput of 5 requests per second per base
- ⚠️ Base storage hard caps (50,000 records on Team tier)
- ⚠️ Per-seat pricing increases rapidly for large analytical teams
FAQ
How do you handle Airtable's 5 requests/second rate limit during survey spikes?
Implement an intermediate message queue (such as AWS SQS, Google Cloud Tasks, or Redis BullMQ). The webhook ingestion endpoint writes payloads to the queue immediately with a 200 OK, and a worker drains the queue into Airtable using 10-record batch POST calls at a throttled rate of 4 requests/second.
How can I authenticate webhook payloads to prevent spoofed survey submissions?
Supply a 'secret' when creating the Typeform webhook. Typeform will append a 'Typeform-Signature' header containing a SHA256 HMAC hash. In your backend, calculate the HMAC of the raw incoming request body using your secret key and run a constant-time comparison against the header value.
What happens when Typeform questions are added, deleted, or reordered?
Map fields using stable 'ref' identifiers rather than positional array indexes or dynamically generated 'id' values. In the Typeform builder, assign permanent references under question settings so payload answer extraction logic remains unaffected by UI changes.
Can I link responses to existing accounts in Airtable automatically?
Yes. Pass the internal Account ID into Typeform via hidden fields in the survey URL. During ingestion, populate an Airtable 'Linked Record' field with this ID, which immediately links the response to the target customer record without secondary lookup calls.