CRM-audit workflow
Nội dung này hiện chưa có sẵn bằng ngôn ngữ của bạn.
This page is the operator’s guide for running CRM audits against a GoHighLevel sub-account via Claude. It covers:
- The one-time setup that has to be in place before the first audit runs.
- A coverage matrix listing every metric the tools compute and every metric still requires manual lookup.
- Four copy-paste prompt templates for the four cadences (bootstrap, weekly, monthly, ad-hoc).
- The hard rules baked into the tool layer (read-only gates, Drive write flag, audit logging).
Three rules govern every audit and are enforced by the server:
- Writes are off by default. Every GoHighLevel write tool refuses with
E_GOHIGHLEVEL_WRITE_NOT_ALLOWEDuntil a super-admin flipsallow_gohighlevel_writeon the site. Every analytics tool listed below is read-only by design — none of them mutates GHL data. - Google Drive is the system of record. Audit outputs are saved into the linked Drive folder with
drive_save_audit. Chat history is ephemeral; the Drive file is reviewable later. - One sub-account per conversation. Don’t run audits for two clients in the same chat — start a new conversation per sub-account to avoid cross-contamination.
Setup checklist (once per sub-account)
Section titled “Setup checklist (once per sub-account)”Before the first audit can run cleanly, confirm:
- Site row exists with
platform = gohighleveland the PIT + location ID configured. See GoHighLevel prerequisites. - At least one worker user has clicked Connect Google at
/admin/users— and theiruser_idis set in the site’sdrive_user_idfield. - The Drive folder is created and its ID is in
drive_folder_id. The connected Google account must be at least Editor on that folder. - Microsoft Clarity Data Export token is pasted into
clarity_token, project ID intoclarity_project_id. Optional but recommended — the weekly prompt pulls Clarity friction metrics. - Run
diagnose_siteonce and confirm bothdrive.reachable: trueandclarity.reachable: true. - Generate a draft
baseline.mdwithghl_bootstrap_baseline, save it to Drive, review it, and replace the draft banner with a signed-off version once the agency owner has approved.
Coverage matrix
Section titled “Coverage matrix”What the analytics tools cover automatically vs. what still requires a manual step.
One-time setup
Section titled “One-time setup”| Step | Status | Notes |
|---|---|---|
| Verify the MCP can read the sub-account | ✅ Auto | diagnose_site + ping_site |
| Install Microsoft Clarity on the funnel/site | 👤 Manual | Out of scope for the MCP — done in the Clarity dashboard |
| Store Clarity project ID against the site | ✅ Auto | Admin form writes to clarity_project_id |
| Create per-client Drive folder | 👤 Manual | Create the folder in Drive, then paste the folder ID into the admin form. The MCP does not auto-create folders. |
| Define KPI baseline | ⚠️ Partial | ghl_bootstrap_baseline auto-generates a draft from 30 days of GHL data. Opt-in rate per funnel works; missed-call-textback works; SMS deliverability does NOT (GHL public REST doesn’t expose A2P stats); Clarity baseline still needs a manual dashboard pull (Clarity API caps at 3 days). |
Save baseline as baseline.md to Drive | ✅ Auto | Feed ghl_bootstrap_baseline output into drive_save_audit |
Weekly audit
Section titled “Weekly audit”| Metric | Status | Tool / Caveat |
|---|---|---|
| Opt-in rates per funnel | ✅ Auto | ghl_get_funnel_stats (per-page) + ghl_compute_opt_in_rate (overall + per-funnel aggregate) |
| Missed-call → text-back conversion | ✅ Auto | ghl_compute_missed_call_textback (default 5-minute window — adjustable via textback_window_minutes). Heuristic detection — verify against the GHL Conversations dashboard if numbers look off. |
| Pipeline stage drop-offs | ✅ Auto | ghl_compute_pipeline_funnel (counts + stage-to-stage conversion) |
| SMS deliverability | ⚠️ Partial | ghl_get_campaign_a2p_stats surfaces campaign metadata only — per-campaign A2P delivery stats are NOT in GHL public REST. Manual check in GHL → Marketing → Campaigns required. |
| SMS reply rate | ✅ Auto | ghl_compute_sms_stats (samples up to 50 conversations by default; raise max_conversations for full coverage) |
Compare against baseline.md | ✅ Auto | drive_get_baseline loads the agreed file, Claude computes the diff |
| Top 5 Clarity URLs with rage/dead-click above baseline | ✅ Auto (with cron history) | clarity_get_metrics gives 3-day per-URL friction directly. For multi-week trends use clarity_get_historical_metrics — reads from the daily snapshot table populated by the 01:30 UTC cron. |
| ICE ranking of recommendations | ✅ Auto | Claude computes ICE from the deltas during synthesis |
Monthly sprint
Section titled “Monthly sprint”| Step | Status | Tool / Caveat |
|---|---|---|
| Session-recording filter (30s-2min, did NOT convert) | 🔴 Manual | Clarity public Data Export API does NOT expose per-session URLs. Open the Clarity dashboard → Recordings tab → apply the filter manually. |
| Workflow execution errors (last 30 days) | ✅ Auto | ghl_list_workflows + ghl_get_workflow_executions per workflow. Returns is_dead: true and error_rate so synthesis can flag both bins. |
| A2P delivery failures | ⚠️ Partial | Same as weekly — ghl_get_campaign_a2p_stats returns metadata only. Manual dashboard required. |
| Dead workflows (zero executions in 30 days) | ✅ Auto | ghl_get_workflow_executions returns is_dead: true when execution count is 0 |
| Tag hygiene (tags used fewer than N times) | ✅ Auto | ghl_compute_tag_hygiene (configurable min_uses, default 5) |
| Reactivation candidates (stale contacts) | ✅ Auto | ghl_compute_reactivation_candidates (configurable days + tag filter) |
Ad-hoc “leads dropped” diagnostic
Section titled “Ad-hoc “leads dropped” diagnostic”| Comparison | Status | Tool / Caveat |
|---|---|---|
| Opportunities / win-rate / no-show (current window vs prior window) | ✅ Auto | ghl_compute_window_compare covers all three with one call (default window_days=14) |
| Opt-in rate diff | ✅ Auto | Call ghl_compute_opt_in_rate twice with different days; Claude diffs |
| Ad spend | 🔴 Out of scope | GHL public REST doesn’t expose Meta/Google Ads spend. The MCP has no integration — check the ad platform dashboard directly. |
| Missed-call text-back conversion | ✅ Auto | ghl_compute_missed_call_textback |
| Form submission rate | ✅ Auto | ghl_compute_form_submission_rate (heuristic attribution via tag + custom field — verify if numbers look off) |
| Identify the layer where the drop happens | ✅ Auto | Chain ghl_compute_window_compare + the metric tools above into one synthesis prompt |
Prompt templates
Section titled “Prompt templates”These are tested, copy-paste prompts for Claude Desktop. Replace {site_id} with the actual site id (for example seo-navigator). All prompts are read-only — they don’t trigger any GHL writes.
Before the first audit: confirm the token your Claude Desktop is using has
*scope on the site, or at minimum these tools listed:diagnose_site,drive_get_baseline,drive_save_audit,ghl_compute_*,ghl_get_*,ghl_list_workflows,clarity_get_*. See Tokens & scoping.
A. Bootstrap baseline (run once per new sub-account)
Section titled “A. Bootstrap baseline (run once per new sub-account)”Bootstrap the CRM baseline for {site_id}.
1. Call ghl_bootstrap_baseline with days=30.2. Verify Drive + Clarity reachability with diagnose_site.3. Save the markdown output to Drive as `baseline.md` via drive_save_audit.4. Reply with the Drive web view URL so the agency owner can review.
Do NOT edit any HighLevel data. This is read-only.B. Weekly audit
Section titled “B. Weekly audit”Run the weekly CRM audit for {site_id}.
1. Load the agreed baseline via drive_get_baseline.2. Pull last 7 days from GHL using: - ghl_get_funnel_stats (opt-in rate per funnel) - ghl_compute_opt_in_rate (overall + per-funnel) - ghl_compute_missed_call_textback (5-min window) - ghl_compute_pipeline_funnel (stage drop-offs) - ghl_compute_sms_stats (reply rate) - ghl_compute_no_show_rate3. Pull last 3 days of Clarity friction signals: - clarity_get_heatmap_metrics (rage/dead-click, scroll depth) - clarity_get_metrics with dimensions=["URL"] for top URLs above baseline4. Compare every metric against baseline.md. Flag every metric whose movement exceeds the anomaly threshold encoded in §1-§4 of baseline.md.5. Synthesise: - "What changed vs last week" — 1 paragraph - "Top 3 anomalies" — bullet list with metric, current, baseline, delta - "Top 3 recommended fixes" — ranked by ICE (Impact × Confidence × Ease, 1-10 each)6. Save the synthesis to Drive as `audits/{ISO date}_weekly.md` via drive_save_audit.7. For every recommended fix with ICE > 7, create a ClickUp task via the ClickUp MCP (clickup_create_task): - list_name: "{clickup_list_name_for_this_client}" (set per client) - name: the fix title - description: the fix body + a Markdown link to the Drive audit URL - tags: ["crm-audit", "weekly", "ice-gt-7"] - priority: 2 (High) if ICE >= 9, else 3 (Normal) Skip task creation for ICE <= 7 — keep those in the Drive audit only.8. Reply with: the Drive web view URL + the list of ClickUp task URLs created.
Do NOT push any change to GHL. This is read-only. ICE > 7 items requirereview and sign-off in ClickUp before any action is taken.C. Monthly optimisation sprint
Section titled “C. Monthly optimisation sprint”Run the monthly CRM optimisation sprint for {site_id}.
Part 1 — same as weekly audit (prompt B) but with days=30 instead of 7.
Part 2 — workflow health:1. ghl_list_workflows.2. For each workflow with status="active", call ghl_get_workflow_executions with days=30.3. Flag: - workflows where is_dead=true (zero executions in 30 days) — archive candidates - workflows where error_rate > 0.05 — investigate failure pattern
Part 3 — tag hygiene:1. ghl_compute_tag_hygiene with min_uses=5.2. List the rare tags.
Part 4 — reactivation pool:1. ghl_compute_reactivation_candidates with days=60.2. Return count + a sample of 20 contacts (id, name, last_activity, tags).3. Recommend whether to launch a reactivation campaign this month.
Save the synthesis to Drive as `audits/{ISO date}_monthly.md`.
For ICE > 7 fixes from Part 1 AND every flagged workflow from Part 2,create one ClickUp task each via clickup_create_task: - list_name: "{clickup_list_name_for_this_client}" - name: the fix / workflow title - description: details + Drive audit URL - tags: ["crm-audit", "monthly", "ice-gt-7" OR "workflow-health"] - priority: 2 (High) for workflow errors + ICE >= 9, else 3 (Normal)
Reply with: the Drive web view URL + the list of ClickUp task URLs.
NOTE: Session-recording analysis is NOT automated — Clarity public APIdoes not expose per-session URLs. Open the Clarity dashboard and filterRecordings to 30s-2min non-converters as a separate step.D. Ad-hoc “leads dropped” diagnostic
Section titled “D. Ad-hoc “leads dropped” diagnostic”Diagnose the lead drop in {site_id}.
1. Run ghl_compute_window_compare with window_days=14. This gives 14-day current vs prior-14-day baseline for opportunities, win rate, no-show.2. Run ghl_compute_opt_in_rate twice — once with days=14, once with days=28 — and report the delta per funnel.3. Run ghl_compute_form_submission_rate with days=14 and days=28 (run twice to get the comparison).4. Run ghl_compute_missed_call_textback with days=14.
Identify the layer where the drop is happening:- Traffic (funnel views collapsed?)- Opt-in (views same but opt-in rate dropped?)- CRM follow-up (opt-in same but text-back / SMS reply dropped?)- Sales (pipeline stages same upstream, conversion at later stage dropped?)
Reply with:- A 2-line headline naming the layer where the drop concentrates- The 3 metrics with the biggest negative delta- A recommended next investigation step
Ad spend is OUT OF SCOPE — the MCP has no Meta/Google Ads integration.Check ad spend in the ad platform dashboards separately.
Do NOT push any change to GHL. This is read-only.ClickUp approval gate
Section titled “ClickUp approval gate”Prompts B and C above instruct Claude to create one ClickUp task per ICE > 7 recommendation. This relies on MCP composition — Claude has both the SEO Navigator MCP (for the audit data) and the ClickUp MCP connected in the same conversation, and chains them in one prompt.
Prerequisites:
- Claude Desktop has both connectors installed:
- SEO Navigator MCP at
/mcp(this server). - The ClickUp MCP (claude.ai connector). Authenticate it once per Claude account.
- SEO Navigator MCP at
- Each sub-account has a dedicated ClickUp list (recommended naming:
CRM Audit — {client-name}). Capture the list name (or ID) in your client onboarding doc so it can be substituted into{clickup_list_name_for_this_client}in the prompts.
Why ClickUp tasks, not direct GHL changes? Two reasons:
- Read-only first. Even after the 90-day read-only window expires, sign-off lives in a human-readable task tracker — not in chat, where it’s ephemeral, and not in GHL directly, where a wrong change is hard to undo.
- Visibility for reviewers. ICE > 7 fixes are the high-impact ones; they need a reviewer to look at the audit, agree with the fix, then execute it in GHL by hand or via a follow-up prompt.
Task hygiene: the recommended tags (crm-audit, weekly, monthly, ice-gt-7, workflow-health) let the reviewer filter their ClickUp list. Combine with ClickUp’s saved views to get a board like “All weekly audit anomalies awaiting review”.
If your team uses Linear, Asana, or Notion instead, the same pattern works — replace clickup_create_task with the equivalent tool from the corresponding MCP connector (the Claude AI connectors directory has many of them pre-built).
What is still manual
Section titled “What is still manual”These items are listed honestly so they don’t get rediscovered by surprise during the first audit cycle.
- Session-recording filter. The Clarity public Data Export API does not return per-session URLs. The MCP can’t fetch the recordings (“30s-2min, did NOT convert”) — open the Clarity dashboard manually.
- Pixel-level heatmaps. Clarity public API only returns aggregate rage/dead-click counts. The dashboard renders the actual heatmap.
- Ad spend. No Meta/Google Ads adapter. Pull from each ad platform’s dashboard separately.
- A2P delivery stats per campaign. GHL public REST exposes campaign metadata only. Per-campaign delivered/failed counts must be read from the GHL → Marketing → Campaigns dashboard.
- Clarity 30-day baseline (first run only). The Data Export API caps
numOfDaysat 3. The Worker runs a daily cron snapshot to back-fill 30+ day trends into D1 (seeclarity_get_historical_metrics), but for the first 30 days after a site is linked there isn’t enough history — supplement with a manual Clarity dashboard pull until the snapshot table fills up.
Hard rules baked into the tool layer
Section titled “Hard rules baked into the tool layer”drive_save_auditis gated behindallow_drive_write(super-admin flag, default OFF). Reads (drive_get_site_folder,drive_list_site_files,drive_read_file,drive_get_baseline) are always available when the site has Drive linked.- All
ghl_compute_*,ghl_get_*,ghl_list_*analytics tools are read-only by design — the analytics adapter has no write helpers. Mutations stay in the proxy tools (*_create-*,*_update-*, etc.) which are themselves gated behindallow_gohighlevel_write. - Every tool call is audit-logged in D1 (
audit_logtable) with the calling token id, the site id, arguments, and status. Review the audit log at/admin/auditto verify which tools a prompt actually called.
Related
Section titled “Related”- Drive + Clarity setup — wire the OAuth + tokens.
- GoHighLevel prerequisites — PIT, location ID, write flag.
- All MCP tools — complete tool reference.
- Error codes — what every
E_*code means at runtime.