Campaign Management Guide
Overview
Marketing campaigns are coordinated efforts to generate leads, nurture relationships, and drive revenue. The CRM system provides comprehensive campaign management capabilities including planning, execution, tracking, and ROI measurement. This guide covers the complete campaign lifecycle from creation to performance analysis.
Campaign Types
The system supports various campaign types:
| Type | Description | Typical Duration | Best For |
|---|---|---|---|
| Targeted email marketing | 1-4 weeks | Lead nurturing, product launches, announcements | |
| Social Media | Social platform campaigns | 2-12 weeks | Brand awareness, engagement, community building |
| PPC | Pay-per-click advertising | 1-3 months | Lead generation, targeted traffic, conversions |
| Content | Content marketing initiatives | 3-6 months | Thought leadership, SEO, education |
| Event | In-person/virtual events | 1 day - 1 week | Networking, demonstrations, relationship building |
| Webinar | Online seminars | 1-2 hours | Education, product demos, thought leadership |
| Trade Show | Industry exhibitions | 1-5 days | Lead generation, brand visibility, networking |
| Direct Mail | Physical mail campaigns | 2-8 weeks | High-value prospects, account-based marketing |
| Digital | Multi-channel digital | 1-6 months | Comprehensive online presence |
| Traditional | Print, radio, TV | 4-12 weeks | Mass market, brand awareness |
| Integrated | Multi-channel coordinated | 3-12 months | Comprehensive marketing initiatives |
Campaign Status Lifecycle
Campaigns progress through defined statuses:
| Status | Description | Actions Available |
|---|---|---|
| Draft | Being prepared, not launched | Edit, Schedule, Activate, Delete |
| Scheduled | Scheduled for future start | Edit, Activate, Cancel |
| Active | Currently running | Pause, Complete, Cancel |
| Paused | Temporarily paused | Resume (Activate), Complete, Cancel |
| Completed | Successfully finished | View metrics, Archive |
| Cancelled | Cancelled before completion | View metrics, Archive |
Valid Transitions:
Draft → Scheduled → Active → Paused → Completed
↓ ↓ ↓
Cancelled Cancelled CancelledCreating Campaigns
Create Campaign
Endpoint: POST /api/v1/crm/campaigns
Authentication: Required (Bearer token)
Request Body:
{
"name": "Q1 2026 Enterprise Product Launch",
"type": "integrated",
"status": "draft",
"description": "Comprehensive launch campaign for Enterprise Platform 2.0. Multi-channel approach including email, social, webinars, and content marketing.",
"budget": 75000.00,
"currency": "USD",
"start_date": "2026-01-15",
"end_date": "2026-03-31",
"target_audience": "Enterprise IT decision makers, 500+ employee companies, manufacturing and technology sectors",
"objectives": [
"Generate 500 qualified enterprise leads",
"Achieve 15% conversion rate to opportunities",
"Close $2M in new business revenue",
"Establish thought leadership in enterprise integration"
],
"channels": [
"Email marketing (Mailchimp)",
"LinkedIn advertising",
"Industry webinars (3 sessions)",
"Content hub (case studies, whitepapers)",
"Trade show (ManufacturingTech Expo)"
],
"expected_leads": 500,
"expected_revenue": 2000000.00,
"owner_id": 15,
"tags": ["enterprise", "product-launch", "integrated", "q1-2026"],
"custom_fields": {
"campaign_theme": "Digital Transformation",
"landing_page": "https://example.com/enterprise-2.0",
"tracking_code": "ENT-Q1-2026"
}
}Required Fields:
name- Campaign nametype- Campaign typebudget- Allocated budgetstart_date- Campaign start dateend_date- Campaign end date
Optional Fields:
status- Initial status (defaults todraft)description- Detailed campaign descriptiontarget_audience- Target audience descriptionobjectives- Campaign objectives arraychannels- Marketing channels arrayexpected_leads- Target lead countexpected_revenue- Revenue targetowner_id- Campaign owner/managertags- Campaign categorizationcustom_fields- Additional campaign data
Response (201 Created):
{
"message": "Campaign created successfully",
"data": {
"id": 456,
"name": "Q1 2026 Enterprise Product Launch",
"type": "integrated",
"status": "draft",
"budget": 75000.00,
"currency": "USD",
"start_date": "2026-01-15",
"end_date": "2026-03-31",
"duration_in_days": 75,
"expected_leads": 500,
"expected_revenue": 2000000.00,
"actual_leads": 0,
"actual_revenue": 0.00,
"owner": {
"id": 15,
"name": "Marketing Manager",
"email": "marketing@yourcompany.com"
},
"created_at": "2025-12-18T00:00:00Z"
}
}Listing and Filtering Campaigns
Get All Campaigns
Endpoint: GET /api/v1/crm/campaigns
Query Parameters:
type(string) - Filter by campaign typestatus(string) - Filter by statusowner_id(integer) - Filter by campaign ownerstart_date_from(date) - Start date range beginstart_date_to(date) - Start date range endmin_budget(number) - Minimum budgetmax_budget(number) - Maximum budgetsearch(string) - Search in name and descriptionper_page(integer) - Results per page (default: 25)page(integer) - Page numbersort_by(string) - Sort field (start_date, budget, actual_revenue)sort_direction(string) - Sort direction (asc, desc)includes(string) - Relationships:owner,leads,opportunities
Example Request:
GET /api/v1/crm/campaigns?status=active&type=email&sort_by=start_date&sort_direction=descResponse (200 OK):
{
"data": [
{
"id": 456,
"name": "Q1 2026 Enterprise Product Launch",
"type": "integrated",
"status": "active",
"budget": 75000.00,
"actual_cost": 25000.00,
"expected_leads": 500,
"actual_leads": 157,
"expected_revenue": 2000000.00,
"actual_revenue": 425000.00,
"start_date": "2026-01-15",
"end_date": "2026-03-31",
"days_remaining": 62,
"owner": {
"id": 15,
"name": "Marketing Manager"
},
"created_at": "2025-12-18T00:00:00Z"
}
],
"meta": {
"current_page": 1,
"per_page": 25,
"total": 8,
"last_page": 1
}
}Specialized Campaign Lists
Active Campaigns:
GET /api/v1/crm/campaigns/activeUpcoming Campaigns (scheduled to start soon):
GET /api/v1/crm/campaigns/upcomingCompleted Campaigns:
GET /api/v1/crm/campaigns/completedViewing Campaign Details
Endpoint: GET /api/v1/crm/campaigns/{id}
Query Parameters:
includes(string) - Relationships:owner,leads,opportunities,activities
Response (200 OK):
{
"data": {
"id": 456,
"name": "Q1 2026 Enterprise Product Launch",
"type": "integrated",
"status": "active",
"description": "Comprehensive launch campaign for Enterprise Platform 2.0...",
"budget": 75000.00,
"actual_cost": 25000.00,
"currency": "USD",
"start_date": "2026-01-15",
"end_date": "2026-03-31",
"duration_in_days": 75,
"days_remaining": 62,
"target_audience": "Enterprise IT decision makers, 500+ employee companies...",
"objectives": [
"Generate 500 qualified enterprise leads",
"Achieve 15% conversion rate to opportunities",
"Close $2M in new business revenue"
],
"channels": [
"Email marketing (Mailchimp)",
"LinkedIn advertising",
"Industry webinars (3 sessions)"
],
"expected_leads": 500,
"actual_leads": 157,
"lead_conversion_rate": 31.4,
"expected_revenue": 2000000.00,
"actual_revenue": 425000.00,
"revenue_performance": 21.25,
"roi": 17.0,
"cost_per_lead": 159.24,
"owner": {
"id": 15,
"name": "Marketing Manager",
"email": "marketing@yourcompany.com"
},
"leads_count": 157,
"opportunities_count": 23,
"tags": ["enterprise", "product-launch", "integrated"],
"created_at": "2025-12-18T00:00:00Z",
"updated_at": "2026-01-28T10:00:00Z"
}
}Updating Campaigns
Endpoint: PUT /api/v1/crm/campaigns/{id} or PATCH /api/v1/crm/campaigns/{id}
Request Body (partial update):
{
"budget": 85000.00,
"actual_cost": 32000.00,
"actual_leads": 175,
"actual_revenue": 480000.00,
"notes": "Budget increased due to high-performing LinkedIn ads. Extended social media campaign by 2 weeks."
}Response (200 OK):
{
"message": "Campaign updated successfully",
"data": {
"id": 456,
"budget": 85000.00,
"actual_cost": 32000.00,
"actual_leads": 175,
"actual_revenue": 480000.00,
"roi": 15.0,
"updated_at": "2026-02-05T11:00:00Z"
}
}Campaign Status Management
Activate Campaign
Endpoint: POST /api/v1/crm/campaigns/{id}/activate
Request Body (optional):
{
"notes": "All assets ready. Email sequences configured. LinkedIn ads approved. Launching campaign."
}Response (200 OK):
{
"message": "Campaign activated successfully",
"data": {
"id": 456,
"status": "active",
"activated_at": "2026-01-15T09:00:00Z",
"updated_at": "2026-01-15T09:00:00Z"
}
}Pause Campaign
Endpoint: POST /api/v1/crm/campaigns/{id}/pause
Request Body:
{
"reason": "Pausing LinkedIn ads - need to revise creative based on low engagement. Will resume next week with updated assets."
}Response (200 OK):
{
"message": "Campaign paused successfully",
"data": {
"id": 456,
"status": "paused",
"paused_at": "2026-02-10T14:00:00Z",
"pause_reason": "Pausing LinkedIn ads - need to revise creative...",
"updated_at": "2026-02-10T14:00:00Z"
}
}Complete Campaign
Endpoint: POST /api/v1/crm/campaigns/{id}/complete
Request Body (optional):
{
"final_notes": "Campaign completed successfully. Exceeded lead target by 15%. Revenue target 65% achieved with strong pipeline remaining. Key learnings: LinkedIn ads performed best, webinars had 40% attendance rate."
}Response (200 OK):
{
"message": "Campaign completed successfully",
"data": {
"id": 456,
"status": "completed",
"completed_at": "2026-03-31T23:59:59Z",
"final_metrics": {
"total_leads": 575,
"lead_target_achievement": 115.0,
"total_revenue": 1300000.00,
"revenue_target_achievement": 65.0,
"total_cost": 78000.00,
"roi": 16.67,
"cost_per_lead": 135.65
},
"updated_at": "2026-03-31T23:59:59Z"
}
}Cancel Campaign
Endpoint: POST /api/v1/crm/campaigns/{id}/cancel
Request Body:
{
"reason": "Product launch delayed to Q2. Campaign cancelled. Will reschedule for Q2 with updated messaging and timeline."
}Response (200 OK):
{
"message": "Campaign cancelled successfully",
"data": {
"id": 456,
"status": "cancelled",
"cancelled_at": "2026-01-20T10:00:00Z",
"cancellation_reason": "Product launch delayed to Q2...",
"partial_metrics": {
"leads_generated": 47,
"cost_incurred": 12000.00
},
"updated_at": "2026-01-20T10:00:00Z"
}
}Campaign Performance
Get Campaign Metrics
Endpoint: GET /api/v1/crm/campaigns/{id}/metrics
Response (200 OK):
{
"data": {
"campaign_id": 456,
"campaign_name": "Q1 2026 Enterprise Product Launch",
"performance_summary": {
"budget": 85000.00,
"actual_cost": 78000.00,
"budget_utilization": 91.76,
"expected_leads": 500,
"actual_leads": 575,
"lead_target_achievement": 115.0,
"expected_revenue": 2000000.00,
"actual_revenue": 1300000.00,
"revenue_target_achievement": 65.0,
"roi": 16.67,
"cost_per_lead": 135.65,
"lead_to_opportunity_rate": 18.43,
"opportunity_to_customer_rate": 42.45
},
"channel_performance": [
{
"channel": "LinkedIn advertising",
"cost": 35000.00,
"leads": 275,
"cost_per_lead": 127.27,
"conversion_rate": 22.5
},
{
"channel": "Email marketing",
"cost": 12000.00,
"leads": 180,
"cost_per_lead": 66.67,
"conversion_rate": 15.3
},
{
"channel": "Webinars",
"cost": 15000.00,
"leads": 120,
"cost_per_lead": 125.00,
"conversion_rate": 18.7
}
],
"timeline_performance": {
"week_1": {"leads": 45, "cost": 8500.00},
"week_2": {"leads": 67, "cost": 10200.00},
"week_3": {"leads": 82, "cost": 11500.00}
},
"lead_quality_metrics": {
"qualified_leads": 485,
"qualification_rate": 84.35,
"opportunities_created": 106,
"opportunity_rate": 18.43,
"deals_closed": 45,
"close_rate": 42.45
}
}
}Compare Campaign Performance
Endpoint: GET /api/v1/crm/campaigns/compare
Query Parameters:
campaign_ids(array) - Campaign IDs to compare
Example:
GET /api/v1/crm/campaigns/compare?campaign_ids[]=456&campaign_ids[]=457&campaign_ids[]=458Response (200 OK):
{
"data": {
"campaigns": [
{
"id": 456,
"name": "Q1 2026 Enterprise Product Launch",
"type": "integrated",
"leads": 575,
"cost": 78000.00,
"revenue": 1300000.00,
"roi": 16.67,
"cost_per_lead": 135.65
},
{
"id": 457,
"name": "Q4 2025 Email Nurture Campaign",
"type": "email",
"leads": 320,
"cost": 15000.00,
"revenue": 425000.00,
"roi": 28.33,
"cost_per_lead": 46.88
}
],
"comparison_insights": {
"best_roi": {
"campaign_id": 457,
"campaign_name": "Q4 2025 Email Nurture Campaign",
"roi": 28.33
},
"lowest_cost_per_lead": {
"campaign_id": 457,
"cost_per_lead": 46.88
},
"highest_revenue": {
"campaign_id": 456,
"revenue": 1300000.00
}
}
}
}Business Scenarios
Scenario 1: Launching Multi-Channel Campaign
Context: Product launch requiring coordinated email, social, and event marketing
Workflow:
# 1. Create campaign in draft
POST /api/v1/crm/campaigns
{
"name": "Enterprise 2.0 Launch - Q1 2026",
"type": "integrated",
"status": "draft",
"budget": 75000.00,
"start_date": "2026-01-15",
"end_date": "2026-03-31",
"expected_leads": 500,
"expected_revenue": 2000000.00,
"channels": ["Email", "LinkedIn", "Webinars", "Trade Show"],
"owner_id": 15
}
# 2. Plan campaign assets and activities
# - Create landing page
# - Prepare email sequences
# - Design LinkedIn ads
# - Schedule webinars
# - Book trade show booth
# 3. Schedule campaign
PATCH /api/v1/crm/campaigns/456
{
"status": "scheduled",
"custom_fields": {
"landing_page_ready": true,
"email_sequences_configured": true,
"linkedin_ads_approved": true
}
}
# 4. Activate on start date
POST /api/v1/crm/campaigns/456/activate
{
"notes": "All assets ready. Campaign launched."
}
# 5. Track leads as they come in
# Leads automatically tagged with campaign_id when created
# 6. Update metrics weekly
PATCH /api/v1/crm/campaigns/456
{
"actual_leads": 157,
"actual_cost": 25000.00,
"actual_revenue": 425000.00
}
# 7. Monitor performance
GET /api/v1/crm/campaigns/456/metrics
# 8. Complete campaign at end date
POST /api/v1/crm/campaigns/456/complete
{
"final_notes": "Campaign completed. Target exceeded by 15%."
}Scenario 2: Optimizing Underperforming Campaign
Context: Campaign not meeting targets, need to adjust
Workflow:
# 1. Review current performance
GET /api/v1/crm/campaigns/457/metrics
# Findings:
# - LinkedIn ads underperforming (high cost, low conversions)
# - Email performing well
# - Webinars exceeding expectations
# 2. Pause campaign to make changes
POST /api/v1/crm/campaigns/457/pause
{
"reason": "Pausing to optimize underperforming LinkedIn ads and reallocate budget to high-performing channels."
}
# 3. Adjust budget allocation
PATCH /api/v1/crm/campaigns/457
{
"custom_fields": {
"linkedin_budget": 15000.00,
"email_budget": 25000.00,
"webinar_budget": 20000.00,
"optimization_notes": "Reduced LinkedIn spend by 50%. Increased email and webinar budgets."
}
}
# 4. Resume campaign with optimizations
POST /api/v1/crm/campaigns/457/activate
{
"notes": "Resuming campaign with optimized budget allocation. New LinkedIn creative deployed."
}
# 5. Monitor improved performance
GET /api/v1/crm/campaigns/457/metricsScenario 3: Campaign ROI Analysis
Context: Quarter end - analyze all campaign ROI for planning
Workflow:
# 1. Get all completed campaigns for quarter
GET /api/v1/crm/campaigns?status=completed&start_date_from=2026-01-01&start_date_to=2026-03-31
# 2. Compare campaign performance
GET /api/v1/crm/campaigns/compare?campaign_ids[]=456&campaign_ids[]=457&campaign_ids[]=458
# 3. Analyze individual high performers
GET /api/v1/crm/campaigns/457/metrics
# Insights:
# - Email campaigns had best ROI (28% vs 16% integrated)
# - Webinars had high engagement, good conversion
# - Social media ads had high cost per lead
# - Trade shows generated fewer leads but higher value
# 4. Document learnings for next quarter
PATCH /api/v1/crm/campaigns/456
{
"custom_fields": {
"key_learnings": [
"LinkedIn ads need better targeting",
"Webinars are highly effective - do more",
"Email nurture sequences outperform cold outreach",
"Trade show leads convert at 2x rate but longer cycle"
],
"recommendations_q2": [
"Increase webinar frequency to monthly",
"Refine LinkedIn audience targeting",
"Develop longer email nurture sequences",
"Focus trade shows on enterprise accounts only"
]
}
}Best Practices
1. Set Clear Objectives
SMART Goals:
- Specific: Generate 500 enterprise leads from manufacturing sector
- Measurable: Track leads, opportunities, revenue
- Achievable: Based on historical performance and budget
- Relevant: Aligned with business growth targets
- Time-bound: Q1 2026 (Jan 15 - Mar 31)
2. Track Everything
Essential Metrics:
- Budget vs actual cost
- Expected vs actual leads
- Lead quality (qualification rate)
- Conversion rates (lead → opportunity → customer)
- ROI and cost per acquisition
- Channel performance
3. Test and Optimize
Continuous Improvement:
- A/B test messaging and creative
- Monitor channel performance daily
- Reallocate budget to high performers
- Pause underperforming channels
- Iterate based on data
4. Integrate with Sales
Sales Alignment:
- Define lead qualification criteria
- Set SLAs for lead follow-up
- Track lead-to-opportunity conversion
- Measure campaign influence on deals
- Gather sales feedback on lead quality
5. Document Learnings
Knowledge Capture:
- What worked well
- What didn't work
- Unexpected findings
- Recommendations for future
- Channel-specific insights
Troubleshooting
Low Lead Quality
Issue: Campaign generating leads but low qualification rate
Analysis:
- Review targeting criteria
- Analyze lead sources
- Check messaging alignment
- Evaluate offer relevance
Actions:
# Pause campaign
POST /api/v1/crm/campaigns/456/pause
{
"reason": "Low lead quality. Refining targeting and messaging."
}
# Adjust targeting and messaging
# Relaunch with improvements
POST /api/v1/crm/campaigns/456/activateBudget Overrun
Issue: Campaign exceeding budget
Actions:
# Review spend by channel
GET /api/v1/crm/campaigns/456/metrics
# Pause high-cost, low-return channels
# Reallocate budget
PATCH /api/v1/crm/campaigns/456
{
"custom_fields": {
"budget_adjustment": "Paused PPC, reallocated to email"
}
}Poor ROI
Issue: Campaign not generating positive ROI
Analysis:
- Cost per lead too high
- Conversion rates too low
- Deal sizes smaller than expected
- Sales cycle longer than planned
Solutions:
- Improve targeting to reduce cost
- Enhance lead nurturing to improve conversion
- Focus on higher-value opportunities
- Adjust ROI expectations for channel/product
Related Documentation
- Lead Management - Managing campaign-generated leads
- Customer Management - Customer acquisition campaigns
- Opportunity Pipeline - Campaign-sourced opportunities
- Activity Management - Campaign activities and events