skills/integrations/hubspot/hubspot-connect/SKILL.md
hubspot, crm, contacts, companies, deals.
npx skillsauth add beam-ai-team/beam-next-skills hubspot-connectInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
User-facing meta-skill for HubSpot CRM integration.
Single entry point for all HubSpot CRM operations:
Follows the master/connect pattern - references hubspot-master for shared scripts and references.
Load this skill when user says:
Before ANY HubSpot operation, validate configuration:
uv run python 00-system/skills/hubspot/hubspot-master/scripts/check_hubspot_config.py --json
| ai_action | What to Do |
|-------------|------------|
| proceed_with_operation | Config OK → Continue |
| prompt_for_access_token | Ask user for access token, save to .env |
| create_env_file | Create .env with token |
| add_missing_scopes | Guide user to add scopes in HubSpot |
| verify_token | Token exists but invalid |
Display this complete setup guide to user:
I need to set up HubSpot integration first.
---------------------------------------------------
HUBSPOT PRIVATE APP SETUP
---------------------------------------------------
STEP 1: Create Private App
─────────────────────────
1. Log into HubSpot
2. Click gear icon (Settings) → Integrations → Private Apps
3. Click "Create a private app"
4. Name: "Beam Next Integration"
STEP 2: Select Required Scopes
──────────────────────────────
In the "Scopes" tab, enable these permissions:
CRM (Required):
☑️ crm.objects.contacts.read
☑️ crm.objects.contacts.write
☑️ crm.objects.companies.read
☑️ crm.objects.companies.write
☑️ crm.objects.deals.read
☑️ crm.objects.deals.write
Engagements (Optional - for emails/calls/notes/meetings):
☑️ crm.objects.emails.read
☑️ crm.objects.emails.write
☑️ crm.objects.calls.read
☑️ crm.objects.calls.write
☑️ crm.objects.notes.read
☑️ crm.objects.notes.write
☑️ crm.objects.meetings.read
☑️ crm.objects.meetings.write
STEP 3: Get Your Token
──────────────────────
1. Click "Create app"
2. Copy the access token shown
3. Token starts with: pat-na1-... or pat-eu1-...
[!] IMPORTANT: Save this token securely - you won't see it again!
---------------------------------------------------
Please paste your HubSpot access token:
After user provides token:
# Write to .env
HUBSPOT_ACCESS_TOKEN=pat-na1-xxx
# Re-run config check to verify
uv run python 00-system/skills/hubspot/hubspot-master/scripts/check_hubspot_config.py --json
If user gets 403 errors after setup, they're missing scopes:
[!] Missing HubSpot permissions!
The operation failed because your Private App is missing required scopes.
To fix:
1. Go to HubSpot Settings → Integrations → Private Apps
2. Click on "Beam Next Integration" (or your app name)
3. Go to "Scopes" tab
4. Add the missing scope: [scope name from error]
5. Click "Commit changes"
6. IMPORTANT: Copy the NEW access token (it changes after scope updates)
7. Update your .env with the new token
Then try again!
Trigger: Before any operation
Script: check_hubspot_config.py --json
Output: Config status, required actions
Trigger: "list contacts", "show contacts", "get contacts"
uv run python 00-system/skills/hubspot/hubspot-master/scripts/list_contacts.py --json
Display Format:
Found 10 contacts:
1. John Doe
Email: [email protected]
ID: 12345
Company: Acme Corp
2. Jane Smith
Email: [email protected]
ID: 12346
...
Trigger: "create contact", "add contact", "new contact"
Required: Email Optional: First name, last name, phone, company
uv run python 00-system/skills/hubspot/hubspot-master/scripts/create_contact.py \
--email "[email protected]" \
--firstname "John" \
--lastname "Doe" \
--json
Trigger: "search contacts", "find contact", "lookup contact"
uv run python 00-system/skills/hubspot/hubspot-master/scripts/search_contacts.py \
--email "[email protected]" \
--json
or
uv run python 00-system/skills/hubspot/hubspot-master/scripts/search_contacts.py \
--name "John" \
--json
Trigger: "update contact", "edit contact", "modify contact"
Required: Contact ID
uv run python 00-system/skills/hubspot/hubspot-master/scripts/update_contact.py \
--id 12345 \
--phone "+1234567890" \
--json
Trigger: "list companies", "show companies"
uv run python 00-system/skills/hubspot/hubspot-master/scripts/list_companies.py --json
Trigger: "create company", "add company", "new company"
uv run python 00-system/skills/hubspot/hubspot-master/scripts/create_company.py \
--name "Acme Corp" \
--domain "acme.com" \
--industry "Technology" \
--json
Trigger: "search companies", "find company"
uv run python 00-system/skills/hubspot/hubspot-master/scripts/search_companies.py \
--name "Acme" \
--json
Trigger: "list deals", "show deals", "show pipeline"
uv run python 00-system/skills/hubspot/hubspot-master/scripts/list_deals.py --json
Trigger: "create deal", "add deal", "new deal", "new opportunity"
uv run python 00-system/skills/hubspot/hubspot-master/scripts/create_deal.py \
--name "Enterprise Deal" \
--amount 50000 \
--stage "qualifiedtobuy" \
--json
Trigger: "update deal", "edit deal", "change deal stage"
uv run python 00-system/skills/hubspot/hubspot-master/scripts/update_deal.py \
--id 12345 \
--stage "closedwon" \
--json
Trigger: "search deals", "find deal"
uv run python 00-system/skills/hubspot/hubspot-master/scripts/search_deals.py \
--name "Enterprise" \
--min-amount 10000 \
--json
Trigger: "get associations", "linked records", "related contacts", "contacts on deal"
# Get contacts associated with a deal
uv run python 00-system/skills/hubspot/hubspot-master/scripts/get_associations.py \
--object-type deals \
--object-id 12345 \
--to-type contacts \
--json
Trigger: "associate contact with company", "link deal to contact", "connect records"
Creates the default association label for the object pair (v4 batch API).
uv run python 00-system/skills/hubspot/hubspot-master/scripts/create_association.py \
--from-type contacts \
--from-id 12345 \
--to-type companies \
--to-id 67890 \
--json
Trigger: "delete contact", "remove deal", "archive company"
Destructive — only run after user confirms. The script requires --yes.
uv run python 00-system/skills/hubspot/hubspot-master/scripts/delete_crm_object.py \
--object-type contacts \
--id 12345 \
--yes \
--json
Trigger: Various engagement operations
List Emails:
uv run python 00-system/skills/hubspot/hubspot-master/scripts/list_emails.py --json
Log Email:
uv run python 00-system/skills/hubspot/hubspot-master/scripts/log_email.py \
--subject "Follow up" \
--body "Meeting follow-up email" \
--json
List Calls:
uv run python 00-system/skills/hubspot/hubspot-master/scripts/list_calls.py --json
Log Call:
uv run python 00-system/skills/hubspot/hubspot-master/scripts/log_call.py \
--title "Sales Call" \
--body "Discussed pricing" \
--duration 30 \
--json
List Notes:
uv run python 00-system/skills/hubspot/hubspot-master/scripts/list_notes.py --json
Create Note:
uv run python 00-system/skills/hubspot/hubspot-master/scripts/create_note.py \
--body "Important note about this contact" \
--json
List Meetings:
uv run python 00-system/skills/hubspot/hubspot-master/scripts/list_meetings.py --json
Create Meeting:
uv run python 00-system/skills/hubspot/hubspot-master/scripts/create_meeting.py \
--title "Product Demo" \
--body "Demo of new features" \
--start "2025-12-15T14:00:00Z" \
--end "2025-12-15T15:00:00Z" \
--json
When user mentions:
| Phrase | Route To | |--------|----------| | "list contacts", "show contacts" | Workflow 1 | | "create contact", "add contact" | Workflow 2 | | "search contacts", "find contact" | Workflow 3 | | "update contact", "edit contact" | Workflow 4 | | "list companies", "show companies" | Workflow 5 | | "create company", "add company" | Workflow 6 | | "search companies", "find company" | Workflow 7 | | "list deals", "show pipeline" | Workflow 8 | | "create deal", "new opportunity" | Workflow 9 | | "update deal", "change stage" | Workflow 10 | | "search deals", "find deal" | Workflow 11 | | "associations", "linked records" | Workflow 12 | | "link", "associate", "connect record" | Workflow 12b | | "delete", "remove", "archive" (CRM record) | Workflow 12c | | "emails", "calls", "notes", "meetings" | Workflow 13 |
Common Errors:
| Error | Solution | |-------|----------| | 401 Unauthorized | Token invalid - check HUBSPOT_ACCESS_TOKEN | | 403 Forbidden | Missing scope - add to Private App | | 404 Not Found | Record doesn't exist | | 409 Conflict | Duplicate record - search first | | 429 Rate Limited | Wait and retry |
On Error:
hubspot-master/references/error-handling.mdAfter listing records, cache for session:
# Store in conversation context
contacts_cache = [
{"name": "John Doe", "id": "12345", "email": "[email protected]"},
{"name": "Jane Smith", "id": "12346", "email": "[email protected]"}
]
When user says "update John Doe", match to cached contact ID.
User: "list my hubspot contacts"
AI:
Let me check your HubSpot configuration first...
[OK] Configuration valid
Found 10 contacts:
1. John Doe
Email: [email protected]
ID: 12345
Company: Acme Corp
2. Jane Smith
Email: [email protected]
ID: 12346
Company: TechStart Inc
...
What would you like to do?
- "create contact" to add a new contact
- "search contacts by company" to filter
- "update John Doe" to modify a record
User: "create a new deal for Acme Corp worth $50,000"
AI:
Creating deal...
[OK] Deal created!
ID: 98765
Name: Acme Corp - $50,000
Amount: $50,000
Stage: qualifiedtobuy
Would you like to associate this deal with a contact or company?
Version: 2.0 Updated: 2026-03-23 Status: Production Ready
development
--- name: taste-skill type: skill version: '1.0' author: Leonxlnx (packaged by Zhichao Li) category: general tags: - frontend - design - anti-slop - landing-page updated: '2026-06-11' visibility: public description: Anti-slop frontend skill for landing pages, portfolios, and redesigns. The agent reads the brief, infers the right design direction, and ships interfaces that do not look templated. Real design systems when applicable, audit-first on redesigns, strict pre-flight check. license: MIT.
development
Use when communicating quantitative information in any form — Slack updates, emails, reports, decks, dashboards, landing pages, product UI, public talks. Covers two integrated layers: (1) making numbers semantically meaningful (translation, anchoring, simplification, story-pairing) and (2) showing numbers cleanly (chart vs table vs prose, chart-by-message, pre-attentive emphasis, color discipline, decluttering). Distilled and integrated from *Show Me the Numbers* (Stephen Few) and *Make Numbers Count* (Chip Heath & Karla Starr). Not for raw data analysis or statistics — this is about communication of numbers, not their derivation.
development
Use when the user wants to design, redesign, shape, critique, audit, polish, clarify, distill, harden, optimize, adapt, animate, colorize, extract, or otherwise improve a frontend interface. Covers websites, landing pages, dashboards, product UI, app shells, components, forms, settings, onboarding, and empty states. Handles UX review, visual hierarchy, information architecture, cognitive load, accessibility, performance, responsive behavior, theming, anti-patterns, typography, fonts, spacing, layout, alignment, color, motion, micro-interactions, UX copy, error states, edge cases, i18n, and reusable design systems or tokens. Also use for bland designs that need to become bolder or more delightful, loud designs that should become quieter, live browser iteration on UI elements, or ambitious visual effects that should feel technically extraordinary. Not for backend-only or non-UI tasks.
tools
Stateful multi-session tutor adapted for Beam — teach a stakeholder to understand, trust, and operate a specific agent, or teach a Solution Engineer a client's business process for delivery. Grounds every lesson in Knowledge Hub sources (real agent graphs, real tasks, transcripts, Linear) before any web resource. Also works for any general topic. Trigger on "teach me", "beam teach", "教我", "onboard <person> on <agent>", "help <stakeholder> understand the agent", "learn this client's process".