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 lists — 27 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
- P0 — Decide on deals. Commit to using the deal pipeline (so marketing can prove revenue impact) or formally shelve it. Don't leave 278 props maintaining 3 records.
- P0 — Property cleanup. Archive the ~55 dead custom contact properties (after full-fill-rate verification). Fewer fields = better adoption + cleaner forms/reports.
- P1 — Fix data-entry discipline. Even kept custom fields are <37% filled — the problem is capture, not schema. Tie fields to forms/workflows that actually set them.
- P1 — Companies are unused (0 custom props) — decide if company-level data matters to your motion; if yes, build it out; if no, stop worrying about it.
- P2 — Owner hygiene — consolidate onto
@hue.life. - P2 — Complete the audit — add the read scopes above (or a private-app token) to cover pipelines, tickets, workflows, lists.
Generated read-only. No CRM data was modified. Raw API responses in raw/ (local only).