{"service":"marketing","description":"Deterministic pure-compute analytics over the caller's own ad data.","ingest":{"formats":["json_rows","csv","tsv","semicolon"],"note":"each paid route accepts a JSON array under 'rows' OR a raw text blob under 'csv'/'tsv'; columns are auto-mapped by alias.","column_aliases":{"channel":["channel","source","medium","campaign","platform","network","name"],"stage":["stage","step","funnel_stage"],"impressions":["impressions","impression","impr","imp","imps","views","reach"],"clicks":["clicks","click","visits","sessions","taps"],"conversions":["conversions","conversion","conv","convs","purchases","signups","sign_ups","orders","sales_count","leads"],"spend":["spend","cost","budget","ad_spend","amount_spent"],"revenue":["revenue","rev","sales","sales_value","value","income"],"ltv":["ltv","lifetime_value","customer_ltv","clv"],"customers":["customers","new_customers","customers_acquired","buyers"]}},"analyses":[{"route":"POST /marketing/funnel","does":"per-stage conversion rate, drop-off, loss-rate, overall CR, bottleneck stage, and a per-channel funnel breakdown","default_stages":["impressions","clicks","conversions"],"custom_stages":"pass an ordered 'stages' array for any funnel"},{"route":"POST /marketing/attribution","models":["first_touch","last_touch","linear","time_decay","position_based"],"does":"multi-touch credit per channel under 5 models at once + comparison; credit per model sums to 100%","formulas":{"first_touch":"100% to the first touch","last_touch":"100% to the last touch","linear":"equal split across touches","time_decay":"weight = 0.5 ** (days_before / halflife_days), normalized","position_based":"U-shape 40% first, 40% last, 20% split across middle"}},{"route":"POST /marketing/spend","metrics":["cpc","cpm","cpa","cac","roas","roi","conversion_rate","ltv_cac"],"does":"per-channel unit economics, efficiency ranking, and a marginal budget-reallocation hint (roas_ranking method)"},{"route":"POST /marketing/experiment","does":"two-proportion z-test of A/B conversion: lift (abs+rel), z, two-sided p-value, CI on lift, minimum detectable effect, and required sample size / sufficiency","formulas":{"z":"(p_b - p_a) / sqrt(p*(1-p)*(1/n_a + 1/n_b)), p = pooled rate","p_value":"two-sided via the standard normal CDF (math.erf)"}}],"caps":{"max_rows":100000,"max_paths":100000,"max_touches":500000,"max_stages":64},"disclaimer":"computation only"}