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 →
{
"_meta": {
"template": "zero-trust-crm-query",
"description": "Zero-trust CRM query webhook tool. Replace the Airtable node with your CRM of choice. Always includes payload validation and Respond to Webhook.",
"skill": "n8n-crm-query",
"version": "0.1.0"
},
"name": "[Tool] Zero-Trust CRM Query",
"nodes": [
{
"id": "webhook-trigger",
"name": "Webhook Trigger",
"type": "n8n-nodes-base.webhook",
"position": [
240,
300
],
"parameters": {
"httpMethod": "POST",
"path": "crm-query",
"responseMode": "responseNode",
"options": {}
}
},
{
"id": "validate-payload",
"name": "Validate Payload",
"type": "n8n-nodes-base.code",
"position": [
480,
300
],
"parameters": {
"jsCode": "// \u2500\u2500 Validate incoming payload \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n// Customize this to match your tool's accepted parameters.\n\nconst { status, limit } = $json.body;\n\nconst validStatuses = ['Open', 'Qualified', 'Lost'];\nif (!validStatuses.includes(status)) {\n throw new Error(\n `Invalid status: \"${status}\". Must be one of: ${validStatuses.join(', ')}`\n );\n}\n\nconst safeLimit = Math.min(Math.max(1, limit || 20), 100);\n\nreturn { status, limit: safeLimit, validated: true };"
}
},
{
"id": "airtable-query",
"name": "Airtable Query",
"type": "n8n-nodes-base.airtable",
"position": [
720,
300
],
"parameters": {
"operation": "list",
"base": {
"__rl": true,
"value": "YOUR_BASE_ID",
"mode": "id"
},
"table": {
"__rl": true,
"value": "YOUR_TABLE_ID",
"mode": "id"
},
"options": {
"filterByFormula": "={Status} = '{{ $json.status }}'",
"maxRecords": "={{ $json.limit }}",
"fields": [
"Name",
"Email",
"Company",
"Status",
"Created"
]
}
},
"credentials": {
"airtableTokenApi": {
"name": "<your credential>"
}
}
},
{
"id": "format-response",
"name": "Format Response",
"type": "n8n-nodes-base.code",
"position": [
960,
300
],
"parameters": {
"jsCode": "// Format the CRM data into a clean response for the agent\nconst records = $input.all().map(item => item.json.fields);\n\nreturn {\n status: 'success',\n data: records,\n count: records.length,\n message: `Found ${records.length} ${$('Validate Payload').first().json.status} records`\n};"
}
},
{
"id": "respond-to-webhook",
"name": "Respond to Webhook",
"type": "n8n-nodes-base.respondToWebhook",
"position": [
1200,
300
],
"parameters": {
"respondWith": "json",
"responseBody": "={{ $json }}",
"options": {
"responseCode": 200
}
}
}
],
"connections": {
"Webhook Trigger": {
"main": [
[
{
"node": "Validate Payload",
"type": "main",
"index": 0
}
]
]
},
"Validate Payload": {
"main": [
[
{
"node": "Airtable Query",
"type": "main",
"index": 0
}
]
]
},
"Airtable Query": {
"main": [
[
{
"node": "Format Response",
"type": "main",
"index": 0
}
]
]
},
"Format Response": {
"main": [
[
{
"node": "Respond to Webhook",
"type": "main",
"index": 0
}
]
]
}
},
"settings": {
"executionOrder": "v1"
},
"tags": [
{
"name": "agent-tools"
}
]
}
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
[Tool] Zero-Trust CRM Query. Uses airtable. Webhook trigger; 5 nodes.
Source: https://github.com/bcharleson/n8n-agent-cli/blob/c16a09ec7630f508ef5b46d5c7e1b15d006ec7af/templates/zero-trust-crm-query.workflow.json — 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.
Whatsapp Multi Agent System optimized copy 2.0. Uses airtable, httpRequest, errorTrigger. Webhook trigger; 44 nodes.
Template Overview This n8n workflow provides an intelligent, timezone-aware AI voice calling system for e-commerce businesses to automatically confirm customer orders via phone calls. The system uses
What if AI didn't just write content—but actually thought about how to write it? This n8n workflow revolutionizes content creation by deploying multiple specialized AI agents that handle every aspect
Ai Data Extraction With Dynamic Prompts And Airtable. Uses httpRequest, extractFromFile, splitInBatches, noOp. Webhook trigger; 51 nodes.