sales-reporting
Daily briefings, pipeline snapshots, and win/loss analysis from the terminal — closing-this-week, open pipeline by stage/owner, and closed-won vs closed-lost over a period.
By hubspot · 1,314 installs
npx skills add hubspot/agent-cli-skills --skill sales-reporting
Source repository · Upstream listing
Source of truth
hubspot <command help is authoritative. Build on bulk operations/SKILL.md — JSONL shape, batch read rules, and pagination live there. Reshape patterns: bulk operations/resources/json patterns.md . search / list cap at 100 rows per call; a result of exactly 100 is almost always truncated — paginate via bulk operations/SKILL.md before aggregating.
Property and output shape notes
All CRM property values come back as strings in JSONL — booleans included. hs is closed won is returned as "true" / "false" (string); amount is a numeric string. Use tonumber for arithmetic; compare booleans as strings ( == "true" ) when filtering client side.
In filter expressions, hs is closed won=true and hs is closed!=true work — the API parses the value.
properties returns the standard nested shape: {"id":"123","properties":{"amount":"5000","dealname":"..."}} . Reference fields as .properties.amount in jq.
Stage IDs in dealstage are portal specific. Map them with hubspot pipelines stages type deals pipeline <id .
hubspot owner id is a numeric string. Resolve to a name with hubspot owners list (fields: id , firstName , lastName , email ).
1. Daily briefing
Date windows differ between macOS and GNU date :
Deals closing in the next 7 days:
Deals updated in the last 24h:
Open pipeline summary line:
2. Pipeline snapshot
By stage — count and amount per dealstage :
By owner:
To label owner IDs with names, dump the owners file once and join:
3. Win/loss analysis
Filter on hs is closed won=true for won; hs is closed=true AND hs is closed won!=true for lost. Scope with closedate =YYYY MM DD AND closedate<YYYY MM DD .
Closed won / lost in a period:
Win rate by rep — pull all closed deals in the period, group, divide. Note: hs is closed won lands as a string, so compare == "true" .
Revenue by close month (won deals):
Known limitations
hubspot pipelines stages does not expose stage probability — won/lost stages can't be auto identified from the stages list. Use hs is closed won on deals instead.
No team object — group by hubspot owner id and resolve names from hubspot owners list client side.