This workflow corresponds to n8n.io template #9515 — we link there as the canonical source.
This workflow follows the Datatable → HTTP Request recipe pattern — see all workflows that pair these two integrations.
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 →
{
"id": "iZSCJlsspoezZxqm",
"meta": {
"templateCredsSetupCompleted": true
},
"name": "AI automation using n8n, Jotform, Attio CRM and Slack",
"tags": [],
"nodes": [
{
"id": "fe880e8e-e413-4a51-9457-fe93ecc5a367",
"name": "Switch",
"type": "n8n-nodes-base.switch",
"position": [
2208,
192
],
"parameters": {
"rules": {
"values": [
{
"outputKey": "Deal exists",
"conditions": {
"options": {
"version": 2,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "3bc17a85-d99b-4c90-b0fe-d1e3774a819e",
"operator": {
"type": "boolean",
"operation": "true",
"singleValue": true
},
"leftValue": "={{ $json.deal.exists }}",
"rightValue": 1
}
]
},
"renameOutput": true
},
{
"outputKey": "Deal doesn't exist",
"conditions": {
"options": {
"version": 2,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "7801af09-9bdb-40b6-a8ec-58bce6403236",
"operator": {
"type": "boolean",
"operation": "false",
"singleValue": true
},
"leftValue": "={{ $json.deal.exists }}",
"rightValue": ""
}
]
},
"renameOutput": true
}
]
},
"options": {}
},
"typeVersion": 3.3
},
{
"id": "e0e20813-87ca-44fe-820c-a3d49d700fdb",
"name": "Edit Fields",
"type": "n8n-nodes-base.set",
"position": [
384,
240
],
"parameters": {
"mode": "raw",
"options": {},
"jsonOutput": "={\n \"data_tables_id\": \"\",\n \"statuses\": {\n \"pending\": {\n \"key\": \"PENDING_STATUS\",\n \"value\": \"Pending\"\n },\n \"urgent\": {\n \"key\": \"URGENT_STATUS\",\n \"value\": \"Urgent\"\n }\n },\n \"columns\": {\n \"message\": {\n \"key\": \"MESSAGE_COLUMN\",\n \"value\": \"Message\",\n \"slug\": \"message\",\n \"description\": \"the customer message\",\n \"type\": \"text\",\n \"is_required\": false,\n \"is_unique\": false,\n \"is_multiselect\": false\n }\n },\n \"customer\": {\n \"name\": \"{{ $json.body.name }}\",\n \"email\": \"{{ $json.body.email }}\",\n \"message\": \"{{ $json.body.message }}\"\n },\n \"owner_email\": \"\"\n}"
},
"typeVersion": 3.4
},
{
"id": "04af19f6-8344-4422-b171-f6b4975200f5",
"name": "If pending status does not exist",
"type": "n8n-nodes-base.dataTable",
"position": [
656,
-624
],
"parameters": {
"filters": {
"conditions": [
{
"keyName": "key",
"keyValue": "={{ $json.statuses.pending.key }}"
}
]
},
"matchType": "allConditions",
"operation": "rowNotExists",
"dataTableId": {
"__rl": true,
"mode": "id",
"value": "={{ $json.data_tables_id }}"
}
},
"typeVersion": 1
},
{
"id": "fc8dcff2-b4a6-4893-94a2-6eece20be089",
"name": "If urgent status does not exist",
"type": "n8n-nodes-base.dataTable",
"position": [
656,
-448
],
"parameters": {
"filters": {
"conditions": [
{
"keyName": "key",
"keyValue": "={{ $json.statuses.urgent.key }}"
}
]
},
"matchType": "allConditions",
"operation": "rowNotExists",
"dataTableId": {
"__rl": true,
"mode": "id",
"value": "={{ $json.data_tables_id }}"
}
},
"typeVersion": 1
},
{
"id": "67b00378-756b-4526-afe7-d56f70baa91d",
"name": "If message column does not exist",
"type": "n8n-nodes-base.dataTable",
"position": [
656,
80
],
"parameters": {
"filters": {
"conditions": [
{
"keyName": "key",
"keyValue": "={{ $json.columns.message.key }}"
}
]
},
"matchType": "allConditions",
"operation": "rowNotExists",
"dataTableId": {
"__rl": true,
"mode": "id",
"value": "={{ $json.data_tables_id }}"
}
},
"typeVersion": 1
},
{
"id": "b19143b9-02c1-4a21-9b17-7735ef5d0917",
"name": "If deals id does not exist",
"type": "n8n-nodes-base.dataTable",
"position": [
656,
-784
],
"parameters": {
"filters": {
"conditions": [
{
"keyName": "key",
"keyValue": "=DEALS_ID"
}
]
},
"matchType": "allConditions",
"operation": "rowNotExists",
"dataTableId": {
"__rl": true,
"mode": "id",
"value": "={{ $json.data_tables_id }}"
}
},
"typeVersion": 1
},
{
"id": "69cd3188-c2af-4de4-9a24-9ce71954c54c",
"name": "Get the deals id",
"type": "n8n-nodes-base.dataTable",
"position": [
864,
-624
],
"parameters": {
"limit": 1,
"filters": {
"conditions": [
{
"keyName": "key",
"keyValue": "DEALS_ID"
}
]
},
"matchType": "allConditions",
"operation": "get",
"dataTableId": {
"__rl": true,
"mode": "id",
"value": "={{ $('Edit Fields').item.json.data_tables_id }}"
}
},
"typeVersion": 1
},
{
"id": "47d07c63-dbea-4bfe-9c25-de118e480d72",
"name": "Get the deals id1",
"type": "n8n-nodes-base.dataTable",
"position": [
864,
-448
],
"parameters": {
"limit": 1,
"filters": {
"conditions": [
{
"keyName": "key",
"keyValue": "DEALS_ID"
}
]
},
"matchType": "allConditions",
"operation": "get",
"dataTableId": {
"__rl": true,
"mode": "id",
"value": "={{ $('Edit Fields').item.json.data_tables_id }}"
}
},
"typeVersion": 1
},
{
"id": "873afc25-057d-4028-896d-b5bfdc37ddc6",
"name": "If people id does not exist",
"type": "n8n-nodes-base.dataTable",
"position": [
656,
-96
],
"parameters": {
"filters": {
"conditions": [
{
"keyName": "key",
"keyValue": "=PEOPLE_ID"
}
]
},
"matchType": "allConditions",
"operation": "rowNotExists",
"dataTableId": {
"__rl": true,
"mode": "id",
"value": "={{ $json.data_tables_id }}"
}
},
"typeVersion": 1
},
{
"id": "d2a32e66-d436-4614-931c-939263fe2217",
"name": "Get the people id",
"type": "n8n-nodes-base.dataTable",
"position": [
864,
80
],
"parameters": {
"limit": 1,
"filters": {
"conditions": [
{
"keyName": "key",
"keyValue": "PEOPLE_ID"
}
]
},
"matchType": "allConditions",
"operation": "get",
"dataTableId": {
"__rl": true,
"mode": "id",
"value": "={{ $('Edit Fields').item.json.data_tables_id }}"
}
},
"typeVersion": 1
},
{
"id": "3cd05fbc-8b71-43f8-a920-046602451f40",
"name": "Get the deals id (CRM)",
"type": "n8n-nodes-base.httpRequest",
"position": [
864,
-784
],
"parameters": {
"url": "https://api.attio.com/v2/objects/deals",
"options": {},
"authentication": "genericCredentialType",
"genericAuthType": "httpBearerAuth"
},
"credentials": {
"httpBearerAuth": {
"name": "<your credential>"
}
},
"typeVersion": 4.2
},
{
"id": "7694da54-260a-4804-9da4-7469f700945b",
"name": "Add deals id to DB",
"type": "n8n-nodes-base.dataTable",
"position": [
1072,
-784
],
"parameters": {
"columns": {
"value": {
"key": "DEALS_ID",
"value": "={{ $json.data.id.object_id }}",
"is_done": true
},
"schema": [
{
"id": "key",
"type": "string",
"display": true,
"removed": false,
"readOnly": false,
"required": false,
"displayName": "key",
"defaultMatch": false
},
{
"id": "value",
"type": "string",
"display": true,
"removed": false,
"readOnly": false,
"required": false,
"displayName": "value",
"defaultMatch": false
},
{
"id": "is_done",
"type": "boolean",
"display": true,
"removed": false,
"readOnly": false,
"required": false,
"displayName": "is_done",
"defaultMatch": false
}
],
"mappingMode": "defineBelow",
"matchingColumns": [],
"attemptToConvertTypes": false,
"convertFieldsToString": false
},
"options": {},
"dataTableId": {
"__rl": true,
"mode": "id",
"value": "={{ $('Edit Fields').item.json.data_tables_id }}"
}
},
"typeVersion": 1
},
{
"id": "ed38bef7-fe3e-43d1-8dde-2a9d96569898",
"name": "Add pending status to CRM",
"type": "n8n-nodes-base.httpRequest",
"position": [
1072,
-624
],
"parameters": {
"url": "=https://api.attio.com/v2/objects/{{ $json.value }}/attributes/stage/statuses",
"method": "POST",
"options": {},
"jsonBody": "={\n \"data\": {\n \"title\": \"{{ $('Edit Fields').item.json.statuses.pending.value }}\"\n }\n}",
"sendBody": true,
"specifyBody": "json",
"authentication": "genericCredentialType",
"genericAuthType": "httpBearerAuth"
},
"credentials": {
"httpBearerAuth": {
"name": "<your credential>"
}
},
"typeVersion": 4.2
},
{
"id": "5161a0fb-4f9c-4af1-9d1b-de4ca1fdab99",
"name": "Add pending status to DB",
"type": "n8n-nodes-base.dataTable",
"position": [
1264,
-624
],
"parameters": {
"columns": {
"value": {
"key": "={{ $('Edit Fields').item.json.statuses.pending.key }}",
"value": "={{ $('Edit Fields').item.json.statuses.pending.value }}",
"is_done": true
},
"schema": [
{
"id": "key",
"type": "string",
"display": true,
"removed": false,
"readOnly": false,
"required": false,
"displayName": "key",
"defaultMatch": false
},
{
"id": "value",
"type": "string",
"display": true,
"removed": false,
"readOnly": false,
"required": false,
"displayName": "value",
"defaultMatch": false
},
{
"id": "is_done",
"type": "boolean",
"display": true,
"removed": false,
"readOnly": false,
"required": false,
"displayName": "is_done",
"defaultMatch": false
}
],
"mappingMode": "defineBelow",
"matchingColumns": [],
"attemptToConvertTypes": false,
"convertFieldsToString": false
},
"options": {},
"dataTableId": {
"__rl": true,
"mode": "id",
"value": "={{ $('Edit Fields').item.json.data_tables_id }}"
}
},
"typeVersion": 1
},
{
"id": "7e17c9b2-f94e-463d-b912-759fa36730cf",
"name": "Add urgent status to CRM",
"type": "n8n-nodes-base.httpRequest",
"position": [
1072,
-448
],
"parameters": {
"url": "=https://api.attio.com/v2/objects/{{ $json.value }}/attributes/stage/statuses",
"method": "POST",
"options": {},
"jsonBody": "={\n \"data\": {\n \"title\": \"{{ $('Edit Fields').item.json.statuses.urgent.value }}\"\n }\n}",
"sendBody": true,
"specifyBody": "json",
"authentication": "genericCredentialType",
"genericAuthType": "httpBearerAuth"
},
"credentials": {
"httpBearerAuth": {
"name": "<your credential>"
}
},
"typeVersion": 4.2
},
{
"id": "bff00017-a618-4d68-8aad-c449a8f90828",
"name": "Add urgent status to DB",
"type": "n8n-nodes-base.dataTable",
"position": [
1264,
-448
],
"parameters": {
"columns": {
"value": {
"key": "={{ $('Edit Fields').item.json.statuses.urgent.key }}",
"value": "={{ $('Edit Fields').item.json.statuses.urgent.value }}",
"is_done": true
},
"schema": [
{
"id": "key",
"type": "string",
"display": true,
"removed": false,
"readOnly": false,
"required": false,
"displayName": "key",
"defaultMatch": false
},
{
"id": "value",
"type": "string",
"display": true,
"removed": false,
"readOnly": false,
"required": false,
"displayName": "value",
"defaultMatch": false
},
{
"id": "is_done",
"type": "boolean",
"display": true,
"removed": false,
"readOnly": false,
"required": false,
"displayName": "is_done",
"defaultMatch": false
}
],
"mappingMode": "defineBelow",
"matchingColumns": [],
"attemptToConvertTypes": false,
"convertFieldsToString": false
},
"options": {},
"dataTableId": {
"__rl": true,
"mode": "id",
"value": "={{ $('Edit Fields').item.json.data_tables_id }}"
}
},
"typeVersion": 1
},
{
"id": "f73ab352-1baa-46ae-b26a-738e12f89ef5",
"name": "Get the people id (CRM)",
"type": "n8n-nodes-base.httpRequest",
"position": [
864,
-96
],
"parameters": {
"url": "https://api.attio.com/v2/objects/people",
"options": {},
"authentication": "genericCredentialType",
"genericAuthType": "httpBearerAuth"
},
"credentials": {
"httpBearerAuth": {
"name": "<your credential>"
}
},
"typeVersion": 4.2
},
{
"id": "c2753928-4722-45a5-914f-5424858c81dd",
"name": "Add people id to DB",
"type": "n8n-nodes-base.dataTable",
"position": [
1072,
-96
],
"parameters": {
"columns": {
"value": {
"key": "PEOPLE_ID",
"value": "={{ $json.data.id.object_id }}",
"is_done": true
},
"schema": [
{
"id": "key",
"type": "string",
"display": true,
"removed": false,
"readOnly": false,
"required": false,
"displayName": "key",
"defaultMatch": false
},
{
"id": "value",
"type": "string",
"display": true,
"removed": false,
"readOnly": false,
"required": false,
"displayName": "value",
"defaultMatch": false
},
{
"id": "is_done",
"type": "boolean",
"display": true,
"removed": false,
"readOnly": false,
"required": false,
"displayName": "is_done",
"defaultMatch": false
}
],
"mappingMode": "defineBelow",
"matchingColumns": [],
"attemptToConvertTypes": false,
"convertFieldsToString": false
},
"options": {},
"dataTableId": {
"__rl": true,
"mode": "id",
"value": "={{ $('Edit Fields').item.json.data_tables_id }}"
}
},
"typeVersion": 1
},
{
"id": "30783791-940a-4042-922c-5b98741c7622",
"name": "Add message column to CRM",
"type": "n8n-nodes-base.httpRequest",
"position": [
1072,
80
],
"parameters": {
"url": "=https://api.attio.com/v2/objects/{{ $json.value }}/attributes",
"method": "POST",
"options": {},
"jsonBody": "={\n \"data\": {\n \"title\": \"{{ $('Edit Fields').item.json.columns.message.value }}\",\n \"description\": \"{{ $('Edit Fields').item.json.columns.message.description }}\",\n \"api_slug\": \"{{ $('Edit Fields').item.json.columns.message.slug }}\",\n \"type\": \"{{ $('Edit Fields').item.json.columns.message.type }}\",\n \"is_required\": {{ $('Edit Fields').item.json.columns.message.is_required }},\n \"is_unique\": {{ $('Edit Fields').item.json.columns.message.is_unique }},\n \"is_multiselect\": {{ $('Edit Fields').item.json.columns.message.is_multiselect }},\n \"config\": {}\n }\n}",
"sendBody": true,
"specifyBody": "json",
"authentication": "genericCredentialType",
"genericAuthType": "httpBearerAuth"
},
"credentials": {
"httpBearerAuth": {
"name": "<your credential>"
}
},
"typeVersion": 4.2
},
{
"id": "b31c71a2-820c-47d3-95a7-146fb2abb6f3",
"name": "Add message column to DB",
"type": "n8n-nodes-base.dataTable",
"position": [
1264,
80
],
"parameters": {
"columns": {
"value": {
"key": "={{ $('Edit Fields').item.json.columns.message.key }}",
"value": "={{ $('Edit Fields').item.json.columns.message.value }}",
"is_done": true
},
"schema": [
{
"id": "key",
"type": "string",
"display": true,
"removed": false,
"readOnly": false,
"required": false,
"displayName": "key",
"defaultMatch": false
},
{
"id": "value",
"type": "string",
"display": true,
"removed": false,
"readOnly": false,
"required": false,
"displayName": "value",
"defaultMatch": false
},
{
"id": "is_done",
"type": "boolean",
"display": true,
"removed": false,
"readOnly": false,
"required": false,
"displayName": "is_done",
"defaultMatch": false
}
],
"mappingMode": "defineBelow",
"matchingColumns": [],
"attemptToConvertTypes": false,
"convertFieldsToString": false
},
"options": {},
"dataTableId": {
"__rl": true,
"mode": "id",
"value": "={{ $('Edit Fields').item.json.data_tables_id }}"
}
},
"typeVersion": 1
},
{
"id": "c57c56c7-4cd7-47d8-9eed-b50c8d5a2353",
"name": "Get customer by email",
"type": "n8n-nodes-base.httpRequest",
"position": [
1584,
368
],
"parameters": {
"url": "https://api.attio.com/v2/objects/people/records/query",
"method": "POST",
"options": {},
"jsonBody": "={\n \"filter\": {\n \"email_addresses\": \"{{ $('Edit Fields').item.json.customer.email }}\"\n }\n}",
"sendBody": true,
"specifyBody": "json",
"authentication": "genericCredentialType",
"genericAuthType": "httpBearerAuth"
},
"credentials": {
"httpBearerAuth": {
"name": "<your credential>"
}
},
"typeVersion": 4.2
},
{
"id": "f8a86ea0-cc20-43d9-b399-e6dc518fadad",
"name": "Prepare customer data",
"type": "n8n-nodes-base.code",
"position": [
1792,
368
],
"parameters": {
"jsCode": "let customer = {\n exists: $input.first().json.data.length > 0,\n name: \"\",\n email: \"\",\n deal: {\n exists: false,\n details: {}\n }\n}\n\nif (customer.exists) {\n customer = {\n ...customer,\n name: $input.first().json.data[0].values.name[0].full_name,\n email: $input.first().json.data[0].values.email_addresses[0].email_address,\n }\n\n if ($input.first().json.data[0].values.associated_deals.length > 0) {\n customer = {\n ...customer,\n deal: {\n exists: true,\n details: $input.first().json.data[0].values.associated_deals[0]\n }\n }\n }\n}\n\nreturn customer;"
},
"typeVersion": 2
},
{
"id": "a5ff511b-3fa9-4ad3-bfb7-d30fdcde9250",
"name": "Check if the customer is in the CRM",
"type": "n8n-nodes-base.if",
"position": [
2000,
368
],
"parameters": {
"options": {},
"conditions": {
"options": {
"version": 2,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "or",
"conditions": [
{
"id": "2e5c01e8-6cad-4f20-866b-303a1c102357",
"operator": {
"type": "boolean",
"operation": "true",
"singleValue": true
},
"leftValue": "={{ $json.exists }}",
"rightValue": 0
}
]
}
},
"typeVersion": 2.2
},
{
"id": "75c2705a-fcac-423a-8672-feab8f746e8a",
"name": "Update the deal",
"type": "n8n-nodes-base.httpRequest",
"position": [
2432,
96
],
"parameters": {
"url": "=https://api.attio.com/v2/objects/deals/records/{{ $json.deal.details.target_record_id }}",
"method": "PATCH",
"options": {},
"jsonBody": "={\n \"data\": {\n \"values\": {\n \"stage\": \"{{ $('Edit Fields').item.json.statuses.urgent.value }}\"\n }\n }\n}",
"sendBody": true,
"specifyBody": "json",
"authentication": "genericCredentialType",
"genericAuthType": "httpBearerAuth"
},
"credentials": {
"httpBearerAuth": {
"name": "<your credential>"
}
},
"typeVersion": 4.2
},
{
"id": "716adc16-bb05-432d-9a7d-daa7ee6f6280",
"name": "Create a new deal",
"type": "n8n-nodes-base.httpRequest",
"position": [
2432,
336
],
"parameters": {
"url": "https://api.attio.com/v2/objects/deals/records",
"method": "POST",
"options": {},
"jsonBody": "={\n \"data\": {\n \"values\": {\n \"name\": \"Deal for {{ $('Edit Fields').item.json.customer.name }}\",\n \"stage\": \"{{ $('Edit Fields').item.json.statuses.pending.value }}\",\n \"owner\": \"{{ $('Edit Fields').item.json.owner_email }}\",\n \"associated_people\": [\n {\n \"target_object\": \"people\",\n \"email_addresses\": [{ \"email_address\": \"{{ $('Edit Fields').item.json.customer.email }}\" }]\n }\n ]\n }\n }\n}",
"sendBody": true,
"specifyBody": "json",
"authentication": "genericCredentialType",
"genericAuthType": "httpBearerAuth"
},
"credentials": {
"httpBearerAuth": {
"name": "<your credential>"
}
},
"typeVersion": 4.2
},
{
"id": "63822a02-c29e-477e-a6e7-e38da9081613",
"name": "Send slack message",
"type": "n8n-nodes-base.httpRequest",
"position": [
2624,
208
],
"parameters": {
"method": "POST",
"options": {},
"jsonBody": "={\n \"text\": \"<!channel> Data has been {{ $('Prepare customer data').item.json.deal.exists ? \"updated\": \"created\" }} for this <{{ $json.data.web_url }}|deal>\"\n}",
"sendBody": true,
"specifyBody": "json"
},
"typeVersion": 4.2
},
{
"id": "f7b22128-bdc9-49c2-9971-129096648e79",
"name": "Add the customer to the CRM",
"type": "n8n-nodes-base.httpRequest",
"position": [
2208,
512
],
"parameters": {
"url": "https://api.attio.com/v2/objects/people/records",
"method": "POST",
"options": {},
"jsonBody": "={\n \"data\": {\n \"values\": {\n \"name\": \"{{ $('Edit Fields').item.json.customer.name }}\",\n \"email_addresses\": [{ \"email_address\": \"{{ $('Edit Fields').item.json.customer.email }}\" }],\n \"{{ $('Edit Fields').item.json.columns.message.slug }}\": \"{{ $('Edit Fields').item.json.customer.message }}\"\n }\n }\n}",
"sendBody": true,
"specifyBody": "json",
"authentication": "genericCredentialType",
"genericAuthType": "httpBearerAuth"
},
"credentials": {
"httpBearerAuth": {
"name": "<your credential>"
}
},
"typeVersion": 4.2
},
{
"id": "179b8917-24a8-487c-9bdf-b745f21d51fe",
"name": "Sticky Note",
"type": "n8n-nodes-base.stickyNote",
"position": [
592,
-912
],
"parameters": {
"width": 880,
"height": 640,
"content": "## Step 1\nMake sure that **Pending** and **Urgent** stages are correctly added to the **Deals**"
},
"typeVersion": 1
},
{
"id": "a5aa04ae-42c0-4060-aae9-c53fa075fb00",
"name": "Sticky Note1",
"type": "n8n-nodes-base.stickyNote",
"position": [
608,
-224
],
"parameters": {
"width": 864,
"height": 464,
"content": "## Step 2\nMake sure that **Message** attribute column is correctly added to the **People**"
},
"typeVersion": 1
},
{
"id": "0638fa28-110a-4bc1-8a2a-08ea9267e658",
"name": "Sticky Note2",
"type": "n8n-nodes-base.stickyNote",
"position": [
1536,
-96
],
"parameters": {
"width": 1328,
"height": 800,
"content": "## Step 3\n* Make sure that the **customer is added** if not in the CRM and **add a deal** for the customer\n* If the customer is already in the CRM and doesn't have a deal, **Create a deal for the customer**\n* If the customer is already in the CRM and does have a deal, Change the stage for that deal and make it in the **Urgent** stage\n* If any of the above happens, a **Slack message** will be sent, so **sales team for example** will be **notified**\n\n"
},
"typeVersion": 1
},
{
"id": "e30d3a87-d21c-481a-831f-f248f0477d78",
"name": "Sticky Note3",
"type": "n8n-nodes-base.stickyNote",
"position": [
1536,
-912
],
"parameters": {
"color": 4,
"width": 1328,
"height": 800,
"content": "## [Video: How to use the template](https://www.youtube.com/watch?v=FCGmVZsGYWk)\n@[youtube](FCGmVZsGYWk)"
},
"typeVersion": 1
},
{
"id": "6b9d9817-ba3a-4973-8e5d-d41b54c9c77f",
"name": "Receive form submissions",
"type": "n8n-nodes-base.webhook",
"position": [
128,
240
],
"parameters": {
"path": "events",
"options": {},
"httpMethod": "POST"
},
"typeVersion": 2.1
},
{
"id": "957bc517-d047-40da-b5bf-b5f29acb1b62",
"name": "Sticky Note4",
"type": "n8n-nodes-base.stickyNote",
"position": [
-256,
-912
],
"parameters": {
"color": 2,
"width": 768,
"height": 1040,
"content": "This workflow streamlines your lead management process by automatically capturing form submissions from **Jotform**, updating **Attio CRM**, and notifying your **team (sales team for example) via Slack** \u2014 all without manual work.\n\n## How it works\n### Receive Lead:\n- A new submission is captured from Jotform (name, email, message).\n\n### Prepare CRM:\n- Checks if the `Pending` and `Urgent` deal stages exist in Attio CRM and creates them if they don\u2019t exist (refer to **Step 1**).\n- Checks if the `Message` column exists in Attio CRM and creates it if it doesn't exist (refer to **Step 2**).\n\n### Lead Handling (refer to Step 3):\n- If the lead **doesn't exist** in Attio CRM, the contact is created, a new deal is added to the `Pending` stage, and a Slack notification is sent.\n- If the lead **exists but has no deal**, a new deal is added to `Pending`, and Slack is notified.\n- If the **lead exists with a deal**, the deal is moved to the `Urgent` stage, and Slack is notified.\n\n### Slack Notification:\n- Your team (sales team for example) receives an instant Slack message whenever a new or existing lead is processed, so they can act fast (this is the last node in **Step 3** which has this title: `Send slack message`).\n\n## [Video: Demo video showing the whole workflow in action](https://www.youtube.com/watch?v=uccGQWvLhkA)\n@[youtube](uccGQWvLhkA)"
},
"typeVersion": 1
}
],
"active": false,
"settings": {
"executionOrder": "v1"
},
"versionId": "e914c08f-39d7-433e-a24b-84add6bb8f5d",
"connections": {
"Switch": {
"main": [
[
{
"node": "Update the deal",
"type": "main",
"index": 0
}
],
[
{
"node": "Create a new deal",
"type": "main",
"index": 0
}
]
]
},
"Edit Fields": {
"main": [
[
{
"node": "If pending status does not exist",
"type": "main",
"index": 0
},
{
"node": "If urgent status does not exist",
"type": "main",
"index": 0
},
{
"node": "If message column does not exist",
"type": "main",
"index": 0
},
{
"node": "If deals id does not exist",
"type": "main",
"index": 0
},
{
"node": "If people id does not exist",
"type": "main",
"index": 0
},
{
"node": "Get customer by email",
"type": "main",
"index": 0
}
]
]
},
"Update the deal": {
"main": [
[
{
"node": "Send slack message",
"type": "main",
"index": 0
}
]
]
},
"Get the deals id": {
"main": [
[
{
"node": "Add pending status to CRM",
"type": "main",
"index": 0
}
]
]
},
"Create a new deal": {
"main": [
[
{
"node": "Send slack message",
"type": "main",
"index": 0
}
]
]
},
"Get the deals id1": {
"main": [
[
{
"node": "Add urgent status to CRM",
"type": "main",
"index": 0
}
]
]
},
"Get the people id": {
"main": [
[
{
"node": "Add message column to CRM",
"type": "main",
"index": 0
}
]
]
},
"Get customer by email": {
"main": [
[
{
"node": "Prepare customer data",
"type": "main",
"index": 0
}
]
]
},
"Prepare customer data": {
"main": [
[
{
"node": "Check if the customer is in the CRM",
"type": "main",
"index": 0
}
]
]
},
"Get the deals id (CRM)": {
"main": [
[
{
"node": "Add deals id to DB",
"type": "main",
"index": 0
}
]
]
},
"Add urgent status to DB": {
"main": [
[]
]
},
"Get the people id (CRM)": {
"main": [
[
{
"node": "Add people id to DB",
"type": "main",
"index": 0
}
]
]
},
"Add message column to DB": {
"main": [
[]
]
},
"Add pending status to DB": {
"main": [
[]
]
},
"Add urgent status to CRM": {
"main": [
[
{
"node": "Add urgent status to DB",
"type": "main",
"index": 0
}
]
]
},
"Receive form submissions": {
"main": [
[
{
"node": "Edit Fields",
"type": "main",
"index": 0
}
]
]
},
"Add message column to CRM": {
"main": [
[
{
"node": "Add message column to DB",
"type": "main",
"index": 0
}
]
]
},
"Add pending status to CRM": {
"main": [
[
{
"node": "Add pending status to DB",
"type": "main",
"index": 0
}
]
]
},
"If deals id does not exist": {
"main": [
[
{
"node": "Get the deals id (CRM)",
"type": "main",
"index": 0
}
]
]
},
"Add the customer to the CRM": {
"main": [
[
{
"node": "Create a new deal",
"type": "main",
"index": 0
}
]
]
},
"If people id does not exist": {
"main": [
[
{
"node": "Get the people id (CRM)",
"type": "main",
"index": 0
}
]
]
},
"If urgent status does not exist": {
"main": [
[
{
"node": "Get the deals id1",
"type": "main",
"index": 0
}
]
]
},
"If message column does not exist": {
"main": [
[
{
"node": "Get the people id",
"type": "main",
"index": 0
}
]
]
},
"If pending status does not exist": {
"main": [
[
{
"node": "Get the deals id",
"type": "main",
"index": 0
}
]
]
},
"Check if the customer is in the CRM": {
"main": [
[
{
"node": "Switch",
"type": "main",
"index": 0
}
],
[
{
"node": "Add the customer to the CRM",
"type": "main",
"index": 0
}
]
]
}
}
}
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.
httpBearerAuth
For the full experience including quality scoring and batch install features for each workflow upgrade to Pro
About this workflow
This workflow streamlines your lead management process by automatically capturing form submissions from Jotform, updating Attio CRM, and notifying your team (sales team for example) via Slack — all without manual work. Receive Lead: A new submission is captured from Jotform…
Source: https://n8n.io/workflows/9515/ — 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.
HR teams, IT Operations, and System Administrators managing employee onboarding at scale. It’s perfect if you use Odoo 18 to trigger account requests and need Redmine + GitLab accounts created instant
N8N Complete Final. Uses telegramTrigger, dataTable, telegram, mqtt. Event-driven trigger; 58 nodes.
TextMain. Uses telegramTrigger, stopAndError, telegram, httpRequest. Event-driven trigger; 56 nodes.
This workflow is a complete, production-ready solution for recovering abandoned carts in Shopify stores using a multi-channel, multi-touch approach. It automates personalized follow-ups via Email, SMS
qualiopi. Uses airtable, telegram, emailSend, httpRequest. Webhook trigger; 51 nodes.