Input spec

The exact files we work from.

Two CSV files, six or more months of daily history, one currency. You get back an independent ROAS read for every campaign and a recommended budget allocation for the next period, as a report plus the full result tables.

What to provide
1
One media campaign CSV
Daily campaign delivery using all of the campaign columns below. One row per campaign per day.
Meta Ads Manager · Google Ads · TikTok · YouTube · DV360 · TTD · creator platform exports
2
One collective outcome CSV
Daily business results by outcome channel using all of the outcome columns below. This is the revenue side the campaigns are measured against.
Shopify export · CRM summary · retail sales file · finance report
3
Advertiser or brand name
Used on the report cover. Nothing else is needed.
4
Future planning budget, optional
The budget the allocation should plan against. If omitted, total historical spend is used.
Campaign CSV · required columns
ColumnRequired content
dateDaily date; YYYY-MM-DD recommended.
campaign_idStable unique campaign identifier.
campaign_nameHuman-readable campaign name.
platformExamples: Google Ads, Meta, TikTok, YouTube, DV360, TTD.
funnel_stageStable stage such as awareness, consideration, or conversion.
modalityPaid search, paid social, video, display, CTV, creator video, etc.
spendDaily advertising or creator campaign spend.
impressionsDaily delivered impressions.
clicksDaily clicks.
conversionsDaily attributed conversions; context, not revenue truth.
currencyOne currency code, matching the outcome file.

Measuring influencer campaigns? Add three columns: influencer_id, creator_handle, and creator_tier (nano, micro, mid, macro, mega). Everything else stays the same, and you get modeled ROAS per creator plus a creator-level allocation.

Outcome CSV · required columns
ColumnRequired content
dateDaily date.
outcome_channelExamples: DTC, Online Retail, Brick & Mortar, Social Commerce.
revenueDaily channel revenue; primary model target.
salesDaily units or completed sales for context.
ordersDaily order count for context.
currencyMust match campaign-delivery currency.
Samples
Input campaigns-sample.csv 30 days, synthetic data, exact shape
Input outcomes-sample.csv 30 days, synthetic data, exact shape
Output What you get back: sample report Rendered from a real model run on the sample data