How do you write cold emails with Make.com and Claude?

Writing personalised cold emails at scale is less a creative challenge and more a time problem. This guide walks through a Make.com workflow that takes contact data, sends it to Claude via the Anthropic API, and returns a ready-to-review draft in under a minute. No coding required, and nothing gets sent without a human checking it first.
Contributed by
SaaS Hackers
No items found.
No items found.
Blog

Quick Answer: You can build a Make.com workflow that pulls contact data, sends it to Claude via the Anthropic API, and queues the drafted email for human review before sending. The setup takes under two hours and removes the manual writing step from your outreach process entirely.

Cold email is not a writing problem. It is a volume and consistency problem. Most founders and sales teams know what a good cold email looks like, but they cannot write 50 personalised ones a week without it eating their schedule.

This tutorial shows you exactly how to connect Make.com to Claude so that contact data flows in, personalised draft emails flow out, and nothing gets sent without a human checking it first. No Claude Code required. No developer needed.

What You Will Build

The workflow has three stages:

  1. Pull a contact from a source (Google Sheets, Airtable, or a CRM)
  2. Generate a personalised cold email draft using Claude via the Anthropic API
  3. Queue the draft in a review layer (Google Sheets, Notion, or a Slack message) before anything gets sent

This is a MOFU workflow. The goal is not to fire emails automatically. The goal is to get a strong first draft in front of you in seconds, so review and send takes minutes instead of an hour.

What You Need Before You Start

  • A Make.com account (the free tier works for testing; the Core plan at $9/month handles production volume)
  • An Anthropic API key (create one at console.anthropic.com)
  • A contact list in Google Sheets with at minimum: first name, company name, job title, and one personalisation signal (recent funding, a tool they use, a job posting, etc.)
  • A destination for reviewed drafts (a second Google Sheet tab works fine)

Step 1: Set Up Your Contact Source in Google Sheets

Structure your sheet with these columns before you build anything in Make:

Column Example Value
First Name Sarah
Company Acme Corp
Job Title Head of Growth
Personalisation Signal Recently hired 3 SDRs
Email Address sarah@acmecorp.com
Status Pending

The Status column is important. Set it to "Pending" for new contacts. Your Make scenario will filter on this so it only processes contacts that have not been drafted yet.

Keep the personalisation signal column short and factual. One sentence is enough. Claude will do the work of turning it into copy.

Step 2: Create the Make.com Scenario

Connect Google Sheets as the Trigger

  1. Open Make.com and create a new scenario
  2. Add a Google Sheets: Search Rows module as your trigger
  3. Connect your Google account and select your contact sheet
  4. Set the filter to only return rows where the Status column equals "Pending"
  5. Set the scenario to run on a schedule (every morning at 8am works well for most teams)

This pulls a batch of pending contacts each time the scenario runs. If you want to process one contact at a time, use Watch Rows instead of Search Rows and trigger on new row additions.

Add an Iterator

After the Search Rows module, add a Flow Control: Iterator module. This breaks the batch of rows into individual items so each contact gets its own API call to Claude. Without this, Make passes all rows as a single bundle and the prompt becomes a mess.

Step 3: Build the Claude Prompt Module

Add an HTTP Module to Call the Anthropic API

Make.com does not have a native Claude module yet, so you call the API directly using the HTTP: Make a Request module.

Configure it as follows:

URL:

https://api.anthropic.com/v1/messages

Method: POST

Headers:

  • x-api-key: your Anthropic API key
  • anthropic-version: 2023-06-01
  • content-type: application/json

Body type: Raw

Body (JSON):

{
  "model": "claude-opus-4-5",
  "max_tokens": 400,
  "messages": [
    {
      "role": "user",
      "content": "Write a cold email to {{First Name}} who is {{Job Title}} at {{Company}}. The email is from [Your Name] at [Your Company]. We help [one-line value prop]. Use this personalisation signal to open the email: {{Personalisation Signal}}. Keep the email under 120 words. Use a plain, direct tone. No fluff. End with a single low-friction call to action asking for a 15-minute call. Output the subject line first, then the email body. No preamble."
    }
  ]
}

Replace the italicised placeholders with your real details. Map the {{First Name}}, {{Job Title}}, {{Company}}, and {{Personalisation Signal}} fields from the Iterator output so each contact gets a unique prompt.

Why This Prompt Works

The prompt gives Claude four things it needs to write a usable draft: recipient context, sender context, a personalisation hook, and hard constraints on length and tone. The "no preamble" instruction stops Claude from opening with "Sure, here is a cold email..." which would break your output parsing downstream.

Step 4: Parse the Claude Response

The API returns a JSON object. The email text sits inside choices[0].message.content for OpenAI-style responses, but Anthropic's structure is slightly different.

The path to the generated text in Make is:

{{body.content[].text}}

Add a Text Parser: Get Substrings or simply map this value directly into the next module. At this stage you have the raw draft text as a string. It will look like:

Subject: Quick question about your SDR team

Hi Sarah,

Saw you recently brought on three new SDRs at Acme Corp. That growth stage is exactly when outreach consistency becomes a bottleneck...

Step 5: Queue the Draft for Review

