Skip to content

Monthly business review

Business task

The CEO and board of directors need a Monthly Business Review (MBR) with a complete picture of marketing and sales performance. The report should include: a marketing P&L (spend → leads → sales → revenue → profit), cohort ROAS by month, trends for key metrics over the last 6 months, comparison against planned targets, and a forecast for the next month. This is a strategic document for budgeting decisions.

Report architecture

This recipe is a top-level composite — it aggregates weekly and daily reports and builds a monthly picture on top of them:

  1. Weekly marketing report — data for the 4 weeks of the month, aggregated into a month
  2. Multi-channel ROAS → Kommo — ROAS by channel for the month
  3. Deal loss reasons in HubSpot — loss analysis for the month
  4. Bitrix24 sales rep performance report — manager KPIs for the month

Historical data from the previous 5 months is also used to build the 6-month trend. On the first run, data will only cover the current month — the full trend will appear after 5 months.

Connections (via compose reports)

All connections are configured in the underlying recipes. A complete MBR requires:

ConnectorUsed in which recipes
meta-adsweekly-marketing-report, multi-source-roas
google-adsweekly-marketing-report, multi-source-roas
tiktok-adsmulti-source-roas
kommomulti-source-roas, weekly-marketing-report
bitrix24sales-by-manager
hubspotlost-deal-reasons

If your company uses different CRM systems or ad channels, replace the corresponding source recipes with the equivalents.

Report settings

  • Name: Monthly business review (MBR)
  • Report type: second-level composite
  • Source reports: weekly-marketing-report, multi-source-roas, lost-deal-reasons, sales-by-manager
  • Date range: last_month for the current review
  • Historical depth: 6 months for trends (requires 6 consecutive runs)
  • Grouping: by source report, channel, and month
  • Timezone: Europe/Moscow

Parameters

json
{
  "type": "composite",
  "source_reports": [
    "weekly-marketing-report",
    "multi-source-roas",
    "lost-deal-reasons",
    "sales-by-manager"
  ],
  "date_range": "last_month",
  "historical_depth_months": 6,
  "group_by": ["source_report", "channel", "month"],
  "timezone": "Europe/Moscow"
}

The historical_depth_months: 6 parameter requests data for the last 6 months from each source report. LightLead automatically aggregates it by month and builds a 6-month trend. If data for a given month is missing (for example, a channel launched only 3 months ago), that month is skipped in the trend.

Report metrics

Block 1: Marketing P&L (Profit and Loss)

MetricTypeDescription
total_spendcurrencyTotal ad budget for the month
total_leadsnumberTotal number of leads
total_mqlnumberNumber of MQLs
total_sqlnumberNumber of SQLs
total_dealsnumberNumber of deals
won_dealsnumberNumber of deals won
total_revenuecurrencyRevenue from won deals
gross_profitcurrencyGross profit = Revenue × Margin − Spend

Calculated metrics for the P&L block:

json
{
  "calculated_metrics": [
    {
      "name": "cpl",
      "formula": "IF([total_leads] > 0, ROUND([total_spend] / [total_leads], 2), 0)",
      "type": "money",
      "description": "Cost per lead"
    },
    {
      "name": "cac",
      "formula": "IF([won_deals] > 0, ROUND([total_spend] / [won_deals], 2), 0)",
      "type": "money",
      "description": "Customer acquisition cost"
    },
    {
      "name": "roas",
      "formula": "IF([total_spend] > 0, ROUND([total_revenue] / [total_spend] * 100, 1), 0)",
      "type": "percent",
      "description": "ROAS: return on ad spend"
    }
  ]
}

Block 2: ROAS by channel

MetricTypeDescription
meta_ads_roaspercentMeta Ads ROAS
google_ads_roaspercentGoogle Ads ROAS
tiktok_ads_roaspercentTikTok Ads ROAS
channel_spend_sharepercentChannel's share of the budget

Block 3: 6-month trend

MetricTypeDescription
monthly_spendcurrencySpend by month (6 data points)
monthly_revenuecurrencyRevenue by month (6 data points)
monthly_roaspercentROAS by month (6 data points)
monthly_cplcurrencyCPL by month (6 data points)
monthly_leadsnumberLeads by month (6 data points)

Block 4: Loss reasons and manager KPIs

MetricTypeDescription
total_lost_amountcurrencyTotal amount of lost deals
top_lost_reasonstringLeading loss reason
preventable_lost_amountcurrencyPreventable losses
top_manager_revenuecurrencyRevenue from the top-performing manager
avg_win_ratepercentTeam average Win Rate

Calculated metrics for the trend block:

json
{
  "calculated_metrics": [
    {
      "name": "revenue_growth_mom",
      "formula": "IF([revenue_prev_month] > 0, ROUND(([total_revenue] - [revenue_prev_month]) / [revenue_prev_month] * 100, 1), 0)",
      "type": "percent",
      "description": "Month-over-month revenue growth"
    },
    {
      "name": "spend_efficiency",
      "formula": "IF([total_spend] > 0, ROUND([total_revenue] / [total_spend], 2), 0)",
      "type": "percent",
      "description": "Spend efficiency: revenue generated per dollar of ad spend"
    },
    {
      "name": "cac_payback_months",
      "formula": "IF([won_deals] > 0 AND [avg_monthly_revenue_per_client] > 0, ROUND([cac] / [avg_monthly_revenue_per_client], 1), 0)",
      "type": "number",
      "description": "CAC payback period in months"
    }
  ]
}

The cac_payback_months metric shows how many months it takes for a customer to pay back their acquisition cost. A value < 1 is excellent, 1-3 is normal, > 6 is concerning — the business may not survive long enough to break even.

Filters

No filters are applied at the composite report level — each source report uses its own filters.

For the MBR, it's important that filters in the source reports aren't too aggressive — for example, spend > 500 in ad reports is fine, but spend > 5000 would exclude smaller-budget channels, distorting the overall picture.

Write mode

Mode: Replace

A composite report always uses a full rewrite.

Schedule

json
{
  "schedule": {
    "enabled": true,
    "interval": "monthly",
    "time": "08:00",
    "timezone": "Europe/Moscow",
    "day_of_month": 1,
    "retry_on_failure": true,
    "max_retries": 3
  }
}

Runs on the 1st of every month at 8:00 AM. By this date, data for the previous month is guaranteed to be complete (all ad platforms and CRMs have at least a full day for data finalization).

Important: if the 1st falls on a weekend, the report still runs. To run on the first business day of the month instead, manually change day_of_month or use a manual run.

Expected result

After a successful run:

  • Status: completed
  • Format: a structured document with 4 blocks, ready to present to the board
  • Contents:
    • Block 1: Marketing P&L — the complete economics: how much was spent, how much was earned, what the margin is
    • Block 2: ROAS by channel — an efficiency comparison and justification for next month's budget
    • Block 3: 6-month trend — trends, seasonality, forecast
    • Block 4: loss analysis and manager KPIs — operational efficiency
  • Forecast: based on the 6-month trend, a forecast of key metrics for the next month is built (trend extrapolation)
  • Decisions: budget reallocation across channels based on ROAS; strategy changes based on loss reasons; hiring plan adjustments based on manager workload
  • Export: PDF for distribution to the board, Google Slides for presentation, CSV for the finance department

Screenshot

[Screenshot]

[Screenshot]

Maintained by the LightLead Documentation Team · Last verified: 2026-07-26