Lifetimely: Forecasting

Forecasting

At a glance

Forecasting builds a monthly sales and marketing scenario from historical Income Statement sales and an LTV cohort curve. Use it to test how a sales-growth assumption, marketing budget, CAC, and expected repeat purchasing could combine—not as a prediction of what will happen.

Availability and data freshness

Availability and prerequisites: Available in Shopify and Amazon store contexts when the account has the forecasting feature; accounts without it are sent to an upgrade page. Results require at least 12 reference-period months in which new-customer net sales are positive and at least one positive accumulated net-sales-per-customer value in the first returned LTV cohort.

Freshness and history: The page generates results in the browser from monthly Income Statement and LTV responses. Those input queries are treated as fresh in the browser for five minutes. A saved forecast stores assumptions, not calculated results, so reopening or exporting after inputs refresh can change the result.

On this page

Create and manage forecasts

  1. From Profit & loss, open Forecasting (/profit_and_loss/forecasting).
  2. If no forecast exists, Lifetimely opens a new scenario automatically. Otherwise, select New forecast or choose View sales forecast from a saved forecast's Actions menu.
  3. For a new scenario, edit the generated name and assumptions. The table recalculates as the controls change.
  4. Select Lock in forecast to save the name, dates, and assumptions.

The Saved Forecasts list shows each scenario's name, creation date, forecast start date, and forecast end date. You can view or permanently delete a saved scenario. Duplicate is currently disabled. Saved scenario controls are read-only; to test different assumptions, create another forecast rather than editing or renaming the saved one.

Use the scenario controls

Forecasting has no product, customer, country, comparison, complex-filter, or timeframe control. It always requests and displays monthly data.

Control Default for a new forecast What it changes
Forecast name [current month] - [same month next year] Forecast Identifies the saved scenario. It is editable only before Lock in forecast.
Forecast period Today through the same date next year, using the store timezone Sets the projected month labels and number of columns. It does not change the historical population. No presets are shown, and future dates are allowed.
Reference period The 365 days before yesterday through yesterday, using the store timezone Sets the date range sent to both historical source reports. No presets are shown.
Total sales growth (%) 10 Applies the model's growth adjustment and also increases the sales base used to calculate marketing investment. It is an assumption, not a measured historical growth rate.
Marketing investment (%) 10 Sets modeled marketing investment as a percentage of the growth-adjusted base net sales. It does not use historical or connected ad spend.
CAC ([display currency]) 65 Divides modeled marketing investment to estimate newly acquired customers. Use a CAC expressed in the displayed currency.

These defaults are starting values, not recommendations. Saved growth, marketing, and CAC values must be zero or positive; the saved forecast end date must be after its start date. Although the number inputs can temporarily display negative values while creating a scenario, the save API rejects them.

Your current shop or platform selection, store-wide prefilters, display timezone, display currency, and shop calculation profile are applied automatically to both historical requests. Change those settings outside Forecasting before reconciling a scenario.

Caution: A one-year reference range can contain partial boundary months. The model consumes the returned monthly arrays by position: the first historical value seeds the first forecast month, the second seeds the second, and so on. It does not match January to January or otherwise apply seasonality. Use month-aligned boundaries when positional comparisons matter.

Data contract: what goes into the forecast

Two monthly report requests run in parallel for the same reference period.

Forecast input Source and use
Historical total net sales Income Statement netSales; seeds monthly base sales and therefore marketing investment. See Income Statement metric semantics.
Historical existing-customer net sales Income Statement repeatCustomerNetSales; seeds modeled existing-customer sales.
Historical new-customer net sales Calculated as net sales − repeat-customer net sales. It is shown in Forecast working and determines whether the reference period has 12 qualifying months, but it does not directly seed modeled new-customer sales.
Accumulated net sales per customer netSalesPerCustomer from only the first cohort row returned by the monthly LTV cohort request. The model converts that row's accumulated values into monthly increments and applies the same curve to every modeled acquisition month.
Marketing and customer acquisition Derived only from base net sales, Total sales growth (%), Marketing investment (%), and CAC. Connected ad spend is not a direct forecast input.

Both requests receive ISO reference boundaries, current Shopify/Amazon context, timezone, display currency, prefilters, and shop calculation settings. The resulting order population, customer classification, refunds, costs, and currency behavior inherit the two source reports' rules. Forecasting itself does not fetch orders or ad-platform records directly.

Missing values in the historical series are treated as zero where the generator can continue. If fewer than 12 months have positive calculated new-customer net sales, or the first LTV cohort has no positive net-sales-per-customer value, the page shows Insufficient Data for Forecasting. The displayed available-month count measures positive new-customer-sales months, not merely months since the first order.

How forecast dates become columns

Output grain is one forecast month per column. The end date is treated as exclusive when it falls on the first of a month or has the same day-of-month as the start date. Otherwise, the end month is included. For example, January 15 through April 15 produces January–March, while January 15 through April 30 includes April.

If the forecast has more columns than the returned historical series, each extra base-total and base-existing value is the preceding value multiplied by 1 + growth rate. The regular marketing and final sales growth adjustments then still apply. Longer horizons can therefore compound the growth assumption; they are not a flat extension of the last historical month.

Metrics and calculations

For forecast month t:

