HueLifeCMO Knowledge Base

HubSpot Implementation Audit — HueLife

Read-only audit via HubSpot CLI (hs api), June 2, 2026. Account 44205564 (HueLife, STANDARD, America/Chicago, USD). Raw data in raw/ (gitignored). Findings are point-in-time; record-level numbers are from API counts + a 100-record sample.


TL;DR — implementation maturity

HueLife's HubSpot is a populated marketing/contact database with an essentially unused sales layer, carrying significant custom-property sprawl (over half the custom contact fields are empty). It reads as: imported/collected lots of contacts, heavily customized the contact record for training & publishing workflows, but never operationalized deals/pipelines — and the customization has outrun the data-entry discipline.

Object Records Read
Contacts 11,255 The real asset — the marketing database
Companies 3,114 Present but 0 custom properties (stock/untouched)
Deals 3 ⚠️ Pipeline effectively unused — sales isn't tracked in HubSpot
Tickets / custom objects not scoped Couldn't audit (see gaps)

1. The headline finding: deals are unused

Only 3 deal records exist. Whatever revenue/sales process HueLife runs, it is not being tracked in HubSpot. For a CMO this matters because closed-loop reporting (marketing → pipeline → revenue) is impossible until deals are used. Either: (a) sales lives in another tool, (b) the org is pre-revenue-tracking, or (c) deals were set up and abandoned. Decide intentionally: commit to deals or stop maintaining the 278 deal properties.

1b. Pipelines, tickets, Courses (verified via read-only Service Key)

The app-level Service Key reached what the user-level PAK couldn't.

Deal pipelines (2) — and they're MISCONFIGURED: - Sales Pipeline (default) — 11 stages: the standard 7 (Appointment Scheduled → Qualified To Buy → … → Closed Won → Closed Lost) plus 4 course-payment stages bolted on (Awaiting Payment → Paid → Scholarship → Cancelled/Refunded). 1 deal. - Course Registrations (custom) — 5 stages: Awaiting Payment → Paid → Scholarship → Cancelled → Refunded. 2 deals. - 🔎 Two problems: (a) only 3 deals total (1+2) — the deal layer is unused (§1); (b) course stages exist in two places — appended to the default Sales Pipeline and the dedicated pipeline. Cleanup: strip the course stages off the Sales Pipeline; keep course flow only in Course Registrations. Then feed it from the course source system → unlocks course-revenue reporting you can't produce today.

The 3 deals (telling): 1. Minnesota School Nutrition Association$5,000, Closed Won (Sales Pipeline). A real consulting deal. 2. test — junk/test record in Course Registrations → delete. 3. Facilitation Training Intensive via Payment Link$975, Course Registrations. - 🔑 Insight: HueLife isn't pre-revenue — they closed $5k and took a course payment via a HubSpot Payment Link → deal. That Payment-Link→deal pattern is the proven seed to scale for systematic course-revenue tracking; it just isn't the default flow yet.

Ticket pipeline (1): Support Pipeline — New → Waiting on contact → Waiting on us → Closed. (Ticket count returned 403 — the read-only key wasn't granted crm.objects.tickets.read; add it if ticket volume matters.)

Courses object: the native HubSpot Courses object exists but has 0 records — course tracking lives only in contact properties (CSV import), not the structured object. Opportunity to actually use it. No custom objects exist (Courses/Leads are native; Leads = 0 records).

1c. Marketing infrastructure — the bright spot

The contact-only view made HueLife look passive. It isn't: - 97 lists27 Dynamic (active, auto-updating segments), 15 Snapshot, 55 Manual (static). Real, active segmentation. - 9 marketing campaigns defined. - Segmentation is sophisticated — the 27 dynamic lists segment by geography (TX/WI/MO), program (TFM/TSP, AES, MToP, CoP, TLR, ToP Strategic Planning), engagement (newsletter opened/unopened, unengaged, hard-bounced, unsubscribed), interest (Pro Bono, Community of Practice), and survey leads ("Warm Survey Leads", "Strategic Planning Clients"). This is a mature marketing motion. - The "Warm Survey Leads" segment confirms surveys ARE run and segmented from. - 🔎 Reframe: the weak spot is not marketing (segmentation + campaigns are live) — it's the sales/revenue layer (3 deals) and data capture into fields. Also: 55 static lists tend to go stale → worth a prune.

2. Property model health

Object Total props Custom Calculated Note
Contacts 494 97 38 Heavily customized; 55 custom = empty (below)
Companies 258 0 6 Entirely stock — companies never tailored
Deals 278 37 36 278 props for 3 records = pure overhead

494 contact properties is high. The contact record is doing a lot — but a lot of it is dead.

3. Property sprawl / dead weight (the cleanup target)

Sampled the 100 most-recently-modified contacts across all 97 custom contact properties: - 55 of 97 (57%) were 0% filled — empty in every sampled contact. - Even the most-used custom property (course_participation) is only 37% filled; next is photo_release 18%, then everything ≤9%. No custom property is reliably populated.

Examples of dead custom fields: age_group, book_relationship_type, course_code, course_date, feedback_type, nda_status, newsletter_status, organization_type_, manuscript_sent, participated_in_mtop, i_identify_my_ethnicity_as_… (full 55 in raw/prop_contacts.json; ask me for a delete-checklist).

⚠️ Caveat before deleting: "0% in the 100 most-recent" ≠ "0% across all 11,255." Some fields (e.g., book_*, course-cohort fields) may be populated on specific historical segments. Verify each against its full fill-rate before archiving/deleting.

4. What the data reveals about the business

The custom-field vocabulary makes HueLife's model clear: a training / facilitation + book-publishing organization — courses, lead trainers, "Certified Top Facilitator (CTF)," manuscripts, beta readers, debrief/"Hue Conversations." The CRM was bent around course enrollment and author/contributor tracking, not a classic sales funnel.

5. Team / owners

6 owners: irina.fursman@, oksana.lohvinenko@, shayna.keppeler@, megan.jacobson@ (all @hue.life), plus 2 personal Gmail owners (fursmanskylar@gmail.com, jonmloss@gmail.com). - 🔸 Hygiene: move owners onto @hue.life addresses where possible — personal-Gmail owners complicate logging attribution, offboarding, and BCC sender-matching.

6. Coverage — what's resolved and what remains

A read-only Service Key (app-level) closed most of the PAK's gaps: | Area | Status | |---|---| | Pipelines & stages | ✅ resolved (Service Key) — see §1b | | Lists / segments | ✅ resolved — 97 lists (§1c) | | Custom objects | ✅ resolved — none exist; Courses/Leads are native, empty | | Campaigns | ✅ resolved — 9 campaigns | | Tickets | ⚪ N/A — not readable via Service Key ("scope isn't available for public use"); HueLife handles support off-tickets (per CMO) | | Feedback submissions (survey data) | ✅ Resolved by elimination — account is STANDARD tier, so HubSpot's native Feedback Surveys (Service Hub Pro+) isn't available here. Confirms survey data is 100% external (SurveyMonkey), CSV-imported (matches §3 field-source trace + "Warm Survey Leads" list). Same story for tickets (handled off-platform) | | Sequences | ⚪ API validation error via Service Key; check in-app if needed | | Workflows / automation | ◻️ not yet pulled — add automation read scope to the key | | Connected inboxes / email logging config | ◻️ review in HubSpot UI |

To finish: add those 2–3 read scopes to the Service Key (then rotate). Credential paths documented in CLAUDE.md → "HubSpot access."

7. Prioritized recommendations


Generated read-only. No CRM data was modified. Raw API responses in raw/ (local only).