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 FillerSend 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!