Automate SEC Monitoring with n8n
n8n is an open-source workflow automation tool you can self-host or run in the cloud. In this tutorial you will wire an n8n webhook node to the OMNI Datastream API so that every time an 8-K filing is published for a watchlist of companies, n8n extracts the key data and posts a summary to a Slack channel.Prerequisites
- An Omni Datastream API key (set as
OMNI_DATASTREAM_API_KEY) - An n8n instance (self-hosted or n8n Cloud)
- A Slack workspace with an incoming webhook URL or the n8n Slack credential configured
- (Optional) Familiarity with the Build a Filing Monitor tutorial
Architecture overview
Step 1 --- Create the n8n webhook node
- Open your n8n instance and create a new workflow.
- Add a Webhook node as the trigger.
- Set HTTP Method to
POST. - Set Path to
omni-filings(or any path you prefer). - Under Authentication, select None for now (you will add signature verification in Step 4).
- Click Listen for Test Event to put the node in listening mode. Copy the Test URL --- you will need it in the next step.
Step 2 --- Register the webhook with OMNI Datastream
Point the OMNI Datastream monitor at your n8n webhook URL.Create a webhook endpoint
signing_secret --- you will use it to verify payloads.
Create a filing monitor
we_abc123 with the endpoint ID from the previous response.
Step 3 --- Extract filing data with a Function node
Add a Function node after the Webhook node. This node parses the incoming payload and prepares a clean object for Slack. Paste this code into the Function node:Step 4 --- Verify the webhook signature (recommended)
Add a second Function node between the Webhook node and the extraction node to verify the OMNI signing secret. If verification fails, the workflow stops.Tip: Store the signing secret in n8n Credentials (type: Header Auth or a custom credential) instead of hard-coding it.
Step 5 --- Post to Slack
Add a Slack node after the Function node.- Select Message > Send a Message.
- Choose the target channel (e.g.,
#sec-alerts). - Set the Message Text to:
- Click Execute Node to test (you may need to trigger a test event first).
Importable n8n workflow JSON
Copy this JSON and import it via Workflow > Import from File in n8n:Expected result
When an 8-K filing is published for any ticker in your watchlist, your Slack channel receives a message like:Troubleshooting
| Problem | Solution |
|---|---|
| n8n webhook never fires | Make sure the workflow is active (toggle in top-right). Use the production URL, not the test URL. |
| 401 or signature mismatch | Verify you are using the correct signing_secret from the OMNI webhook endpoint. |
| Slack message is empty | Check that the Function node output includes all fields (ticker, company, etc.). Run the node in isolation with test data. |
| Duplicate alerts | OMNI retries failed deliveries. Make the workflow idempotent by checking accession_number against a dedup store (e.g., n8n’s built-in static data). |
| Monitor not triggering | Confirm the monitor is active with GET /v1/monitors. Check that the form_types and tickers match what you expect. |
Next steps
- Add more channels: Route different form types to different Slack channels using an n8n Switch node.
- Enrich with intelligence: After receiving a filing event, call the OMNI
/v1/intelligence/queryendpoint to get an AI summary before posting. - Store in a database: Add a Postgres or Airtable node to log every filing for historical analysis.