
Data Enrichment
You've got a CSV of leads or company data and need to push it into HubSpot without writing a script that searches, checks for existence, then creates or updates. This wraps the `hubspot objects upsert` CLI around a jq pipeline so you can match contacts by email or companies by domain in one pass per record. The dry run workflow is solid, the per-record JSON output lets you split successes from failures and retry just what broke, and it actually tells you about the five filter limit on OR searches instead of letting you discover it at 2am. If you're doing any kind of bulk CRM sync from external data, this is the pattern. Just lowercase your keys first.
- skills.sh installs
- 1.8K
- GitHub stars
- 29
- last updated
- Aug 21, 2026
Install
$ npx -y skills add hubspot/agent-cli-skills --skill data-enrichment --agent claude-codeInstalls into .claude/skills of the current project.
Files
Prereq: read bulk-operations/SKILL.md first — JSONL piping, dry-run/digest, history, and rate-limit hygiene live there. This skill is the upsert-by-natural-key workflow on top.
The core move: upsert, not search-then-create
hubspot objects upsert --type X --id-property <natural-key> reads JSONL on stdin and creates-or-updates each row in one CLI call (the CLI batches 100 rows per API request), keyed by a property (email for contacts, domain for companies). No race window, no branching. Do not loop search → empty? → create.
Per line in: {"id":"jane@example.com","properties":{"firstname":"Jane","jobtitle":"VP"}}
Per line out: {"id":"123","ok":true,"data":{...}} or {"ok":false,"error":{...}}. Order matches input. The CLI adds no fields of its own — data is the raw batch-upsert API result row.
CSV/JSONL → upsert stream
Sponsors
Details
- Repository
- github.com/hubspot/agent-cli-skills
- Categories
- AI & Agent Building, Sales & Marketing, CLI & Terminal
- First seen
- Jul 14, 2026