PDF extraction

How to send Slack alerts for finished PDF processing

Post PDF ready and failed notifications into Slack using okraPDF events, incoming webhooks, Zapier, Make, n8n, or a small adapter.

May 18, 2026 2 min read okraPDF

Slack is a notification destination, not a document database. Use it to tell the right channel that a PDF is ready, failed, or needs review. Keep the actual source document and extraction payload in okraPDF or your system of record.

This is API-feasible today. Slack incoming webhooks let apps post messages into Slack channels by sending JSON to a channel-specific webhook URL. Slack also has Web API methods such as chat.postMessage for OAuth app flows. The practical detail is that Slack expects a Slack-shaped payload, so a raw okraPDF event should be transformed before it is posted to Slack.

Choose the Slack path

PathUse whenNotes
Zapier Slack actionFastest no-code setupMaps okraPDF fields to Slack message text
Make or n8nBetter control over formattingCan branch on ready vs failed
Small adapter endpointProduct or internal engineering setupVerifies okraPDF signature, posts Slack payload
Native Slack appBest long-term UXRequires OAuth install and channel selection

Do not paste a raw okraPDF webhook directly into Slack unless the okraPDF connector is formatting the Slack message for you. Slack webhooks require fields such as text or blocks.

Keep Slack messages short and action-oriented.

For document.processed:

PDF ready: invoice-1042.pdf
Vendor: Acme Supply
Total: 4,820.19 USD
Open: https://...
Review status: needs review

For document.failed:

PDF failed: invoice-1042.pdf
Reason: password protected PDF
Job: job_...
Open source: https://...

Put long extracted JSON in a destination that is built for data. Slack should link to the document or review queue.

Zapier setup

  1. Trigger: okraPDF PDF Ready, or Webhooks by Zapier Catch Hook.
  2. Action: Slack Send Channel Message.
  3. Channel: pick the intake or operations channel.
  4. Message: map filename, status, hosted URL, and key extracted fields.
  5. Add a second Zap for PDF Failed.

This path is best when a non-engineering team owns the workflow.

Make or n8n setup

Use an okraPDF webhook as the trigger, then transform the payload.

Make:

  1. Webhooks > Custom webhook.
  2. okraPDF sends document.processed and document.failed.
  3. Router splits ready and failed events.
  4. Slack module posts a formatted message.

n8n:

  1. Webhook node receives okraPDF.
  2. IF node checks body.type.
  3. Set node formats text or blocks.
  4. Slack node posts the message.

This path is better when you need different channels per document type or customer.

Adapter endpoint setup

For engineering teams, write a tiny endpoint:

  1. Receive okraPDF webhook.
  2. Verify X-Okra-Signature.
  3. Check idempotency by event ID.
  4. Convert the event into Slack text or Block Kit.
  5. POST to the Slack webhook URL.
  6. Return 2xx only after Slack accepts the message.

Store the Slack webhook URL encrypted. Treat it like a secret because anyone with the URL can post to that channel.

Good routing rules

Route ready events by workflow:

  • Invoices -> #ap-intake
  • Bank statements -> #finance-ops
  • Failed processing -> #document-alerts
  • VIP customers -> customer-specific channel

Avoid high-volume log streams. Slack is for exceptions and human handoffs. If every PDF creates five Slack messages, the channel will be ignored.