UNPKG

monte-carlo-simulator

Version:

Business decision framework with Monte Carlo risk analysis - instant via npx

252 lines (215 loc) 9.34 kB
name: Marketing Campaign ROI Analysis category: Marketing & Growth description: Multi-channel marketing ROI analysis with customer acquisition modeling, lifetime value optimization, and ARR-based budget allocation version: 2.0.0 tags: [marketing, roi, customer-acquisition, digital-marketing, campaign-optimization] parameters: - key: annualRecurringRevenue label: Company ARR ($) type: number default: 3600000 min: 250000 max: 50000000 step: 100000 description: Annual recurring revenue for marketing budget planning - key: marketingBudgetPercent label: Marketing Budget (% of ARR) type: number default: 15.0 min: 5.0 max: 30.0 step: 0.5 description: "Marketing spend as percentage of ARR (typical B2B: 8-15%, B2C: 15-25%)" - key: campaignDuration label: Campaign Duration (months) type: number default: 6 min: 1 max: 18 step: 1 description: Length of marketing campaign for ROI analysis - key: targetMarket label: Target Market type: select default: b2b-smb options: [b2c-mass, b2c-premium, b2b-smb, b2b-enterprise, marketplace] description: Primary target market affecting acquisition costs and conversion rates - key: acquisitionModel label: Acquisition Model type: select default: multi-channel options: [digital-only, traditional-only, multi-channel, influencer-led, content-driven] description: Primary customer acquisition approach - key: averageOrderValue label: Average Order Value ($) type: number default: 275 min: 15 max: 50000 step: 25 description: Average customer transaction value - key: customerLifetimeValue label: Customer Lifetime Value ($) type: number default: 1850 min: 50 max: 100000 step: 50 description: Projected total value per acquired customer - key: seasonalityFactor label: Campaign Seasonality type: select default: neutral options: [off-peak, neutral, high-demand, holiday-premium] description: Seasonal timing impact on campaign performance - key: competitiveEnvironment label: Competitive Environment type: select default: moderate options: [low-competition, moderate, high-competition, saturated-market] description: Market competition level affecting acquisition costs groups: - name: Budget & Timeline description: ARR-based budget allocation and campaign duration parameters: [annualRecurringRevenue, marketingBudgetPercent, campaignDuration] - name: Market Context description: Target audience and competitive landscape parameters: [targetMarket, competitiveEnvironment, seasonalityFactor] - name: Customer Economics description: Revenue metrics and acquisition strategy parameters: [averageOrderValue, customerLifetimeValue, acquisitionModel] outputs: - key: totalCampaignBudget label: Total Campaign Budget ($) description: Total marketing spend allocated to campaign - key: totalCustomersAcquired label: Customers Acquired description: Total new customers acquired during campaign - key: blendedCAC label: Blended CAC ($) description: Average cost to acquire each customer across all channels - key: campaignROI label: Campaign ROI (%) description: Return on investment for campaign period - key: lifetimeROI label: Lifetime Value ROI (%) description: ROI considering full customer lifetime value - key: paybackPeriod label: Customer Payback (months) description: Time to recover customer acquisition investment - key: organicMultiplier label: Organic Growth Multiplier description: Amplification factor from word-of-mouth and viral growth - key: brandImpactScore label: Brand Impact Score description: Long-term brand awareness and recognition improvement simulation: logic: | // Calculate campaign budget from ARR allocation const annualMarketingBudget = annualRecurringRevenue * (marketingBudgetPercent / 100) const totalCampaignBudget = (annualMarketingBudget / 12) * campaignDuration // Market segment acquisition characteristics const marketMetrics = { 'b2c-mass': { baseCPC: 1.20, conversionRate: 0.025, organicFactor: 1.4, brandImpact: 0.6 }, 'b2c-premium': { baseCPC: 3.80, conversionRate: 0.018, organicFactor: 1.2, brandImpact: 0.9 }, 'b2b-smb': { baseCPC: 4.50, conversionRate: 0.012, organicFactor: 1.1, brandImpact: 0.7 }, 'b2b-enterprise': { baseCPC: 18.00, conversionRate: 0.006, organicFactor: 0.95, brandImpact: 1.1 }, 'marketplace': { baseCPC: 2.50, conversionRate: 0.035, organicFactor: 1.3, brandImpact: 0.5 } } // Acquisition model efficiency and cost factors const acquisitionEfficiency = { 'digital-only': { costEfficiency: 0.8, reach: 1.2, brandBuilding: 0.6 }, 'traditional-only': { costEfficiency: 1.4, reach: 0.8, brandBuilding: 1.0 }, 'multi-channel': { costEfficiency: 1.0, reach: 1.0, brandBuilding: 0.8 }, 'influencer-led': { costEfficiency: 0.9, reach: 0.9, brandBuilding: 1.2 }, 'content-driven': { costEfficiency: 0.7, reach: 0.7, brandBuilding: 1.4 } } // Seasonality impact on performance const seasonalMultipliers = { 'off-peak': { cost: 0.7, conversion: 0.8, competition: 0.6 }, 'neutral': { cost: 1.0, conversion: 1.0, competition: 1.0 }, 'high-demand': { cost: 1.3, conversion: 1.2, competition: 1.4 }, 'holiday-premium': { cost: 1.8, conversion: 1.1, competition: 1.8 } } // Competitive environment impact const competitiveFactors = { 'low-competition': { costMultiplier: 0.6, conversionBonus: 1.3 }, 'moderate': { costMultiplier: 1.0, conversionBonus: 1.0 }, 'high-competition': { costMultiplier: 1.5, conversionBonus: 0.8 }, 'saturated-market': { costMultiplier: 2.2, conversionBonus: 0.6 } } // Extract factors for current configuration const market = marketMetrics[targetMarket] const acquisition = acquisitionEfficiency[acquisitionModel] const seasonal = seasonalMultipliers[seasonalityFactor] const competition = competitiveFactors[competitiveEnvironment] // Calculate effective acquisition metrics const effectiveCPC = market.baseCPC * acquisition.costEfficiency * seasonal.cost * competition.costMultiplier * (0.8 + random() * 0.4) // ±20% execution variance const effectiveConversionRate = market.conversionRate * seasonal.conversion * competition.conversionBonus * (0.8 + random() * 0.4) // Channel mix modeling (simplified to blended metrics) const totalClicks = totalCampaignBudget / effectiveCPC const directCustomersAcquired = totalClicks * effectiveConversionRate // Organic amplification from paid efforts const organicMultiplier = market.organicFactor * acquisition.reach * (0.9 + random() * 0.2) const organicCustomersAcquired = directCustomersAcquired * (organicMultiplier - 1) const totalCustomersAcquired = directCustomersAcquired + organicCustomersAcquired // Cost calculations const blendedCAC = totalCustomersAcquired > 0 ? totalCampaignBudget / totalCustomersAcquired : 0 // ROI calculations const immediateRevenue = totalCustomersAcquired * averageOrderValue const lifetimeRevenue = totalCustomersAcquired * customerLifetimeValue const campaignROI = totalCampaignBudget > 0 ? ((immediateRevenue - totalCampaignBudget) / totalCampaignBudget) * 100 : 0 const lifetimeROI = totalCampaignBudget > 0 ? ((lifetimeRevenue - totalCampaignBudget) / totalCampaignBudget) * 100 : 0 // Payback period calculation const monthlyRevenuePerCustomer = averageOrderValue * 0.8 // Assuming 80% repeat purchase rate const paybackPeriod = monthlyRevenuePerCustomer > 0 ? blendedCAC / monthlyRevenuePerCustomer : 999 // Brand impact scoring (0-10 scale) const brandImpactScore = market.brandImpact * acquisition.brandBuilding * (campaignDuration / 6) * // Longer campaigns = more brand impact Math.min(totalCampaignBudget / 50000, 2) * // Budget impact (capped at 2x) (0.8 + random() * 0.4) * 10 return { totalCampaignBudget: Math.round(totalCampaignBudget), totalCustomersAcquired: Math.round(totalCustomersAcquired), blendedCAC: Math.round(blendedCAC * 100) / 100, campaignROI: Math.round(campaignROI * 10) / 10, lifetimeROI: Math.round(lifetimeROI * 10) / 10, paybackPeriod: Math.min(Math.round(paybackPeriod * 10) / 10, 99.9), organicMultiplier: Math.round(organicMultiplier * 100) / 100, brandImpactScore: Math.min(Math.round(brandImpactScore * 10) / 10, 10.0) }