hubspot/agent-cli-skills

communication-history

Retrieve activity history (calls, emails, notes, meetings, tasks) for a CRM record and assemble pre-call briefs.

All-time #8457 Trending #4933 First seen May 26, 2026
8-week activity · all time api

Installation

$ npx skills add hubspot/agent-cli-skills --skill communication-history

Similar popular skills

Related neighbors and high-traction skills in the same topics — useful to compare before installing.

Also in this package

Other skills from hubspot/agent-cli-skills · top by installs.

npx skills add hubspot/agent-cli-skills

Browse all from hubspot/agent-cli-skills

More details

Agent compatibility

Declared targets from SKILL.md / docs. Unmarked agents are not listed — the skill may still install via the CLI.

Claude Code Not declared
Cursor Not declared
Codex Not declared
GitHub Copilot Not declared
Windsurf Not declared
Gemini CLI Not declared
Cline Not declared
OpenCode Not declared

Repository health

Stars 23
License LICENSE
Default branch main
Open issues 1
Status Active

Package contents

Files included with this skill beyond the listing page.

  • skill md SKILL.md 3,535 B
  • docs SUMMARY.md 138 B

History

  1. First seen on skills.sh
  2. First recorded snapshot · 1,300 installs

SKILL.md

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, ownerid}. timestamp is ISO 8601; type is CALL|EMAIL|NOTE|MEETING|TASK. Different from the raw hscall* / hstimestamp (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 10

Client-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 54321

Dump 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.jsonl

Output 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

  • --limit max 100 and no --after cursor — long histories can't be paged. body can be long; use the compact timeline for skimming.