How to Forward Vendor Emails into a Monday Board with AI-Extracted Fields
Point a vendor mailbox at a Spojit mailhook address, use AI structured output to pull the sender, subject, and key details out of each message, and create a tracked item on a Monday.com board for every email that arrives.
What This Integration Does
Vendors send a constant stream of email: order confirmations, shipping notices, price-change announcements, and account updates. Reading each one and copying the important parts into a tracking board by hand is slow and easy to forget. This workflow lets you forward (or directly address) that mail to a dedicated Spojit address, then has Spojit read the message, extract a clean set of fields, and drop a tracked item onto a Monday.com board so nothing slips through the cracks.
The workflow is triggered by a Mailhook trigger: Spojit gives you a unique inbound address, and any email sent to it starts a run within seconds. No mailbox or OAuth is required. The raw email body becomes available as {{ input }}. A Connector node in Agent mode reads that body and returns a strict JSON object (vendor name, subject, summary, amount, reference number). A second Connector node calls Monday.com to create the item. Each email is deduplicated per message, so the same notification will not create two items. Runs are independent: a new email always creates a new item, and replaying an old email has no effect because Spojit only acts on inbound messages it has not already processed.
Prerequisites
- A Monday.com connection added under Connections -> Add connection, authorized with permission to read boards and create items.
- A Monday.com board to receive items, plus its board ID and the column IDs you want to populate (for example a text column for the vendor, a long-text column for the summary, and a numbers column for the amount). Use the monday
get-boardtool once to confirm these IDs. - Access to the vendor mailbox or forwarding rule so you can point mail at the address Spojit generates.
- A workspace with AI credits available, since Agent mode and structured extraction consume credits per run.
Step 1: Add a Mailhook trigger and generate the address
Create a new workflow and add a Trigger node. Set Trigger Type to Mailhook. Optionally set an Address prefix (1 to 24 characters, default mh) so the address is recognizable, for example vendors. Click Generate email address to produce a unique address such as vendors-7f3a9c1b2e4d6a8f@mailhook.spojit.com, then copy it. In your vendor mailbox or mail provider, create a forwarding rule that sends vendor notifications to this address, or give the address to vendors directly. To narrow what runs the workflow, add an optional From allowlist (only mail from listed senders runs) and an optional Subject regex. The trigger fires whether the address is in To, Cc, or Bcc.
Step 2: Inspect the inbound email payload
Once the trigger is in place, every run exposes the parsed email as {{ input }}. The fields you will use downstream are:
{
"from": "billing@acme-supplies.com",
"to": ["vendors-7f3a9c1b2e4d6a8f@mailhook.spojit.com"],
"replyTo": ["billing@acme-supplies.com"],
"subject": "Invoice INV-4821 for order #5567",
"text": "Hi, please find invoice INV-4821 attached...",
"html": "Hi, please find invoice INV-4821 ...
",
"receivedAt": "2026-06-20T09:14:00Z"
}
You will feed {{ input.subject }} and {{ input.text }} into the extraction step, and keep {{ input.from }} and {{ input.replyTo }} for the Monday item and any follow-up email.
Step 3: Extract fields with a Connector node in Agent mode
Add a Connector node and switch it to Agent mode. Agent mode lets you describe the extraction in plain language and force the result into a fixed JSON shape using a Response Schema, which is what makes the output reliable enough to map onto Monday columns. Write a prompt that hands the model the email and asks for the fields you care about:
Read this vendor email and extract the requested fields.
Subject: {{ input.subject }}
From: {{ input.from }}
Body:
{{ input.text }}
Return the vendor company name, a one-sentence summary, any
invoice or reference number, and any monetary amount. Use null
when a field is not present.
In the Response Schema, define the exact output so every run is consistent:
{
"type": "object",
"properties": {
"vendor": { "type": "string" },
"summary": { "type": "string" },
"reference": { "type": ["string", "null"] },
"amount": { "type": ["number", "null"] }
},
"required": ["vendor", "summary"]
}
Set an Output Variable such as extracted. Downstream you reference {{ extracted.vendor }}, {{ extracted.summary }}, {{ extracted.reference }}, and {{ extracted.amount }}.
Step 4: Build the column values for Monday
Monday.com sets non-text columns through a structured object keyed by column ID. Add a Transform node to assemble the columnValues object so the create step stays clean. Map the extracted fields onto your real column IDs, for example:
{
"text_vendor": "{{ extracted.vendor }}",
"long_text_notes": "{{ extracted.summary }}",
"text_reference": "{{ extracted.reference }}",
"numbers_amount": {{ extracted.amount }},
"email_contact": { "email": "{{ input.from }}", "text": "{{ input.from }}" }
}
Replace each key with the column IDs from your board. Set the Transform Output Variable to columns. Leaving the heavy mapping in a Transform node keeps the create step readable and makes it easy to adjust columns later.
Step 5: Create the item with the Monday connector
Add a Connector node in Direct mode, choose the monday connector, and select the create-item tool. Direct mode is the right choice here because the action is a single, predictable call with no AI cost. Map the inputs:
boardId: your target board ID, for example1234567890.name: the item title, for example{{ extracted.vendor }} - {{ input.subject }}.groupId(optional): the group to place the item in, such astopicsor a status group ID.columnValues: the object you built,{{ columns }}.
On success the tool returns the new item id and name, which you can keep for logging or a follow-up step.
Step 6: Confirm receipt back to the vendor (optional)
Because a Mailhook trigger never replies to the sender automatically, add a Send Email node if you want to acknowledge the message. Set Recipients to {{ input.replyTo }}, write a templated Subject such as Received: {{ input.subject }}, and a short Body confirming the item was logged. Remember that external recipients must be on your org allowlist under Settings -> General -> Email recipients, and that Send Email counts toward your monthly email allowance.
Tips
- Use the monday
get-boardtool once during setup to read the exact column IDs and types; guessing IDs is the most common reason an item is created but a column stays blank. - Keep the Response Schema small and use
null-able fields. A tight schema makes the extraction faster, cheaper, and far more consistent across different vendor formats. - Set a recognizable Address prefix (like
vendors) so you can tell at a glance which mailhook a forwarded message belongs to. - Ask Miraxa, the intelligent layer across your automation, to scaffold this for you with a prompt such as "Build a workflow that watches a mailhook, extracts the vendor and amount from the email, and creates a Monday item" then fine-tune each node in the properties panel.
Common Pitfalls
- Mismatched column IDs. Monday rejects or silently ignores keys in
columnValuesthat do not match a real column ID. Confirm IDs withget-boardand match each column type (numbers expect a raw number, email columns expect an object). - Too-broad inbound mail. If many unrelated messages land on the address, items multiply. Add a From allowlist and Subject regex on the trigger to keep only genuine vendor mail.
- Expecting a reply to the sender. The Mailhook trigger is always asynchronous and sends nothing back on its own. Use a Send Email node addressed to
{{ input.replyTo }}if you need an acknowledgement. - Trusting free-text output. Without a Response Schema, Agent mode can return prose that breaks the Monday mapping. Always define the schema so
{{ extracted.* }}fields exist on every run.
Testing
Before pointing a busy vendor mailbox at the address, send a single test email from your own account to the generated mailhook address with a realistic subject and body. Open the run in execution history and check the trigger output under {{ input }}, the extracted JSON in your extracted variable, and the columnValues object from the Transform node. Confirm the new item appears on the board with every column populated. Once one message flows end to end, add the From allowlist, then enable the vendor forwarding rule so live mail begins creating items.