How to Run a Creator Brand-Deal Intake Inbox with Mailhook and Front
Give brands a dedicated email address that turns every sponsorship pitch into a structured deal: parse the pitch into clean fields, fetch the media-kit PDF, open a Front conversation, and drop a card on your Monday board automatically.
What This Integration Does
Solo creators and small creator teams drown in sponsorship pitches that arrive as free-form email. Some land in your personal inbox, some come through a manager, and the key facts (brand name, budget, deliverables, timeline) are buried in prose with the media kit hanging off as a PDF. This workflow gives you one dedicated intake address that brands and your forwarding rules can send to. Spojit reads each pitch, extracts the fields you actually negotiate on, pulls the attached media kit, opens a tracked conversation in Front so nothing slips, and creates a deal card on a Monday board so your pipeline is always current. You stop copy-pasting from email into a spreadsheet and start every deal already organised.
A Mailhook trigger gives you a unique Spojit address; any mail sent to it starts a run within seconds, with no mailbox or OAuth to connect. Each run reads {{ input }} (the parsed email), runs an Agent-mode Connector node to produce structured deal fields, fetches the media kit with an Attachment node, calls Front send-message to open a conversation, and calls Monday create-item to add the card. Runs are asynchronous (the sender gets no reply unless you add a Send Email step), each message is processed once thanks to built-in deduplication, and re-sending the same pitch will not double-create. Received emails are retained for 30 days so you can re-run during testing.
Prerequisites
- A Front connection (API token) added under Connections, with at least one channel you can send from. You will need the channel ID for
send-message. - A Monday.com connection (API token) added under Connections. You need the target board ID, an optional group ID, and the column IDs you want to populate (brand, budget, status, timeline).
- A Monday board for your sponsorship pipeline with columns for brand contact, budget, deliverables, and a status column.
- A place to forward brand pitches, or a media/business email address you can publish, so mail reaches your mailhook address.
- If you want the agent to write in your voice for the Front reply, an optional brand-voice note you can paste into the prompt.
Step 1: Create the Mailhook trigger and its address
Create a new workflow and open the Trigger node. Set Trigger Type to Mailhook. Set an optional Address prefix (1 to 24 characters, for example deals; the default is mh), then click Generate email address. Spojit creates a unique address in the form deals-xxxxxxxxxxxxxxxx@mailhook.spojit.com. Copy it and publish it as your brand-deal contact, or point a forwarding rule at it so manager-forwarded pitches arrive too.
To keep noise out, set the optional From allowlist and Subject regex filters. For example, a subject pattern like (?i)(sponsor|collab|partnership|brand deal) only fires the workflow on likely pitches. The trigger fires whether the address is in To, Cc, or Bcc. When a pitch arrives, the parsed email is available downstream as {{ input }}, including {{ input.from }}, {{ input.subject }}, {{ input.text }}, {{ input.replyTo }}, and an {{ input.attachments }} list of references.
Step 2: Extract structured deal fields with an Agent-mode Connector node
Add a Connector node in Agent mode. This is the step where the intelligent layer reads the raw pitch and turns it into clean fields; the agent reasons over the email text rather than you writing brittle parsing rules. In the prompt, pass the email body and subject:
Read this sponsorship pitch and extract the deal details.
Subject: {{ input.subject }}
From: {{ input.from }}
Body:
{{ input.text }}
Turn on the Response Schema so the node always returns the same JSON shape. A schema like this forces clean, predictable output you can map into Front and Monday:
{
"type": "object",
"properties": {
"brandName": { "type": "string" },
"contactName": { "type": "string" },
"budget": { "type": "string" },
"deliverables": { "type": "string" },
"timeline": { "type": "string" },
"platforms": { "type": "array", "items": { "type": "string" } },
"summary": { "type": "string" }
},
"required": ["brandName", "summary"]
}
The node's output is now addressable as {{ deal.brandName }}, {{ deal.budget }}, {{ deal.deliverables }}, and so on (using whatever output variable name you set, for example deal). For a deeper look at forcing reliable JSON, see the structured output extraction tutorial.
Step 3: Fetch the media-kit PDF with an Attachment node
Add an Attachment node. This node only works in Mailhook workflows and fetches the actual bytes of an attachment the trigger referenced. Set Mode to Single so it returns the first match as an object. Set the Content type filter to application/pdf and a Filename pattern of *.pdf so it targets the media kit rather than a logo image. Leave Fail if no attachment matches off so pitches that arrive without a media kit still run.
In Single mode the node outputs { filename, contentType, size, content }, where content is the file as base64. You can reference it as {{ mediaKit.content }} and {{ mediaKit.filename }}. The default limits are 10 MB per attachment and 25 MB per run, which comfortably covers a media-kit PDF. If brands sometimes attach several decks, switch to Multiple mode and iterate with a Loop node over {{ mediaKit.attachments }} instead.
Step 4: Open a Front conversation with send-message (Direct mode)
Add a Connector node in Direct mode on the Front connector and choose the send-message tool. Direct mode is deterministic and costs no AI credits, which is what you want for a predictable single call. Map the fields:
channelId: the ID of the Front channel you send from.to: an array with the brand contact, for example["{{ input.from }}"].subject: a clear title such asBrand deal: {{ deal.brandName }}.body: an HTML summary the agent produced.send-messageaccepts HTML, so you can format the key facts.
A body built from your extracted fields keeps the conversation self-documenting:
<p>New sponsorship pitch from <strong>{{ deal.brandName }}</strong> ({{ deal.contactName }}).</p>
<ul>
<li>Budget: {{ deal.budget }}</li>
<li>Deliverables: {{ deal.deliverables }}</li>
<li>Timeline: {{ deal.timeline }}</li>
</ul>
<p>{{ deal.summary }}</p>
This opens a tracked conversation in Front so the pitch becomes a managed thread your team can reply to, tag, and assign. To tag it at the same time, pass options such as { "tag_ids": ["..."] }, or add a follow-up Front add-tag call.
Step 5: Create the deal card on Monday with create-item (Direct mode)
Add another Connector node in Direct mode on the Monday.com connector and choose the create-item tool. Map the fields:
boardId: your sponsorship pipeline board ID.name: the item title, for example{{ deal.brandName }} sponsorship.groupId: optional; the group to drop new deals into, such as your "Incoming" group.columnValues: an object keyed by your board's column IDs.
columnValues is a structured object where each key is a Monday column ID. Use your own column IDs in place of the examples below:
{
"text_budget": "{{ deal.budget }}",
"text_contact": "{{ deal.contactName }}",
"long_text_deliv": "{{ deal.deliverables }}",
"status": { "label": "New" },
"date_timeline": { "date": "{{ deal.timeline }}" }
}
The card now lands in your pipeline with budget, contact, deliverables, and a status of New, so the deal is tracked the moment the pitch arrives. To attach a quick note with the full summary, follow this with a Monday create-update call referencing the new item.
Step 6: Acknowledge the brand (optional)
Mailhook runs are asynchronous, so the sender gets no automatic reply. To send a courteous acknowledgement, add a Send Email node. Set Recipients to {{ input.replyTo }} (the address the brand expects replies at), a Subject like Thanks for your pitch, {{ deal.brandName }}, and a short templated Body. Send Email uses Spojit's built-in mail service, so no connection is needed, though external recipients must be on your org allowlist under Settings → General → Email recipients. If you would rather reply from your own domain, use the Front send-message conversation from Step 4, or send through a Resend or SMTP connector instead.
Tips
- Scaffold the whole workflow fast by describing it to Miraxa, the intelligent layer across your automation: "Build a workflow that watches a mailhook, extracts brand-deal fields with an Agent-mode Connector node, fetches the PDF with an Attachment node, opens a Front conversation, and creates a Monday item." Then fine-tune each node in the properties panel.
- Keep the Agent-mode Response Schema tight. Only ask for fields you actually map downstream; fewer fields means cleaner, cheaper extraction.
- Use the Mailhook Subject regex filter to keep newsletters and out-of-office replies from triggering runs and consuming credits.
- If brands routinely send several decks, switch the Attachment node to
Multiplemode and loop, rather than silently grabbing only the first PDF.
Common Pitfalls
- Saving an Attachment node without a Mailhook trigger fails: the designer refuses it. Confirm the trigger is set to Mailhook first.
- Attachment size limits are 10 MB per attachment and 25 MB per run by default. Oversized media kits will be skipped, so set a sensible Filename pattern and expect some pitches to arrive without a fetchable file.
- Monday's
columnValueskeys are column IDs, not the human-readable column titles you see in the board header. Using a title will silently drop the value; copy the actual column IDs from your board. - The Front
send-messagecall needs a validchannelIdand atoarray. A bare string intoor a missing channel ID is the most common cause of a failed Front step. - Regenerating the mailhook address kills the old one instantly. If you publish the address widely, treat rotation as a real change and update wherever it is listed.
Testing
Before publishing the address publicly, send yourself a realistic test pitch (with a small sample PDF attached) to the generated mailhook address, then open the run in execution history. Check that {{ input }} holds the email, that the Agent-mode node returned every required schema field, and that the Attachment node fetched the PDF as base64. Point the Front and Monday steps at a throwaway test channel and a test board first, confirm the conversation and card appear correctly, then switch to your real channel and pipeline board. Because received emails are retained for 30 days and each message is deduplicated, you can re-run the same test email safely while you tune the prompt and column mappings.