Newsletter (Listmonk)¶
Integrated with Listmonk for opt-in mailing lists and newsletter campaigns. Enable with LISTMONK_SYNC_ENABLED=true.

Managed Lists¶
The platform automatically creates and maintains 13 subscriber lists in Listmonk:
| List Name | Source | Tags |
|---|---|---|
| All Contacts | All synced records | v2 |
| Campaign Participants | Users who sent advocacy emails | v2, influence |
| Locations - All | Address occupants with email | v2, map |
| Support Level 1-4 | Addresses by canvass support level | v2, map, support |
| Has Campaign Sign | Addresses with a yard sign | v2, map, signs |
| Users | Active non-temp platform accounts | v2, users |
| Volunteers | Shift signups | v2, map, shifts |
| Canvassers | Users who completed canvass sessions | v2, map, canvass |
| Subscribers | Active paid subscribers | v2, payments |
| Donors | Users who completed a donation | v2, payments |
Bulk Sync¶
The admin panel provides a manual "Sync All" action that synchronizes four data sources to Listmonk:
- Campaign participants -- distinct email senders from advocacy campaigns
- Location contacts -- address occupants with email, mapped to support level and sign lists
- Users -- active platform accounts (excludes TEMP users)
- CRM tags -- contacts tagged in the People module, synced to tag-linked Listmonk lists
Each source upserts subscribers (creates new or merges into existing), preserving existing list memberships and merging metadata attributes.
Event-Driven Sync¶
In addition to bulk sync, the platform fires real-time subscriber upserts on application events:
- Shift signup -- adds to Volunteers list
- Canvass session completed -- adds to Canvassers list
- Campaign email sent -- adds to Campaign Participants list
- Subscription activated -- adds to Subscribers list
- Donation completed -- adds to Donors list
- Product purchased -- adds to Donors list
- Address updated (canvass visit) -- updates support level list membership
- Re-engagement email sent -- updates Volunteers list metadata
- CRM tag changed -- adds/removes from tag-linked Listmonk lists
All event-driven syncs are fire-and-forget and silently fail if Listmonk is unreachable.
Admin Routes¶
/app/listmonk(sidebar: "Newsletter") -- sync status, subscriber counts, campaign stats, and manual sync trigger