Requex.me LogoRequex.me

Documentation

Browse by section

Keep all guides, tool docs, automation recipes, and comparison pages in one navigable place.

Docs Home
Docs

Foundation docs for getting started fast, understanding key terms, and tracking what has changed.

Guides

Start with fundamentals, then move into provider-specific webhook testing and production hardening.

Tool Docs

These pages explain what each tool does, when to use it, and how it fits into a webhook debugging workflow.

Automation Docs

Use these setup guides when you want forwarding rules, custom responses, security checks, or multi-destination fanout.

Compare

Use these pages to compare developer workflows, pricing tradeoffs, and feature differences between webhook tools.

How to Test HubSpot Webhooks

Capture HubSpot CRM events — contact creation, deal updates, property changes — and verify HMAC signatures before deploying your integration.

Editorially reviewed by the Requex team11 min readAbout the product

TL;DR: Get a free URL from requex.me, paste it into your HubSpot Private App webhook subscription settings, and trigger a CRM action. HubSpot sends a signed JSON array of events — inspect every field and header in Requex before writing a single line of handler code.

What HubSpot Sends

HubSpot webhooks are configured at the app level (Private Apps or Public Apps). Like SendGrid, HubSpot batches multiple events into a single POST as a JSON array. Each object in the array represents one CRM event. High-traffic portals can send large batches — always iterate over the array rather than assuming a single event.

EventTriggerUse Case
contact.creationNew contact created in CRMWelcome sequence, CRM sync
contact.propertyChangeAny contact property updatedDownstream data sync, notifications
deal.creationNew deal createdPipeline automation, Slack alerts
deal.propertyChangeDeal stage or any property changesRevenue reporting, forecast updates
company.creationNew company record createdAccount enrichment, billing sync

Step 1 — Generate a Requex Endpoint

Open requex.me. Your unique URL is ready immediately:

https://requex.me/hook/a1b2c3d4-e5f6-7890-abcd-ef1234567890

Copy this URL. You will paste it into HubSpot's webhook target URL field in the next step.

Step 2 — Configure HubSpot Webhook

  1. In HubSpot, go to Settings → Integrations → Private Apps and open (or create) a Private App.
  2. Click the Webhooks tab inside your Private App settings.
  3. Set the Target URL to your Requex URL.
  4. Click Create Subscription and choose the object type (Contacts, Deals, Companies) and the event type (Creation, Property Change, Deletion, or Association Change).
  5. For propertyChange subscriptions, specify which property to watch or select "Any property".
  6. Click Subscribe. HubSpot does not send an initial verification request — events will start flowing as soon as you trigger CRM actions.

Step 3 — Trigger a Test Event

The quickest test is to create a new contact directly in HubSpot. Go to CRM → Contacts → Create contact, fill in a name and email, and save. Within a few seconds the contact.creation event should appear in your Requex dashboard.

To test property changes, edit an existing contact's phone number or lifecycle stage. HubSpot fires a separate event for each property that changes — you may see multiple objects in a single batch if several properties are updated at once.

Step 4 — Inspect the Payload

Switch back to Requex and click the incoming request. The body is a JSON array:

[
  {
    "eventId": 1234567890,
    "subscriptionId": 987654,
    "portalId": 11223344,
    "appId": 445566,
    "occurredAt": 1712345678901,
    "subscriptionType": "contact.creation",
    "attemptNumber": 0,
    "objectId": 51234,
    "changeFlag": "CREATED",
    "changeSource": "CRM_UI",
    "sourceId": "user_id:1234"
  }
]

Notice that HubSpot only sends the object ID (objectId), not the full contact or deal record. Your handler needs to call the HubSpot CRM API to fetch the object details. For propertyChange events, the payload also includes propertyName and propertyValue.

Check the Headers tab in Requex for the X-HubSpot-Signature header — you will need this value to test your signature verification.

HubSpot Signature Verification

HubSpot supports two signature versions. The version is indicated by the X-HubSpot-Signature-Version header.

v1 (SHA-256 hash)

Concatenate your app secret and the raw request body, then SHA-256 hash the result:

const crypto = require('crypto');
const hash = crypto
  .createHash('sha256')
  .update(APP_SECRET + rawBody)
  .digest('hex');
// Compare with X-HubSpot-Signature header

v3 (HMAC-SHA256)

Concatenate HTTP method, full request URL, raw body, and timestamp, then HMAC-SHA256:

const message = method + requestUri + rawBody + timestamp;
const hmac = crypto
  .createHmac('sha256', APP_SECRET)
  .update(message)
  .digest('base64');
// Compare with X-HubSpot-Signature-v3 header

Use Requex to capture a real signed request and test both versions locally using the exact body and headers you see in the dashboard.

Common Issues

ProblemCauseFix
No events arrivingPrivate App not installed on the portalInstall the Private App and ensure the portal matches the subscription's portalId
Signature mismatchWrong app client secret usedUse the Client Secret from your Private App's Auth tab — not the Access Token
Only objectId in payloadExpected design — HubSpot sends thin eventsCall GET /crm/v3/objects/contacts/{objectId} to fetch full details

Test HubSpot Webhooks Free

Capture real CRM events and inspect every header and payload field. No signup required.

Open Requex →

Related guides

Start Testing Webhooks Now

Generate your unique URL and test webhooks instantly. Free, no signup.

Open Webhook Tester →