
Communication History
- 874 installs
- 18 repo stars
- Updated July 23, 2026
- hubspot/agent-cli-skills
Pull HubSpot calls, emails, notes, meetings, and tasks for a contact or deal so agents can prep briefs and transcript exports before customer conversations.
About
communication-history is a HubSpot Agent CLI skill that teaches agents how to retrieve and reshape CRM activity history—calls, emails, notes, meetings, tasks, and related transcripts—for a specific contact, deal, company, or ticket. Solo founders and indie builders wearing sales hats install it when they want Claude Code, Codex, or similar tools to run structured hubspot activities list commands instead of guessing API shapes or clicking through the UI before every conversation. The skill defines the normalized list output (ISO timestamps, typed activities) versus raw object fields, shows filtering by type and limit, and covers JSONL piping patterns by referencing bulk-operations and json-patterns resources. Triggers such as pre-call research, meeting prep, communication history, and export transcripts map directly to everyday Grow-phase workflows. Use it whenever you need a fast activity timeline or pre-call brief assembled from live CRM data through the CLI.
- Lists flat activity rows sorted newest-first with id, type, timestamp, title, body, status, owner_id
- Filters by record (--contact, --deal, --company, --ticket) and activity type CALL|EMAIL|NOTE|MEETING|TASK
- Supports --limit for recent N activities and client-side ISO date cutoffs
- Documents transcript and call-recording fetch patterns for meeting prep
- Points to bulk-operations SKILL.md and hubspot activities list --help as source of truth
Communication History by the numbers
- 874 all-time installs (skills.sh)
- Ranked #97 of 853 Sales & Marketing skills by installs in the Skillselion catalog
- Data as of Aug 5, 2026 (Skillselion catalog sync)
npx skills add https://github.com/hubspot/agent-cli-skills --skill communication-historyAdd your badge
Show developers this skill is listed on Skillselion. Paste this into your README.
| Installs | 874 |
|---|---|
| repo stars | ★ 18 |
| Last updated | July 23, 2026 |
| Repository | hubspot/agent-cli-skills ↗ |
What it does
Pull HubSpot calls, emails, notes, meetings, and tasks for a contact or deal so agents can prep briefs and transcript exports before customer conversations.
Files
Read bulk-operations/SKILL.md first — JSONL piping, batch read, and jq reshape patterns (resources/json-patterns.md) apply. hubspot activities list --help is the source of truth.
Output shape
activities list returns one flat row per activity, sorted newest-first: {id, type, timestamp, title, body, status, owner_id}. timestamp is ISO 8601; type is CALL|EMAIL|NOTE|MEETING|TASK. Different from the raw hs_call_* / hs_timestamp (Unix ms) on the underlying objects — fetch those with hubspot objects get --type calls if needed.
All activity for a record
Pass exactly one of --contact, --deal, --company, --ticket. Use --type CALL|EMAIL|NOTE|MEETING|TASK to filter, --limit N for the most recent N:
hubspot activities list --contact 73235
hubspot activities list --deal 67890 --type CALL
hubspot activities list --contact 73235 --limit 10Client-side date filter
ISO 8601 strings compare lexicographically.
CUTOFF=$(date -v-30d +%Y-%m-%dT%H:%M:%SZ) # macOS
# CUTOFF=$(date -u -d '30 days ago' +%Y-%m-%dT%H:%M:%SZ) # Linux
hubspot activities list --contact 73235 \
| jq -c --arg cutoff "$CUTOFF" 'select(.timestamp > $cutoff)'Compact timeline
hubspot activities list --contact 73235 --limit 20 \
| jq -r '"\(.timestamp[0:10]) \(.type) \(.title)"'Pre-call brief
Four piped commands: contact + company + open deals + activity. Use batch objects get over stdin — never xargs -I{} (see bulk-operations/SKILL.md).
cid=73235
echo "=== Contact ==="
hubspot objects get --type contacts $cid \
--properties email,firstname,lastname,phone,jobtitle,lifecyclestage --format table
echo "=== Company ==="
hubspot associations list --from contacts:$cid --to companies \
| jq -c '{id}' \
| hubspot objects get --type companies --properties name,domain,industry,annualrevenue --format table
echo "=== Open Deals ==="
hubspot associations list --from contacts:$cid --to deals \
| jq -c '{id}' \
| hubspot objects get --type deals --properties dealname,amount,dealstage,closedate,hs_is_closed \
| jq -c 'select(.properties.hs_is_closed != "true")'
echo "=== Recent Activity ==="
hubspot activities list --contact $cid --limit 10 \
| jq -r '"\(.timestamp[0:10]) \(.type) \(.title)"'Transcripts
Fetch the transcript for a single call by engagement ID:
hubspot activities calls transcript get --call 54321Dump all call transcripts to a file:
hubspot objects list --type calls --limit 100 --properties hs_call_title \
| jq -r '.id' \
| while read -r call_id; do
hubspot activities calls transcript get --call "$call_id"
done > /tmp/transcripts.jsonlOutput shape: {"transcriptId":"...","engagementId":...,"transcriptSource":"...","utterances":[...],"createdAt":...}. The utterances array contains the speech content; it will be empty if no transcript was recorded or uploaded.
Constraints
--limitmax 100 and no--aftercursor — long histories can't be paged.bodycan be long; use the compact timeline for skimming.