{
  "_help": "Fill from martech-context/ and the owner's answers. Keys starting with _help are ignored. Leave a value empty or null when unknown; the rule that needs it then says what is missing. The script prints every threshold it used.",
  "property_id": "123456789",
  "service_level": "standard",
  "_help_service_level": "standard or 360; quotas and the export limit depend on it.",
  "as_of": "2026-11-01",
  "_help_as_of": "Audit date. The report window ends two days earlier; BigQuery count comparisons skip tables 3 days old or newer.",
  "expected_time_zone": "",
  "expected_currency": "",
  "expected_hostnames": [],
  "_help_expected_hostnames": "Every hostname that should send to this property, for example www.example.com. Prefix *. for all subdomains.",
  "owned_registrable_domains": [],
  "_help_owned_registrable_domains": "Every registrable domain in the journey that uses the same measurement ID, for example example.com and example.net.",
  "payment_and_auth_hosts": [],
  "_help_payment_and_auth_hosts": "Payment and sign-in providers in the journey. paypal.com, checkout.stripe.com, accounts.google.com, login.microsoftonline.com and appleid.apple.com are always checked.",
  "expected_measurement_ids": [],
  "production_stream_ids": [],
  "_help_production_stream_ids": "Numeric stream IDs that must be exported to BigQuery. Empty means every web stream.",
  "key_paths": [],
  "_help_key_paths": "URL path fragments on key event journeys, for example /checkout and /thank-you. Untagged pages on these paths FAIL G02.",
  "google_ads": {
    "expected_customer_ids": [],
    "retired_customer_ids": [],
    "third_party_customer_ids": []
  },
  "_help_google_ads": "Customer IDs in 123-456-7890 form. Retired: old accounts. Third party: accounts the business does not own.",
  "ga4_key_events_imported_to_ads": false,
  "ga4_audiences_used_in_ads": false,
  "ads_same_outcome_actions": [],
  "_help_ads_same_outcome_actions": "Groups of Google Ads conversion action names that measure one outcome, for example [[\"GA4 generate_lead\", \"Website lead\"]]. A GA4-imported and a native action in one group FAIL G16 in any category; without a group they FAIL only in PURCHASE and WARN elsewhere.",
  "key_events_intended": {},
  "_help_key_events_intended": "From the tracking plan: {\"purchase\": {\"counting\": \"ONCE_PER_EVENT\", \"needs_value\": true, \"transactional\": true}}. Events not listed here are treated as undocumented key events.",
  "tag_sent_events": [],
  "_help_tag_sent_events": "Events the tags already send (from the tracking plan or gtm-container-audit). Used for double counting by create rules and enhanced measurement.",
  "documented_decisions": {},
  "_help_documented_decisions": "Dated decisions from decisions.md. Keys the rules read: reporting_identity, reset_user_data_on_new_activity, attribution_model, acquisition_lookback, session_timeout, engaged_session_timer, cookie_override, user_provided_data, data_sharing, counting:EVENT_NAME.",
  "accepted_exceptions": {},
  "_help_accepted_exceptions": "Rule ID to a dated exception from decisions.md, for example {\"G02\": \"2026-03-01 second stream kept for an A/B migration until 2026-12-01\"}. FAILs in that rule print as WARN with the citation.",
  "decisions_fed": [],
  "_help_decisions_fed": "What the property feeds, for example Google Ads bidding, board reporting, a warehouse model. Printed in the baseline; used to rank findings.",
  "previous_audit": "",
  "_help_previous_audit": "Date, score and coverage of the last audit of this property, or first audit.",
  "backend_orders": {"count": null, "revenue": null, "currency": "", "source": ""},
  "_help_backend_orders": "Aggregate orders for the audit window from the order system, from its owner: a count and revenue only, never order IDs or customer data. Without it the Revenue and ecommerce trust label stops at use with caveat.",
  "long_range_history_source": "ga4",
  "_help_long_range_history_source": "ga4 or bigquery. bigquery turns a short-retention FAIL into WARN only when the BigQuery results show fresh daily tables with no expiration shorter than the history needed.",
  "needs_history_months": 14,
  "bigquery_required": false,
  "warehouse_uses_revenue": false,
  "modelled_data_expected": false,
  "_help_modelled_data_expected": "true when decisions.md says Blended reports should include behavioural modelling for consent-denied users (advanced consent mode).",
  "user_id_expected": false,
  "user_id_min_share": 0,
  "_help_user_id_min_share": "Expected share of users signed in with a User-ID, 0 to 1.",
  "demographics_used": false,
  "sales_cycle_days": null,
  "site_search_param": "",
  "spa_manual_page_views": false,
  "_help_spa_manual_page_views": "true when the tracking plan sends route-change page_view manually.",
  "consent_regions": [],
  "_help_consent_regions": "Regions where decisions.md requires consent, for example EEA, UK, CH.",
  "consent_mode": "",
  "_help_consent_mode": "none, basic or advanced, from decisions.md.",
  "tags_wait_for_consent": null,
  "internal_locations_expected": false,
  "_help_internal_locations_expected": "true when stack.md lists offices, agencies or call centres whose traffic should be marked internal.",
  "remote_staff": false,
  "gtm_findings": {"manual_linker": null},
  "_help_gtm_findings": "Findings from gtm-container-audit that change GA4 verdicts, for example a manual linker that overrides the Admin domain list.",
  "thresholds": {},
  "_help_thresholds": "Overrides by name, for example {\"unassigned_warn\": 0.03}. Names and defaults are printed at the end of every report."
}
