# Martech stack audit: <company>, as of <YYYY-MM-DD>

## Header

- Prepared by: <role>. FAILs reviewed with: <owner roles>
- Scope: <link to the filled audit-scope-template.md>
- Sources: <file, system, export date, supplied by (role)> for each input
- Scripts run from the audit folder, with their final lines, or "script not run" for any section done by hand:
  - `python3 <skill folder>/scripts/stack_inventory.py ... --as-of <date>`: <n FAIL, n WARN, n PASS, n NOT CHECKED>
  - `python3 <skill folder>/scripts/connection_map.py ... --as-of <date>`: <summary line>
  - `python3 <skill folder>/scripts/key_match.py ...`: <summary line>
- Test actions on live systems: <none> or, for each: <system, test, test record IDs, approved by (role), date>
- Nothing was changed by this audit. Every change below is a proposal for its owner.

## Act now (sent to the user on <date>)

- <Every CON04 FAIL, review-by date within 14 days and INV02 FAIL from the "Act now" block, with what the user was told>

## Decisions needed, with deadlines

At most five, earliest deadline first.

- <Decision>, decide by <date> (<review-by date from the renewal calendar, or the incident window>)
  - Owner: <role>
  - Options: <keep | right-size | renegotiate | consolidate | replace | retire | investigate>
  - Evidence: <finding IDs>

## Stack map

Paste the Mermaid block printed by connection_map.py. Solid arrows are observed with dated evidence; dotted arrows are configured, proposed or observed without dated evidence; a check ID in a label marks a FAIL.

```mermaid
flowchart LR
  %% paste the connection_map.py output here
```

- Layers: <collect: ...; store: ...; model: ...; measure: ...; activate: ...; engage: ...; support: ...; ai: ...>
- Not in the register: <IDs drawn with a dashed border>

## Register summary

- Tools in scope: <n>. Seen in one channel only: <list>. Seen in no channel: <list>
- Unregistered items found: <name, channels, decision: register, out_of_scope with reason, or retire>
- 12-month tool spend per currency: <USD n; EUR n>. Currencies are never added together
- Reported apart: media <n>; agency services <n>
- Top 80% of tool spend: <tool IDs>. Not ranked: <tool IDs>

## Renewal calendar

Review-by is the earlier of the decision target (notice boundary minus 14 days) and the migration start (term end minus the change lead).

- <review-by> <overdue | 0-30 | 31-60 | 61-90 | later> <tool>: term ends <date>, notice <n> days by <mechanism>, boundary <date>, disposition <...>, owner <role>
- Locked: <tool>: boundary passed on <date>; recertify by <date>
- Unknown terms: <tool>: missing <fields>; order form requested on <date>
- Monthly: <tools and reduction rule>

## Findings by workstream

Group the records under: inventory and ownership; costs and contracts; usage and seats; overlap; integrations, flows and automation; identity and data quality; tracking; access and governance; AI readiness.

- <F-number> <check ID> <FAIL | WARN>, priority class <1 to 5>
  - Condition and dated evidence: <what was observed, file and rows, date>
  - Affected workflow and population: <workflow; how many records, people or accounts>
  - Consequence: <customer, money, access or decision consequence>
  - Proposed change: <one change>
  - Owner and dependencies: <role>; <finding or plan IDs that must close first>
  - Effort and recurring cost: <estimate, labelled as an estimate>
  - Acceptance test: <observable result that closes it>
  - Rollback or recovery: <how to undo, and what rollback does not undo>
  - Target window: <days 0 to 30 | 31 to 60 | 61 to 90 | roadmap quarter>
  - Follow-up measure: <what is re-checked, and when>
  - Owner response: <agreed | risk accepted until date | disputed, with the reason>

## Dispositions per tool

- <tool>: <keep | enable | right-size | renegotiate | consolidate | replace | retire | investigate>
  - Consolidate, replace and retire: destination <tool>; owner <role>; acceptance test <...>; commercial deadline <date>; dependencies <list>. Missing any of the five makes the disposition investigate.
  - Investigate: question <...>; owner <role>; answer by <date>
  - Enable: owner <role>; setup or training task <...>; outcome to check <...>

## AI connections and readiness

- AI connections, one line each: system and environment; publisher; server or app; client; identity (by role); scopes; layer that enforces read-only; approver; logging; off switch; owner; date checked
- Readiness in fix order, each rated fix, partly or ready with its evidence. No averaged score.
  - Tracking accuracy: <rating>. Evidence: <...>
  - Identity resolution: <rating>. Evidence: <...>
  - Warehouse models: <rating>. Evidence: <...>
  - Metric definitions: <rating>. Evidence: <...>
  - Context docs: <rating>. Evidence: <...>
  - Access and permissions: <rating>. Evidence: <...>
  - MCP readiness: <rating>. Evidence: <...>
- Blocking statements: <for example "No AI answers on CAC or pipeline by channel until identity and metric definitions pass">

## Maturity per workflow (optional)

- <workflow>, <area>: observed level <1 to 5, or unassessed>; desired level <n>; missing evidence <...>. Never averaged across areas.

## Savings

- Cash through <date>: <amount per currency>, from <invoices avoided, less transition costs>
- Run-rate after commitments end: <amount per year>, from <date>
- Released capacity: <hours, and the work they move to>. Not cash
- Not counted: cancellations before their effective date, unused prepaid entitlement, hours with no named new use

## Not checked

- <check or question>: <reason>. Closes with <export or access>; owner <role>; requested <date>

## Evidence index

- <file name>: <system>, exported <date>, supplied by <role>, kept in <audit folder>

## Proposed martech-context changes (awaiting approval)

- `stack.md`: <tools, owners and account names to add or correct>
- `decisions.md`: <dated decisions and accepted exceptions>
- `metrics.md`: <thresholds agreed during the audit>
