{
  "demo": "Fictional data; deterministic Python calculations; no model inference",
  "input": "campaigns.csv",
  "validation": {
    "status": "passed",
    "rows": 8,
    "periods": 2,
    "campaigns": 4
  },
  "periods": {
    "baseline": {
      "spend_eur": 6000.0,
      "revenue_eur": 31600.0,
      "impressions": 560000,
      "clicks": 12000,
      "conversions": 395,
      "ctr_pct": 2.142857,
      "conversion_rate_pct": 3.291667,
      "cpc_eur": 0.5,
      "cpa_eur": 15.189873,
      "roas": 5.266667
    },
    "comparison": {
      "spend_eur": 6520.0,
      "revenue_eur": 34880.0,
      "impressions": 626000,
      "clicks": 12700,
      "conversions": 436,
      "ctr_pct": 2.028754,
      "conversion_rate_pct": 3.433071,
      "cpc_eur": 0.513386,
      "cpa_eur": 14.954128,
      "roas": 5.349693
    }
  },
  "changes": {
    "spend_eur": {
      "absolute": 520.0,
      "relative_pct": 8.666667
    },
    "revenue_eur": {
      "absolute": 3280.0,
      "relative_pct": 10.379747
    },
    "impressions": {
      "absolute": 66000,
      "relative_pct": 11.785714
    },
    "clicks": {
      "absolute": 700,
      "relative_pct": 5.833333
    },
    "conversions": {
      "absolute": 41,
      "relative_pct": 10.379747
    },
    "ctr_pct": {
      "absolute": -0.114103,
      "relative_pct": -5.324807
    },
    "conversion_rate_pct": {
      "absolute": 0.141404,
      "relative_pct": 4.295817
    },
    "cpc_eur": {
      "absolute": 0.013386,
      "relative_pct": 2.6772
    },
    "cpa_eur": {
      "absolute": -0.235745,
      "relative_pct": -1.551988
    },
    "roas": {
      "absolute": 0.083026,
      "relative_pct": 1.576443
    }
  },
  "campaigns": [
    {
      "campaign_id": "C01",
      "campaign": "Brand search",
      "channel": "Search",
      "periods": {
        "baseline": {
          "spend_eur": 1200.0,
          "revenue_eur": 12000.0,
          "impressions": 60000,
          "clicks": 3000,
          "conversions": 150,
          "ctr_pct": 5.0,
          "conversion_rate_pct": 5.0,
          "cpc_eur": 0.4,
          "cpa_eur": 8.0,
          "roas": 10.0
        },
        "comparison": {
          "spend_eur": 1320.0,
          "revenue_eur": 12640.0,
          "impressions": 66000,
          "clicks": 3300,
          "conversions": 158,
          "ctr_pct": 5.0,
          "conversion_rate_pct": 4.787879,
          "cpc_eur": 0.4,
          "cpa_eur": 8.35443,
          "roas": 9.575758
        }
      }
    },
    {
      "campaign_id": "C02",
      "campaign": "Nonbrand search",
      "channel": "Search",
      "periods": {
        "baseline": {
          "spend_eur": 2000.0,
          "revenue_eur": 8000.0,
          "impressions": 100000,
          "clicks": 4000,
          "conversions": 100,
          "ctr_pct": 4.0,
          "conversion_rate_pct": 2.5,
          "cpc_eur": 0.5,
          "cpa_eur": 20.0,
          "roas": 4.0
        },
        "comparison": {
          "spend_eur": 2200.0,
          "revenue_eur": 11520.0,
          "impressions": 120000,
          "clicks": 4800,
          "conversions": 144,
          "ctr_pct": 4.0,
          "conversion_rate_pct": 3.0,
          "cpc_eur": 0.458333,
          "cpa_eur": 15.277778,
          "roas": 5.236364
        }
      }
    },
    {
      "campaign_id": "C03",
      "campaign": "Social prospecting",
      "channel": "Paid social",
      "periods": {
        "baseline": {
          "spend_eur": 1800.0,
          "revenue_eur": 3600.0,
          "impressions": 300000,
          "clicks": 3000,
          "conversions": 45,
          "ctr_pct": 1.0,
          "conversion_rate_pct": 1.5,
          "cpc_eur": 0.6,
          "cpa_eur": 40.0,
          "roas": 2.0
        },
        "comparison": {
          "spend_eur": 2100.0,
          "revenue_eur": 2800.0,
          "impressions": 350000,
          "clicks": 2800,
          "conversions": 35,
          "ctr_pct": 0.8,
          "conversion_rate_pct": 1.25,
          "cpc_eur": 0.75,
          "cpa_eur": 60.0,
          "roas": 1.333333
        }
      }
    },
    {
      "campaign_id": "C04",
      "campaign": "Social retargeting",
      "channel": "Paid social",
      "periods": {
        "baseline": {
          "spend_eur": 1000.0,
          "revenue_eur": 8000.0,
          "impressions": 100000,
          "clicks": 2000,
          "conversions": 100,
          "ctr_pct": 2.0,
          "conversion_rate_pct": 5.0,
          "cpc_eur": 0.5,
          "cpa_eur": 10.0,
          "roas": 8.0
        },
        "comparison": {
          "spend_eur": 900.0,
          "revenue_eur": 7920.0,
          "impressions": 90000,
          "clicks": 1800,
          "conversions": 99,
          "ctr_pct": 2.0,
          "conversion_rate_pct": 5.5,
          "cpc_eur": 0.5,
          "cpa_eur": 9.090909,
          "roas": 8.8
        }
      }
    }
  ],
  "notes": [
    "Ratios use summed counts, never an average of row ratios.",
    "Percent metrics are in percentage units; their absolute changes are percentage points.",
    "Undefined ratios are null; intermediate metrics are rounded to 6 decimals.",
    "Attributed revenue is fictional gross revenue; ROAS is not profit or causal lift."
  ]
}
