Why Manual Schema Setup Causes Broken Automations
When an operator creates 15 tags, 8 trigger links, and 25 Custom Values by hand across five different HighLevel settings tabs, a single typo in a key name (`booking_url` vs. `calendar_url`) breaks downstream workflows and attribution tracking.
Declarative Schema, Tag, Link & Smartlist Provisioning
- Idempotently provisions sub-account tags (`ghl-agency tags ensure --location <ID> --name tag1,tag2`) without duplicating existing tags.
- Creates and updates tracked HighLevel Trigger Links (`ghl-agency links create|update`) and verifies redirect targets.
- Synchronizes Custom Values from a version-controlled JSON manifest (`ghl-agency custom-values sync`) and validates merge tags (`custom-values validate`).
- Builds saved CRM Smartlist views and form schemas via `ghl-crm views` and `ghl-crm records`.
Side-by-Side Technical & Pricing Comparison
| Capability / Requirement | HighLevel Settings UI | Basic CRM API Wrappers | HighLevel Agency & Builder MCP |
|---|---|---|---|
| Idempotent Batch Tag Provisioning (`tags ensure`) | ⚠️ Manual 1-by-1 tag entry | ⚠️ Fails or duplicates on existing tags | ✅ Diffs existing tags & creates only missing ones |
| Manifest-Driven Custom Values Sync & Validation | ⚠️ Manual copy-paste across 40+ rows | ⚠️ Single-record CRUD without validation | ✅ Batch upsert + broken merge-tag scanner |
| Tracked Trigger Links Sync | ⚠️ Manual link entry in Marketing tab | ⚠️ Raw POST without duplicate check | ✅ Idempotent trigger-link planner + read-back |
| Saved CRM Smartlist Views Builder | ⚠️ Manual filter clicking per client | ❌ Not exposed in public API v2 | ✅ Programmatic Smartlist view provisioning |
CLI & MCP Configuration
# 1. Ensure required funnel & attribution tags exist (dry-run default)
ghl-agency tags ensure --location <LOCATION_ID> --name "lead-qualified,booked-call,vip-client" --dry-run
# 2. Batch-sync Custom Values from a JSON manifest
ghl-agency custom-values sync --location <LOCATION_ID> --file ops/custom-values.json --dry-run
# 3. Validate all {{ custom_values.* }} merge tags across templates
ghl-agency custom-values validate --location <LOCATION_ID> --json
Copy-Paste AI Prompt
Ensure the tags `lead-qualified`, `booked-call`, and `no-show-recovery` exist in sub-account <LOCATION_ID>, sync our `custom-values.json` manifest, and verify that every merge tag resolves cleanly.
Frequently Asked Questions
What happens if half the tags in `tags ensure` already exist?
`tags ensure` fetches the sub-account's current tags first, computes the exact set difference, and only creates the missing tags.
Can I also manage Brand Boards and Chat Widgets during sub-account setup?
Yes. Use `ghl-agency brand-boards` and `ghl-agency chat-widget` to configure brand kits, brand voices, and live/SMS/WhatsApp chat widgets.