AO.news

Integration · Slack

Breaking news alerts, straight into Slack.

Every column in an AO.news deck can forward to a Slack channel. Pick the sources, set a keyword or consensus filter, paste a webhook. The newsroom then sees the story seconds after the first push goes out.

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

  1. 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.
  2. 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.
  3. Set the filters (see below): keyword filter, consensus, score. Do this before connecting Slack; the forwarder mirrors exactly what the column shows.
  4. Paste the webhook. Under Advanced, field Slack integration webhook url. Save the feed.
  5. 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.
Access

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:

FilterWhereWhat it does
SourcesFeed setup, checkbox list with country flags and a search boxWhich apps and headline robots the column (and Slack) listens to. Pick a whole country with one click, or hand-pick outlets.
ConsensusFeed setup, slider 1 to 40Only 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 filtersFeed setup, text fieldOnly forward notifications matching a query, applied to the English translation. Supports AND, OR, ! and parentheses. For example: (ukraine OR kyiv) AND !sport.
ScoreFeed setup, slider 1 to 10Minimum 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 translateDeck settingsNot 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.

Live · what a "3+ sources" column forwards right nowsame filter, in the deck
Try it

Watch the next story break, in the live deck.

Open the example deck: hundreds of news apps, clustered by story, updating in real time. Newsroom access unlocks the full notification text, Slack and the API. Write to hello@ao.news.