The workflow JSON
Copy or download the full n8n JSON below. Paste it into a new n8n workflow, add your credentials, activate. Full import guide →
{
"name": "Loop 5 \u2014 Outreach",
"nodes": [
{
"parameters": {
"rule": {
"interval": [
{
"field": "minutes",
"minutesInterval": 30
}
]
}
},
"id": "node-cron-5",
"name": "Cron Trigger",
"type": "n8n-nodes-base.scheduleTrigger",
"typeVersion": 1.1,
"position": [
200,
300
]
},
{
"parameters": {
"operation": "list",
"base": {
"__rl": true,
"value": "YOUR_AIRTABLE_BASE_ID",
"mode": "id"
},
"table": {
"__rl": true,
"value": "Leads",
"mode": "name"
},
"filterByFormula": "AND({status}='active',{segment}!='',{next_outreach_at}!='',IS_BEFORE({next_outreach_at},NOW()))"
},
"id": "node-at-list-5",
"name": "List Due Leads",
"type": "n8n-nodes-base.airtable",
"typeVersion": 2,
"position": [
420,
300
],
"credentials": {
"airtableTokenApi": {
"name": "<your credential>"
}
}
},
{
"parameters": {
"rules": {
"values": [
{
"conditions": {
"options": {
"caseSensitive": true
},
"conditions": [
{
"leftValue": "={{$json.fields.segment}}",
"rightValue": "hot",
"operator": {
"type": "string",
"operation": "equals"
}
}
]
}
},
{
"conditions": {
"options": {
"caseSensitive": true
},
"conditions": [
{
"leftValue": "={{$json.fields.segment}}",
"rightValue": "warm",
"operator": {
"type": "string",
"operation": "equals"
}
}
]
}
}
]
}
},
"id": "node-switch-5",
"name": "Switch Segment",
"type": "n8n-nodes-base.switch",
"typeVersion": 3,
"position": [
640,
300
]
},
{
"parameters": {
"jsCode": "const seg=$json.fields?.segment||'cold';\nconst subjects={hot:'Quick check-in',warm:'Thought this might help',cold:'Staying in touch'};\nconst bodies={hot:'Hi {{name}}, I wanted to connect directly - are you available for a quick call this week?',warm:'Hi {{name}}, I thought this resource might be valuable for what you are working on.',cold:'Hi {{name}}, just staying on your radar in case the timing is better now.'};\nconst mins={hot:30,warm:120,cold:1440};\nconst next=new Date(Date.now()+mins[seg]*60000).toISOString();\nreturn[{json:{...$json,subject:subjects[seg],body:bodies[seg],next_outreach_at:next,last_outreach_at:new Date().toISOString()}}];"
},
"id": "node-build-msg-5",
"name": "Build Message",
"type": "n8n-nodes-base.code",
"typeVersion": 2,
"position": [
860,
300
]
},
{
"parameters": {
"operation": "create",
"base": {
"__rl": true,
"value": "YOUR_AIRTABLE_BASE_ID",
"mode": "id"
},
"table": {
"__rl": true,
"value": "Interactions",
"mode": "name"
},
"fields": {
"fieldMappingMode": "defineBelow",
"value": {
"values": [
{
"fieldId": "lead_id",
"fieldValue": "={{$json.id}}"
},
{
"fieldId": "type",
"fieldValue": "outreach"
},
{
"fieldId": "channel",
"fieldValue": "email"
},
{
"fieldId": "direction",
"fieldValue": "outbound"
},
{
"fieldId": "subject",
"fieldValue": "={{$json.subject}}"
},
{
"fieldId": "segment_at_time",
"fieldValue": "={{$json.fields.segment}}"
},
{
"fieldId": "score_at_time",
"fieldValue": "={{$json.fields.score}}"
},
{
"fieldId": "status",
"fieldValue": "sent"
},
{
"fieldId": "loop_source",
"fieldValue": "loop_5"
},
{
"fieldId": "created_at",
"fieldValue": "={{$json.last_outreach_at}}"
}
]
}
}
},
"id": "node-at-interact-5",
"name": "Log Interaction",
"type": "n8n-nodes-base.airtable",
"typeVersion": 2,
"position": [
1080,
300
],
"credentials": {
"airtableTokenApi": {
"name": "<your credential>"
}
}
},
{
"parameters": {
"operation": "update",
"base": {
"__rl": true,
"value": "YOUR_AIRTABLE_BASE_ID",
"mode": "id"
},
"table": {
"__rl": true,
"value": "Leads",
"mode": "name"
},
"id": "={{$json.id}}",
"fields": {
"fieldMappingMode": "defineBelow",
"value": {
"values": [
{
"fieldId": "last_outreach_at",
"fieldValue": "={{$json.last_outreach_at}}"
},
{
"fieldId": "next_outreach_at",
"fieldValue": "={{$json.next_outreach_at}}"
}
]
}
}
},
"id": "node-at-update-5",
"name": "Update Lead",
"type": "n8n-nodes-base.airtable",
"typeVersion": 2,
"position": [
1300,
300
],
"credentials": {
"airtableTokenApi": {
"name": "<your credential>"
}
}
}
],
"connections": {
"Cron Trigger": {
"main": [
[
{
"node": "List Due Leads",
"type": "main",
"index": 0
}
]
]
},
"List Due Leads": {
"main": [
[
{
"node": "Switch Segment",
"type": "main",
"index": 0
}
]
]
},
"Switch Segment": {
"main": [
[
{
"node": "Build Message",
"type": "main",
"index": 0
}
],
[
{
"node": "Build Message",
"type": "main",
"index": 0
}
],
[
{
"node": "Build Message",
"type": "main",
"index": 0
}
]
]
},
"Build Message": {
"main": [
[
{
"node": "Log Interaction",
"type": "main",
"index": 0
}
]
]
},
"Log Interaction": {
"main": [
[
{
"node": "Update Lead",
"type": "main",
"index": 0
}
]
]
}
},
"settings": {
"executionOrder": "v1"
},
"tags": []
}
Credentials you'll need
Each integration node will prompt for credentials when you import. We strip credential IDs before publishing — you'll add your own.
airtableTokenApi
For the full experience including quality scoring and batch install features for each workflow upgrade to Pro
About this workflow
Loop 5 — Outreach. Uses airtable. Scheduled trigger; 6 nodes.
Source: https://gist.github.com/axisassists/ea249e6223c4edebd76f0469ae0293a2 — original creator credit. Request a take-down →
Related workflows
Workflows that share integrations, category, or trigger type with this one. All free to copy and import.
I prepared a detailed guide that showed the whole process of integrating the Binance API and storing data in Airtable to manage funding statements associated with tokens in a wallet.
Stop wasting hours on manual dialing and listening to ringtones. This workflow transforms your Airtable into a high-velocity AI Call Center using Vapi AI**.
Reel-Analysis-Of-Favourite-Content-Creator. Uses httpRequest, airtable. Scheduled trigger; 26 nodes.
Link-By-Reel-Analysis. Uses httpRequest, airtable. Scheduled trigger; 24 nodes.
> Transform your content strategy with automated competitor intelligence