agentsclimarketplace

Hubspot contacts

Skill dipankar/hubspot-cli/assets/skills/hubspot-contacts

Your AI Agent's Gateway to HubSpot CRM

Install
npx -y skills add dipankar/hubspot-cli --skill hubspot-contacts

Assembled from the repository path, not quoted from the project. Check it against their README if it does not work.

One thing to look at

  • 1 stars1 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.

What its author says it does

Copied from the file, not written here

Use when the user wants to search, read, create, update, delete, or otherwise manage HubSpot CRM contacts (people records, emails, leads, subscribers) via the `hubspot` command-line tool.

SKILL.md

3.7 KB, as published. Nobody here has run it

HubSpot Contacts (via hubspot CLI)

Drive HubSpot contact operations through the hubspot CLI. Every command emits a JSON envelope ({"success": true, "data": ...}) suitable for parsing.

Prerequisite: authentication

The CLI reads HUBSPOT_ACCESS_TOKEN (a HubSpot private-app token) from the environment. If a command returns exit code 3 with AUTH_ERROR, tell the user:

export HUBSPOT_ACCESS_TOKEN=<private-app-token>

Multi-account users can pass --profile <name> (reads [profiles.<name>] from ~/.config/hubspot-cli/config.toml).

Canonical commands

IntentCommand
List recent contactshubspot crm contacts list --limit 10
Paginatehubspot crm contacts list --limit 50 --after <next_cursor>
Request extra propertieshubspot crm contacts list --properties phone,company,lifecyclestage
Get by IDhubspot crm contacts get 12345
Create from flagshubspot crm contacts create --email [email protected] --firstname Jane --lastname Doe
Create from JSONhubspot crm contacts create --properties '{"email":"[email protected]","lifecyclestage":"lead"}'
Updatehubspot crm contacts update 12345 --firstname Janet
Delete (archive)hubspot crm contacts delete 12345 --yes
Simple searchhubspot crm contacts search --query "email:*@acme.com" --limit 25
Filtered searchhubspot crm contacts search --filter-groups '[{"filters":[{"propertyName":"lifecyclestage","operator":"EQ","value":"customer"}]}]'
Batch createhubspot crm contacts batch-create --inputs '[{"properties":{"email":"[email protected]"}},{"properties":{"email":"[email protected]"}}]'
Discover propertieshubspot discover properties contacts

Filter-group operators

Common operator values for --filter-groups: EQ, NEQ, GT, GTE, LT, LTE, BETWEEN, IN, NOT_IN, HAS_PROPERTY, NOT_HAS_PROPERTY, CONTAINS_TOKEN, NOT_CONTAINS_TOKEN. Filter groups are OR'd; filters within a group are AND'd.

Default vs custom properties

Only email, firstname, lastname come back by default. For anything else (phone, company, lifecyclestage, hs_lead_status, hubspot_owner_id, custom properties) pass --properties prop1,prop2,.... Use hubspot discover properties contacts to list every valid property name.

Output envelope

{
  "success": true,
  "data": { "id": "12345", "properties": { "email": "...", "firstname": "..." } },
  "paging": { "next_cursor": "abc", "has_more": true }
}

List endpoints put an array in data. Pagination: when paging.has_more is true, call again with --after <paging.next_cursor>.

Error codes (JSON error.code, exit code)

CodeExitAction
AUTH_ERROR3Tell the user to set HUBSPOT_ACCESS_TOKEN
VALIDATION_ERROR / DUPLICATE_EMAIL5Show error.message; fix input
NOT_FOUND6Contact ID doesn't exist or was archived
RATE_LIMIT7Back off using error.retry_after_seconds
SERVER_ERROR8Transient; retry once

Required scopes

  • Read: crm.objects.contacts.read
  • Write: crm.objects.contacts.write
  • Search: crm.objects.contacts.read

Tips for the agent

  • Prefer search over list when the user describes a filter ("contacts in lifecycle stage customer"). list has no filtering.
  • Always pass --limit when the user says "a few" / "some" to keep responses small.
  • Use --output json-pretty only when showing the raw JSON to the user; use the default json when piping into jq or parsing.
  • Never echo the access token back to the user.

Keep looking

Skills are one crate of 328,083. Ordering is by how many stacks a row turns up in, so the top of any crate is what has actually been picked rather than what has the most stars.