crm-lookup
Find a specific CRM record by ID, email, domain, or name fragment, and traverse associations for the full account picture.
By hubspot · 1,420 installs
npx skills add hubspot/agent-cli-skills --skill crm-lookup
Source repository · Upstream listing
Source of truth
hubspot <command help is authoritative. Read [ bulk operations/SKILL.md ](../bulk operations/SKILL.md) first — it owns JSONL piping, pagination, batch get via stdin, and the safety flow for any write that comes after a lookup. This skill is read only.
Pick properties from the live schema
Schemas drift. Run hubspot properties list type <type for the live set. First pass properties for a brief:
Object properties
contacts email,firstname,lastname,company,phone,lifecyclestage,hubspot owner id
companies name,domain,industry,annualrevenue,numberofemployees,hubspot owner id
deals dealname,amount,dealstage,closedate,hubspot owner id,hs is closed won
tickets subject,hs pipeline stage,hs ticket priority,hubspot owner id
Contact ad/campaign attribution lives on hs analytics (e.g. hs analytics source , hs analytics source data 1 / 2 , hs analytics first touch converting campaign , hs analytics last touch converting campaign ). Full list: hubspot properties list type contacts grep hs analytics .
1. Lookup by ID
Up to ~100 IDs in a single batch call:
2. Find one by email / domain (exact match)
email / domain are exact match — normalize to lowercase. Multiple filter flags are OR'd.
3. Find by partial name (token + client side narrowing)
~ is CONTAINS TOKEN — matches whole space separated words. dealname~acme finds "Acme Renewal" but not "AcmeCorp". For substring, pipe to jq . There's no full text search across all fields — pick the property.
4. Find all associated records (two CLI calls, not xargs)
Pattern: associations list → jq c '{id}' → objects get batch. Never xargs I{} hubspot objects get … — that spawns one process per record. Use plural in from ( contacts: , companies: , deals: ); help shows singular but only plural avoids a warning.
5. Get a record plus its associations
Constraints
Search returns ≤100 per page. For more, use the pagination loop in bulk operations/SKILL.md .
~ is token based; substring filtering happens in jq after the search.
If the lookup feeds a write (update, delete, merge), follow the dry run → digest → confirm flow in bulk operations/SKILL.md .