What this audit checks
Authentication & access
- Integration token still valid (auth on /users/me)
- Findings database is shared with the integration and is not archived
- Status property exists on the database with mappable open / done option groups
- Notion rate-limit headroom > 30% (avg ~3 req/sec)
Backlog health
- Open page count vs 30-day baseline (sudden growth = drowning signal)
- Blocked-status page count + change WoW
- Oldest open page age via created_time (>90 days = backlog rot)
- Unassigned pages > 5 (work that nobody owns)
- Backlog-by-priority skew (mostly Lows = no one is grooming)
VortexIQ findings lifecycle (the stickiness test)
- Abandoned findings - VortexIQ-created rows, no edit (last_edited_time) >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 option without a comment (silent dismissals)
- Regression rate - findings whose Status reopened after reaching a Done group
Team capacity
- Assignees with >10 open pages (overload signal)
- Assignees with zero resolved pages in 14d (parked work)
- Cycle time degradation > 25% week-over-week
- Scope-creep - pages added to the current sprint property after sprint start
Cross-connector signals
- Critical findings from sibling connectors (shopify/bigcommerce/adobe/cybersource) older than 7 days with no Notion row - coverage gap
- Notion rows referencing decommissioned/archived integrations - stale work
Severity thresholds
Data sources
GET https://api.notion.com/v1/users/me- Token + bot identityGET https://api.notion.com/v1/databases/{database_id}- Database schema + writability/share check + property mappingPOST https://api.notion.com/v1/databases/{database_id}/query- Filtered backlog reads (open count, blocked, abandoned, by-assignee, by-status)GET https://api.notion.com/v1/users- Workspace members for assignee capacity calcGET https://api.notion.com/v1/comments- Comment-thread checks for silent-dismissal detection