Tailored first-touch emails for new Airtable prospects

When a new prospect lands in Airtable, send a short, personalized first-touch email through SendGrid and stamp the send back onto the row.

Agentic Task
AirtableSendGridSalesMarketingEmail AutomationLead EnrichmentNotifications & Alerts

Build me an agent workflow that sends a tailored first-touch outreach email through SendGrid every time a new prospect row lands in my Airtable outreach table.

Trigger: poll Airtable on new_record for a specific base and table that I will configure (think of it as a Cold Outreach base with a Prospects table). Each new record should fire one run of the workflow.

On each run, the agent should:

1. Use Airtable Get Record to pull the full record for the newly created row. Read at minimum the prospect's name, email, company, role/title, and any context columns the user keeps (for example: recent news, mutual connection, persona, pain point, recent funding, podcast appearance, blog post). Treat the column set as configurable, not hardcoded.

2. Skip the row (do nothing, do not send, do not update) if the email field is empty or if a Status field is already set to Sent. Also skip if there is no usable personalization hook in any of the context columns. Log why it was skipped.

3. Draft a short first-touch email (roughly 4 to 7 sentences, plain text by default) that is anchored to ONE concrete detail from the record so it does not read as generic. The subject line should also reference that detail. The voice, sign-off, and call to action should come from a tone note the user provides when configuring the workflow.

4. Send the email via SendGrid's Send Email operation from a verified sender address that the user configures. To-name should be the prospect's name. Use the user-configured from name and reply-to.

5. Capture the SendGrid message ID from the x-message-id response header (POST /mail/send returns 202 with an empty body, so the message ID only lives in that header).

6. Call Airtable Update Record on that same row to set Status = Sent, LastTouchAt = the current timestamp, and MessageId = the SendGrid x-message-id value. The exact field names should be configurable in case the user's schema uses different labels.

Also enforce a per-run send cap (default 25, user-configurable). If the cap is hit, stop sending for this run and leave the remaining rows untouched so they get picked up on the next trigger.

On any SendGrid error (400, 401, 403, 413, 429), do NOT mark the row as Sent. Instead set Status to something like Error and write the error message to an optional ErrorNote field so the user can see what went wrong in Airtable.

Make the table/base IDs, the column names, the from address, the reply-to address, the voice/tone note, and the per-run cap all easy to edit after the workflow is built.

Additional information

What does this prompt do?
  • Watches your Airtable outreach table and picks up each new prospect row as it appears.
  • Drafts a short, specific first-touch email anchored to a real detail from the row (recent news, mutual connection, role, persona) so it does not read as generic.
  • Sends the email through SendGrid from your verified sender and writes the status, send time, and message ID back to the Airtable row.
  • Skips rows with no email or that are already marked Sent, and caps the total emails per run so a bulk import never blasts your list.
What do I need to use this?
  • An Airtable base with a table of prospects, including columns for email, name, company, and at least one context field like recent news or a mutual connection.
  • A SendGrid account with a verified sender address you are allowed to send from.
  • A short voice or tone note so the agent writes emails that sound like you, not like a template.
How can I customize it?
  • Change which Airtable table or view the agent watches, and which columns count as the personalization hook.
  • Adjust the per-run send cap so a fresh import never sends more than a safe warm-up batch in one go.
  • Edit the voice, the subject line style, the call to action, or the rule that decides when a row is ready to send.

Frequently asked questions

Will the emails actually feel personal, or will they read like a mail merge?
Each email is anchored to one concrete detail from the prospect row, like a recent fundraise, a podcast they were on, or a mutual connection. If the row has no usable hook, the agent skips it instead of sending a generic note.
Can I stop it from emailing prospects who are already in flight?
Yes. The agent skips any row that is missing an email address or already marked Sent, so you can safely re-trigger it or import in bulk without double-touching anyone.
What if I drop in a huge import of new prospects at once?
There is a per-run cap on total sends. You decide the number when you set the workflow up, so a thousand-row import warms up over several runs instead of going out in one blast.
Where does the send actually come from?
From your own SendGrid account using a sender address you have already verified. The agent never sends from a shared address, and replies land in your inbox the way they always have.
Can I track which emails actually got delivered?
Yes. After every successful send, the agent writes the SendGrid message ID back to the Airtable row, alongside the status and timestamp. You can use that ID to look up delivery, opens, and clicks in SendGrid.

Stop letting fresh prospects sit untouched.

Connect Airtable and SendGrid once, and Geni reaches out the moment a new row lands, with a note that actually sounds like you.