# Maestro normalized reporting format

These CSV files are planning templates, not native LinkedIn export schemas. The tool imports JSON only. Map your actual export headers into report-blank.json using its scope object and delivery, people and opportunities arrays. Do not paste native CSV into the JSON editor. Copy the worked JSON to see exact types.

Use numeric JSON values for spend, impressions, chargeable_clicks and known platform_conversions. Impressions/clicks must be integers. Unknown platform conversions and opportunity amounts are null, never a blank string or zero. Qualified is true, false or null. linked_person_ids is a JSON array (CSV representation would be a quoted escaped array). Dates are YYYY-MM-DD; extraction is an ISO timestamp with timezone. Currency is an uppercase three-letter code; timezone is an IANA name.

Preserve the actual click definition, selected conversion definition, attribution model, click/view windows, source references and date basis. The scope is required even if you start with CSV planning files. One delivery row covers one ad set and the entire declared period. Never mix daily rows with totals, or multiple report breakdowns. Normalize stable person/opportunity IDs; one opportunity can have several person IDs but counts once. Resolve duplicate IDs before acceptance: all duplicate copies are excluded, not silently merged.

Declare completeness separately for all three sources. Empty incomplete data is unknown. Empty complete data is observed zero. Only mark comparable_scope_confirmed true after checking the delivery spend, acquisition cohort, currency and ad-set mapping describe the same intended economic scope. A full file is not necessarily a comparable cohort.

Import JSON into the tool, review exact repair messages, edit scope using controls or edit rows in the JSON editor, apply, and export normalized JSON plus the Markdown memo. Exported results are recalculated on reimport; stored result values are not trusted. All examples are fictional. No names or emails are needed. Keep personal data out of the worksheet. Browser memory is cleared when the page closes; downloads remain on your device.

## Where to save the remaining definitions

Use scope.source_references as a labeled source note: export level; report type; column view; time breakdown; acquisition rule; qualification rule and decision owner; qualification/status as-of date; agreed maturity window; and comparability evidence. Include a reference to the original export and CRM status history. The examples show this convention. Keep Unknown for unresolved facts; the worksheet cannot verify a source merely because this text is filled.

Completeness flags describe row coverage for the declared scope. A complete delivery source may still have null platform conversions, which remain Unknown. Qualification and opportunity status must reflect the outcome cutoff, even when the export was taken later. Reconstruct that earlier state from history; never substitute today's status silently. If history is unavailable, keep qualification null or omit unsupported opportunity rows and mark the opportunity source incomplete.

The repair exercise was extracted October23 and reconstructs the October20 outcome cutoff. Its October22 opportunity is intentionally excluded. Its October2 person is outside the September acquisition cohort. Neither excluded record is missing data for the defined report.
