Questions, answered straight

What the method is, where it is honestly limited, and what it will and won't claim. If an answer here reads as a hedge, that's because the honest version is a hedge — we'd rather say so than round it off. The full method and its validation gates are on the How we validate page.

The method

How it works, and why to trust it

You mention many methods — why run one, not all of them and pick the best fit?

Because on your real data there is no answer key, and "best fit" is not the same as "correct." A model can fit your history beautifully and still be wrong about what caused what. A model can memorize the quirks of your history — “over-fitting” — and that looks exactly like insight until you act on it and it doesn’t hold. So we invert the usual pitch: we run many methods on our own ground-truth benchmarks, where the true effects are known and we can see which method actually recovers them, and we run the one method that earns that bar on your data. When a second method independently qualifies, we add it as a cross-check — a second opinion, not a fit contest.

How do I know your methodology is correct?

We generate synthetic brands where the true channel effects are known, then measure whether the engine recovers them — and we keep that as a permanent gate: no engine change ships if recovery regresses. That proves the procedure recovers what is knowable and confesses what isn't. It does not — and we will not — claim a guaranteed accuracy number on your real data, because no model built from the history you already have — rather than from a live experiment — can honestly promise that. The How we validate page shows the recovery results and the exact gates.

What model do you actually use internally?

The standard marketing-mix maths, with two honesty disciplines added. The maths: a curve for how each channel’s returns flatten as you spend more into it (“saturation”), and the fact that an ad keeps working for a few weeks after it runs (“adstock”). The disciplines: first, the steady always-on part of a channel’s spend is credited to baseline demand, and only the ups and downs are counted as that channel’s effect (our “always-on fix”); second, if a channel’s spend barely moves, the data simply can’t separate its effect from everything else, so we pull that number toward zero rather than invent it. (In technical terms: Hill saturation with geometric adstock, fitted with an identifiability-gated regularized regression.)

How do you handle seasonality?

Before any channel is measured, the model separates baseline and seasonal demand — the revenue that would have arrived from the calendar and the business itself. Channels are then measured against what's left, so a channel that happens to spend during your peak isn't handed credit for the peak. If you tell us about a known seasonal driver in the interview, it enters as a control.

Why synthetic data in the demos?

Because synthetic data has known ground truth. We plant real effects and measure whether the engine recovers them — that's the only way to show you not just a report, but that the report is checked. A demo on real client data would show a plausible answer with no way to prove it right.

My channels use different content, ad formats, and audiences. How can you judge channel performance without any of that?

Because Galileo measures the result those choices produced, not the choices themselves. It watches how your total outcome moves, week to week, as each channel’s spend moves — that response, and how it flattens as spend climbs, is what pins down a channel’s incremental contribution. Your content, formats, and targeting are already inside that number: a channel with sharper creative simply shows a higher measured return. You don’t describe them; they reveal themselves through the outcome.

What you get is each channel’s real return as you ran it over the period — the blended effect of all those choices. What it won’t do is tell you which creative or audience within a channel drove it; that sits inside the channel’s number. To pull those apart, give a sub-channel its own column (if its spend moves independently) or run a holdout test. And if you overhaul your content or targeting partway through, Galileo treats it as a structural break and asks for a refit rather than blending two different worlds into one answer.

The honest limits

What it won't claim

I only have traffic — sessions or clicks, not exact revenue. Can you still help?

Yes, but with a boundary we state plainly on the report. Galileo will model what moved your traffic and label it as exactly that. It will not dress a traffic model up as a revenue model or make financial recommendations from a non-revenue outcome — sessions can't tell you where the money is. If you can supply revenue, even approximate, the audit becomes a financial one; if you can't, you get an honest traffic read.

My promotions and discounts aren't logged precisely. Does that break the model?

It doesn't break it, and — importantly — we won't tell you that adding a precise promo calendar improves accuracy, because right now that isn't true. Modeling promotions as a separate effect is an active correction we treat as a known limitation, not a selling point, until that path is recalibrated. We'd rather disclose it than sell it.

Will the AI assistant hallucinate numbers?

No — and this is by construction, not by hoping. Every figure the assistant states is traced back to the engine that computed it. Ask it something the audit didn't compute and it answers "I can't answer that from this analysis" rather than inventing a plausible-sounding number. The refusal is the proof that the numbers you do get are real.

What won't Galileo do?

It won't estimate numbers its engine didn't compute, it won't update a model when new data contradicts it (it asks for a refit instead), and it won't speculate about analyses it doesn't have. Individual-user, campaign-level, and product-segment attribution are out of scope — this works at the whole-channel, week-by-week level, and it isn’t a substitute for controlled experiments (lift tests, or geo holdouts that pause spend in some regions to read the true effect).

Getting started

Data, and what happens to it

What data do I need, and how far back?

A weekly CSV: date, spend per channel, and revenue. Six months is the minimum, twelve is better. The one thing that matters as much as length is variation — a channel whose spend never changes can’t be told apart from everything else moving alongside it (it can’t be “identified,” in the jargon), and the report will tell you so rather than guess. Most teams export this in under an hour.

My channel mix changed partway through the period. What happens?

Galileo watches for exactly that. If the data shifts enough that a single model would be stale — a new channel, a big step-change in spend, a fundamental shift in how the business works (a “structural break”) — it refuses to quietly update on top of the old model and asks for a refit instead. A stale model that keeps answering is more dangerous than one that admits it's out of date.

How does my data get in, and where does it live?

CSV upload — one weekly file. Extra context is optional and enters two ways: two event-marker columns in the same file — promo_depth (weekly promo depth, or 0/1) and stockout (0/1) — which enter as linear event controls with a modest, honestly-limited effect; or the optional interview, where known seasonality, past lift studies, and channel pauses are captured as priors and checked against the data before they can affect the model. Your data stays in your environment: stored on disk within the Galileo instance, no external database, no third-party analytics, nothing leaving your network unless you choose to share it.

How should I split channels and sub-channels (YouTube Video vs Shorts, Brand vs Non-Brand)?

One column per sub-channel — but only split one out if its spend moves independently and is large enough to matter. If two lines always rise and fall together (the jargon is “collinear”), Galileo can’t tell their effects apart, and it says so plainly rather than inventing a split. When in doubt, start coarse — a single “YouTube” column — and separate later if the spend genuinely diverges. The full data guide has naming examples and the split rule.

I sell multiple products, or run personalized ads — how does that work?

Galileo models the business at one level: each channel gets one measured return, and the effect of which product or creative that spend went to already lives inside that number. Model a product on its own only if it has its own spend and its own revenue history to fit against. Personalized ads are the same shape — their lift sits inside the channel effect; the clean way to isolate it is a holdout test, not the mix model. See the full data guide for scope.

Still have a question? Ask us directly, or read the How we validate page for the method in full.