
Sales Execution
Log HubSpot calls, notes, meetings, and tasks from the agent CLI with correct property names, enums, and required timestamps so solo founders can run sales motion without guessing portal field IDs.
Overview
sales-execution is an agent skill for the Grow phase that documents HubSpot CLI property names and enums for creating sales activities (calls, notes, meetings, tasks).
Install
npx skills add https://github.com/hubspot/agent-cli-skills --skill sales-executionWhat is this skill?
- Quick reference for four HubSpot activity object types: calls, notes, meetings, and tasks
- Documents required Unix-ms `hs_timestamp` fields and enum values CLI property listing does not surface
- Covers call direction INBOUND/OUTBOUND and status enums through COMPLETED, MISSED, and NO_ANSWER
- Meeting outcomes include SCHEDULED, COMPLETED, RESCHEDULED, NO_SHOW, and CANCELLED
- Notes that `hubspot properties list --type calls` is noisy with on the order of ~80 properties—this skill narrows to act
- Four documented activity object types: calls, notes, meetings, tasks
- Calls property list noise on the order of ~80 HubSpot properties when listing via CLI
Adoption & trust: 1 installs on skills.sh; 2 GitHub stars; trending (+100% hot-view momentum).
What problem does it solve?
You want your agent to log sales activities in HubSpot via CLI but property lists are huge and enum values are hard to discover.
Who is it for?
Solo SaaS founders using HubSpot CRM + agent CLI to record pipeline touchpoints during early customer development.
Skip if: Teams not on HubSpot or builders who only need marketing email automation without CRM activity objects.
When should I use this skill?
You use `hubspot objects create --type {calls|notes|meetings|tasks}` and need exact property names, required timestamps, and enum literals.
What do I get? / Deliverables
You run correct `hubspot objects create` commands with required timestamps, valid enums, and the right HTML fields for each activity type.
- Valid HubSpot activity create payloads with correct property keys
- CLI commands for calls, notes, meetings, or tasks with required hs_timestamp fields
Recommended Skills
Journey fit
Sales activity logging and disposition tracking belong in the grow phase where customer relationships and pipeline hygiene compound. Creating and updating CRM activities is lifecycle work—recording touchpoints after launch—not product build or SEO distribution.
How it compares
CRM activity field reference for the HubSpot CLI—not a full outbound sequencing or enrichment integration.
Common Questions / FAQ
Who is sales-execution for?
Indie builders and small teams using HubSpot’s agent CLI skills to record calls, notes, meetings, and tasks from Claude Code, Cursor, or Codex.
When should I use sales-execution?
In grow/lifecycle work whenever you automate logging a sales call, meeting outcome, or follow-up task right after customer conversations.
Is sales-execution safe to install?
It is reference documentation; still review Security Audits on this page and treat HubSpot API tokens as secrets with least-privilege scopes.
SKILL.md
READMESKILL.md - Sales Execution
# Activity Properties — Quick Reference Property names and enum values for `hubspot objects create --type {calls|notes|meetings|tasks}`. Kept here because `hubspot properties list --type calls` is noisy (~80 props) and `hubspot properties get` does not expose enum option values today — so the values below are not otherwise discoverable from the CLI. Verify against the portal if a value is rejected. ## calls | Property | Type | Notes | |---|---|---| | `hs_call_title` | string | | | `hs_call_body` | string (HTML ok) | | | `hs_call_direction` | enum | `INBOUND` `OUTBOUND` | | `hs_call_status` | enum | `BUSY` `CALLING_CRM_USER` `CANCELED` `COMPLETED` `CONNECTING` `FAILED` `IN_PROGRESS` `MISSED` `NO_ANSWER` `QUEUED` `RINGING` | | `hs_call_duration` | number | Milliseconds (60000 = 1 min) | | `hs_call_disposition` | string | Portal-defined outcome code | | `hs_timestamp` | number | **Required.** Unix ms — when the call happened | ## notes | Property | Type | Notes | |---|---|---| | `hs_note_body` | string (HTML ok) | **Required.** | | `hs_timestamp` | number | **Required.** Unix ms | ## meetings | Property | Type | Notes | |---|---|---| | `hs_meeting_title` | string | | | `hs_meeting_body` | string (HTML ok) | | | `hs_meeting_outcome` | enum | `SCHEDULED` `COMPLETED` `RESCHEDULED` `NO_SHOW` `CANCELLED` | | `hs_meeting_start_time` | number | Unix ms | | `hs_meeting_end_time` | number | Unix ms | | `hs_meeting_location` | string | Address or video URL | | `hs_timestamp` | number | **Required.** Unix ms — primary timeline timestamp | ## tasks | Property | Type | Notes | |---|---|---| | `hs_task_subject` | string | **Required.** Title in the task queue | | `hs_task_body` | string | | | `hs_task_status` | enum | `NOT_STARTED` `IN_PROGRESS` `COMPLETED` `DEFERRED` `WAITING` | | `hs_task_priority` | enum | `LOW` `MEDIUM` `HIGH` | | `hs_task_type` | enum | `TODO` `CALL` `EMAIL` | | `hs_timestamp` | number | **Required.** Unix ms — **due date** for tasks | ## Association targets | Activity | Valid `--to` types | |---|---| | calls | contacts, deals, companies, tickets | | notes | contacts, deals, companies, tickets | | meetings | contacts, deals, companies | | tasks | contacts, deals, companies | --- name: sales-execution description: Log sales activities — calls, notes, meetings, tasks — against contacts and deals, with the mandatory create-then-associate step that makes them visible in the CRM. triggers: - "log a call" - "log a note" - "log a meeting" - "create task" - "follow-up task" - "log activity" - "log engagement" --- ## Resources | File | When to use | |---|---| | `resources/activity-properties-reference.md` | Property names and enum values for calls/notes/meetings/tasks. Keep open while writing `objects create` — enum values are not discoverable via `hubspot properties get` today. | Read `bulk-operations/SKILL.md` first — this skill assumes its batching, pipe, and dry-run patterns. ## The two non-obvious rules **1. Activities are invisible until associated.** `hubspot objects create --type calls ...` alone produces a record nobody can see in the CRM UI. Always follow with `hubspot associations create --from calls:<id> --to contacts:<id>` (and the deal, if relevant) before stopping. **2. Timestamps differ between write and read.** | Path | Field | Format | |---|---|---| | `objects create --property hs_timestamp=...` | `hs_timestamp` | **Unix ms** (13 digits) | | `objects get --type calls <id>` returns | `properties.hs_timestamp` | Unix ms (string) | | `activities list --contact <id>` returns | `timestamp` (flat, top-level) | **ISO 8601** (e.g. `2024-01-15T10:00:00Z`) | Current Unix ms: `$(date +%s)000` (macOS) or `$(date +%s%3N)` (Linux). `activities list` rows are `{"id","type","timestamp","title","body","status","owner_id"}` — the cross-type timeline read shape, no raw property names. ## Create + associate, by type ```bash # CALL call_id=$(hubspot objects create --type calls \ --property hs_ca