Send extracted data to email or Slack
Once you've extracted data from a document, you usually want to do something with it — notify a team in Slack, email it to a manager, attach the original file, or push it to multiple places at once. This article covers the common notification patterns.
Which method should I use?
If you want to… | Use… |
|---|---|
Send a one-off email from a spreadsheet cell | |
Notify Slack from a spreadsheet cell | |
Send notifications automatically as part of a workflow | Send Gmail / Send Outlook / Send Slack node |
Forward an Outlook email after extraction | Forward Outlook action ( |
Send extracted rows as an Excel file | Export to Excel node, then attach in a Send node |
Send a templated PDF report | PDF Form Filler or Template Filler → Send Gmail with attachment |
The workflow nodes and the spreadsheet formulas have the same parameters. Pick based on whether the work is happening in a workflow (use the node) or anchored in a sheet (use the formula).
Before you start
You need:
- A connected Gmail, Outlook, or Slack credential. Set these up in workspace settings.
- For Slack, the channel ID or name you want to post in. The Slack credential's bot user must be a member of private channels.
- For Twilio SMS: a Twilio credential and a verified sender number.
Pattern 1: notify Slack after extraction
Add a Send Slack node after your Data Extractor node.
Channel: #ap-inbox (or any channel name your bot has access to)
Message:
New invoice extracted
Vendor: {{$item.data.Vendor Name}}
Invoice #: {{$item.data.Invoice Number}}
Total: ${{$item.data.Total Amount}}
Due: {{$item.data.Due Date}}
Each item flowing through the workflow becomes its own Slack message.
Pattern 2: email a summary to one person
Add a Send Gmail node after Data Extractor.
To: ap@yourco.com
Subject: Invoice {{$item.data.Invoice Number}} from {{$item.data.Vendor Name}}
Body (HTML):
<p>A new invoice was extracted from your invoice inbox.</p>
<ul>
<li><strong>Vendor:</strong> {{$item.data.Vendor Name}}</li>
<li><strong>Invoice #:</strong> {{$item.data.Invoice Number}}</li>
<li><strong>Total:</strong> ${{$item.data.Total Amount}}</li>
<li><strong>Due:</strong> {{$item.data.Due Date}}</li>
</ul>
For Outlook accounts, use Send Outlook instead — same parameters except no sender override.
Pattern 3: attach the original document
The trigger gave you a file URL. Pass it to the Send node as an attachment.
In Send Gmail:
- file_url parameter:
{{$item.data.file.url}}(or whatever field holds the original URL).
The recipient gets the original PDF along with the extracted summary.
Pattern 4: route different items to different channels
Use the Switch node before your Send nodes:
[Data Extractor] → [Switch on Vendor Name]
│
├─ "Vendor A" ─→ [Send Slack: #vendor-a]
├─ "Vendor B" ─→ [Send Slack: #vendor-b]
└─ default ─→ [Send Slack: #ap-inbox]
Useful when different teams own different vendor relationships.
Pattern 5: aggregate before sending
You don't always want one message per item. To send a single end-of-day digest:
[Scheduled Trigger: daily 5pm]
│
▼
[Get Table: today's invoices]
│
▼
[Aggregate: count by vendor]
│
▼
[Send Gmail: digest with table]
Use Aggregate to collapse many items into one summary, then a single Send node.
Spreadsheet-anchored alternatives
If the work lives in a sheet (no workflow), use formulas:
=SENDGMAIL("gmail-cred-id",
Invoices[@Email],
"Invoice " & Invoices[@Invoice Number],
"Total: $" & Invoices[@Total Amount],
Invoices[@Send Status])
Add this as a column. Right-click → Run on a single row to send for one row, or Create Automation to send for every row on a schedule.
For Slack:
=SENDSLACK("slack-cred-id",
"#ap-inbox",
"Invoice " & Invoices[@Invoice Number] & " for $" & Invoices[@Total Amount],
Invoices[@Send Status])
Tips
- Use the
status_refparameter wherever it exists. It writes the success/failure status into a cell or column so you can see what went through. - HTML is supported in Send Gmail / Send Outlook bodies. Use it for tables, links, and basic formatting.
- Keep Slack messages short and structured. Long Slack walls of text get ignored. Use bullets or a code block.
- Don't email the same address from multiple workflows simultaneously without throttling. You'll trigger spam filters.
- Test with your own email/channel first. Then switch to the production destination.
- Don't include sensitive document contents in chat or email unless your team has agreed it's safe. Many extraction documents contain personal data.
Common mistakes
- Sending one notification per workflow item when you wanted one per batch. Use Aggregate first if you want a digest.
- Slack bot not in the channel. Send Slack will fail silently or with a confusing error if the bot user hasn't been added to the channel. Add the bot first.
- Not handling the Send node's error output. A failed email is much worse than an obvious error message — always wire up the error output to a logging or alerting node.
- Hardcoding recipient addresses. Use a column or workspace setting so you can change recipients without editing the workflow.
- Including raw
{{$item.data...}}in the message because the parameter is in literal mode instead of expression mode. Toggle the mode switch in the parameter input. - Trying to send 10,000 emails in one workflow run without throttling. Most providers will rate-limit or quarantine you. Use the Limit node and node-level concurrency settings.
Related articles
- Extract data from PDFs and documents
- Automate extraction with workflows
- Build your first workflow
- Connect Gmail
- Connect Outlook
- Lido Mailbox
- Triggers: how workflows start (Scheduled Trigger)
Updated on: 16/04/2026
Thank you!