What this workflow does
- Weekdays 7am starts the run, and Read prospects loads the Prospects tab.
- Pick batch takes up to 25 rows whose status is blank or “new”, and cleans the domain from the domain column or the email address.
- Fetch homepage downloads each company’s homepage. Failed fetches continue with no snippets.
- Build opener request strips markup, splits the page into numbered snippets of 40 to 400 characters, and asks Claude for an opener, a bridge sentence, the snippet ID it used and the exact words it relied on. The snippet ID is an enum, so Claude can only cite a snippet that exists, or “none”.
- Claude: write opener returns that JSON through structured outputs.
- Check sources and style confirms the quoted words really appear in the cited snippet, keeps the opener under 32 words and rejects banned phrases such as “I came across”. Anything that fails, including refusals and API errors, gets a reviewed fallback opener chosen by job title.
- Append to review tab writes the opener, bridge, source URL, source text, status and reason for a rep to approve or edit. Mark prospect drafted updates the prospect’s status so it is not picked again.
- Tell reps the batch is ready posts one Slack message with the count and how many used the fallback.
Before you import
- A current n8n version.
- A Google Sheet with a “Prospects” tab (email, first_name, last_name, title, company, domain, status) and a “Review” tab with the headers in the review node.
- An Anthropic API key and a Slack bot for the sales channel.
- A sequencing tool or CRM sequence that will actually send the emails, with custom fields for the opener and bridge.
Setup
- Import the JSON file and connect the Google Sheets, Anthropic and Slack credentials.
- Replace
REPLACE_WITH_SHEET_IDin the three Google Sheets nodes. - In Build opener request, replace
REPLACE_WITH_ONE_SENTENCE_OFFERand swap the two example openers for ones your best rep wrote. - In Check sources and style, edit the fallback openers and the banned phrase list.
- Replace
REPLACE_WITH_SALES_CHANNEL.
Test it
Add five prospects at companies with informative homepages and one with a parked domain. Run the workflow manually. You should see five review rows with a source URL and quoted source text you can check in seconds, and the parked domain with fallback_needs_review and no_usable_source. Their status in the Prospects tab should now read “drafted”. Run again and confirm nobody is picked twice.
Make it production-ready
- Verify addresses first. Add an email verification API call after Pick batch and drop invalid and role addresses before spending model calls.
- Better sources. Fetch a news, careers or case study page as well, and keep its date so the validator can reject anything older than 12 months.
- Deliverability and CAN-SPAM. Send through authenticated domains with SPF, DKIM and DMARC, keep daily volume per mailbox modest, include a working opt-out and a valid postal address, and honor opt-outs promptly. This is general information, not legal advice.
- Review rates. Track accept, edit and reject per rep in the
rep_decisioncolumn and move to sampled review only when rejects stay low. - Error workflow and limits. Set an error workflow and keep batches small enough for your Anthropic rate limits.
- Model choice.
claude-haiku-5-5is a cheaper option for large lists.
Read the full guide, how to personalize sales emails with AI at scale, or talk to Lumeor about connecting this to your sequencing tool.