# Facebook Ads audit worksheet

Fill one account, one campaign cohort and one route. Keep personal lead data out of this file. The blank JSON is intentionally non-importable until every required structural field is filled; unresolved check evidence stays BLANK or UNKNOWN inside a structurally complete record.

## Scope

- Record ID:
- Route version: 1
- Route: Website / Instant Form
- Account reference:
- Campaign cohort:
- Reporting window and timezone:
- Offer:
- Intended business outcome:
- Outcome cutoff:
- Attribution setting:
- Reporting setting:

## Evidence register

For each evidence item record its contract dependency ID, state, value, owner, observed time, source reference, account/cohort, route/version, window, boundary and whether extraction is complete. Use the fixed IDs in the accompanying contract's evidence register; do not invent or rename them. Blank is not zero. Unknown needs a reason, owner request and next check.

The route-critical IDs are: Website destination `E-DESTINATION-RETEST`; Website events `E-TEST-EVENTS` and, for one logical action sent twice, `E-EVENT-DEDUP`; Instant Form capture `E-INSTANT-FORM-TEST`; lead transport `E-CAPTURE-RECEIPTS`, `E-CRM-RECEIPTS` and `E-JOIN-DEFINITION`. The contract lists every other check and dependency.

## Raw observations

Supply observations, never PASS/FAIL labels. Use the field names in the accompanying contract.

## Symptoms

Each symptom needs a source reference, observed time, population/window, metric or state definition and denominator state.

## Action

Record the problem, evidence IDs, bounded change/test, owner or owner request, due date or date request, success observation/rule, prerequisites and uncertainty.

## Verification

Keep frozen historical evidence, immediate retest and prospective outcome status separate. A frozen_at time must be at or after every included historical evidence and symptom observation.

## Build and import

Give this worksheet plus the blank JSON and contract to the build prompt. Save its JSON response. If it returns COMPLETE, import that response directly into the audit workspace: the workspace extracts candidate_record, creates the canonical envelope and verifies it in your browser. A BLOCKED response stays blocked until its missing_inputs are resolved.
