Articles on: AI & extraction

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

SENDGMAIL or SENDOUTLOOK formula

Notify Slack from a spreadsheet cell

SENDSLACK formula

Send notifications automatically as part of a workflow

Send Gmail / Send Outlook / Send Slack node

Forward an Outlook email after extraction

Forward Outlook action (FORWARDOUTLOOK)

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_ref parameter 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.




  • 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

Was this article helpful?

Share your feedback

Cancel

Thank you!