Overview
Subscribers
People who receive your campaigns
Lists
Groups of subscribers organized by topic
Campaigns
Email messages sent to lists
Templates
Reusable email layouts and designs
Subscribers
Subscribers are individuals who receive your campaigns. Each subscriber has a unique email address and associated metadata.Subscriber Attributes
Basic Information
Basic Information
Every subscriber has:
- UUID: Unique identifier (auto-generated)
- Email: Unique email address (required)
- Name: Subscriber’s name (required)
- Status: Current status (enabled, disabled, or blocklisted)
- Created At: Timestamp when subscriber was added
- Updated At: Timestamp of last modification
Custom Attributes
Custom Attributes
Subscribers can have custom attributes stored as JSON:Use Cases for Custom Attributes:
- Geographic targeting
- Product/plan segmentation
- Personalization in campaigns
- Behavior tracking
- Custom fields for your use case
Subscriber Statuses
Subscriber Statuses
Subscribers have three possible statuses defined in Status Transitions:
schema.sql:4:- Enabled
- Disabled
- Blocklisted
Status:
enabled- Default status for active subscribers
- Can receive all campaigns
- Can manage their subscriptions
- Can unsubscribe from lists
This is the normal, active state for subscribers.
Subscription Management
Subscribers can be subscribed to multiple lists, each with its own subscription status.Subscription Statuses
Subscription Statuses
Defined in Subscription Status Flow:
schema.sql:5, each subscriber-list relationship has one of three statuses:- Unconfirmed
- Confirmed
- Unsubscribed
Status:
unconfirmed- Subscriber has been added but not confirmed
- Used with double opt-in lists
- Subscriber receives confirmation email
- Cannot receive regular campaigns until confirmed
- Can receive opt-in confirmation campaigns
- Subscriber signs up or is imported
- Status set to
unconfirmed - Confirmation email sent (if
send_optin_confirmationenabled) - Subscriber clicks confirmation link
- Status changes to
confirmed
Double opt-in is recommended for compliance with GDPR and best practices.
Lists
Lists are groups of subscribers organized by topic, interest, or purpose. Subscribers can belong to multiple lists simultaneously.List Types
List Types
Defined in
schema.sql:1, lists can be one of three types:- Public
- Private
- Temporary
Type:
public- Visible on the public subscription page
- Subscribers can self-subscribe
- Appears in public subscription forms
- Used for newsletters, announcements, etc.
- General newsletter
- Product updates
- Blog post notifications
- Community announcements
Opt-in Types
Opt-in Types
Defined in
schema.sql:2, lists support two opt-in methods:- Single Opt-in
- Double Opt-in
Type:
single- Subscribers are immediately confirmed
- No confirmation email required
- Faster subscription process
- Higher conversion rate
- Lower compliance confidence
- Internal lists
- Trusted sources
- Low-risk communications
- When speed matters more than verification
List Status
List Status
Defined in
schema.sql:3, lists can have two statuses:- Active
- Archived
Status:
active- List is operational and visible (based on type)
- Can be used in campaigns
- Accepts new subscribers
- Normal operational state
List Attributes
List Attributes
Lists have several attributes for organization and configuration:Attributes:
- UUID: Unique identifier for external references
- Name: Display name (required)
- Type: public, private, or temporary
- Opt-in: single or double
- Status: active or archived
- Tags: Array of strings for categorization
- Description: Optional internal notes
Campaigns
Campaigns are email messages sent to one or more lists. They are the primary way to communicate with your subscribers.Campaign Lifecycle
Campaign Lifecycle
Defined in Status Flow Diagram:
schema.sql:6, campaigns progress through several statuses:Draft
Status:
draft- Campaign is being created or edited
- Not visible to subscribers
- Can be freely modified
- Not sending any messages
- Edit content
- Change recipients
- Configure settings
- Send test emails
- Schedule or start
Scheduled
Status:
scheduled- Campaign is scheduled for future sending
- Will automatically start at configured time
- Can still be edited or cancelled
- Shows scheduled time
running- At scheduled timedraft- If unscheduledcancelled- If cancelled before start
Running
Status:
running- Campaign is actively sending
- Messages being delivered to subscribers
- Progress tracked in real-time
- Cannot be edited (content locked)
- Sent count (current / total)
- Error count
- Real-time progress
- Estimated completion time
- Pause
- Cancel
- View analytics
Paused
Status:
paused- Campaign temporarily stopped
- Can be resumed later
- Progress saved
- No messages sent while paused
- Emergency stop
- Address issues
- Rate limiting
- Manual control
- Resume (returns to
running) - Cancel
Cancelled
Status:
cancelled- Campaign permanently stopped
- Cannot be resumed
- Partial send recorded
- Final state (terminal)
- Records show messages sent before cancellation
- Remaining subscribers not contacted
- Analytics available for sent portion
Campaign Types
Campaign Types
Defined in
schema.sql:7, campaigns have two types:- Regular
- Opt-in
Type:
regular- Standard marketing/newsletter campaigns
- Sent to confirmed subscribers
- Respects subscription preferences
- Most common campaign type
- Status:
enabled - Subscription status:
confirmed - On selected lists
Content Types
Content Types
Defined in
schema.sql:8, campaigns support multiple content formats:- Rich Text
- HTML
- Plain Text
- Markdown
- Visual
Type:
richtext- Visual WYSIWYG editor
- Easy formatting with toolbar
- No coding required
- Best for beginners
- Automatically generates HTML
- Bold, italic, underline
- Headings and paragraphs
- Lists and links
- Images
- Basic styling
Campaign Attributes
Campaign Attributes
Campaigns have comprehensive configuration options:Key Attributes:
- name: Internal reference name
- subject: Email subject line (supports templates)
- from_email: Sender email address
- body: Campaign content (format depends on content_type)
- altbody: Plain text alternative (optional)
- template_id: Wrapper template to use
- lists: Array of list IDs to send to
- send_at: Scheduled send time (null for immediate)
- messenger: Delivery method (“email” or custom)
- headers: Custom email headers as JSON
- attribs: Custom campaign attributes as JSON
- archive: Publish to public archive
- archive_slug: URL slug for archived campaign
- to_send: Total subscribers to contact
- sent: Messages successfully sent
- max_subscriber_id: Highest subscriber ID in campaign
- last_subscriber_id: Last processed subscriber ID
Campaign Analytics
Campaign Analytics
listmonk tracks detailed analytics for each campaign:Metrics Available:Analytics Tables:From
Delivery Metrics
- To Send: Total target audience
- Sent: Successfully delivered
- Bounces: Delivery failures
- Bounce Rate: Percentage of bounces
Engagement Metrics
- Views: Email opens (tracked via pixel)
- Open Rate: Percentage who opened
- Clicks: Link clicks
- Click Rate: Percentage who clicked
- Click-to-Open Rate: Clicks / Opens
schema.sql:156-166:- campaign_views: Tracks individual email opens with timestamps
- link_clicks: Tracks individual link clicks with subscriber and timestamp
- bounces: Records bounce events with type and metadata
mat_dashboard_charts (schema.sql:399-432) provides:- 30-day rolling link click trends
- 30-day rolling campaign view trends
- Aggregated by date for visualization
Analytics data is retained even if subscribers are deleted, ensuring accurate historical reporting.
Templates
Templates are reusable email layouts that wrap campaign content. They provide consistent branding and structure across all campaigns.Template Types
Template Types
Defined in
schema.sql:10, templates have three types:- Campaign
- Campaign Visual
- Transaction
Type:
campaign- Standard email templates
- Wrap campaign content
- Include header, footer, styling
- Most common template type
The
{{ template "content" . }} directive inserts campaign content into the template.Template Structure
Template Structure
Templates use Go’s template syntax for dynamic content:Template Variables:listmonk provides these variables in all templates:Template Functions:
- Campaign Variables
- Subscriber Variables
- URL Variables
{{ .Subject }}- Campaign subject{{ .FromEmail }}- Sender email{{ .Date }}- Current date/time{{ .Campaign.Name }}- Campaign name{{ .Campaign.UUID }}- Campaign UUID{{ .Campaign.Tags }}- Campaign tags
Default Template
Default Template
Every listmonk installation can have one default template (schema.sql:85):Default Template Behavior:
- Used when no template explicitly selected
- Only one template can be default
- Ensures consistent branding
- Can be changed anytime
- Navigate to Settings → Templates
- Edit desired template
- Check “Set as default”
- Save
The default template is automatically applied to new campaigns unless you choose a different template.
Template Best Practices
Template Best Practices
Include Required Links
Always include:
- Unsubscribe link (often required by law)
- Physical mailing address (CAN-SPAM requirement)
- Preference management link
- View in browser link
Optimize for Email Clients
- Use table-based layouts for better compatibility
- Inline CSS for older clients
- Test in multiple email clients
- Provide plain text alternative
- Keep width ≤ 600px
Brand Consistency
- Use your brand colors
- Include logo
- Consistent typography
- Match website design
- Professional footer
Relationships
Understanding how these concepts relate to each other:Summary
Subscribers
Statuses: enabled, disabled, blocklistedSubscription Statuses: unconfirmed, confirmed, unsubscribedFeatures: Custom JSONB attributes, multiple list subscriptions
Lists
Types: public, private, temporaryOpt-in: single, doubleStatus: active, archived
Campaigns
Statuses: draft, scheduled, running, paused, cancelled, finishedTypes: regular, optinContent: richtext, html, plain, markdown, visual
Templates
Types: campaign, campaign_visual, txFeatures: Go template syntax, variables, functions, default template support
Next Steps
Templates Guide
Create custom email templates
Campaign Management
Learn advanced campaign features
Subscriber Management
Import, segment, and manage subscribers
Analytics
Track campaign performance
API Reference
Automate with the REST API
Bounce Handling
Configure automatic bounce processing