How to Convert Meeting Notes Emailed to Spojit into Action Items with AI
Forward raw meeting notes to a Spojit Mailhook address and let an Agent-mode node turn them into a clean list of owners, tasks, and due dates that become Monday.com items, with a Slack digest sent to attendees.
What This Integration Does
After every meeting someone is left retyping scribbled notes into a task tracker and chasing people about who owns what. This workflow removes that step. You forward the notes (or have your note-taking tool email them) to a dedicated Spojit Mailhook address. An Agent-mode Connector node reads the free-form text and extracts a structured list of action items: each with an owner, a task description, and a due date. Spojit then creates one Monday.com item per action item and posts a single summary digest to a Slack channel so attendees see their commitments in seconds.
The run model is push-based and asynchronous. A new email to the Mailhook address starts a run within seconds, with no mailbox or polling to manage. The email body is available as {{ input.text }}, and an Agent-mode Connector node with a Response Schema turns it into reliable JSON. A Loop creates the Monday.com items, and a final Connector node sends the Slack digest. Each message is deduplicated, so the same forwarded email will not be processed twice, and re-running an old email simply re-creates the same items on the board.
Prerequisites
- A Monday.com connection added under Connections → Add connection, with access to the board where action items should land.
- The numeric
boardIdof your target board, plus thegroupIdof the group to add items to (find both with the Monday.comget-boardtool). - The Monday.com column IDs you want to populate (for example an Owner/person column, a Status column, and a Date column). Column IDs come from
get-boardas well. - A Slack connection added under Connections, with permission to post to the digest channel.
- The Slack channel ID (or name) where the attendee digest should be posted.
Step 1: Add a Mailhook trigger and generate the address
Create a new workflow and open the Trigger node. Set Trigger Type to Mailhook. Optionally set an Address prefix (1-24 characters, for example notes) so the address is recognisable, then click Generate email address. Spojit produces a unique address like notes-1a2b3c4d5e6f7g8h@mailhook.spojit.com. Copy it and use it as the forwarding target: send meeting notes to it directly, set up a forwarding rule, or point your note-taking tool's email export at it.
To keep stray mail out, set the optional From allowlist to the addresses that send notes, and a Subject regex such as ^Meeting notes. The trigger fires whether the address is in To, Cc, or Bcc, and every run exposes the email as {{ input }} with fields including {{ input.subject }}, {{ input.text }}, {{ input.from }}, and {{ input.replyTo }}.
Step 2: Extract action items with an Agent-mode Connector node
Add a Connector node and switch it to Agent mode. Agent mode lets the agent reason over the free-form notes instead of you mapping fields by hand. In the prompt, pass the email body and ask for a strict structure:
Read the meeting notes below and extract every action item.
For each one return the owner's name, the task description, and a
due date in YYYY-MM-DD format. If no due date is stated, leave it
empty. Ignore discussion that is not an assigned task.
Subject: {{ input.subject }}
Notes:
{{ input.text }}
Turn on the Response Schema so the output is forced into predictable JSON rather than prose. Define a schema such as:
{
"type": "object",
"properties": {
"actionItems": {
"type": "array",
"items": {
"type": "object",
"properties": {
"owner": { "type": "string" },
"task": { "type": "string" },
"dueDate": { "type": "string" }
},
"required": ["owner", "task"]
}
}
},
"required": ["actionItems"]
}
Set the node's Output Variable to extracted so later steps can read {{ extracted.actionItems }}.
Step 3: Loop over each action item
Add a Loop node in ForEach mode and point it at {{ extracted.actionItems }}. Each pass exposes the current element (for example as {{ item }}), giving you {{ item.owner }}, {{ item.task }}, and {{ item.dueDate }}. The nodes you place inside the loop body run once per extracted action item, so one meeting that produced five tasks creates five Monday.com items.
Step 4: Create a Monday.com item for each action item
Inside the loop body, add a Connector node in Direct mode, choose the Monday.com connector, and pick the create-item tool. Map the inputs to your board:
boardId— your target board, for example1234567890.groupId— the group items should land in, for exampletopics.itemName— the task text,{{ item.task }}.columnValues— a JSON object keyed by your column IDs that sets the owner, due date, and status.
A typical columnValues payload using your own column IDs looks like this:
{
"person": { "personsAndTeams": [{ "id": 0, "kind": "person" }] },
"date4": { "date": "{{ item.dueDate }}" },
"status": { "label": "To do" },
"text": "Assigned to {{ item.owner }}"
}
If you cannot reliably map a free-text owner name to a Monday.com person ID, keep the owner in a text column (as above) rather than the person column, so nothing is dropped. Set the node's Output Variable if you want to reference the created item later.
Step 5: Post the action item back as an update (optional)
Still inside the loop, you can add a second Connector node in Direct mode using the Monday.com create-update tool to attach a note to the new item. Map itemId to the ID returned by create-item and set the update body to something like Owner: {{ item.owner }} · Due: {{ item.dueDate }}. This keeps the full context on the card even when columns are sparse.
Step 6: Send a Slack digest to attendees
After the loop, add a Connector node in Agent mode using the Slack connector so the agent can format a tidy digest from the structured list, then have it call send-message to post it. Provide the channel and the data in the prompt:
Post a meeting action-item digest to Slack channel C0123456789.
Group the items by owner and show each task with its due date.
Keep it short and use bullet points.
Action items:
{{ extracted.actionItems }}
If you prefer a deterministic post, use Direct mode with send-message instead: set channel to your channel ID and build the text from the loop's collected output. You can also reply to whoever forwarded the notes by adding a Send Email node addressed to {{ input.replyTo }} with a short confirmation that the items were created.
Tips
- Use the Monday.com
get-boardtool once during setup to read the exact column IDs and types. Column IDs are not the visible column titles, andcreate-itemwill silently ignore values for IDs that do not exist. - Ask the Agent-mode prompt to normalise dates to
YYYY-MM-DD. Monday.com Date columns expect that format, so doing the conversion in the extraction step avoids a separate Transform step. - Keep the digest to one Slack message after the loop rather than posting per item, so a long meeting does not flood the channel.
- If notes routinely arrive from one tool, lock the Mailhook From allowlist to that sender so forwarded spam or auto-replies never start a run.
Common Pitfalls
- Empty due dates. Many notes assign a task without a date. Make
dueDateoptional in the Response Schema and skip the Date column when{{ item.dueDate }}is blank, otherwise Monday.com may reject the value. - Owner name vs person ID. A person column needs Monday.com user IDs, not names. If your notes only contain first names, store the owner in a text column instead of forcing a person match.
- Re-forwarding the same email. Mailhook deduplicates a given message, but forwarding the notes a second time is a new message and will create the items again. Treat each meeting's notes as a single send.
- Oversized notes. Very long emails may arrive with
{{ input.truncated }}set to true. Check that flag in a Condition node if your meetings produce huge transcripts, and trim before extraction.
Testing
Before pointing real meetings at it, send one short test email to the Mailhook address with two or three obvious action items and clear owners. Open the run in execution history and confirm the Agent-mode node's extracted output contains the expected array, that the Loop ran once per item, and that the Monday.com items landed in the right group with the correct columns. Start against a throwaway board so a wrong column ID does not clutter your live board, and only swap in the production boardId and Slack channel once a full run looks correct end to end. You can ask Miraxa "Why did my last run fail?" on the workflow page if anything errors.