Portal: 23273108
Contact owner: Joseph Bowens (88361194)
Total contacts in HS: 9,420 (includes legacy non-SoT-linked contacts; see note below)
Joseph-owned dashboards (3 total — verified 2026-05-05):
- 19299902 — "SkyRun Lead Intelligence — Grand County" — 11 reports (Commission Pipeline · Total SkyRun Leads · Competitor PM Breakdown · SkyRun Leads Created by Month · Lead Lifecycle Stage Breakdown · Lead Status Pipeline · Lead Source Distribution · Current Property Manager Breakdown · Lifecycle Stage Distribution · Lead Inventory by Bedroom Count · Lead Pipeline by City)
- 19272804 — "Joseph Bowens - Grand County Sales"
- 19928775 — "SkyRun Activity Velocity — Joseph (Grand County)" — NEW 2026-05-05 — 10 activity widgets: Total Emails Sent · Total Meetings · Total Replies · Active Deals · Emails Sent by Month · Replies Received by Month · Meetings Booked by Month · Calls Logged by Month · Emails Sent by Sender Alias · Deals by Stage
HS Reports/Dashboards API (verified 2026-05-05 PM):
GET /api/dashboard/v2/dashboard?portalId=23273108&limit=100— list dashboardsGET /api/dashboard/v2/dashboard/{id}— read single dashboard with widgets[] (full report definitions inline)POST /api/dashboard/v2/dashboard?portalId=23273108— CREATE new dashboard. Required field:dashboardPermissionConfigs: [{permissionLevel, accessClassification, permissionGrants:[{userSetType:'API_ACCESS',userSetId:2,permissionLevel:'EDIT'}]}]. Returns dashboard with auto-assignedid.DELETE /api/dashboard/v2/dashboard/{id}?portalId=...— delete dashboard (returns 204)POST /api/dashboard/v2/dashboard/{id}/widgets— ADD widgets (body: array of full widget objects). Each widget = full report config + layout. Use this NOT separate /reports POST. Returns 204 on success.DELETE /api/dashboard/v2/reports/{reportId}— delete report AND auto-removes widget from dashboard (returns 204)POST /api/dashboard/v2/reports— create standalone report (orphan, not on a dashboard) — useful for shared reports
Widget shape (canonical):
{
name: "...",
config: {
filters: {dateRange, owners, teams, filterGroups:[{filters:[...]}], custom},
dimensions: ["property_name"], // STRING array, not objects
metrics: [{property:'count', metricTypes:['SUM'], percentiles:[]}],
objectTypeId: "0-1"|"0-3"|"0-47"|"0-48"|"0-49", // contact|deal|meeting|call|email
configType: "AGGREGATION" | "TIME_SERIES",
frequency: "MONTH"|"YEAR", // TIME_SERIES only
},
displayParams: {customWidget:{type:"DATA_LAYER"|"BAR"|"PIE"|"TIME_SERIES"}, ...},
chartType: "DATA_WELL"|"BAR"|"PIE"|"COLUMN"|"LINE",
layout: {x, y, width, height},
layoutV2: {x, y, width, height, isResizable: true},
source: "REPORTING",
active: true,
}
- All endpoints use in-browser CSRF token (
X-HubSpot-CSRF-hubspotapiheader fromcsrf.appcookie) - See
~/Library/Application Support/SkyRun/build_hs_activity_reports.pyfor canonical builder - Do NOT regress: the widget endpoint creates report+widget in one call. Don't try to POST /reports first then link via reportId — that pattern returned 404 on widget-add
Lifecycle stage distribution (2026-03-07): MQL 901 · SQL 18 · Opportunity 3 · Customer 4
Lead status pipeline (2026-03-07): New/Need to Contact 887 · Open 18 · In Progress 3 · Unqualified/Waiting 3 · Unqualified/Other 9 · Won 4 · Lost 2
Sequences — DECOMMISSIONED 2026-04-22. HubSpot is no longer used for outreach. All Joseph-owned sequences (303630905 and 303662164) were paused and deleted. See project_hubspot_sequences_running.md for full decommission log. Cold email now runs exclusively through SmartLead.
HS home: https://app.hubspot.com/prospecting/23273108 (Sales Workspace). The Workspace itself is limited in customization — the dashboard (19299902) is the star.
Note on 9,420 vs 805: The 805 SoT leads live in HS alongside ~8,600 other contacts (form fills, team members, realtors, historical unqualifieds, dead leads). "82 legacy orphans" in CLAUDE.md refers specifically to formerly-SoT-linked orphans — not the full non-SoT universe.
How to apply: When writing reports or dashboards, use these IDs directly. When asked to "pull up the dashboard" or "check the pipeline," go to dashboard 19299902.