communication-history
Retrieve activity history (calls, emails, notes, meetings, tasks) for a CRM record and assemble pre-call briefs.
By hubspot · 1,314 installs
npx skills add hubspot/agent-cli-skills --skill communication-history
Source repository · Upstream listing
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, lastModified, title, body, status, owner id} . timestamp and lastModified are 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.
For point in time filtering compare lastModified ( hs lastmodifieddate , when the body was last edited), not timestamp (engagement creation time) — otherwise you include content edited after your cutoff.
All activity for a record
Pass exactly one of contact , deal , company , ticket (or type <object type record <id for any other object type). Use activity type CALL EMAIL NOTE MEETING TASK to filter by activity kind, limit N for the most recent N. Note type is now the object type flag, not the activity kind filter:
Client side date filter
ISO 8601 strings compare lexicographically.
Compact timeline
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 ).
Transcripts
Fetch the transcript for a single call or meeting by its activity ID (from hubspot activities list ). Defaults to CALL ; pass activity type MEETING for a meeting, and fields to limit which enrichment fields are fetched:
Dump all call transcripts to a file:
Output shape: {"transcriptId":"...","activityId":...,"transcriptSource":"...","transcriptStatus":"READY","numUtterances":3,"recordingUrl":"...","aiSummary":"...","transcriptionProvider":null,"utterances":[...],"createdAt":"...","updatedAt":"..."} . transcriptStatus , numUtterances , recordingUrl , aiSummary , and transcriptionProvider are the five enrichment fields — present only on enriched transcripts, and fields limits which are fetched. The utterances array holds the speech content; empty if no transcript was recorded or uploaded.
Deleting a transcript is irreversible: hubspot activities transcript delete <id dry run first, then re run with digest / confirm (confirm the target name from the preview line).
Constraints
limit defaults to 100 and there is no after cursor — long histories can't be paged. body can be long; use the compact timeline for skimming.