Churned clients
The Churned clients page is a parallel workspace for monitoring companies that have churned — former customers, lost deals, dormant accounts. It uses the same sync engine, classification, and Slack/Teams delivery as the active dashboard, but with three differences:
| Active | Churned |
|---|---|
| Cron auto-syncs every interval | Manual sync only — you click Sync now when you want fresh signals |
Signals live in the signals table | Signals live in churned_signals — fully isolated |
| Counts toward your "tracked companies" list on the Companies page | Lives on a separate page at /churned/companies |
Where things live
/churned— signal feed (same UI as the main dashboard, scoped to churned)/churned/companies— company list, add / import, filters/churned/companies/:id— edit a churned company, view its signal history
Moving companies between scopes
- Active → Churned: open any active company detail dialog → click Mark as churned. The company plus its signal history moves to the churned scope in a single operation. The original UUID is preserved so external links still work.
- Churned → Active: open a churned company detail dialog → click Reactivate. Reverse of the above.
The auto-sync cron picks up the reactivated company on its next tick.
Sync semantics
Churned sync uses the same linkdapi credit budget as active. The smart-sync planner shows the cost preview before commit — you can see exactly how many credits a churned sync will burn before clicking through. If a churned sync is running and the active cron fires, the active job queues behind the churned one (single shared FIFO queue, 1 running + 2 queued cap).
Slack + AI parity
Churned signals flow through the same delivery rules:
- Auto-send high to Slack applies if the org-level setting is ON
- AI-suggested tab works the same way — high-importance, unsent, dismissable
- Manual Send to Slack via the recipient picker — channels + users multi-select
- Carousel is the default Slack format on churned sends too (see docs:recipient-picker)
The Slack send audit log is recorded in churned_signal_sends (separate from active) so per-scope deliverability tracking stays clean.
Signal types — same prompts, same descriptions
Churned scope uses the same per-org signal types as active. There's no per-scope override. That means if you broaden the hiring description (see docs:signal-types) so Claude flags LinkedIn-post hiring INTENT ("we are hiring for product design lead") instead of only filled roles, that rule applies the next time you manually sync a churned company too.
Signal-type descriptions, sources, and the importance rubric are global to your tenant. The only thing scope changes is which company list the sync reads from and which signals table it writes to.
Row affordances
Every signal row on /churned has the same controls as the active dashboard:
- View → button on the right rail (or inline on mobile) — opens the signal detail modal
- Checkbox for bulk-select → Send-to-Slack footer slides up the same way
- Send button per-row, when Slack/Teams is connected
- Organisation chip when the company has an organisation label AND that label is in the current filter selection (see docs:organisations)
Moving signals with the company
When you move a company between scopes, its signal history moves too — every signal, signal_send, dismissal timestamp, and importance rating. UUIDs are preserved so older Slack permalinks pointing at a signal id still resolve once the row lands in the new scope.
Re-activating a churned company therefore brings back its whole audit trail — no historic gaps.
When NOT to use churned
If a company is just paused mid-deal, leave it active. The churned scope is for companies you've explicitly decided to deprioritise — wins-backs, dormant accounts, post-loss monitoring. Active companies share the smart-sync auto-cadence; churned needs a deliberate click to refresh.