What this audit checks
Authentication & access
- OAuth access token valid (auth on /account/profile) and not expired/revoked
- Refresh token present and refresh succeeds against /token
- Granted scope covers contacts + tags + emails + campaigns + orders (full)
- Keap app subdomain (app_id) resolves to the expected account
Deliverability & sender reputation
- Bounce rate above 5% over the trailing 30 days
- Spam complaint rate above 0.1%
- Unsubscribe rate above 2% (list fatigue or off-target content)
- Delivery rate below 95% (inbox-provider rejection)
- Share of contacts in non-marketable / hard-bounce email_status rising
Engagement & revenue attribution
- Email open rate below 10% sustained (deliverability or content problem)
- Click rate below 0.5% (weak engagement)
- Revenue per send / per recipient trending down vs prior period
- Refund rate on attributed orders above baseline
- Checkout-to-order rate collapsing (draft orders not converting)
Automation & list hygiene
- Automation campaigns stuck in draft / never published (idle lifecycle revenue)
- Active campaign count zero while contacts are being added (no nurture)
- Thin segmentation - fewer than 3 meaningful tags / segments
- Active subscribers (marketable) shrinking week-over-week
- Large unsegmented audience emailed as a single blast
Cross-channel: revenue-at-risk (the killer area)
- Keap-attributed revenue diverges >30% from the storefront sibling’s order revenue for the same contacts (attribution gap / double-count)
- Paying storefront customers (commerce sibling) with no active Keap campaign engagement - missed lifecycle revenue
- Refund spikes concentrated on email-attributed orders versus organic storefront orders
- Contacts marketable in Keap but flagged non-marketable / suppressed on the email sibling (Klaviyo/Mailchimp) - consent drift
Severity thresholds
| Signal | Warn | Critical |
|---|---|---|
bounce_rate | 2 | 5 |
spam_rate | 0.1 | 0.3 |
unsubscribe_rate | 0.5 | 2 |
delivery_rate | 98 | - |
open_rate | 15 | - |
revenue_divergence_pct | 30 | 50 |
Data sources
GET https://api.infusionsoft.com/crm/rest/v1/account/profile- Auth + account sanityGET https://api.infusionsoft.com/crm/rest/v1/contacts- Contact inventory + email_status (marketable share)GET https://api.infusionsoft.com/crm/rest/v1/tags- Tag / audience inventory + segmentation depthGET https://api.infusionsoft.com/crm/rest/v1/emails- Broadcast send/open/click/bounce/unsubscribe statsGET https://api.infusionsoft.com/crm/rest/v1/campaigns- Automation campaign status (published vs draft), active/completed countsGET https://api.infusionsoft.com/crm/rest/v1/orders- Order revenue, status, refunds for attribution + revenue-at-riskGET https://api.infusionsoft.com/crm/rest/v1/transactions- Payment-level detail for refund-rate reconciliation