Most newsrooms already live in Slack, and most breaking-news tools already know how to post to it. What is different about AO.news is what gets posted: not a scrape, not a social mention, but the actual push notification a rival newsroom just sent to its readers. It arrives translated into English and tagged with the source. If you want, it is held back until a second or third outlet confirms it.
The integration is deliberately boring. There is no bot to install and no OAuth screen. Each column in your deck can carry one Slack incoming-webhook URL; whatever that column shows, Slack gets.
What lands in Slack
Every notification that passes the column's filters becomes one Slack message, using Slack's Block Kit so it reads cleanly on desktop and mobile:
Illustrative messages. The three links on every alert open the source article (📰), the AO.news permalink for the notification (🔗), and the deck the alert came from (⚪).
Each message carries:
- The source's icon and name, plus the name of the column it came from. One channel can safely receive several columns and stay readable.
- The notification's title and text in English. Non-English pushes are translated before forwarding; you can exempt languages your desk reads natively (deck setting Don't translate languages), in which case Slack gets the original wording.
- Three links: the article, a stable AO.news permalink for the notification (handy for citing "X pushed this at 19:42"), and the deck.
Set-up in five minutes
- Create an incoming webhook in Slack. In Slack: Apps → Incoming Webhooks → Add to Slack, choose the channel, copy the URL (it starts with
https://hooks.slack.com/services/…). Slack's own guide: api.slack.com/messaging/webhooks. Some workspaces require an admin to approve. - Open your deck and add or edit a column. Click Setup new feed (the + column) or the column's settings. Pick sources by country or by name, then give the feed a name. That name appears on every Slack message.
- Set the filters (see below): keyword filter, consensus, score. Do this before connecting Slack; the forwarder mirrors exactly what the column shows.
- Paste the webhook. Under Advanced, field Slack integration webhook url. Save the feed.
- Watch the first alert land. A small Slack icon appears in the column header to show it is forwarding. Forwarding starts from the moment you save; earlier notifications are not back-filled.
The Slack webhook field appears for newsroom (enterprise) trackers. On the free demo deck you can build and filter the same column to see exactly what would be forwarded; email hello@ao.news to switch it on.
Filters that keep the channel sane
An unfiltered column of every Swedish news app is roughly 200 notifications a day; every app in the deck is thousands. Nobody wants that in a channel. These are the knobs, and they are the same ones the column itself uses:
| Filter | Where | What it does |
|---|---|---|
| Sources | Feed setup, checkbox list with country flags and a search box | Which apps and headline robots the column (and Slack) listens to. Pick a whole country with one click, or hand-pick outlets. |
| Consensus | Feed setup, slider 1 to 40 | Only forward stories that at least N independent sources have pushed. AO.news clusters notifications about the same story in real time; consensus is the number of distinct sources on that cluster. At 2 you get corroborated stories; at 3+ you get the day's real news and very little else. Once a story reaches the threshold, that push and each later push on the same story are forwarded (so the desk also sees the follow-ups); the earlier pushes that built the consensus are not replayed. |
| Word filters | Feed setup, text field | Only forward notifications matching a query, applied to the English translation. Supports AND, OR, ! and parentheses. For example: (ukraine OR kyiv) AND !sport. |
| Score | Feed setup, slider 1 to 10 | Minimum breaking-news score for headline-robot items (front-page headlines that AO.news's model rates from 1 to 10). App notifications carry the default score, so at 8 they always pass and raising the slider above 8 would hide them. Leave it at 8; lower it only if you want more robot headlines. |
| Don't translate | Deck settings | Not a filter, but it changes what Slack shows: notifications in these languages are forwarded in the original. |
Channel recipes
Four set-ups we see newsrooms actually run:
#breaking-world
Sources: everything. Consensus: 5. Result: only stories that at least five different newsrooms thought were worth an interruption. Usually they sit in several countries. Tens of alerts a day, almost none of them ignorable.
#competitors
Sources: the four or five outlets you actually compete with. Consensus: off. Result: their exact push, in your channel, seconds after their readers get it. The desk sees "they've pushed the resignation" without anyone refreshing an app.
#beat-energy
Sources: your region. Word filter: (energy OR electricity OR "power grid" OR nuclear) AND !sport. Result: a beat reporter's private wire, across every outlet in the region, in English.
#foreign-desk-japan
Sources: Japanese apps. Consensus: 2. Don't translate: leave empty so everything is in English. Result: a foreign desk that reads no Japanese sees what NHK, Asahi and the tabloids are pushing, corroborated, within minutes.
How much will it post?
From a year of captured notifications: the median active news app sends about 10 pushes a day, the busiest ones 40 to 60. So a channel that mirrors one country with a dozen or two apps is a couple of hundred messages a day unfiltered. Fine for a "competitors" channel of three outlets. Unbearable for a country. Consensus is the fix: on a broad feed, requiring 3 sources typically cuts volume by more than 90% while keeping every story that matters, because a story that only one outlet ever pushed is, by definition, one nobody else considered urgent.
The forwarder posts one message per notification, in order, as soon as each is translated. If Slack rate-limits a very busy webhook (HTTP 429), AO.news waits the interval Slack asks for and retries, up to three times, before dropping that message and moving on. It does not batch or digest. See below.
What it does not do
- No digests or summaries. Every forwarded notification is its own message; if you want a 07:00 round-up, that is a different product. Ask us: some newsrooms receive a daily "who was first" report in Slack instead.
- No threading of a story's updates under one message. Clusters group notifications in the deck; in Slack each forwarded push is a separate message, and follow-up pushes on the same story are not threaded.
- No per-message deduplication across restarts. If AO.news's forwarder is restarted, it resumes from "now". It will not replay, and in rare cases may not re-send an alert that arrived during the restart.
- Highlight words (the deck's yellow-marker feature) do not affect Slack; use word filters instead.
- No Microsoft Teams, Discord or e-mail forwarding. For anything that is not Slack, use the Firehose API or the Telegram channel below.
Beyond Slack: Telegram and the API
Telegram. AO.news runs a public Telegram channel where a second model plays picky New York Times editor over the clusters of the last ten minutes and posts only what it scores 8/10 or higher. That works out to a handful of times a day, each post with a link to the cluster. It is a good "is anything happening?" companion for a phone: t.me/bestofAOnews.
The API. Maybe Slack is not where you want alerts, because you are feeding a CMS, a wall screen, a Teams bot or your own model. Every column has a matching Firehose URL that returns the same filtered stream as JSON with a polling cursor. Documentation: the Firehose API.
FAQ
Do I need to install a Slack app?
No. A standard incoming webhook is enough. Your Slack admin may need to approve the webhook depending on workspace settings.
Different feeds to different channels?
Yes. The webhook is per column. Each column can post to its own channel, or several columns can share one channel (the feed name on each message tells them apart).
Can I forward the original language instead of English?
Per language, yes: add it to Don't translate languages in deck settings and Slack receives the original wording for those sources.
Can I cite an alert later?
Every message links to ao.news/push/<id>, a permanent record of that notification with source and timestamp. Useful when a rival claims they were first.
Is my webhook URL safe?
The URL is stored with your deck's column configuration and used only to post to Slack. Treat it like a password: anyone with the URL can post to your channel. If it leaks, regenerate it in Slack and paste the new one.
What does it cost?
Slack forwarding and the API are part of newsroom plans; there is no per-message charge. The demo deck is free and shows exactly what a filtered column would forward. hello@ao.news.