A new row in a lead sheet is rarely just a new row. Someone has to decide whether it fits, fill in context, choose an owner and make sure a follow-up happens. The useful automation is not “send every form submission to a chat group”; it is a small, auditable path from raw submission to a clear next action.
This walkthrough uses n8n to process leads from a website or event form. It validates fields, deduplicates records, asks AI for a factual brief, assigns an owner and sends a short alert. You can start with a spreadsheet and an email or chat channel before connecting a CRM.
Write qualification rules before building nodes
Define a minimum viable sales lead in plain language: name, work email and a description are present; the email is not disposable; the same email has not been followed up in the last 30 days; and the message contains a real buying signal such as timing, budget, team size, trial or quote. Incomplete records go to needs-info, not the bin. Rules should be readable and reviewable, not an unexplained AI score.
Use a staging table with status fields
Store every raw submission first. Keep submitted_at, name, email, company, message, source, status, owner, ai_brief, next_action and a normalized-email dedupe_key. Preserve the original message: AI should add a brief, never overwrite what the person said.
Build six small stages
- Trigger: accept a webhook or a new spreadsheet row and save the raw event.
- Normalize: trim and lowercase email, standardize phone values and represent empty fields consistently.
- Validate and deduplicate: check required fields and search recent records by dedupe_key.
- Route: set qualified, needs-info or duplicate based on explicit rules.
- Summarize: call AI only for qualified or incomplete leads.
- Assign and notify: choose an owner by territory, source, industry or rotation, then update status to assigned.
The same structure works in Make. The tool changes; status values, deduplication and failure handling do not.
Constrain the AI task to extraction
Use ChatGPT or another model to organise what was said, not to invent company size, budget, price or delivery dates. Ask for structured JSON: summary under 80 words, stated_need, quoted buying_signals, missing_information, suggested_first_question and risk_flags. If a fact is absent, the model must return “unknown.” Validate the JSON before storing it; failed outputs should be marked for review, not silently inserted.
You are a B2B sales assistant. Extract only facts present in the lead message. Return valid JSON with summary, stated_need, buying_signals, missing_information, suggested_first_question and risk_flags. Do not estimate budget, company size or purchase probability. Do not write a marketing reply.
Send alerts people can act on
An alert needs the contact, source, stated need, missing detail, one suggested first question and a link to the record. Do not paste full personal data and internal risk notes into a large public chat. Apply least privilege: the owner sees the record; a group sees only the alert.
Design the unhappy paths
Retry a failed sheet or CRM write twice, then route it to a sync-failure queue. If the AI call fails, preserve the raw lead and alert a human. If messaging fails, do not create another lead. Use a submission ID or dedupe_key to prevent duplicate webhook deliveries from assigning two owners. Keep an execution ID for every run so a missing lead can be traced node by node.
Test before switching it on
- A complete, high-intent submission should become qualified and alert an owner.
- A name-only request should become needs-info, not a high-priority sales alert.
- A second submission from the same email should become duplicate and create no second assignment.
During the first week, sample five to ten runs a day. Most “AI quality” problems are actually undefined input rules. Once the path is stable, add attribution, booking links, follow-up reminders and funnel reports.