DashboardAugust 2026
Audience Counts That Match What Sends
- Segment and topic counts are computed by the send path’s own counting instead of a
memberCountcolumn written at create and never recomputed. The only segment in production was rendering a six-month-old number, and the details sheet showed a different figure for that same segment on the same page - Those counts respect channel eligibility and join contact, so bounced, complained, and globally unsubscribed people stop counting as subscribers — one topic read 5 subscribers and would have sent to 2. Double opt-in pending subscribers get their own count, so turning on a compliance feature no longer shrinks your audience with no number explaining where the people went
- The segment Status filter resolves to
email_status, the column every send path already reads, instead of the deprecatedcontact.statusthat defaults to active. Status equals Active matched every contact in the org, and Unsubscribed, Bounced, and Complained could never match at all - The list operators on that field emit arrays. Two of the four failed every time behind a generic “Failed to preview segment” with the previous count left on screen; a failed preview now says why. Event filters were fully implemented and unreachable from any UI
- Fix: CSV import merges custom properties instead of overwriting them. Every update-strategy import silently deleted whatever properties the file did not mention, including the ones segments filter on, with no undo
- Fix: the contact timeline distinguishes events aged out past retention from nothing ever having happened, stops swallowing load-more failures, and no longer caps out around 120 events regardless of real volume
- Fix: a failed audience fetch renders an error with a retry instead of an empty list that reads as an empty org
- Fix: contacts health buckets are a filter you can see and undo, and CSV export ships the search the list actually applied
Platform v0.23.0

