---
name: HubSpot infrastructure IDs and dashboards
description: Portal, owner, and dashboard IDs for HS deep-links and API work. Sequences decommissioned 2026-04-22 — no longer used for outreach.
type: reference
originSessionId: 6250c599-625a-4c16-9ba6-368c0a7715ed
---
**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 dashboards
- `GET /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-assigned `id`.
- `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-hubspotapi` header from `csrf.app` cookie)
- See `~/Library/Application Support/SkyRun/build_hs_activity_reports.py` for 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.
