What this audit checks
Authentication & access
- Personal access token still valid (auth on /v0/meta/whoami)
- Token scopes include data.records:read + data.records:write + schema.bases:read
- Configured base + findings table are reachable and not deleted (schema fetch succeeds)
- Status single-select field exists on the table with mappable open / done option groups
- Airtable rate-limit headroom > 30% (5 req/sec per base; 429 = 30s base lockout)
Backlog health
- Open record count vs 30-day baseline (sudden growth = drowning signal)
- Blocked-status record count + change WoW
- Oldest open record age via createdTime (>90 days = backlog rot)
- Unassigned records > 5 (work that nobody owns, when an assignee field exists)
- Backlog-by-priority skew (mostly Lows = no one is grooming)
Data freshness & integrity
- Stale open records - not modified >30d (requires a Last modified time field)
- Record creation has stalled - zero new createdTime rows in the table over 7d (sync stopped)
- Status field has options that map to neither open nor done group (unmappable state)
- Primary field blank on open records (rows that render with no title)
VortexIQ findings lifecycle (the stickiness test)
- Abandoned findings - VortexIQ-created records, no edit (lastModifiedTime) >14d
- Finding resolution rate over rolling 90d (target >75%)
- Avg time-to-fix for resolved findings, by priority
- Findings moved to a Won’t-Do / closed option without an evidence note (silent dismissals)
- Regression rate - findings whose Status reopened after reaching a Done group
Cross-channel: coverage & abandonment
- Critical findings from sibling connectors (shopify/bigcommerce/adobe/cybersource) older than 7 days with no Airtable row - coverage gap
- Airtable rows referencing decommissioned/archived integrations - stale work
- Abandoned VortexIQ findings dollar-impact rollup vs sibling revenue at risk
Data sources
GET https://api.airtable.com/v0/meta/whoami- Token validity + current user/scopesGET https://api.airtable.com/v0/meta/bases- Base reachability + permission levelGET https://api.airtable.com/v0/meta/bases/{base_id}/tables- Table/field/view schema + Status-field option mapping + Last-modified-field detectionGET https://api.airtable.com/v0/{base_id}/{table_id_or_name}- Filtered record reads (open count, blocked, abandoned, by-status, created-in-window, stale)