Agent skill · Data & Analytics

hubspot-product-event-sync

Sync backend product events into HubSpot contact and company custom properties using idempotent batched updates — the Segment integration pattern without Segment. Use when you need to push server-side behavioral signals (feature usage, session counts, last-seen timestamps, trial milestones) into HubSpot CRM properties so sales and marketing can act on product data without a CDP in the stack. Trigger with "hubspot product events", "sync events to hubspot", "hubspot custom properties", "hubspot event pipeline", "hubspot segment alternative", "push usage data to hubspot".

jeremylongshoregithub.com/jeremylongshoreGitHub ↗
claude-codecan modify filesMIT
Install
npx skills add jeremylongshore/claude-code-plugins-plus-skills --skill hubspot-product-event-sync --agent claude-code

Same command for any agent — swap --agent for codex, cursor, copilot.

Facts
Files in the skill folder: 4
SKILL.md size: 22 KB
Bundled scripts: none
Version: 2.9.0
Declared author: Jeremy Longshore <jeremy@intentsolutions.io>
Allowed tools: ReadWriteEditBash(curl:*)Bash(jq:*)Bash(python3:*)Grep
Requires: Designed for Claude Code
Path: skills/.curated/hubspot-product-event-sync/SKILL.md
Open the folder on GitHub →
Where it comes from
Stars: 2,596
Language: Python
Read our review of the source →

Weekly change comes from our own snapshots, not the repository page — it measures attention, not adoption.

Review
written from the skill's own SKILL.md · Aug 5, 2026

What it does

Pushes backend product events into HubSpot custom contact and company properties using an idempotent, batched update pattern. Includes property verification/creation, per-event idempotency keys, a batching queue with rate limiting, 207 Multi-Status handling with a dead-letter queue, auto-create-on-miss behavior via batch upsert, and rate-limit retry wiring. Designed as a Segment-style integration without Segment, triggerable by specific hubspot-related phrases.

How it works

  • Ensures target HubSpot properties exist and have the correct type using an ensureProperty routine; creates properties if absent.
  • Designs idempotency keys per event and property (hash of eventId and propertyName); stores processed keys with TTL to avoid reprocessing.
  • Reads current values for counter properties, computes absolute next values, writes back, and marks the operation as processed to guarantee idempotency.
  • Batches events using a token-bucket style queue: flushes when either 100 events accumulate or after 5 seconds, whichever comes first; performs one batch call using crm/v3/objects/contacts/batch/upsert with idProperty set to email.
  • Handles HubSpot 207 responses by routing failed items to a dead-letter queue with context; successes are acknowledged, failures are logged.
  • If a contact email is missing, uses batch upsert to auto-create; provides an alternate search+create path if needed to obtain a contactId synchronously before writing other properties.
  • Wires rate limiting to respect Retry-After on 429 responses and handles retries accordingly.

When to use it

Use when you need to push server-side behavioral signals (feature usage, session counts, last-seen timestamps, trial milestones) into HubSpot CRM properties so sales/marketing can act on product data without a CDP. Trigger phrases include: "hubspot product events", "sync events to hubspot", "hubspot custom properties", "hubspot event pipeline", "hubspot segment alternative", "push usage data to hubspot".

What it can touch

  • HubSpot API endpoints for properties and batch upserts:
    • https://api.hubapi.com/crm/v3/properties/...
    • https://api.hubapi.com/crm/v3/objects/contacts/batch/upsert
    • https://api.hubapi.com/crm/v3/objects/contacts/{contactId}
  • Redis (or similar) for idempotency key storage via SETEX and GET.
  • External logs/dead-letter queue for failed batch items.

Caveats

  • Requires Node.js 18+ or Python 3.10+ and a HubSpot private app token with appropriate scopes.
  • Property definitions must be defined prior to writing; if types mismatch, writes may coerce data without error unless validated on the client side.
  • Batch partial failures (207) must be parsed to route failed items to DLQ; silent data loss is possible if not handled.
  • Idempotency keys are designed per (eventId, propertyName); counter properties require reading current value before computing the absolute next value to ensure idempotent increments.
  • Some sections refer to external references/files for full implementation details (e.g., references/event-queue-implementation.md) and are not fully described here.
From the SKILL.md

# HubSpot Product Event Sync ## Overview Push backend product events into HubSpot custom contact and company properties — the core pattern of a Segment-style integration, built directly against the HubSpot CRM API without a CDP middleman. This is not a tutorial on HubSpot setup. It is the code your data pipeline runs at 3am when a product launch generates a 10K events/minute storm, when a network

More from claude-code-plugins-plus-skills
All skills →
About this skill
What does the hubspot-product-event-sync skill do?

Sync backend product events into HubSpot contact and company custom properties using idempotent batched updates — the Segment integration pattern without Segment. Use when you need to push server-side behavioral signals (feature usage, session counts, last-seen timestamps, trial milestones) into HubSpot CRM properties so sales and marketing can act on product data without a CDP in the stack. Trigger with "hubspot product events", "sync events to hubspot", "hubspot custom properties", "hubspot event pipeline", "hubspot segment alternative", "push usage data to hubspot".

How do I install it?

Run `npx skills add jeremylongshore/claude-code-plugins-plus-skills --skill hubspot-product-event-sync --agent claude-code` — it drops the skill into your project so the agent can pick it up. Swap the --agent value for codex, cursor or copilot if you use one of those.

Where does this skill come from?

From jeremylongshore/claude-code-plugins-plus-skills, a repository with 2,596 stars. We read it straight from the repository tree rather than a submitted listing, so what you see here is what is actually published.

Is a popular skill a good skill?

Not necessarily. Stars measure attention, not adoption — a repository can trend for a week and be abandoned. That is why we show the weekly change from our own snapshots next to the total, instead of a single flattering number.

Keep going