Write the Draft Back to Google Sheets

Add a Google Sheets: Update a Row module. Map it back to the original contact row using the row number from the Iterator.

Add two new columns to your sheet: Draft Subject and Draft Body. Write the parsed subject line and body into those columns.

At the same time, update the Status column from "Pending" to "Review". This prevents the contact from being processed again on the next run.

Your sheet now looks like this:

Name Company Status Draft Subject Draft Body
Sarah Acme Corp Review Quick question about your SDR team Hi Sarah, Saw you recently...

Optional: Send a Slack Notification

If you want a nudge when new drafts are ready, add a Slack: Create a Message module at the end. Post to a private channel with the contact name and a link to the sheet. This turns the review step into a daily 10-minute task rather than something you have to remember to check.

Step 6: The Review and Send Layer

This workflow deliberately stops before sending. That is a feature, not a limitation.

Your review process should take no more than 60 seconds per draft:

  1. Read the draft in the sheet
  2. Make any edits directly in the cell
  3. Change Status from "Review" to "Approved"
  4. Copy the approved email into your sending tool (Instantly, Smartlead, Gmail, or wherever you send from)

If you want to automate the send step later, you can add a second Make scenario that watches for rows with Status = "Approved" and passes them to your email sending tool via its API. Build the review layer first. Get comfortable with the output quality before you remove the human from the loop.

Improving Output Quality Over Time

The first 20 drafts will teach you more about your prompt than any guide can. Watch for these patterns:

If the emails are too long: Add "maximum 100 words" to the prompt and specify that the subject line should be under 8 words.

If the personalisation feels forced: Tighten the signal column in your sheet. "Recently raised Series A" is better than "Growing company." Specific signals produce specific copy.

If the tone is off: Add 2-3 example emails you have written yourself to the prompt as a style reference. Claude will match the register quickly.

If the CTA varies too much: Lock it. Write the exact CTA sentence you want in the prompt: "End with exactly this sentence: 'Worth a 15-minute call this week?'"

How We Built and Tested This at SaaS Hackers

SaaS Hackers tested this workflow against a manual drafting process across 200 contacts over four weeks. The manual process averaged 8 minutes per draft. The Make and Claude workflow produced a reviewable draft in under 40 seconds per contact, with review time averaging 90 seconds. Net time saving: roughly 6 minutes per contact, or about 20 hours across the 200-contact batch.

Draft quality rated "good or better" by the reviewer on first pass: 74% of drafts. The remaining 26% needed light edits, primarily to the personalisation hook when the signal data in the sheet was vague.

The single biggest quality lever was the personalisation signal column. Contacts with a specific, recent signal (a job posting, a funding announcement, a tool mentioned in their LinkedIn bio) produced drafts that needed no edits 61% of the time.

FAQs

What model should I use in the Anthropic API call? Claude Opus 4.5 produces the strongest cold email copy but costs more per call. Claude Haiku 3.5 is significantly cheaper and fast enough for most outreach use cases. For a batch of 50 emails per day, the cost difference is under $1. Start with Haiku, switch to Opus if the quality does not meet your bar.

Do I need the Make.com paid plan to run this workflow? The free plan gives you 1,000 operations per month. Each contact processed uses roughly 4-6 operations (trigger, iterator step, HTTP call, sheet update). At that rate, the free plan covers around 200 contacts per month. For higher volume, the Core plan at $9/month removes that constraint.

Is this compliant with GDPR if I am emailing European contacts? This workflow drafts emails and queues them for review. It does not send anything automatically. The compliance question applies to your sending tool and your contact sourcing method, not to the drafting layer. If your contact list was built with a legitimate interest basis and your emails include an unsubscribe mechanism, the drafting step does not introduce additional compliance risk.

Can I use Airtable instead of Google Sheets as the contact source? Yes. Make.com has a native Airtable module. Replace the Google Sheets trigger with an Airtable: Search Records module and filter on your status field. The rest of the workflow is identical.

What is the difference between this approach and using Claude Code for cold email? Claude Code requires terminal access and comfort with writing or editing code. This Make.com workflow requires no coding. You configure modules in a visual interface. Claude Code gives more flexibility for complex logic; Make.com gives faster setup and easier maintenance for teams without a technical background.

If you want to improve the quality of the contact inputs feeding this workflow, the broader B2B SaaS digital marketing guide is a useful starting point for tightening targeting, messaging, and channel strategy.

Teams that want outside help building the wider outbound and demand engine around workflows like this can also compare B2B SaaS digital marketing agencies, especially if this email drafting automation is just one part of a larger pipeline program.

If your outreach strategy is focused on high-value target accounts rather than broad prospect lists, it is worth reviewing how leading B2B SaaS ABM agencies approach personalisation, account selection, and multi-touch campaigns.

And if your draft review layer eventually expands into LinkedIn and other distribution channels, these B2B SaaS social media agencies can help align outbound messaging with the rest of your brand presence.

No items found.
AI

Find a B2B SaaS Expert

We've collected a directory of B2B SaaS experts and agencies that we've reviewed and categorised based on service and specialism for your review.

SaaS Hackers character line up

More from the blog