Skip to Content
IntegrationsSlackNotifications

Slack Integration — Notifications

The short version

FlowState sends two kinds of deal alerts to Slack today, generated by the daily pipeline run and posted only to the channel(s) you’ve routed for them:

  • Overdue deal alerts — one message per deal that is past its close date and still open.
  • Weekly digest — one message per deal owner, every Monday, listing that owner’s stalled or inconsistent deals.

Nothing else is sent to Slack. APN sync events, billing, account, and platform events are not delivered to Slack in any form — see Notifications → Overview for how those are delivered (email). There is also no email equivalent of the two Slack alerts above: Slack is the only channel that delivers them, not a Slack copy of an email that also goes out.

The one-off connection test described in Getting started — a fixed-text direct message — is unrelated to both of these; it exists to verify the integration, not to alert on deal data.

Routing rules — which categories are actually live

Settings → Integrations → Slack and the set_slack_notification_routing MCP tool let you save routing rules that map an event category to a Slack channel:

{ "rules": [ { "event_category": "deals.outdated", "channel_id": "C0123456789" }, { "event_category": "deals.weekly_digest", "channel_id": "C0987654321" } ] }
  • event_category accepts any short lowercase identifier — the field itself has no fixed list to choose from — but only two values currently have a producer wired behind them:
    • deals.outdated — routes the overdue-deal alerts.
    • deals.weekly_digest — routes the Monday weekly digest.
  • channel_id is a Slack channel ID (e.g. C0123456789, found in the channel’s details in Slack) — not a #channel-name.
  • Every category must have a channel; there’s no way to save a category as “disabled” — to stop deliveries for a category, remove its rule instead.
  • Saving a rule under any other event_category (for example apn_conflict) is accepted and stored, but nothing reads it yet — it has no effect until FlowState adds a producer for that category.
  • If neither deals.outdated nor deals.weekly_digest has a routed channel, the daily pipeline run skips Slack delivery entirely for that tenant (no error, nothing sent). If only one of the two is routed, only that one is delivered.

What’s in the messages

Overdue deal alert — one per overdue deal, each time the daily pipeline run finds it still open past its close date:

  • Deal name, with a link to open it in HubSpot
  • Deal owner’s name
  • The close date it missed
  • Deal amount, formatted in the tenant’s configured currency
  • Days since the deal’s last recorded activity

Weekly digest — one message per deal owner, sent only on Mondays, listing every deal of theirs that is stalled (no recent activity) or flagged inconsistent, each with:

  • Deal name and link, amount, and pipeline stage
  • Close date and how many days it’s been inactive
  • The specific issue(s) found, and — where available — FlowState’s AI-generated summary of what action is needed

Both messages carry real deal and pipeline data (names, amounts, activity gaps) into whichever Slack channel you route them to — route them only to channels appropriate for that data.

Repeats and timing

  • Each overdue-deal alert is deduplicated for 7 days: once sent, the same deal won’t trigger another alert to Slack for a week even if it’s still overdue on the next daily run.
  • The weekly digest is deduplicated per owner per week: each owner gets at most one digest per week, sent on the first Monday run that finds them with stalled or inconsistent deals.
  • A Slack delivery failure (revoked token, workspace issue) is logged and skipped — it never blocks the rest of that day’s pipeline run for the tenant.