Set up the AI SDR
About 15 minutes on n8n Cloud (longer on self-hosted n8n, where you first create your own Google OAuth client). Everything you need to go from download to the first drafts, in order. Ticks are saved in this browser so you can come back later.
Before you start
- n8n (Cloud or self-hosted)
- Google account: Sheets + Gmail
- OpenAI API key
- Your offer, ICP and signature (Config)
1. Pick where it runs
n8n Cloud
- Log in to your n8n Cloud workspace.
- Workflows → Import from file.
- Pick the file(s) in
workflow/.
n8n self-hosted
- Open your n8n (Docker or npm, v1.x/2.x).
- Workflows → Import from file.
- Same files; nothing else changes.
ChatGPT or Claude
- Create a Custom GPT or Claude Project.
- Paste
gpt/INSTRUCTIONS.txt. - Upload your sheet or paste rows in.
2. Setup checklist
3. Connect your tools
| Service | Nodes that use it |
|---|---|
| Google Sheets | Get New Leads, Update Lead Row, Log Reply |
| OpenAI | Research & Write, Classify & Draft |
| Gmail | Create Gmail Draft, Get New Replies, Create Reply Draft, Label Processed |
In each node, choose Create new credential and sign in (Google uses OAuth; OpenAI takes an API key). n8n stores credentials in your instance, not with us.
What the statuses mean
| Status | Meaning | Your next step |
|---|---|---|
drafted | Prospect draft is in Gmail | Review, edit, send |
low_fit | Below your fit threshold | Skip, or lower min_fit_score |
reply_drafted | Reply draft is in the thread | Review and send |
logged_no_reply | Unsubscribe / not interested / OOO | Respect do-not-contact; follow up on the date logged |
error | See the error column | Fix, then set the lead's status back to new (Prospecting) or remove the plugstaff-processed label from the email (Reply Handler), and re-run |
Troubleshooting
| Symptom | Fix |
|---|---|
| Reply Handler misses a reply | The default `gmail_query` only picks up unread inbox emails whose subject contains "re" (replies), outside the Promotions/Social/Updates/Forums tabs. Widen it in Config, or limit it to a label if you route replies with a Gmail filter |
| Same reply processed twice | `processed_label_id` is empty or wrong, so the label isn't applied → paste the right label ID |
Guardrails
- Review every draft before sending. AI can misread a website or a reply.
- Honour opt-outs immediately: rows with next_action =
do not contactmust be removed from all future sequences. - Cold email law differs by country (GDPR/ePrivacy in the EU/UK, CAN-SPAM in the US). Email business contacts with a legitimate interest, identify yourself, offer an easy opt-out. Not legal advice.
- Lead data and replies are sent to your LLM provider. Check this fits your privacy policy.