Claude-code-plugins-plus-skills hubspot-prod-checklist
install
source · Clone the upstream repo
git clone https://github.com/jeremylongshore/claude-code-plugins-plus-skills
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/jeremylongshore/claude-code-plugins-plus-skills "$T" && mkdir -p ~/.claude/skills && cp -r "$T/plugins/saas-packs/hubspot-pack/skills/hubspot-prod-checklist" ~/.claude/skills/jeremylongshore-claude-code-plugins-plus-skills-hubspot-prod-checklist && rm -rf "$T"
manifest:
plugins/saas-packs/hubspot-pack/skills/hubspot-prod-checklist/SKILL.mdsource content
HubSpot Production Checklist
Overview
Complete checklist for deploying HubSpot CRM integrations to production with health checks, monitoring, and rollback procedures.
Prerequisites
- Staging environment tested and verified
- Production private app token with minimal scopes
- Deployment pipeline configured
- Monitoring/alerting ready
Instructions
Step 1: Pre-Deployment Verification
- Production private app created with minimal scopes
- Access token stored in secret manager (not env file)
-
files in.env.gitignore - No hardcoded tokens in source (
)grep -r "pat-na1" src/ - Webhook endpoints use HTTPS only
- Webhook signature verification implemented (v3)
- Error handling covers 401, 403, 404, 409, 429, 5xx
- Rate limiting/backoff implemented (
)numberOfApiCallRetries: 3 - Batch operations used where possible (max 100/batch)
- All tests passing against developer test account
Step 2: Health Check Endpoint
import * as hubspot from '@hubspot/api-client'; interface HealthCheckResult { status: 'healthy' | 'degraded' | 'unhealthy'; hubspot: { connected: boolean; latencyMs: number; rateLimitRemaining?: number; }; timestamp: string; } async function hubspotHealthCheck(): Promise<HealthCheckResult> { const client = new hubspot.Client({ accessToken: process.env.HUBSPOT_ACCESS_TOKEN!, }); const start = Date.now(); try { // Cheapest possible API call: fetch 1 contact await client.crm.contacts.basicApi.getPage(1); return { status: 'healthy', hubspot: { connected: true, latencyMs: Date.now() - start, }, timestamp: new Date().toISOString(), }; } catch (error: any) { const status = error?.code || error?.statusCode || 500; return { status: status === 429 ? 'degraded' : 'unhealthy', hubspot: { connected: false, latencyMs: Date.now() - start, }, timestamp: new Date().toISOString(), }; } } // Express endpoint app.get('/health', async (req, res) => { const result = await hubspotHealthCheck(); const httpStatus = result.status === 'healthy' ? 200 : result.status === 'degraded' ? 200 : 503; res.status(httpStatus).json(result); });
Step 3: Monitoring Alerts
| Alert | Condition | Severity |
|---|---|---|
| HubSpot unreachable | Health check fails 3x | P1 |
| High error rate | 5xx errors > 10/min | P1 |
| Auth failure | Any 401/403 response | P1 (token revoked?) |
| Rate limited | 429 errors > 5/min | P2 |
| High latency | p95 > 3000ms | P2 |
| Daily quota low | < 10% remaining | P3 |
Step 4: Graceful Degradation
async function withHubSpotFallback<T>( operation: () => Promise<T>, fallback: T ): Promise<{ data: T; degraded: boolean }> { try { const data = await operation(); return { data, degraded: false }; } catch (error: any) { console.error('HubSpot call failed, using fallback:', { status: error?.code, message: error?.body?.message, correlationId: error?.body?.correlationId, }); return { data: fallback, degraded: true }; } }
Step 5: Deploy Verification
#!/bin/bash # post-deploy-verify.sh echo "=== HubSpot Post-Deploy Verification ===" # 1. Health check HEALTH=$(curl -sf https://your-app.com/health | jq -r '.hubspot.connected') echo "HubSpot connected: $HEALTH" [ "$HEALTH" = "true" ] || { echo "FAIL: HubSpot not connected"; exit 1; } # 2. Verify CRM access STATUS=$(curl -so /dev/null -w "%{http_code}" \ https://api.hubapi.com/crm/v3/objects/contacts?limit=1 \ -H "Authorization: Bearer $HUBSPOT_ACCESS_TOKEN") echo "CRM API status: $STATUS" [ "$STATUS" = "200" ] || { echo "FAIL: CRM access denied"; exit 1; } # 3. Check rate limit headroom REMAINING=$(curl -sI https://api.hubapi.com/crm/v3/objects/contacts?limit=1 \ -H "Authorization: Bearer $HUBSPOT_ACCESS_TOKEN" \ | grep -i 'x-hubspot-ratelimit-daily-remaining' | awk '{print $2}' | tr -d '\r') echo "Daily rate limit remaining: $REMAINING" # 4. Check HubSpot status page HS_STATUS=$(curl -s https://status.hubspot.com/api/v2/summary.json | jq -r '.status.description') echo "HubSpot platform status: $HS_STATUS" echo "=== Verification complete ==="
Output
- All checklist items verified
- Health check endpoint deployed and accessible
- Monitoring alerts configured
- Graceful degradation implemented
- Post-deploy verification script passing
Error Handling
| Issue | Response |
|---|---|
| Health check fails after deploy | Rollback immediately |
| 401 in production | Token was regenerated -- update secret and redeploy |
| 429 spike after deploy | New code making too many calls -- add batching/caching |
| 5xx from HubSpot | Check status.hubspot.com -- enable fallback mode |
Resources
Next Steps
For version upgrades, see
hubspot-upgrade-migration.