How to Turn Inbound Mailhook Lead Emails into Monday CRM Records

Forward sales inquiries to a dedicated Spojit mailhook address, let an Agent-mode Connector node extract the prospect details, create a lead row in your Monday.com CRM board, and auto-acknowledge the prospect, all in one workflow.

What This Integration Does

Inbound leads arrive as plain email: a contact-form notification, a "we'd love a demo" reply, a referral your sales rep forwards from their own inbox. Re-keying those into your CRM by hand is slow and lossy. This workflow gives your team a single email address to forward inquiries to. The moment a message lands, Spojit reads the body, pulls out the prospect name, company, email, and a one-line summary, opens a lead row on your Monday.com board with the full email captured as an update, and sends the prospect a short acknowledgement so nobody waits in silence.

The run model is push-based. A Mailhook trigger gives you a unique address at mailhook.spojit.com; any mail to it starts a run within seconds, with no mailbox or OAuth to connect. The trigger output is available as {{ input }}. A Connector node in Agent mode with a Response Schema turns the raw text into clean fields, a monday create-item call writes the lead, a create-update call attaches the original body, and a Send Email node replies. Each message is deduplicated, so a forward that bounces around your team and lands twice never creates two Monday items. Because the trigger is asynchronous, there is no reply to the sender from the trigger itself: the acknowledgement comes from the Send Email node addressed to {{ input.replyTo }}.

Prerequisites

  • A monday connection added under Connections, with access to the board you use as your sales pipeline.
  • The Monday board ID and the column IDs you want to populate (for example an email column and a status column). Open the board and note the IDs, or run a one-off get-board call to list them.
  • Credits available for the Agent-mode extraction step, which calls the agent to read the email.
  • The prospect-facing reply address must be allowed: external recipients used by Send Email must be on your org allowlist under Settings → General → Email recipients. If acknowledgements go to arbitrary prospects, send from your own domain with the resend or smtp connector instead.
  • A short list of the addresses your team forwards from, if you want to lock the trigger down with a From allowlist.

Step 1: Add the Mailhook trigger and generate an address

Create a new workflow and open the Trigger node. Set Trigger Type to Mailhook. Optionally set an Address prefix (1 to 24 characters, default mh) such as leads, then click Generate email address. Spojit produces a unique address like leads-a1b2c3d4e5f6g7h8@mailhook.spojit.com. Copy it and point your inbound mail at it: set up a forwarding rule in your shared inbox, paste it into a contact form's notification recipient, or have reps forward referrals to it. The address fires whether it appears in To, Cc, or Bcc.

Choose Mailhook rather than the Email trigger here because YOU control where this mail is sent: you are forwarding and routing it deliberately. Use the Email trigger only when inquiries already land in a Gmail or Outlook mailbox you own and want Spojit to poll. To narrow what starts a run, set the optional From allowlist to your reps' addresses and a Subject regex if your forwards share a pattern. The trigger output is exposed as {{ input }} with fields including from, replyTo, subject, text, and html.

Step 2: Extract prospect fields with a Connector node in Agent mode

Add a Connector node, choose the json connector, and switch the node to Agent mode. Agent mode lets the agent read the free-form email and return clean values, and the Response Schema forces that output into reliable JSON so the next steps can map it. In the prompt, point the agent at the raw email body:

From the following sales inquiry email, extract the prospect's
name, their company, their email address, and a single one-line
summary of what they want. If a field is not present, return an
empty string for it.

Subject: {{ input.subject }}
From: {{ input.from }}

{{ input.text }}

Set the Response Schema to force the shape:

{
  "type": "object",
  "properties": {
    "name":    { "type": "string" },
    "company": { "type": "string" },
    "email":   { "type": "string" },
    "summary": { "type": "string" }
  },
  "required": ["name", "company", "email", "summary"]
}

Set the node's Output Variable to lead. Downstream steps then read {{ lead.name }}, {{ lead.company }}, {{ lead.email }}, and {{ lead.summary }}. If your forwarded mail is HTML-heavy, you can clean it first with a Transform node before this step (see Step 3).

Step 3: (Optional) Normalize the body with a Transform node

Forwarded mail often carries quoted history, signatures, and HTML wrappers. Add a Transform node before or after extraction to reshape data between steps: trim the body to the first message, build a tidy display string, or guard against an empty {{ lead.email }} by falling back to the parsed sender from {{ input.replyTo }}. Keep the original full text available as {{ input.text }} so nothing is lost. A clean, deduplicated body also makes the Monday update in Step 5 easier to read.

Step 4: Create the lead row with monday create-item

