# Workspace Audit

> Audit a FirstTouch + HubSpot workspace for readiness before launching outreach - checks MCP connections, owner coverage, LinkedIn account health, safety limits, logging setup, and data hygiene. Produces a readiness scorecard with prioritized fixes. Use when onboarding a new customer, before launching a campaign, or when outreach "isn't working" and you suspect setup issues.

- Skill: `first-touch-inc/workspace-audit` (Agent Skill)
- Install (CLI): `npx skillmds@latest add first-touch-inc/workspace-audit`
- Raw SKILL.md: https://api.skillmd.com/api/skills/first-touch-inc/workspace-audit/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Marketing & Growth
- Author: First-Touch-Inc (https://skillmd.com/u/first-touch-inc)
- Updated: 2026-09-22
- Page: https://skillmd.com/skills/first-touch-inc/workspace-audit

---


# Workspace Audit

**Outcome:** An optional pre-flight check for teams that want to verify their setup before scaling - catch configuration gaps before they waste sends. Produce a readiness scorecard so a customer knows exactly what to fix before going live.

## First-run onboarding gate
Before running this skill for the first time in a workspace, load `../../references/onboarding.md` and complete the onboarding questions. Do not proceed until you know: LinkedIn account type (free/basic = no connection notes; recommend 10 connection requests/day and never exceed the FirstTouch max of 20/day; Sales Navigator/Premium = connection notes available; recommend 20 connection requests/day and never exceed the FirstTouch max of 30/day), HubSpot access (MCP, service key/private app token, HubSpot list only, or none), and which play the user wants to run. Recommend high-intent plays before outbound to keep the LinkedIn account healthy. If HubSpot is unavailable, do not run HubSpot-specific steps unless the user provides a HubSpot list FirstTouch can access.

## When to use
- New customer onboarding ("are we ready to launch?")
- Before a big campaign push
- Outreach is underperforming and you suspect configuration, not copy
- Quarterly health check

## Step-by-step

Every check below is one of two kinds, and the scorecard must keep them separate so a "ready" score can never hide unverified areas:

- **[AUTO]** - verifiable through the connected MCPs. Mark ✅/❌ from live data only.
- **[MANUAL]** - needs the user or the FirstTouch/HubSpot dashboard. Mark `manual check required`; never guess, and never count an unchecked item toward the readiness score.

### 1. Check MCP connectivity [AUTO]
- FirstTouch MCP reachable + returns campaign/seat data? ✅/❌
- HubSpot MCP reachable + returns contacts/owners? ✅/❌ (if a play needs it)
- FirstTouch enrichment available and credits understood for AI SDR? ✅/❌/n/a; external Clay/Surfe enrichment MCP is optional, not required

### 2. LinkedIn account health (FirstTouch) [AUTO + MANUAL]
- Seat connected and authenticated? ✅/❌
- Current usage vs. daily limits (connection requests, messages, views) when available from FirstTouch
- Seat status in FirstTouch Social settings: Available = good; cooldown = hit its daily limit (normal, plan volume accordingly); Action required / Disconnected / Restricted = resolve before that seat sends
- SSI / account age / warmup status - manual/dashboard check unless FirstTouch exposes it directly
- If FirstTouch cannot return a metric, ask the user to check the FirstTouch dashboard and mark that metric `manual check required`

### 3. Owner coverage (HubSpot) [AUTO when HubSpot connected, else MANUAL]
- % of target contacts with an assigned owner when HubSpot is connected
- Orphaned contacts (no owner) → routing risk for HubSpot signal, inbound, stalled-deal, and other owner-routed plays
- Owner-to-seat alignment (does the authorized LinkedIn user map to the right owners?)
- If HubSpot or owner reports are unavailable, ask the user/RevOps to provide an owner export and mark this area `manual check required`, not failed

### 4. Safety configuration [AUTO]
- Duplicate-check enabled? ✅/❌
- Cooldown windows set? ✅/❌
- Daily limit caps configured? ✅/❌
- Approval workflow defined (who approves, where)? ✅/❌
- Optional: if the team wants extra confidence, route one test dynamic action to a designated test contact and confirm the approval task arrives where expected (owner in HubSpot or FirstTouch app under Tasks).

### 5. Logging, replies & attribution readiness [AUTO + MANUAL test round-trip]
- FirstTouch→HubSpot timeline logging active? ✅/❌
- HubSpot write scope for timeline tags/properties confirmed? ✅/❌
- Test action round-trip completed: create/approve one safe test action to a contact/record explicitly designated by the user as a test recipient, or to the operator's own profile. Never use a live prospect just to verify logging. Then verify the HubSpot timeline/logging record and FirstTouch reply/status visibility came back as expected. This test is optional - if the team skips it, simply mark attribution/logging `unverified` in the scorecard so nobody assumes it was checked.
- Attribution tags/properties created or writable (e.g. `linkedin_intent`, play tags)? ✅/❌/manual HubSpot check
- FirstTouch reply tracking visible for outreach actions? ✅/❌ - the agent cannot read arbitrary inbox history, but FirstTouch-tracked outreach can surface reply/engagement status for actions it manages.
- Deals associated with contacts that have timeline activity? ✅/❌

### 6. Queue/status hygiene [AUTO]
- Current outreach queues: pending, blocked, review-required, failed, canceled, completed counts when available
- Stuck approval rows or actions older than the team's SLA? list them as queue hygiene issues, not automated alerts unless an alerting workflow is explicitly configured
- Email/LinkedIn queue blockers: missing account, missing recipient/profile, approval required, account readiness, scheduler/limit delay

### 7. Data hygiene [AUTO when HubSpot connected, else MANUAL]
- LinkedIn URL coverage on target contacts (%)
- Duplicate contacts in HubSpot
- Stale contacts (no activity > 180 days) in active lists

### 8. Produce the two-part readiness scorecard
Present verified and unverified areas separately. Replace every number with live workspace data before presenting; never score an unverified area.

```
WORKSPACE READINESS - {customer} - {date}
Verified score: {x}/100 across {n} MCP-verified areas - {READY / READY WITH FIXES / NOT READY}

VERIFIED (live MCP data)
  Connections:     ✅ - FirstTouch + HubSpot connected
  Owner coverage:  ❌ - 38% of target contacts have no owner
  Safety config:   ✅ - all gates configured
  Queue hygiene:   ⚠ - 14 rows pending approval >2 days

MANUAL CHECK REQUIRED (not counted in score)
  SSI / seat volume settings / seat status: user can confirm in FirstTouch dashboard
  Logging round-trip:   pending user-designated test contact

PRIORITY FIXES (do before launch):
1. Assign owners to orphaned contacts (blocks owner-routed plays)
2. Set each seat's daily volume in the FirstTouch app to the recommended cap and resolve any non-Available seat status before volume
```

If HubSpot is not connected, mark CRM-only rows `N/A - HubSpot not connected` rather than failing the workspace, and recommend piloting FirstTouch-only plays (warm engagers, social campaigns from Discover/imported lists, AI SDR via Discover Contacts) while HubSpot gets connected.

### 9. Outcome metrics handoff
For recurring attribution reporting, run `team-performance-report`. In this readiness audit, only verify whether FirstTouch team metrics access and HubSpot logging coverage are available; do not treat a setup audit as the recurring report itself.

## Output
- Readiness scorecard (score + per-area status)
- Prioritized fix list (what blocks launch, what's nice-to-have)
- Go/no-go recommendation
- Outcome metrics snapshot: sends, replies, sentiment, meetings, opportunities by flow/sender/date when available

## Examples
**Customer:** new onboarding, eager to launch.
**Audit finds:** 38% no-owner contacts + 61% LinkedIn URL coverage → **not ready**.
**Recommendation:** fix owners + enrich URLs first (blocks owner-routed HubSpot plays). Safe to pilot warm-engager follow-up immediately if HubSpot owner routing is not required.

## Why this play wins
Most outreach failures are setup failures dressed up as copy failures. This play surfaces the real blocker in 10 minutes instead of 3 weeks of "why aren't we getting replies?"

## Pitfalls
- **Auditing once** - workspaces drift. Run quarterly + before any major push.
- **Ignoring the "no owner" red flag** - it's the #1 cause of misrouted outreach.
- **Ignoring frequent cooldowns** - a seat that keeps hitting its limit should run lower daily volume so sends flow evenly instead of bunching.

## Reference
- MCP setup requirements: [`../../references/mcp-setup.md`](../../references/mcp-setup.md)
- Safety config the audit checks: [`../../references/safety-governance.md`](../../references/safety-governance.md)

