Docs / Connectors
CSV & JSON upload
No connector needed: export aggregate results from any tool and upload them directly on an experiment's Data sources tab. One row per variant × KPI (× segment); one file can mix aggregate and segment rows.
Upload a CSV
On the experiment's Data sources tab click Add evidence → CSV or JSON file and drop the file. Rows are validated before anything is stored; errors are reported as row N.field: message with row numbers matching your spreadsheet.
| Column | Required | Description |
|---|---|---|
| variant_key | Yes | Variant identifier matching the experiment's variants (e.g. control, variant_a). |
| kpi_name | Yes | KPI name matching a KPI declared on the experiment. |
| numerator | No | Conversion count for proportion KPIs. Must appear together with denominator; numerator ≤ denominator. |
| denominator | No | Subjects exposed (the sample) for proportion KPIs. |
| value | No | Point estimate for KPIs without counts (e.g. revenue per user). Either counts or a value is required. |
| sample_size | No | Sample size behind a value — enables inference for quantity and revenue KPIs together with std_dev. |
| std_dev | No | Standard deviation of a value; with sample_size it enables Welch's t-test for quantity and revenue KPIs. |
| segment_dimension | No | Set to make the row a segment result (e.g. device). |
| segment_value | No | The segment's value (e.g. mobile). Rows without segment fields are aggregate results. |
example.csv
variant_key,kpi_name,numerator,denominator,segment_dimension,segment_value control,checkout_conversion,480,10000,, variant_a,checkout_conversion,560,10000,, control,checkout_conversion,210,4200,device,mobile variant_a,checkout_conversion,262,4150,device,mobile control,revenue_per_user,,,,
For quantity and revenue KPIs provide
value (and ideally sample_size + std_dev). Evidence without variance gets no inferential statistics — the review flags it explicitly and caps confidence rather than inventing significance.JSON upload
The same data can be posted as JSON (used by the file upload for .json files and by the API), with camelCase field names:
payload.json
{
"sourceReference": "ga4-export-2026-08",
"aggregateResults": [
{ "variantKey": "control", "kpiName": "checkout_conversion", "numerator": 480, "denominator": 10000 },
{ "variantKey": "variant_a", "kpiName": "checkout_conversion", "numerator": 560, "denominator": 10000 }
],
"segmentResults": [
{ "variantKey": "control", "kpiName": "checkout_conversion", "numerator": 210, "denominator": 4200,
"segmentDimension": "device", "segmentValue": "mobile" }
]
}Duplicate uploads are detected by content hash (or an explicit idempotencyKey) and return the existing import batch instead of duplicating evidence.