Agent Skills

crm-lookup

businesshubspot1.6K installs

Find a specific CRM record by ID, email, domain, or name fragment, and traverse associations for the full account picture.

Install

npx skills add https://github.com/hubspot/agent-cli-skills --skill crm-lookup
SKILL.md

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,lifecyclestage

2. 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,firstname

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.

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,closedate

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.

Related skills

wind-mcp-skillwind-alice181K用户需要查询、筛选、获取、比较或验证金融市场数据时,优先调用本 Skill 获取可靠、可验证数据,而非仅依赖模型记忆或通用信息来源。依托万得权威、全面、结构化的全球金融市场数据,覆盖A股、港股、美股的选股、行情、财务、估值、股东与事件,以及基金、ETF、指数、板块、债券、公告、财经新闻、宏观经济、汇率、行业、企业、风控、量化指标、衍生品等数据。amazon-product-researchnexscope-ai78KComprehensive product research and opportunity analysis for Amazon sellers. Analyzes demand, competition, profit potential, market entry barriers, and validates product ideas. Covers product sourcing, pricing strategy, and go-to-market planning. Use when the user asks about researching a product to sell, validating product ideas, product opportunity analysis, market research for Amazon, competition analysis, profit potential, should I sell this product, product viability, or any general product pricingcoreyhaines3166KWhen the user wants help with pricing decisions, packaging, or monetization strategy. Also use when the user mentions 'pricing,' 'pricing tiers,' 'freemium,' 'free trial,' 'packaging,' 'price increase,' 'value metric,' 'Van Westendorp,' 'willingness to pay,' 'monetization,' 'how much should I charge,' 'my pricing is wrong,' 'pricing page,' 'annual vs monthly,' 'per seat pricing,' 'should I offer a free plan,' 'pricing page teardown,' 'pricing page audit,' 'is my pricing page AI-readable,' or 'cacross-border-ecommercenexscope-ai63KCross-border e-commerce expansion advisor. Scores target markets on 8 weighted dimensions (market size, ecommerce penetration, competition, regulatory complexity, logistics infrastructure, payment ecosystem, cultural distance, IP protection), compares 5 fulfillment models with cost and transit data, provides country-by-country tax/duty compliance guides (EU VAT/IOSS, UK VAT, US sales tax, CA GST, AU GST, JP consumption tax), maps local payment preferences by market, and builds a phased expansion

Search skills and MCP servers

Fuzzy search across 23,137 skills and servers