Add a Connector node on the monday connector in Direct mode and pick the create-item tool. Direct mode is right here because this is a single predictable write with no AI cost. Map the fields:

  • boardId: your sales pipeline board ID.
  • name: the item title, for example {{ lead.company }} - {{ lead.name }}.
  • groupId: optional, the group (such as a "New Leads" group) the row should land in.
  • columnValues: a JSON object keyed by your column IDs. For example:
{
  "email_mkabc123": { "email": "{{ lead.email }}", "text": "{{ lead.email }}" },
  "text_mkdef456": "{{ lead.summary }}",
  "status_mkghi789": { "label": "New" }
}

Replace the keys with your real column IDs from the prerequisites. Set the node's Output Variable to created so you can reference the new {{ created.id }} in the next step.

Step 5: Attach the full email as a Monday update

Add another Connector node on the monday connector in Direct mode and pick create-update. This posts the original inquiry onto the lead row so a rep sees the full context without leaving Monday. Map:

  • itemId: {{ created.id }} from Step 4.
  • body: the update text, for example:
Inbound inquiry forwarded from {{ input.from }}
Reply-to: {{ input.replyTo }}
Subject: {{ input.subject }}

Summary: {{ lead.summary }}

--- Original message ---
{{ input.text }}

Because create-update needs the item to exist, keep this node strictly after create-item on the canvas so {{ created.id }} is resolved.

Step 6: Acknowledge the prospect with a Send Email node

Add a Send Email node, which sends from Spojit's built-in mail service with no connection required. Configure:

  • Recipients: {{ input.replyTo }} (the address the prospect expects a reply at). Fall back to {{ lead.email }} if your extraction is more reliable than the header.
  • Subject: for example Thanks for reaching out, {{ lead.name }}.
  • Body: a short plain-text acknowledgement, such as confirming you received their note about {{ lead.summary }} and that a team member will follow up.
  • Reply-To: leave as the workflow owner, or set your sales inbox.
  • If sending fails: Continue anyway if you would rather still create the Monday lead than fail the whole run on a bounce.

Remember the prospect's address must be on the org allowlist, or the send is blocked. For unrestricted prospect replies, swap this node for a monday-adjacent resend or smtp send-email call from your own verified domain.

Step 7: (Optional) Notify the team in Slack

To give sales a real-time heads-up, add a Connector node on the slack connector in Direct mode with send-message. Post the new lead to a channel with a link back to the Monday item, for example a message containing {{ lead.company }}, {{ lead.summary }}, and the item id {{ created.id }}. This keeps the CRM as the system of record while the channel drives quick follow-up.

Tips

  • Ask Miraxa to scaffold this: "Build a workflow that watches a mailhook, extracts the prospect name, company, email, and a one-line summary, creates a Monday item, adds the email as an update, and replies to the prospect." Then fine-tune the column IDs and prompt in the properties panel.
  • Keep the Agent-mode prompt narrow. Asking only for four named fields with a Response Schema keeps extraction cheap and predictable, and avoids the agent wandering into unrelated tool calls.
  • Run a one-off get-board call once to capture your column IDs, then hard-code them in columnValues. Column titles can change in the UI, but IDs are stable.
  • If reps forward HTML newsletters or signatures, trim with a Transform node first so the summary reflects the actual ask, not a footer.

Common Pitfalls

  • Wrong trigger for forwarded mail. If you point a mailbox poll at forwarded leads you add latency and OAuth setup you do not need. Use Mailhook when you control where the mail is sent; use the Email trigger only for a mailbox you own.
  • Expecting the trigger to reply. The Mailhook trigger is always asynchronous and never responds to the sender. Acknowledgements must come from the Send Email node addressed to {{ input.replyTo }}.
  • Malformed columnValues. Monday expects column-typed JSON. An email column needs { "email": "...", "text": "..." }, not a bare string. Mismatched column types are the most common create-item failure.
  • Assuming you need dedup logic. Mailhook is deduplicated per message, so the same forward will not double-create a Monday item. You do not need to build your own guard for repeated deliveries of one message. Distinct emails about the same prospect will still each create a row, so de-duplicate by prospect inside Monday if needed.
  • Recipient blocked. A prospect address not on the org allowlist silently fails the Send Email step. Either allowlist your reply patterns or send from your own domain via resend/smtp.

Testing

Before routing real leads, generate the mailhook address and send yourself a realistic test inquiry from one of your allowlisted addresses. Open the run in execution history and confirm {{ input.text }} captured the body, that the Agent-mode node produced clean lead fields matching your Response Schema, and that create-item returned an id. Check the Monday board for the new row, its email and status columns, and the attached update. Finally confirm the acknowledgement arrived at the reply address. Once a single forward flows cleanly end to end, point your team's forwarding rule or contact form at the address and enable the workflow.

Learn More

Did this answer your question? Thanks for the feedback There was a problem submitting your feedback. Please try again later.