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".
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.
Weekly change comes from our own snapshots, not the repository page — it measures attention, not adoption.
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.
# 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
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.
