
Crm Lookup
- 946 installs
- 18 repo stars
- Updated July 23, 2026
- hubspot/agent-cli-skills
crm-lookup is an agent skill that finds HubSpot CRM records and associations via the HubSpot CLI.
About
crm-lookup is a read-only HubSpot agent skill that finds CRM records and walks associations through the HubSpot CLI, with hubspot command --help treated as the source of truth. Solo and indie builders use it when they have a partial identifier—email, domain, name fragment, or known ID—and need the right object before drafting email, updating a deal stage, or preparing a bulk job. The skill steers you to pull live properties per object type instead of guessing field names, including analytics attribution properties on contacts when ad or campaign context matters. It stays deliberately narrow on retrieval; any mutation or large export should follow bulk-operations patterns first. That split keeps lookups fast and safe while writes stay batched and paginated. Install it when your agent stack already includes HubSpot CLI skills and you want deterministic record resolution instead of re-explaining CRM search in every session.
- Read-only HubSpot CLI lookups by ID (batch up to ~100), email, domain, or name fragment
- Live schema-driven property picks via hubspot properties list per object type
- First-pass property sets for contacts, companies, deals, and tickets plus hs_analytics attribution fields on contacts
- Association traversal for full account pictures (contacts at company, deals for contact)
- Explicit handoff to bulk-operations for JSONL piping, pagination, and any write after lookup
Crm Lookup by the numbers
- 946 all-time installs (skills.sh)
- +120 installs in the week ending Aug 5, 2026 (Skillselion tracking)
- Ranked #85 of 853 Sales & Marketing skills by installs in the Skillselion catalog
- Data as of Aug 5, 2026 (Skillselion catalog sync)
npx skills add https://github.com/hubspot/agent-cli-skills --skill crm-lookupAdd your badge
Show developers this skill is listed on Skillselion. Paste this into your README.
| Installs | 946 |
|---|---|
| repo stars | ★ 18 |
| Last updated | July 23, 2026 |
| Repository | hubspot/agent-cli-skills ↗ |
What it does
Resolve HubSpot contacts, companies, deals, and tickets by ID, email, domain, or name, then follow associations before outreach or downstream CRM writes.
Who is it for?
Best when you already use HubSpot CLI skills and need quick, read-only account context before lifecycle or support actions.
Skip if: Skip if you want to create or bulk-update records without reading bulk-operations first, or teams on CRMs other than HubSpot.
When should I use this skill?
Triggers such as find contact, find contact by email, find company by domain, look up deal, contacts at this company, deals for this contact, or find record.
What you get
You get matching records with the properties you chose and linked objects mapped so a follow-on bulk-operations flow can update or export safely.
- Resolved CRM records with selected properties
- Association map for related contacts, companies, and deals
By the numbers
- Up to ~100 record IDs in a single batch lookup
- First-pass property tables for contacts, companies, deals, and tickets
Files
Source of truth
hubspot <command> --help is authoritative. Read `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:
hubspot objects get --type contacts 12345 67890 23456 --properties email,firstname,lastname,company,phone,lifecyclestage2. Find one by email / domain (exact match)
email/domain are exact-match — normalize to lowercase. Multiple --filter flags are OR'd.
hubspot objects search --type contacts --filter "email=jane@acme.com" \
--properties email,firstname,lastname,company,lifecyclestage,hubspot_owner_id
hubspot objects search --type companies --filter "domain=acme.com" \
--properties name,domain,industry,annualrevenue,hubspot_owner_id
# OR — multiple emails in one call
hubspot objects search --type contacts \
--filter "email=alice@acme.com" --filter "email=bob@acme.com" --properties email,firstname3. 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.
hubspot objects search --type deals --filter "dealname~acme" --properties dealname,amount,dealstage \
| jq -c 'select(.properties.dealname | ascii_downcase | contains("acme corp"))'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.
# All contacts at a company
hubspot associations list --from companies:67890 --to contacts \
| jq -c '{id}' \
| hubspot objects get --type contacts --properties email,firstname,lastname,jobtitle
# Open deals for a contact (filter client-side; "open" varies by pipeline)
hubspot associations list --from contacts:12345 --to deals | jq -c '{id}' \
| hubspot objects get --type deals --properties dealname,amount,dealstage,hs_is_closed \
| jq -c 'select(.properties.hs_is_closed != "true")'5. Get a record plus its associations
contact_id=12345
hubspot objects get --type contacts $contact_id --properties email,firstname,lastname,company,lifecyclestage
# Associated company (usually one)
hubspot associations list --from contacts:$contact_id --to companies | jq -c '{id}' | head -1 \
| hubspot objects get --type companies --properties name,domain,industry,annualrevenue
# Associated deals
hubspot associations list --from contacts:$contact_id --to deals | jq -c '{id}' \
| hubspot objects get --type deals --properties dealname,amount,dealstage,closedateConstraints
- Search returns ≤100 per page. For more, use the pagination loop in
bulk-operations/SKILL.md. ~is token-based; substring filtering happens injqafter the search.- If the lookup feeds a write (update, delete, merge), follow the
--dry-run→ digest →--confirmflow inbulk-operations/SKILL.md.
Related skills
How it compares
Use targeted CLI lookups instead of ad-hoc chat guesses or full-object exports when you already know the identifier.
FAQ
Who is crm-lookup for?
Developers running HubSpot from the terminal who need accurate record and association context before sales, support, or pipeline work.
When should I use crm-lookup?
In Grow lifecycle work when you need to find a contact by email, a company by domain, a deal by name, or contacts and deals tied to an account; also during Build integrations when an agent must resolve HubSpot IDs before automation.
Is crm-lookup safe to install?
The skill is read-only by design, but you should still review the Security Audits panel on this Prism page and treat HubSpot CLI credentials as secrets.