team-ownership
Assign and reassign CRM record ownership, audit who-owns-what across object types, and handle rep transitions. Built on `bulk-operations`.
By hubspot · 1,297 installs
npx skills add hubspot/agent-cli-skills --skill team-ownership
Source repository · Upstream listing
Prereq: read bulk operations/SKILL.md first. JSONL piping, pagination, dry run/digest/confirm, and hubspot history recovery live there. Reshape patterns live in bulk operations/resources/json patterns.md .
hubspot owner id is a string field on contacts , companies , deals , and tickets . Owners are CRM users — hubspot owners list returns them; there is no teams object, so team level views are client side groupings by hubspot owner id .
1. Resolve email → owner ID
Never hardcode IDs — they are portal specific. Resolve, then cache:
2. Find records for an owner
Same filter across all four object types. Add object specific properties for context. Unowned records use the !property form.
100 hits — page with the after loop from bulk operations . Counting only: pipe to wc l .
3. Bulk reassign — search → update
Reshape each search row into {id, properties:{hubspot owner id}} and pipe to objects update . Always dry run first; for 100 rows the dry run emits a digest + apply command hint — re run with digest / confirm (see bulk operations/SKILL.md § "Safe destructive workflow").
Single record assignment — no stdin, no jq:
4. Rep leaves workflow
Loop over the four object types the rep touches:
Review each digest line, then re run without dry run (adding digest / confirm per type when escalated). Mis reassigned? hubspot history since 1h lists the affected IDs.
5. Team level views (client side grouping)
Group records by hubspot owner id , join to owners list for human readable emails: