Skip to content

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:

TypeDescriptionTypical DurationBest For
EmailTargeted email marketing1-4 weeksLead nurturing, product launches, announcements
Social MediaSocial platform campaigns2-12 weeksBrand awareness, engagement, community building
PPCPay-per-click advertising1-3 monthsLead generation, targeted traffic, conversions
ContentContent marketing initiatives3-6 monthsThought leadership, SEO, education
EventIn-person/virtual events1 day - 1 weekNetworking, demonstrations, relationship building
WebinarOnline seminars1-2 hoursEducation, product demos, thought leadership
Trade ShowIndustry exhibitions1-5 daysLead generation, brand visibility, networking
Direct MailPhysical mail campaigns2-8 weeksHigh-value prospects, account-based marketing
DigitalMulti-channel digital1-6 monthsComprehensive online presence
TraditionalPrint, radio, TV4-12 weeksMass market, brand awareness
IntegratedMulti-channel coordinated3-12 monthsComprehensive marketing initiatives

Campaign Status Lifecycle

Campaigns progress through defined statuses:

StatusDescriptionActions Available
DraftBeing prepared, not launchedEdit, Schedule, Activate, Delete
ScheduledScheduled for future startEdit, Activate, Cancel
ActiveCurrently runningPause, Complete, Cancel
PausedTemporarily pausedResume (Activate), Complete, Cancel
CompletedSuccessfully finishedView metrics, Archive
CancelledCancelled before completionView metrics, Archive

Valid Transitions:

Draft → Scheduled → Active → Paused → Completed
           ↓           ↓        ↓
      Cancelled   Cancelled  Cancelled

Creating Campaigns

Create Campaign

Endpoint: POST /api/v1/crm/campaigns

Authentication: Required (Bearer token)

Request Body:

json
{
  "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 name
  • type - Campaign type
  • budget - Allocated budget
  • start_date - Campaign start date
  • end_date - Campaign end date

Optional Fields:

  • status - Initial status (defaults to draft)
  • description - Detailed campaign description
  • target_audience - Target audience description
  • objectives - Campaign objectives array
  • channels - Marketing channels array
  • expected_leads - Target lead count
  • expected_revenue - Revenue target
  • owner_id - Campaign owner/manager
  • tags - Campaign categorization
  • custom_fields - Additional campaign data

Response (201 Created):

json
{
  "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 type
  • status (string) - Filter by status
  • owner_id (integer) - Filter by campaign owner
  • start_date_from (date) - Start date range begin
  • start_date_to (date) - Start date range end
  • min_budget (number) - Minimum budget
  • max_budget (number) - Maximum budget
  • search (string) - Search in name and description
  • per_page (integer) - Results per page (default: 25)
  • page (integer) - Page number
  • sort_by (string) - Sort field (start_date, budget, actual_revenue)
  • sort_direction (string) - Sort direction (asc, desc)
  • includes (string) - Relationships: owner, leads, opportunities

Example Request:

bash
GET /api/v1/crm/campaigns?status=active&type=email&sort_by=start_date&sort_direction=desc

Response (200 OK):

json
{
  "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:

bash
GET /api/v1/crm/campaigns/active

Upcoming Campaigns (scheduled to start soon):

bash
GET /api/v1/crm/campaigns/upcoming

Completed Campaigns:

bash
GET /api/v1/crm/campaigns/completed

Viewing Campaign Details

Endpoint: GET /api/v1/crm/campaigns/{id}

Query Parameters:

  • includes (string) - Relationships: owner, leads, opportunities, activities

Response (200 OK):

json
{
  "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):

json
{
  "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):

json
{
  "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):

json
{
  "notes": "All assets ready. Email sequences configured. LinkedIn ads approved. Launching campaign."
}

Response (200 OK):

json
{
  "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:

json
{
  "reason": "Pausing LinkedIn ads - need to revise creative based on low engagement. Will resume next week with updated assets."
}

Response (200 OK):

json
{
  "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):

json
{
  "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):

json
{
  "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:

json
{
  "reason": "Product launch delayed to Q2. Campaign cancelled. Will reschedule for Q2 with updated messaging and timeline."
}

Response (200 OK):

json
{
  "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):

json
{
  "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:

bash
GET /api/v1/crm/campaigns/compare?campaign_ids[]=456&campaign_ids[]=457&campaign_ids[]=458

Response (200 OK):

json
{
  "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:

bash
# 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:

bash
# 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/metrics

Scenario 3: Campaign ROI Analysis

Context: Quarter end - analyze all campaign ROI for planning

Workflow:

bash
# 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:

bash
# 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/activate

Budget Overrun

Issue: Campaign exceeding budget

Actions:

bash
# 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

Documentation for SynthesQ CRM/ERP Platform