Skill detail

communication-history

Direct HubSpot CRM activity-history retrieval.

MatchDirectReviewed for hubspot
Sourcehubspot/agent-cli-skillsExternal source
Reported installs950Popularity signal only

Inspect before use

Automated review checks relevance, not safety or endorsement. Read the source instructions before using this skill.

Saved source preview

SKILL.md

The saved excerpt is a snapshot from review. The external source remains the complete and most current version.

---
name: communication-history
description: Retrieve activity history (calls, emails, notes, meetings, tasks) for a CRM record and assemble pre-call briefs.
triggers:
  - "pre-call research"
  - "call history"
  - "email history"
  - "recent activity"
  - "communication history"
  - "meeting prep"
  - "transcripts"
  - "call transcripts"
  - "dump transcripts"
  - "fetch transcripts"
  - "call recordings"
  - "export transcripts"
---

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:

```bash
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.

```bash
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

```bash
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`).

```bash
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:

```bash
hubspot activities calls transcript get --call 54321
```

Dump all call transcripts to a file:

```bash
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.
Read the full source on GitHub (opens external page)
Context

Related work