Field Calculation and interpretation
Base total net sales Historical netSales[t]; after history runs out, previous base total × (1 + growth rate).
Base existing-customer sales Historical repeatCustomerNetSales[t]; after history runs out, previous base existing sales × (1 + growth rate).
Marketing investment base total net sales × (1 + growth rate) × marketing percentage.
New customers marketing investment / CAC. CAC of zero produces zero customers rather than division by zero.
Per-customer monthly increment First accumulated LTV value is retained; each later value is current accumulated value − previous accumulated value.
Cohort revenue customers acquired in cohort month × per-customer increment at that cohort age. A forecast month's base new-customer sales is the sum of every modeled cohort contribution landing in that month.
Additional sales growth (base new-customer sales + base existing-customer sales) × growth rate.
New customers total sales base new-customer sales × (1 + growth rate).
Existing customer sales base existing-customer sales × (1 + growth rate).
Forecast Total New customers total sales + existing customer sales.

The generator rounds monthly currency series and cohort cells to two decimals. The page formats currency values to whole display-currency units and new-customer counts to whole customers, so visible rows can appear not to add exactly. Headline totals sum the two-decimal monthly series and are then rounded to two decimals; they are not sums of the whole-unit text shown on screen.

Caution: This is a deterministic scenario model. It has no confidence interval, probability, prediction error, explicit seasonality control, or separate projection for taxes, refunds, COGS, actual ad spend, or operating expenses. Negative month-to-month increments are also possible if the selected accumulated LTV curve declines.

Read and export the result

Forecast summary shows, by month and for the full forecast period:

  • New customers total sales from modeled acquisition cohorts;
  • Existing customer sales seeded by the historical repeat-customer series;
  • Total, the sum of those two sales rows; and
  • Marketing investment, the modeled budget rather than imported spend.

Select Show beside Forecast working to inspect historical new/existing sales, the historical growth calculation, modeled marketing and customers, the acquisition-cohort revenue triangle, pre-growth sales, additional growth, and final totals. In the triangle, row 1 is the group acquired in forecast month 1, row 2 is the group acquired in month 2, and each cell is that group's modeled sales contribution in the column month.

Two exports are available on both new and saved scenarios:

  • Export CSV includes the summary, working rows, decimal customer estimates, and cohort triangle as calculated by Lifetimely.
  • Export with formulas adds the three assumptions, source input rows, and spreadsheet formulas so you can inspect or alter the model outside Lifetimely.

Export regenerates the scenario from the applicable historical query result; it is not an export of a frozen saved snapshot. Within the five-minute browser freshness window, it can reuse cached inputs. Formula-export spreadsheet results can differ from the page because spreadsheet formulas recalculate rather than reproducing every browser rounding step. In particular, a zero CAC produces zero customers on the page but a divide-by-zero formula in this export.

For a saved forecast, Add sales target to Dashboard creates a Total Sales goal in a selected custom dashboard. Its target initially uses the rounded forecast-period Total, and its dates initially use the forecast period; title, description, target, and dates can be changed before adding it.

Example: compare two scenarios

Suppose the first two base-total months are $1,000 and $1,200, base existing-customer sales are $400 and $500, growth is 10%, marketing is 10%, and CAC is $100. If accumulated net sales per customer are $100 at month 0 and $120 at month 1, the incremental curve is $100 then $20.

  • Month 1 marketing is $1,000 × 1.10 × 10% = $110, producing 1.1 modeled customers. Base new-customer sales are 1.1 × $100 = $110. After growth, new-customer sales are $121, existing-customer sales are $440, and Total is $561.
  • Month 2 marketing is $1,200 × 1.10 × 10% = $132, producing 1.32 customers. Base new-customer sales are $22 from month 1's cohort (1.1 × $20) plus $132 from month 2's cohort (1.32 × $100), or $154. After growth, new-customer sales are $169.40, existing-customer sales are $550, and Total is $719.40.

Save this as a baseline, create another forecast, and change only CAC to isolate its effect. A higher CAC lowers modeled customers and cohort-derived new-customer sales, while the existing-customer series is unchanged.

Resolve differences

  • A saved forecast changed: only its name, dates, monthly timeframe, growth, marketing percentage, and CAC are stored. Historical Income Statement and LTV inputs are regenerated from current or cached report data.
  • Forecast Total does not match Income Statement Total sales: Forecast Total is modeled new- plus existing-customer net sales. It is not the Income Statement's historical Total sales formula and does not separately forecast its revenue and expense rows.
  • The working rows do not match another monthly report: align shop/platform, reference dates, month boundaries, timezone, display currency, prefilters, and calculation profile. Then compare Forecasting's Income Statement netSales and repeatCustomerNetSales, not a similarly named sales metric from another report.
  • The LTV curve differs: Forecasting always uses the first returned cohort row's accumulated netSalesPerCustomer values. A different cohort row, segment, selected Cohorts-page metric, or incremental curve is not the same input.
  • The page says data is insufficient: count months where net sales − repeat-customer net sales is greater than zero, then confirm the first returned cohort has a positive accumulated net-sales-per-customer value. Extending the reference period can help only if it adds qualifying data.
  • A longer forecast grows unexpectedly quickly or does not reconcile: once history runs out, base sales are recursively grown, after which the model still applies its normal growth factors. The on-page pre-growth existing-customer working row and formula export use a zero-filled historical display series beyond the returned history rather than the extended base used by the browser summary, so they can stop reconciling for those extra months. Reduce the horizon or use a reference range with enough complete monthly values.

Next actions

Did this answer your question? Thanks for the feedback There was a problem submitting your feedback. Please try again later.

Still need help? Contact Us Contact Us