AutomationFlowsAI & RAG › Route Law Firm Client Intake with Anthropic Claude, Gmail and Google Sheets

Route Law Firm Client Intake with Anthropic Claude, Gmail and Google Sheets

ByMilos Vranes @zospirlo21 on n8n.io

This workflow hosts an n8n intake form, sends submissions to Anthropic Claude for practice-area classification and qualification, then routes results to Gmail and Google Sheets before returning a confirmation message to the submitter. Receives a client intake submission through…

Event trigger★★★★☆ complexity14 nodesForm TriggerHTTP RequestGmailGoogle SheetsForm
AI & RAG Trigger: Event Nodes: 14 Complexity: ★★★★☆ Added:

This workflow corresponds to n8n.io template #16275 — we link there as the canonical source.

This workflow follows the Form → Form Trigger 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 →

Download .json
{
  "meta": {
    "templateCredsSetupCompleted": false
  },
  "name": "AI Law Firm Client Intake Router with Claude",
  "tags": [],
  "nodes": [
    {
      "id": "b1c2d3e4-0008-4000-8000-000000000001",
      "name": "Sticky Note",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -368,
        48
      ],
      "parameters": {
        "width": 480,
        "height": 896,
        "content": "## AI Law Firm Client Intake Router with Claude\n\n### How it works\n\nThis workflow serves a hosted client intake form, normalizes the prospective client's answers, and sends them to Claude to classify the practice area, judge urgency and statute-of-limitations risk, flag a possible conflict of interest, and decide whether the matter qualifies. Qualified intakes are logged to a Google Sheet and an alert is dispatched to the intake team, while declined or out-of-scope inquiries are logged separately for review. Every submitter receives a neutral confirmation page.\n\n### Setup steps\n\n- Open the Receive Intake Submission node and adjust the form title, description, and fields to match your firm's practice areas.\n- Configure an HTTP Header Auth credential for Anthropic with header name x-api-key and value sk-ant-... and attach it to the Analyze Intake node.\n- Connect Gmail credentials and set the intake-team recipient on the Dispatch Intake Alert node.\n- Connect Google Sheets credentials and create a spreadsheet with two tabs, then replace the placeholder sheet ID in both append nodes.\n- Review the qualification, urgency, and conflict rules in the Analyze Intake prompt and tune them to your firm.\n- Activate the workflow and share the production form URL on your website or intake links.\n\n### Customization\n\nEdit the form fields and the Claude rubric to fit one practice area or many, change the qualification threshold, swap Gmail for Slack or Microsoft Teams, route different practice areas to different attorney inboxes, or push qualified intakes into a case-management system in parallel with the Google Sheets log."
      },
      "typeVersion": 1
    },
    {
      "id": "b1c2d3e4-0008-4000-8000-000000000002",
      "name": "Sticky Note1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        192,
        144
      ],
      "parameters": {
        "color": 7,
        "width": 416,
        "height": 336,
        "content": "## Receive and normalize intake\n\nServes a hosted intake form and standardizes the prospective client's contact details, matter type, incident date, and description for downstream processing."
      },
      "typeVersion": 1
    },
    {
      "id": "b1c2d3e4-0008-4000-8000-000000000003",
      "name": "Sticky Note2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        640,
        160
      ],
      "parameters": {
        "color": 7,
        "width": 416,
        "height": 320,
        "content": "## Classify and parse matter\n\nSends the normalized intake to Claude to determine practice area, urgency, statute-of-limitations risk, conflict flag, and qualification, then parses the JSON response and merges it back into the intake data."
      },
      "typeVersion": 1
    },
    {
      "id": "b1c2d3e4-0008-4000-8000-000000000004",
      "name": "Sticky Note3",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1104,
        48
      ],
      "parameters": {
        "color": 7,
        "width": 640,
        "height": 576,
        "content": "## Route qualified intakes\n\nEvaluates whether the matter qualifies, then routes the result: alerting the intake team and logging qualified matters, or logging declined and out-of-scope inquiries to a separate review tab."
      },
      "typeVersion": 1
    },
    {
      "id": "b1c2d3e4-0008-4000-8000-000000000005",
      "name": "Sticky Note4",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1776,
        144
      ],
      "parameters": {
        "color": 7,
        "width": 240,
        "height": 336,
        "content": "## Confirm to submitter\n\nReturns a neutral confirmation page to the prospective client after the routed handling path completes, with a disclaimer that no attorney-client relationship has been formed."
      },
      "typeVersion": 1
    },
    {
      "id": "b1c2d3e4-0008-4000-8000-000000000006",
      "name": "Receive Intake Submission",
      "type": "n8n-nodes-base.formTrigger",
      "position": [
        240,
        320
      ],
      "parameters": {
        "options": {},
        "formTitle": "Request a Consultation",
        "formFields": {
          "values": [
            {
              "fieldType": "text",
              "fieldLabel": "Full Name",
              "requiredField": true
            },
            {
              "fieldType": "email",
              "fieldLabel": "Email",
              "requiredField": true
            },
            {
              "fieldType": "text",
              "fieldLabel": "Phone"
            },
            {
              "fieldType": "dropdown",
              "fieldLabel": "Legal Matter Type",
              "fieldOptions": {
                "values": [
                  {
                    "option": "Personal Injury"
                  },
                  {
                    "option": "Family Law"
                  },
                  {
                    "option": "Criminal Defense"
                  },
                  {
                    "option": "Estate Planning"
                  },
                  {
                    "option": "Business or Contract"
                  },
                  {
                    "option": "Employment"
                  },
                  {
                    "option": "Real Estate"
                  },
                  {
                    "option": "Other"
                  }
                ]
              },
              "requiredField": true
            },
            {
              "fieldType": "date",
              "fieldLabel": "Approximate Date of Incident"
            },
            {
              "fieldType": "textarea",
              "fieldLabel": "Describe Your Situation",
              "requiredField": true
            },
            {
              "fieldType": "dropdown",
              "fieldLabel": "Have You Already Hired an Attorney for This Matter?",
              "fieldOptions": {
                "values": [
                  {
                    "option": "No"
                  },
                  {
                    "option": "Yes"
                  }
                ]
              }
            },
            {
              "fieldType": "dropdown",
              "fieldLabel": "Preferred Contact Method",
              "fieldOptions": {
                "values": [
                  {
                    "option": "Email"
                  },
                  {
                    "option": "Phone"
                  }
                ]
              }
            }
          ]
        },
        "responseMode": "responseNode",
        "formDescription": "Tell us about your legal matter and our intake team will review it. Submitting this form does not create an attorney-client relationship."
      },
      "typeVersion": 2.2
    },
    {
      "id": "b1c2d3e4-0008-4000-8000-000000000007",
      "name": "Set Intake Fields",
      "type": "n8n-nodes-base.set",
      "position": [
        460,
        320
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "i1-name",
              "name": "fullName",
              "type": "string",
              "value": "={{ ($json['Full Name'] || '').toString().trim() }}"
            },
            {
              "id": "i2-email",
              "name": "email",
              "type": "string",
              "value": "={{ ($json['Email'] || '').toString().trim().toLowerCase() }}"
            },
            {
              "id": "i3-phone",
              "name": "phone",
              "type": "string",
              "value": "={{ ($json['Phone'] || '').toString().trim() }}"
            },
            {
              "id": "i4-matter",
              "name": "matterType",
              "type": "string",
              "value": "={{ ($json['Legal Matter Type'] || '').toString().trim() }}"
            },
            {
              "id": "i5-incident",
              "name": "incidentDate",
              "type": "string",
              "value": "={{ ($json['Approximate Date of Incident'] || '').toString().trim() }}"
            },
            {
              "id": "i6-situation",
              "name": "situation",
              "type": "string",
              "value": "={{ ($json['Describe Your Situation'] || '').toString().trim() }}"
            },
            {
              "id": "i7-prior",
              "name": "priorAttorney",
              "type": "string",
              "value": "={{ ($json['Have You Already Hired an Attorney for This Matter?'] || 'No').toString().trim() }}"
            },
            {
              "id": "i8-contact",
              "name": "preferredContact",
              "type": "string",
              "value": "={{ ($json['Preferred Contact Method'] || 'Email').toString().trim() }}"
            },
            {
              "id": "i9-timestamp",
              "name": "timestamp",
              "type": "string",
              "value": "={{ $now.toISO() }}"
            }
          ]
        }
      },
      "typeVersion": 3.4
    },
    {
      "id": "b1c2d3e4-0008-4000-8000-000000000008",
      "name": "Analyze Intake with Claude",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        680,
        320
      ],
      "parameters": {
        "url": "https://api.anthropic.com/v1/messages",
        "method": "POST",
        "options": {},
        "jsonBody": "={\n  \"model\": \"claude-sonnet-4-6\",\n  \"max_tokens\": 1024,\n  \"messages\": [\n    {\n      \"role\": \"user\",\n      \"content\": \"You are an intake specialist at a multi-practice law firm. Analyze the prospective client's intake submission and reply with valid JSON only, no markdown fences, no commentary. Use this exact schema:\\n\\n{\\n  \\\"practice_area\\\": \\\"personal_injury|family|criminal|estate|business|employment|real_estate|other\\\",\\n  \\\"case_summary\\\": \\\"<one to two sentence neutral summary>\\\",\\n  \\\"qualified\\\": <true or false>,\\n  \\\"urgency\\\": \\\"high|medium|low\\\",\\n  \\\"time_sensitivity_note\\\": \\\"<short note on any deadline or statute of limitations risk, empty string if none>\\\",\\n  \\\"conflict_check_flag\\\": <true or false>,\\n  \\\"opposing_party\\\": \\\"<name of any opposing person or business mentioned, empty string otherwise>\\\",\\n  \\\"recommended_team\\\": \\\"<which practice group should handle this>\\\",\\n  \\\"decline_reason\\\": \\\"<short reason if qualified is false, empty string otherwise>\\\",\\n  \\\"missing_info\\\": [\\\"<key fact still needed>\\\"]\\n}\\n\\nQualification rules:\\n- qualified is true when the matter plausibly fits a common legal practice area, there is enough detail to evaluate, and it is not spam, a sales pitch, or an unrelated request.\\n- qualified is false for spam, solicitations, vendor pitches, or matters where the person states they already have an attorney for this matter and are not seeking a second opinion.\\nUrgency rules:\\n- high: imminent deadline, statute of limitations risk, upcoming court or arrest date, or a safety issue.\\n- medium: standard matter with no immediate deadline.\\n- low: general question, informational, or low stakes.\\nConflict rules: set conflict_check_flag to true whenever an opposing person, business, or organization is named so the firm can run a conflict check.\\n\\nINTAKE SUBMISSION:\\nMatter type selected: \" + {{ JSON.stringify($json.matterType) }} + \"\\nApproximate date of incident: \" + {{ JSON.stringify($json.incidentDate) }} + \"\\nAlready hired an attorney for this matter: \" + {{ JSON.stringify($json.priorAttorney) }} + \"\\nName: \" + {{ JSON.stringify($json.fullName) }} + \"\\nDescription: \" + {{ JSON.stringify($json.situation) }}\n    }\n  ]\n}",
        "sendBody": true,
        "sendHeaders": true,
        "specifyBody": "json",
        "authentication": "genericCredentialType",
        "genericAuthType": "httpHeaderAuth",
        "headerParameters": {
          "parameters": [
            {
              "name": "anthropic-version",
              "value": "2023-06-01"
            },
            {
              "name": "content-type",
              "value": "application/json"
            }
          ]
        }
      },
      "typeVersion": 4.2
    },
    {
      "id": "b1c2d3e4-0008-4000-8000-000000000009",
      "name": "Parse Intake Classification",
      "type": "n8n-nodes-base.code",
      "position": [
        900,
        320
      ],
      "parameters": {
        "jsCode": "// Parse the Claude response and merge it with the original intake fields\nconst intake = $('Set Intake Fields').item.json;\nconst raw = $json.content?.[0]?.text || '{}';\n\nlet parsed = {\n  practice_area: 'other',\n  case_summary: 'Failed to parse AI response',\n  qualified: false,\n  urgency: 'low',\n  time_sensitivity_note: '',\n  conflict_check_flag: false,\n  opposing_party: '',\n  recommended_team: 'Intake review',\n  decline_reason: 'AI parsing failed; route to manual review',\n  missing_info: []\n};\n\ntry {\n  const cleaned = raw.replace(/^```(?:json)?\\s*/i, '').replace(/\\s*```\\s*$/i, '').trim();\n  parsed = JSON.parse(cleaned);\n} catch (e) {\n  parsed.case_summary = 'AI returned malformed JSON: ' + raw.slice(0, 200);\n}\n\nconst isQualified = parsed.qualified === true;\nconst missingInfo = Array.isArray(parsed.missing_info) ? parsed.missing_info.join(' | ') : '';\n\nreturn [{\n  json: {\n    ...intake,\n    practice_area: parsed.practice_area || 'other',\n    case_summary: parsed.case_summary || '',\n    qualified: isQualified,\n    isQualified,\n    urgency: parsed.urgency || 'low',\n    time_sensitivity_note: parsed.time_sensitivity_note || '',\n    conflict_check_flag: parsed.conflict_check_flag === true,\n    opposing_party: parsed.opposing_party || '',\n    recommended_team: parsed.recommended_team || 'Intake review',\n    decline_reason: parsed.decline_reason || '',\n    missing_info: missingInfo\n  }\n}];"
      },
      "typeVersion": 2
    },
    {
      "id": "b1c2d3e4-0008-4000-8000-000000000010",
      "name": "Evaluate Case Fit",
      "type": "n8n-nodes-base.if",
      "position": [
        1152,
        320
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "options": {
            "version": 2,
            "leftValue": "",
            "caseSensitive": true,
            "typeValidation": "strict"
          },
          "combinator": "and",
          "conditions": [
            {
              "id": "cond-qualified",
              "operator": {
                "type": "boolean",
                "operation": "true",
                "singleValue": true
              },
              "leftValue": "={{ $json.isQualified }}",
              "rightValue": true
            }
          ]
        }
      },
      "typeVersion": 2.2
    },
    {
      "id": "b1c2d3e4-0008-4000-8000-000000000011",
      "name": "Dispatch Intake Alert",
      "type": "n8n-nodes-base.gmail",
      "position": [
        1376,
        208
      ],
      "parameters": {
        "sendTo": "you@example.com",
        "message": "=<h2>New qualified intake</h2>\n<p><b>Practice area:</b> {{ $json.practice_area }}<br>\n<b>Urgency:</b> {{ $json.urgency }}<br>\n<b>Recommended team:</b> {{ $json.recommended_team }}</p>\n{{ $json.time_sensitivity_note ? '<p style=\"color:#b00;\"><b>Time sensitivity:</b> ' + $json.time_sensitivity_note + '</p>' : '' }}\n{{ $json.conflict_check_flag ? '<p style=\"color:#b00;\"><b>Run conflict check.</b> Opposing party: ' + ($json.opposing_party || '(not named)') + '</p>' : '' }}\n<p><b>{{ $json.fullName }}</b><br>\n{{ $json.email }}{{ $json.phone ? ' &middot; ' + $json.phone : '' }}<br>\n<b>Preferred contact:</b> {{ $json.preferredContact }}<br>\n<b>Matter type selected:</b> {{ $json.matterType }}<br>\n<b>Approx. date of incident:</b> {{ $json.incidentDate || '(not provided)' }}</p>\n<p><b>Summary:</b> {{ $json.case_summary }}</p>\n<p><b>Their description:</b><br>\n<blockquote>{{ $json.situation }}</blockquote></p>\n{{ $json.missing_info ? '<p><b>Still needed:</b> ' + $json.missing_info + '</p>' : '' }}",
        "options": {},
        "subject": "=New qualified intake: {{ $json.practice_area }} ({{ $json.urgency }}) - {{ $json.fullName }}",
        "emailType": "html"
      },
      "typeVersion": 2.1
    },
    {
      "id": "b1c2d3e4-0008-4000-8000-000000000012",
      "name": "Append to Qualified Intakes",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        1600,
        208
      ],
      "parameters": {
        "columns": {
          "value": {
            "email": "={{ $json.email }}",
            "phone": "={{ $json.phone }}",
            "urgency": "={{ $json.urgency }}",
            "fullName": "={{ $json.fullName }}",
            "situation": "={{ $json.situation }}",
            "timestamp": "={{ $json.timestamp }}",
            "matterType": "={{ $json.matterType }}",
            "case_summary": "={{ $json.case_summary }}",
            "missing_info": "={{ $json.missing_info }}",
            "practice_area": "={{ $json.practice_area }}",
            "opposing_party": "={{ $json.opposing_party }}",
            "preferredContact": "={{ $json.preferredContact }}",
            "recommended_team": "={{ $json.recommended_team }}",
            "conflict_check_flag": "={{ $json.conflict_check_flag ? 'yes' : 'no' }}",
            "time_sensitivity_note": "={{ $json.time_sensitivity_note }}"
          },
          "schema": [
            {
              "id": "timestamp",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "timestamp",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "fullName",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "fullName",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "email",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "email",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "phone",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "phone",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "matterType",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "matterType",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "practice_area",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "practice_area",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "urgency",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "urgency",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "time_sensitivity_note",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "time_sensitivity_note",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "conflict_check_flag",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "conflict_check_flag",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "opposing_party",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "opposing_party",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "recommended_team",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "recommended_team",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "case_summary",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "case_summary",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "missing_info",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "missing_info",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "preferredContact",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "preferredContact",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "situation",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "situation",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            }
          ],
          "mappingMode": "defineBelow",
          "matchingColumns": []
        },
        "options": {},
        "operation": "append",
        "sheetName": {
          "__rl": true,
          "mode": "name",
          "value": "Qualified Intakes"
        },
        "documentId": {
          "__rl": true,
          "mode": "id",
          "value": "REPLACE_WITH_YOUR_SHEET_ID"
        }
      },
      "typeVersion": 4.5
    },
    {
      "id": "b1c2d3e4-0008-4000-8000-000000000013",
      "name": "Append to Declined Intakes",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        1376,
        464
      ],
      "parameters": {
        "columns": {
          "value": {
            "email": "={{ $json.email }}",
            "phone": "={{ $json.phone }}",
            "fullName": "={{ $json.fullName }}",
            "situation": "={{ $json.situation }}",
            "timestamp": "={{ $json.timestamp }}",
            "matterType": "={{ $json.matterType }}",
            "case_summary": "={{ $json.case_summary }}",
            "practice_area": "={{ $json.practice_area }}",
            "decline_reason": "={{ $json.decline_reason }}"
          },
          "schema": [
            {
              "id": "timestamp",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "timestamp",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "fullName",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "fullName",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "email",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "email",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "phone",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "phone",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "matterType",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "matterType",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "practice_area",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "practice_area",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "decline_reason",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "decline_reason",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "case_summary",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "case_summary",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "situation",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "situation",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            }
          ],
          "mappingMode": "defineBelow",
          "matchingColumns": []
        },
        "options": {},
        "operation": "append",
        "sheetName": {
          "__rl": true,
          "mode": "name",
          "value": "Declined Intakes"
        },
        "documentId": {
          "__rl": true,
          "mode": "id",
          "value": "REPLACE_WITH_YOUR_SHEET_ID"
        }
      },
      "typeVersion": 4.5
    },
    {
      "id": "b1c2d3e4-0008-4000-8000-000000000014",
      "name": "Respond to Submitter",
      "type": "n8n-nodes-base.form",
      "position": [
        1824,
        320
      ],
      "parameters": {
        "options": {},
        "operation": "completion",
        "respondWith": "showText",
        "completionTitle": "Thank you, we have your request",
        "completionMessage": "Our intake team will review your matter and reach out within one business day. Submitting this form does not create an attorney-client relationship, and please do not include confidential details until we have confirmed representation."
      },
      "typeVersion": 1
    }
  ],
  "settings": {
    "executionOrder": "v1"
  },
  "connections": {
    "Evaluate Case Fit": {
      "main": [
        [
          {
            "node": "Dispatch Intake Alert",
            "type": "main",
            "index": 0
          },
          {
            "node": "Append to Qualified Intakes",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Append to Declined Intakes",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Set Intake Fields": {
      "main": [
        [
          {
            "node": "Analyze Intake with Claude",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Dispatch Intake Alert": {
      "main": [
        [
          {
            "node": "Respond to Submitter",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Receive Intake Submission": {
      "main": [
        [
          {
            "node": "Set Intake Fields",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Analyze Intake with Claude": {
      "main": [
        [
          {
            "node": "Parse Intake Classification",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Append to Declined Intakes": {
      "main": [
        [
          {
            "node": "Respond to Submitter",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Parse Intake Classification": {
      "main": [
        [
          {
            "node": "Evaluate Case Fit",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}
Pro

For the full experience including quality scoring and batch install features for each workflow upgrade to Pro

About this workflow

This workflow hosts an n8n intake form, sends submissions to Anthropic Claude for practice-area classification and qualification, then routes results to Gmail and Google Sheets before returning a confirmation message to the submitter. Receives a client intake submission through…

Source: https://n8n.io/workflows/16275/ — original creator credit. Request a take-down →

More AI & RAG workflows → · Browse all categories →

Related workflows

Workflows that share integrations, category, or trigger type with this one. All free to copy and import.

AI & RAG

This workflow is ideal for content creators, video marketers, and research professionals who need to extract actionable insights, detailed transcripts, or metadata from YouTube videos efficiently. It

HTTP Request, Google Drive, Gmail +2
AI & RAG

Legal, Procurement, and Compliance teams at mid-size companies. ESN and agencies selling AI-powered contract review as a service.

Form Trigger, HTTP Request, Form +4
AI & RAG

The competitive edge, delivered. This Customer Intelligence Engine simultaneously analyzes the web, Reddit, and X/Twitter to generate a professional, actionable executive briefing.

Reddit, N8N Nodes Serpapi, HTTP Request +4
AI & RAG

Generate three recipes using AI for quick meal options. Uses formTrigger, googleGemini, httpRequest, googleSheets. Event-driven trigger; 18 nodes.

Form Trigger, Google Gemini, HTTP Request +2
AI & RAG

This template is designed for filmmakers, content creators, social media managers, and AI developers who want to harness OpenAI's Sora 2 for creating physically accurate, cinematic videos with synchro

HTTP Request, Form Trigger, Form +1