Skip to content
Back to skills

Hubspot Install Auth

ASecurity

Install and configure HubSpot API client with authentication. Use when setting up a new HubSpot integration, configuring private app tokens, OAuth 2.0 flows, or initializing the @hubspot/api-client SDK. Trigger with phrases like "install hubspot", "setup hubspot auth", "hubspot access token", "configure hubspot API", "hubspot private app".

  • 4 stars
  • 0 votes
  • 0 copies
  • 2 views
  • Added September 12, 2026
developmenttypescriptpythongobashnodegitapi

Works with

  • cli
  • api

Security analysis

A92/100
  • mediumInstalls packages at runtime which could introduce malicious dependencies
  • mediumInstalls packages at runtime which could introduce malicious dependencies

Pro scans all 2 files and shows the line behind each finding

Scanned September 12, 2026

npx -y skills add aibot88/sec_skill_store --skill hubspot-install-auth --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Hubspot Install Auth?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Hubspot Install Auth
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/aibot88-hubspot-install-auth/badge)](https://www.skillsdirectory.com/skills/aibot88-hubspot-install-auth)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: hubspot-install-auth
description: |
  Install and configure HubSpot API client with authentication.
  Use when setting up a new HubSpot integration, configuring private app tokens,
  OAuth 2.0 flows, or initializing the @hubspot/api-client SDK.
  Trigger with phrases like "install hubspot", "setup hubspot auth",
  "hubspot access token", "configure hubspot API", "hubspot private app".
allowed-tools: Read, Write, Edit, Bash(npm:*), Bash(pip:*), Grep
version: 1.0.0
license: MIT
author: Jeremy Longshore <jeremy@intentsolutions.io>
tags: [saas, crm, marketing, hubspot]
compatible-with: claude-code
---

# HubSpot Install & Auth

## Overview

Set up the `@hubspot/api-client` SDK and configure authentication using private app access tokens or OAuth 2.0.

## Prerequisites

- Node.js 18+ or Python 3.10+
- HubSpot account (free or paid)
- Private app created in Settings > Integrations > Private Apps
- Required scopes selected for your private app

## Instructions

### Step 1: Install the SDK

```bash
# Node.js (official SDK)
npm install @hubspot/api-client

# Python
pip install hubspot-api-client
```

### Step 2: Create a Private App in HubSpot

1. Go to Settings > Integrations > Private Apps
2. Click "Create a private app"
3. Name your app and select scopes:
   - `crm.objects.contacts.read` / `crm.objects.contacts.write`
   - `crm.objects.companies.read` / `crm.objects.companies.write`
   - `crm.objects.deals.read` / `crm.objects.deals.write`
   - `crm.objects.custom.read` / `crm.objects.custom.write`
   - `crm.schemas.contacts.read` (for properties)
4. Copy the generated access token

### Step 3: Configure Environment

```bash
# .env file (add to .gitignore)
HUBSPOT_ACCESS_TOKEN=pat-na1-xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx

# .gitignore
echo '.env' >> .gitignore
echo '.env.local' >> .gitignore
```

### Step 4: Initialize and Verify

```typescript
import * as hubspot from '@hubspot/api-client';

const hubspotClient = new hubspot.Client({
  accessToken: process.env.HUBSPOT_ACCESS_TOKEN,
});

// Verify connection by fetching account info
async function verifyConnection() {
  try {
    const response = await hubspotClient.crm.contacts.basicApi.getPage(
      1, // limit
      undefined, // after
      ['firstname', 'lastname', 'email']
    );
    console.log(`Connected. Found ${response.results.length} contact(s).`);
    return true;
  } catch (error) {
    if (error.code === 401) {
      console.error('Invalid access token. Check HUBSPOT_ACCESS_TOKEN.');
    } else if (error.code === 403) {
      console.error('Missing scopes. Add crm.objects.contacts.read to your private app.');
    } else {
      console.error('Connection failed:', error.message);
    }
    return false;
  }
}
```

### Step 5: OAuth 2.0 Setup (Public Apps)

```typescript
// For public apps distributed to multiple HubSpot portals
const hubspotClient = new hubspot.Client();

// Step 1: Generate authorization URL
const authUrl = hubspotClient.oauth.getAuthorizationUrl(
  'your-client-id',
  'http://localhost:3000/oauth/callback',
  'crm.objects.contacts.read crm.objects.contacts.write'
);
// Redirect user to authUrl

// Step 2: Exchange code for tokens (in callback handler)
const tokenResponse = await hubspotClient.oauth.tokensApi.create(
  'authorization_code',
  code,           // from query param
  redirectUri,
  clientId,
  clientSecret
);

// Step 3: Initialize client with OAuth token
const authedClient = new hubspot.Client({
  accessToken: tokenResponse.accessToken,
});

// Step 4: Refresh tokens before expiry (tokens expire in 30 minutes)
const refreshResponse = await hubspotClient.oauth.tokensApi.create(
  'refresh_token',
  undefined,
  undefined,
  clientId,
  clientSecret,
  refreshToken
);
```

## Output

- `@hubspot/api-client` installed in node_modules
- `.env` file with `HUBSPOT_ACCESS_TOKEN`
- Verified API connection with a test call
- OAuth flow configured (if building a public app)

## Error Handling

| Error | Code | Cause | Solution |
|-------|------|-------|----------|
| `401 Unauthorized` | 401 | Invalid or expired token | Regenerate token in Private Apps settings |
| `403 Forbidden` | 403 | Missing required scopes | Add scopes and generate new token |
| `429 Too Many Requests` | 429 | Rate limit exceeded | Implement backoff (see `hubspot-rate-limits`) |
| `MODULE_NOT_FOUND` | -- | Package not installed | Run `npm install @hubspot/api-client` |
| `ECONNREFUSED` | -- | Network blocked | Ensure outbound HTTPS to `api.hubapi.com` |

## Examples

### Python Setup

```python
from hubspot import HubSpot

client = HubSpot(access_token=os.environ.get('HUBSPOT_ACCESS_TOKEN'))

# Verify connection
try:
    contacts = client.crm.contacts.basic_api.get_page(limit=1)
    print(f"Connected. Found {len(contacts.results)} contact(s).")
except Exception as e:
    print(f"Connection failed: {e}")
```

### TypeScript with Strict Typing

```typescript
import * as hubspot from '@hubspot/api-client';
import type {
  SimplePublicObjectWithAssociations
} from '@hubspot/api-client/lib/codegen/crm/contacts';

const client = new hubspot.Client({
  accessToken: process.env.HUBSPOT_ACCESS_TOKEN!,
  numberOfApiCallRetries: 3, // built-in retry support
});
```

## Resources

- [HubSpot Private Apps Guide](https://developers.hubspot.com/docs/guides/apps/private-apps/overview)
- [OAuth 2.0 Guide](https://developers.hubspot.com/docs/guides/apps/authentication/oauth)
- [@hubspot/api-client on npm](https://www.npmjs.com/package/@hubspot/api-client)
- [HubSpot API Scopes Reference](https://developers.hubspot.com/docs/guides/apps/authentication/scopes)

## Next Steps

After successful auth, proceed to `hubspot-hello-world` for your first CRM operations.

Files in this skill

  • SKILL.md5.6 KB
  • source.json884 B

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.