Agent skill

Hubspot Rate Limit Survival

by jeremylongshore in jeremylongshore/tons-of-skills-marketplace

Survive HubSpot API rate limits at production scale. An agent skill from jeremylongshore/tons-of-skills-marketplace.

MITAuto-check passedSales & Support

Install Hubspot Rate Limit Survival

skills CLI
$ npx skills add jeremylongshore/tons-of-skills-marketplace --skill hubspot-rate-limit-survival -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install jeremylongshore/tons-of-skills-marketplace hubspot-rate-limit-survival --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/jeremylongshore/tons-of-skills-marketplace.git skills-src && mkdir -p .claude/skills && cp -r skills-src/skills/.curated/hubspot-rate-limit-survival .claude/skills/hubspot-rate-limit-survival && rm -rf skills-src

Use ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.

Claude Code skills documentation · loads skills from .claude/skills/

Facts

Skill name
hubspot-rate-limit-survival
GitHub stars
2.8k
Token cost
~3.6k tokens
SKILL.md length
803 words
Files
3 (incl. references)
Skills in repo
3,342
Repo updated
First seen
Licence
MIT

At a glance

Survive HubSpot API rate limits at production scale. An agent skill from jeremylongshore/tons-of-skills-marketplace.

  • Works in 6 steps: Read rate-limit headers on every response → Token bucket (neutralizes burst limit… → Retry-After parser and hubspotFetch… → …
  • A sync job burns the daily quota before 8am
  • SKILL.md covers Overview, Prerequisites, Instructions and Error Handling, plus 3 more sections
  • Calls curl and jq; reaches api.hubapi.com; needs HUBSPOT_ACCESS_TOKEN

What it does

Hubspot Rate Limit Survival is an agent skill from jeremylongshore/tons-of-skills-marketplace. Survive HubSpot API rate limits at production scale. Covers daily 500K portal quota, per-10s burst limits, batch API efficiency (100x), token bucket pattern, queue-based worker architecture, and Retry-After header parsing. Use when a sync job burns the daily quota before 8am, when a parallelized batch job retry-storms on 429s, when single-record reads waste 99% of available throughput, or when instrumenting a rate-limit dashboard for an Ops Hub Enterprise portal. Trigger with "hubspot rate limit", "hubspot…

Its SKILL.md is about 3.6k tokens, which your agent loads only when the skill is triggered. The skill folder holds 3 other files, including reference files (for example `references/API_REFERENCE.md` and `references/implementation-guide.md`). Compatibility notes: Designed for Claude Code

It sits in Sales & Support, covering Rate limiting and CRM management. It works with HubSpot. The repository describes itself as: Model-agnostic agent-skills platform with a harness-free canonical layer, verified adapters, and the ccpi package manager. Explore at tonsofskills.com. The licence is MIT.

When your agent uses it

  • A sync job burns the daily quota before 8am
  • A parallelized batch job retry-storms on 429s
  • Single-record reads waste 99% of available throughput
  • Instrumenting a rate-limit dashboard for an Ops Hub Enterprise portal

Example prompts

  • “hubspot rate limit”
  • “hubspot quota”
  • “hubspot 429”
  • “/hubspot-rate-limit-survival”

Requirements

  • Python 3
  • Node.js
  • A credential in HUBSPOT_ACCESS_TOKEN
  • Compatibility (from SKILL.md): Designed for Claude Code
  • Pre-approved tools (allowed-tools): Read, Bash(curl:*), Bash(jq:*), Bash(python3:*)

Workflow steps

6 steps, taken from the step headings in SKILL.md.

  1. Read rate-limit headers on every response
  2. Token bucket (neutralizes burst limit ignorance)
  3. Retry-After parser and hubspotFetch (neutralizes ignored 429s)
  4. Batch API wrapper (neutralizes single-record waste)
  5. Daily quota shutoff valve (neutralizes quota burnout)
  6. Plan-tier auto-detection at startup

What it can do on your machine

Read from SKILL.md and the folder at commit cfae287. It shows what the files ask for, not the result of running them.

  • Tool permissions

    Pre-approves these tools, so the agent can use them without asking each time:

    • Read
    • Bash(curl:*)
    • Bash(jq:*)
    • Bash(python3:*)

    From allowed-tools in the SKILL.md frontmatter.

  • Runs code

    Shell commands in SKILL.md call:

    • curl
    • jq

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    Hosts in commands or code, which the agent is likely to contact:

    • api.hubapi.com

    Also links to:

    • developers.hubspot.com
    • hubspot.com
    • status.hubspot.com

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names these keys or tokens, usually read from environment variables:

    • HUBSPOT_ACCESS_TOKEN

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

  • Compatibility

    Designed for Claude Code

    From compatibility in the SKILL.md frontmatter.

Context cost

Hubspot Rate Limit Survival loads about 3.6k tokens when it runs, and up to ~12k if it reads all its reference files. Until then it costs about 173 tokens; SKILL.md has 803 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~173
When it runs · the whole SKILL.md, loaded when a task matches
~3.6k
With references · SKILL.md plus every file in references/, read only if the agent opens them
~12k

Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.

Safety

Auto-check passed

The automated check found no risky patterns in SKILL.md.

Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.

SKILL.md

The full file from jeremylongshore/tons-of-skills-marketplace at commit cfae287, republished under its MIT licence (© jeremylongshore). 803 words, ~3,580 tokens.

Download SKILL.mdSave it as .claude/skills/hubspot-rate-limit-survival/SKILL.md (or your agent's skills folder). This skill also uses 2 other files; get the full folder from GitHub.
name
hubspot-rate-limit-survival
description
Survive HubSpot API rate limits at production scale. Covers daily 500K portal quota, per-10s burst limits, batch API efficiency (100x), token bucket pattern, queue-based worker architecture, and Retry-After header parsing. Use when a sync job burns the daily quota before 8am, when a parallelized batch job retry-storms on 429s, when single-record reads waste 99% of available throughput, or when instrumenting a rate-limit dashboard for an Ops Hub Enterprise portal. Trigger with "hubspot rate limit", "hubspot quota", "hubspot 429", "hubspot batch API", "hubspot token bucket", "hubspot throttle", "hubspot daily limit exhausted", "hubspot Ops Hub rate limit".
allowed-tools
Read, Bash(curl:*), Bash(jq:*), Bash(python3:*)
compatibility
Designed for Claude Code
version
2.9.0
license
MIT
author
Jeremy Longshore <jeremy@intentsolutions.io>
tags
hubspot, rate-limits, performance, data-engineering

HubSpot Rate Limit Survival

Overview

Rate-limit your HubSpot integration so it survives production volume without burning the portal's daily quota before lunch. This skill covers the six failure modes that take down integrations at scale and gives you the code to prevent each one.

Key invariant: HubSpot rate limits are portal-scoped, not app-scoped. Every private app and OAuth app in the same portal shares the same daily and per-10s buckets. There is no per-app isolation.

The six production failures this skill prevents:

  1. Daily quota burnout — a naive sync of 5M contacts at 100 records/call requires 50,000 API calls. A misconfigured parallel worker pool exhausts the 500K/day quota in under 90 minutes, leaving the portal dark for 22 hours.
  2. Burst limit ignorance — parallelizing 20 concurrent requests saturates the 100 req/10s window instantly. The 429 retry storm then burns the daily budget too. The burst limit and daily quota are two independent counters.
  3. Ignoring batch APIs — GET /contacts/{id} costs 1 quota unit and returns 1 record. POST /contacts/batch/read with 100 IDs costs 1 unit and returns 100 records. Single-record reads waste 99% of available throughput.
  4. Retry-After ignored — a 429 includes Retry-After: N. Backing off by 1s when N=30 produces 29 consecutive failures. Backing off by 30s when N=1 adds unnecessary latency. Always parse and honor the header exactly.
  5. Daily limit vs per-10s confusion — these are two independent systems. Burning the burst window does not decrement the daily counter. Exhausting the daily counter does not care about the per-10s rate. Conflating them breaks rate-limit logic.
  6. Operations Hub Enterprise gating — the 100 req/s sustained rate is gated on Ops Hub Enterprise. A Starter account assuming that throughput gets 429s at 10x the expected rate with no clear signal that the limit tier is wrong.

Prerequisites

  • Node.js 18+ or Python 3.10+
  • HubSpot private app token or OAuth access token
  • @hubspot/api-client (npm) or hubspot (pip) for SDK-based integrations
  • For queue-based architecture: Redis 6+ with bullmq (npm) or celery+redis-py (Python)
  • Portal Settings → Integrations → Private Apps to confirm the plan tier

Auth: Every API call requires Authorization: Bearer {token}. For token acquisition and caching, see hubspot-auth skill. This skill assumes a valid token is already available.

Instructions

Build in this order. Steps 1–3 are mandatory. Steps 4–6 apply when volume exceeds ~50,000 calls/day or when multiple apps share the portal.

Step 1: Read rate-limit headers on every response

Every HubSpot response carries both bucket states. Never fly blind.

typescript
interface RateLimitState {
  dailyLimit: number;
  dailyRemaining: number;
  windowMs: number;
  windowMax: number;
  windowRemaining: number;
}

let rl: RateLimitState = {
  dailyLimit: 500_000, dailyRemaining: 500_000,
  windowMs: 10_000, windowMax: 100, windowRemaining: 100,
};

function updateRateLimitState(headers: Headers): void {
  if (headers.get("X-HubSpot-RateLimit-Daily"))
    rl.dailyLimit = parseInt(headers.get("X-HubSpot-RateLimit-Daily")!, 10);
  if (headers.get("X-HubSpot-RateLimit-Daily-Remaining"))
    rl.dailyRemaining = parseInt(headers.get("X-HubSpot-RateLimit-Daily-Remaining")!, 10);
  if (headers.get("X-HubSpot-RateLimit-Max"))
    rl.windowMax = parseInt(headers.get("X-HubSpot-RateLimit-Max")!, 10);
  if (headers.get("X-HubSpot-RateLimit-Remaining"))
    rl.windowRemaining = parseInt(headers.get("X-HubSpot-RateLimit-Remaining")!, 10);

  const pctUsed = 1 - rl.dailyRemaining / rl.dailyLimit;
  console.log(JSON.stringify({
    event: "hubspot_rate_limit_state",
    daily_remaining: rl.dailyRemaining,
    daily_pct_used: parseFloat(pctUsed.toFixed(4)),
    window_remaining: rl.windowRemaining,
  }));
}
Step 2: Token bucket (neutralizes burst limit ignorance)

A token bucket is the correct primitive for the per-10s burst limit. Callers block until a slot is available instead of firing and failing.

typescript
class TokenBucket {
  private tokens: number;
  private lastRefillAt: number;

  constructor(
    private readonly capacity: number,
    private readonly refillRatePerMs: number,
  ) {
    this.tokens = capacity;
    this.lastRefillAt = Date.now();
  }

  consume(count = 1): number {  // returns ms to wait; 0 = immediate
    const now = Date.now();
    this.tokens = Math.min(
      this.capacity,
      this.tokens + (now - this.lastRefillAt) * this.refillRatePerMs,
    );
    this.lastRefillAt = now;
    if (this.tokens >= count) { this.tokens -= count; return 0; }
    return Math.ceil((count - this.tokens) / this.refillRatePerMs);
  }
}

// Private app, standard plan: 100 req/10s = 0.01 req/ms
// Ops Hub Enterprise: 100 req/s = 0.1 req/ms
const BUCKETS = {
  starter:            new TokenBucket(100,  10 / 10_000),
  professional:       new TokenBucket(150,  15 / 10_000),
  ops_hub_enterprise: new TokenBucket(1000, 100 / 10_000),
};

type PlanTier = keyof typeof BUCKETS;
let activeBucket: TokenBucket = BUCKETS.starter;

export function configurePlanTier(tier: PlanTier): void {
  activeBucket = BUCKETS[tier];
}

export async function acquireToken(): Promise<void> {
  const waitMs = activeBucket.consume();
  if (waitMs > 0) await new Promise((r) => setTimeout(r, waitMs));
}
Step 3: Retry-After parser and hubspotFetch (neutralizes ignored 429s)

Honor the exact backoff value HubSpot specifies. Full implementation with mock-server test harness in implementation-guide.md.

typescript
function parseRetryAfterMs(headers: Headers): number | null {
  const raw = headers.get("Retry-After");
  if (!raw) return null;
  const s = parseInt(raw, 10);
  return isNaN(s) ? null : s * 1_000;
}

export async function hubspotFetch(
  path: string,
  init: RequestInit = {},
  maxAttempts = 5,
): Promise<Response> {
  for (let attempt = 1; attempt <= maxAttempts; attempt++) {
    await acquireToken();
    const res = await fetch(`https://api.hubapi.com${path}`, {
      ...init,
      headers: {
        Authorization: `Bearer ${process.env.HUBSPOT_ACCESS_TOKEN!}`,
        "Content-Type": "application/json",
        ...init.headers,
      },
    });
    updateRateLimitState(res.headers);
    if (res.ok) return res;

    const retryable = res.status === 429 || (res.status >= 500 && res.status < 600);
    if (!retryable || attempt === maxAttempts) throw new Error(`HubSpot ${res.status}: ${path}`);

    const delayMs = parseRetryAfterMs(res.headers)
      ?? Math.random() * Math.min(60_000, 500 * 2 ** attempt);
    await new Promise((r) => setTimeout(r, delayMs));
  }
  throw new Error("unreachable");
}
Step 4: Batch API wrapper (neutralizes single-record waste)

Auto-chunk any array of IDs into groups of 100. Each chunk costs 1 quota unit.

typescript
const BATCH_SIZE = 100; // HubSpot hard limit

function chunk<T>(arr: T[], size = BATCH_SIZE): T[][] {
  const chunks: T[][] = [];
  for (let i = 0; i < arr.length; i += size) chunks.push(arr.slice(i, i + size));
  return chunks;
}

export async function batchRead(
  objectType: "contacts" | "companies" | "deals" | "tickets",
  ids: string[],
  properties: string[],
): Promise<{ results: unknown[]; errors: unknown[] }> {
  const results: unknown[] = [];
  const errors: unknown[] = [];
  for (const batch of chunk(ids)) {
    const res = await hubspotFetch(`/crm/v3/objects/${objectType}/batch/read`, {
      method: "POST",
      body: JSON.stringify({ inputs: batch.map((id) => ({ id })), properties }),
    });
    const body = await res.json() as { results: unknown[]; errors?: unknown[] };
    results.push(...body.results);
    if (body.errors) errors.push(...body.errors);
  }
  return { results, errors };
}
Show full SKILL.md (318 more words)Show less
Step 5: Daily quota shutoff valve (neutralizes quota burnout)

Halt lower-priority work before the portal goes dark.

typescript
type Priority = "critical" | "high" | "normal" | "low";

const SHUTOFF: Record<Priority, number> = {
  critical: 0.99, high: 0.95, normal: 0.90, low: 0.80,
};

export function assertDailyQuotaAvailable(priority: Priority): void {
  const pctConsumed = 1 - rl.dailyRemaining / rl.dailyLimit;
  if (pctConsumed >= SHUTOFF[priority]) {
    throw new Error(
      `Daily quota shutoff: ${(pctConsumed * 100).toFixed(1)}% consumed — ` +
      `${priority} priority requests halted`,
    );
  }
}
Step 6: Plan-tier auto-detection at startup

Read X-HubSpot-RateLimit-Max from the first response instead of hard-coding the tier.

typescript
export async function detectAndConfigurePlanTier(): Promise<PlanTier> {
  const res = await fetch(
    "https://api.hubapi.com/crm/v3/objects/contacts?limit=1",
    { headers: { Authorization: `Bearer ${process.env.HUBSPOT_ACCESS_TOKEN!}` } },
  );
  const max = parseInt(res.headers.get("X-HubSpot-RateLimit-Max") ?? "100", 10);
  const tier: PlanTier =
    max >= 1000 ? "ops_hub_enterprise" :
    max >= 150  ? "professional"       :
                  "starter";
  configurePlanTier(tier);
  console.log(`HubSpot plan tier: ${tier} (window max: ${max})`);
  return tier;
}

Error Handling

HTTP StatusError CodeRoot CauseAction
429RATE_LIMIT / policyName: SECONDLYPer-10s burst window exhaustedRead Retry-After; wait exactly that many seconds
429RATE_LIMIT / policyName: DAILY500K/day quota exhaustedStop all non-critical calls; resume after midnight UTC
400BATCH_SIZE_EXCEEDEDMore than 100 IDs in batch payloadChunk inputs to max 100; batchRead wrapper handles this
400INVALID_BATCH_REQUESTMalformed batch payloadVerify inputs is [{id: string}]; properties is an array
403MISSING_SCOPESToken lacks scope for the object typeAdd required scope in HubSpot Settings → Private Apps
403PORTAL_NOT_ALLOWEDOps Hub Enterprise feature on lower-tier planReduce throughput target; verify plan tier via X-HubSpot-RateLimit-Max
5xxINTERNAL_ERRORHubSpot transient errorRetry with exponential backoff; typically resolves within 60s

Diagnose daily vs burst 429:

bash
curl -sv "https://api.hubapi.com/crm/v3/objects/contacts?limit=1" \
  -H "Authorization: Bearer $HUBSPOT_ACCESS_TOKEN" 2>&1 \
  | grep -E "< (X-HubSpot|Retry-After|HTTP)"
# Retry-After 1-30s + Daily-Remaining > 0 → burst window
# Daily-Remaining = 0 → daily quota

Examples

Baseline rate-limit health check
bash
curl -sI "https://api.hubapi.com/crm/v3/objects/contacts?limit=1" \
  -H "Authorization: Bearer $HUBSPOT_ACCESS_TOKEN" \
  | grep -i "X-HubSpot-RateLimit\|Retry-After"
Batch read 500 contacts (5 quota units instead of 500)
bash
curl -s "https://api.hubapi.com/crm/v3/objects/contacts/batch/read" \
  -H "Authorization: Bearer $HUBSPOT_ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"inputs":[{"id":"1"},{"id":"2"},{"id":"3"}],"properties":["email","firstname"]}' \
  | jq '{count: (.results | length), errors: (.errors | length)}'
Python quota monitor (cron-safe, 1 quota unit per run)
python
import os, json, requests

def check_quota() -> dict:
    r = requests.get(
        "https://api.hubapi.com/crm/v3/objects/contacts",
        headers={"Authorization": f"Bearer {os.environ['HUBSPOT_ACCESS_TOKEN']}"},
        params={"limit": 1},
    )
    daily = int(r.headers.get("X-HubSpot-RateLimit-Daily", 500_000))
    rem   = int(r.headers.get("X-HubSpot-RateLimit-Daily-Remaining", daily))
    pct   = 1 - rem / daily
    return {"daily_remaining": rem, "pct_consumed": round(pct, 4),
            "shutoff_active": pct >= 0.90,
            "window_remaining": int(r.headers.get("X-HubSpot-RateLimit-Remaining", 0))}

print(json.dumps(check_quota(), indent=2))

Output

  • Token bucket module calibrated to portal plan tier; callers block rather than fire-and-fail
  • hubspotFetch wrapper parsing Retry-After on every 429 and backing off by the server-specified duration
  • Batch read wrapper auto-chunking any array into groups of 100, reducing quota consumption up to 100x
  • Structured log events for every rate-limit state update, suitable for Datadog / Prometheus / CloudWatch
  • Priority-tiered shutoff valve halting background jobs at 80% and critical jobs at 99%
  • Plan-tier auto-detection from response headers so the correct burst limit is applied without hard-coding

Resources

© jeremylongshore, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

SKILL.md and 2 other files (references) in skills/.curated/hubspot-rate-limit-survival of jeremylongshore/tons-of-skills-marketplace.

  • SKILL.md
  • references/API_REFERENCE.md
  • references/implementation-guide.md

Open the folder on GitHubat commit cfae287

Compare with similar skills

Hubspot Rate Limit Survival next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.

Hubspot Rate Limit Survival compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Hubspot Rate Limit Survival this skilljeremylongshore/tons-of-skills-marketplace2.8k—~3.6kAutomated safety check: PassMIT
Google Maps Exportgmapsscraper/google-maps-agent-skills132—~1.2kAutomated safety check: PassMIT
Lost Deal Revival AgentOthmane-Khadri/YALC-the-GTM-operating-system318—~3kAutomated safety check: PassMIT
HubspotOpenClaudia/openclaudia-skills713—~1.8kAutomated safety check: NotesMIT
Aai Hubspotaai-labs/agent-barn109—~223Automated safety check: PassApache-2.0
Hubspotrefly-ai/refly-skills204—~491Automated safety check: PassNone

Similar skills

  • Google Maps Export

    gmapsscraper/google-maps-agent-skills

    Export Google Maps business data to CSV, JSON, or CRM format (HubSpot, Pipedrive, Salesforce).

    132 GitHub stars~1.2k tokensUpdated 4 mo ago
    Sales & SupportAuto-check passed
  • Lost Deal Revival Agent

    Othmane-Khadri/YALC-the-GTM-operating-system

    Drafts revival messages for closed-lost deals when a public company signal contradicts the original objection.

    318 GitHub stars~3k tokensUpdated 1 mo ago
    Sales & SupportAuto-check passed
  • Hubspot

    OpenClaudia/openclaudia-skills

    Manage HubSpot CRM contacts, companies, deals, and CMS content via API.

    713 GitHub stars~1.8k tokensUpdated 23 days ago
    Sales & SupportAuto-check: notes
  • Aai Hubspot

    aai-labs/agent-barn

    Use aai-cli to inspect HubSpot CRM records, files, events, conversations, visitor identification, and custom channels.

    109 GitHub stars~223 tokensUpdated yesterday
    Sales & SupportAuto-check passed
  • Hubspot

    refly-ai/refly-skills

    Integrate with HubSpot for CRM management. An agent skill from refly-ai/refly-skills.

    204 GitHub stars~491 tokensUpdated 2 mo ago
    Sales & SupportAuto-check passed
  • Hubspot

    Anil-matcha/awesome-muse-connectors

    Read and manage the HubSpot CRM: contacts, contact search, deals.

    1.3k GitHub stars~558 tokensUpdated 5 days ago
    Sales & SupportAuto-check passed

More from jeremylongshore/tons-of-skills-marketplace

All 3,342 skills in this repo
  • Performing Security Code Review

    jeremylongshore/tons-of-skills-marketplace

    Execute this skill enables AI assistant to conduct a security-focused code review using the security-agent plugin.

    2.8k GitHub starsUsed in 2 repos~1.3k tokens
    Auto-check: notes
  • Adapting Transfer Learning Models

    jeremylongshore/tons-of-skills-marketplace

    Build this skill automates the adaptation of pre-trained machine learning models using transfer learning techniques.

    2.8k GitHub stars~1.1k tokensUpdated today
    Auto-check passed
  • Agent Context Loader

    jeremylongshore/tons-of-skills-marketplace

    Execute proactive auto-loading: automatically detects and loads agents.md files.

    2.8k GitHub stars~1.1k tokensUpdated today
    Auto-check passed
  • Aggregating Performance Metrics

    jeremylongshore/tons-of-skills-marketplace

    Aggregate and centralize performance metrics from applications, systems, databases, caches, and services.

    2.8k GitHub stars~1.2k tokensUpdated today
    Auto-check passed
  • Analyzing Capacity Planning

    jeremylongshore/tons-of-skills-marketplace

    Execute this skill enables AI assistant to analyze capacity requirements and plan for future growth.

    2.8k GitHub stars~947 tokensUpdated today
    Auto-check passed
  • Analyzing Database Indexes

    jeremylongshore/tons-of-skills-marketplace

    Process use when you need to work with database indexing. An agent skill from jeremylongshore/tons-of-skills-marketplace.

    2.8k GitHub stars~2k tokensUpdated today
    Auto-check passed

Works with

Questions about Hubspot Rate Limit Survival

What does Hubspot Rate Limit Survival do?

Survive HubSpot API rate limits at production scale. An agent skill from jeremylongshore/tons-of-skills-marketplace. Hubspot Rate Limit Survival is an agent skill from jeremylongshore/tons-of-skills-marketplace. Survive HubSpot API rate limits at production scale.

When should I use Hubspot Rate Limit Survival?

Hubspot Rate Limit Survival fits situations like: A sync job burns the daily quota before 8am; A parallelized batch job retry-storms on 429s; single-record reads waste 99% of available throughput; instrumenting a rate-limit dashboard for an Ops Hub Enterprise portal.

How do I install Hubspot Rate Limit Survival in Claude Code?

Run `npx skills add jeremylongshore/tons-of-skills-marketplace --skill hubspot-rate-limit-survival -a claude-code`. Or copy the skill folder (skills/.curated/hubspot-rate-limit-survival in jeremylongshore/tons-of-skills-marketplace) into .claude/skills/hubspot-rate-limit-survival in your project. Claude Code loads it when a task matches its description.

How do I install Hubspot Rate Limit Survival in Codex?

Run `npx skills add jeremylongshore/tons-of-skills-marketplace --skill hubspot-rate-limit-survival -a codex`. Or copy the skill folder (skills/.curated/hubspot-rate-limit-survival in jeremylongshore/tons-of-skills-marketplace) into .agents/skills/hubspot-rate-limit-survival in your project. Codex loads it when a task matches its description.

Can I use Hubspot Rate Limit Survival in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add jeremylongshore/tons-of-skills-marketplace --skill hubspot-rate-limit-survival -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/hubspot-rate-limit-survival, .gemini/skills/hubspot-rate-limit-survival, .github/skills/hubspot-rate-limit-survival and .opencode/skills/hubspot-rate-limit-survival in your project.

What does Hubspot Rate Limit Survival need to run?

Going by SKILL.md and its folder, Hubspot Rate Limit Survival needs the command-line tools its instructions call (curl and jq) and credentials named HUBSPOT_ACCESS_TOKEN. Our summary lists: Python 3; Node.js; A credential in HUBSPOT_ACCESS_TOKEN. Its frontmatter pre-approves these tools: Read, Bash(curl:*), Bash(jq:*), Bash(python3:*). Compatibility (from SKILL.md): Designed for Claude Code.

Does Hubspot Rate Limit Survival access the network?

SKILL.md names 4 domains. In commands or code: api.hubapi.com; the agent is likely to contact it when it follows the instructions. As links in the text: developers.hubspot.com, hubspot.com and status.hubspot.com. This is read from the text; nothing was executed.

Is Hubspot Rate Limit Survival safe to install?

Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.

What licence does Hubspot Rate Limit Survival use?

Hubspot Rate Limit Survival is published under the MIT licence (declared in SKILL.md). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Hubspot Rate Limit Survival use?

About 3.6k tokens (SKILL.md is roughly 14k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full. Its references folder adds about 7.9k tokens, read only when the agent opens those files.

What are the alternatives to Hubspot Rate Limit Survival?

Skills that share tags, products or a category with Hubspot Rate Limit Survival: Google Maps Export (gmapsscraper/google-maps-agent-skills, 132 stars), Lost Deal Revival Agent (Othmane-Khadri/YALC-the-GTM-operating-system, 318 stars), Hubspot (OpenClaudia/openclaudia-skills, 713 stars) and Aai Hubspot (aai-labs/agent-barn, 109 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Hubspot Rate Limit Survival?

jeremylongshore (a GitHub user) maintains it in jeremylongshore/tons-of-skills-marketplace, which has 2,827 GitHub stars. The repository holds 3,342 skills in this directory. The repository was last updated on October 10, 2026.

Source: jeremylongshore/tons-of-skills-marketplace on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.