integrations
June 15, 2026

Your sales team lives in Discord. Your pipeline lives in HubSpot. When a deal moves from "Proposal Sent" to "Contract Sent" to "Closed Won," the people who need to know find out through manual checking, a daily standup, or a forwarded email. HubSpot has in-app notifications, but none of them post to Discord.
ProxyHook bridges that gap without any server code. You point HubSpot's webhook events at a ProxyHook Source, build an Automation that routes them to a Discord channel, and every deal-stage change lands as a message in real time.
HubSpot's webhook API fires an event for each property that changes. When a deal advances a stage, it sends a POST to your endpoint containing the deal's object ID, the name of the changed property (dealstage), the new value, and the previous value. Multiple property changes on the same deal arrive as an array of individual events in a single request.
A deal-stage change payload looks like this:
[{
"objectId": 1234567,
"propertyName": "dealstage",
"propertyValue": "closedwon",
"changeSource": "CRM_UI",
"eventId": 3,
"subscriptionId": 12345,
"portalId": 98765,
"occurredAt": 1718444400000,
"sourceId": "userId:54321"
}]
ProxyHook accepts this at the Source endpoint, applies any filters you've added to the Automation, and forwards it to Discord. If Discord has a momentary outage, ProxyHook handles retries automatically so events are not dropped.
In your ProxyHook dashboard, create a new Source and select HubSpot. You'll receive a unique ingest URL:
https://go.proxyhook.com/A817GH
This is what HubSpot will POST deal events to. The endpoint acknowledges the request immediately, which keeps HubSpot's delivery reliable regardless of what happens downstream in Discord or any other destination you add later.
HubSpot's webhook integration requires a Private App:
dealstage property.HubSpot will deliver a deal-stage change event to your ProxyHook endpoint every time any deal in your portal moves to a new stage.
First, create an Incoming Webhook in Discord:
Back in ProxyHook, create a new Automation from the Automations tab and select your HubSpot Source. Add a Destination inside this Automation, select Discord, and paste the Discord incoming webhook URL into the configuration field. Save the Automation.
Deal-stage change events from HubSpot will start appearing in the Discord channel immediately.
HubSpot can fire webhook events for any property change on deals, contacts, or companies depending on how you configured the subscription. If your Private App is set up to send all deal property changes, you'll receive events for amount, closedate, hubspot_owner_id, and other fields alongside dealstage.
To keep Discord free of noise, add a Payload Contents filter step inside the Automation, between the Source and the Discord Destination:
propertyNamedealstageEvents where propertyName is anything other than dealstage are dropped before they reach Discord. The channel gets deal-stage changes and nothing else.
If the Discord channel should only receive closed deals rather than every stage transition, add a second filter condition in the same step:
propertyValueclosedwonWith both conditions active, the Automation only passes events where propertyName equals dealstage AND propertyValue equals closedwon. The team gets one Discord message per closed deal instead of one for every stage a deal passes through on the way there.
For a "Closed Lost" alert in a separate channel, create a second Discord Destination in the same Automation with a filter set to propertyValue equals closedlost. Both Destinations receive events from the same HubSpot Source with independent filter conditions.
Deal-stage changes are happening in HubSpot but Discord messages aren't appearing. Two places tell you why.
Automation Activity. Open the Automation and check the Discord Destination's Activity view. It shows total deliveries, 2XX responses, and non-2XX responses as separate metrics, sliceable from 30 minutes to one month. A spike in non-2XX responses means ProxyHook is reaching Discord but Discord is rejecting the request. The most common cause is a deleted or expired incoming webhook URL. Open Server Settings -> Integrations -> Webhooks in Discord, verify the webhook exists, and copy a fresh URL to update the Destination configuration if needed.
Source Logs. If the Activity view shows zero total deliveries rather than non-2XX errors, the problem is upstream of the Automation. Open the Source's Logs view, which captures the raw request payload and response code for every event that reached the endpoint. If no events appear for the time range you're investigating, the HubSpot webhook subscription is the likely culprit: check that the Private App is still active and that the subscription shows a status of "active" in HubSpot's Webhooks dashboard.
You can also replay any event from the Source Logs view directly. This re-delivers the original payload through the Automation and its filter steps to every Destination. Use replay to confirm filter conditions are matching correctly without waiting for a new deal-stage change in HubSpot: advance a test deal to trigger an event, find it in Logs, then replay it after adjusting the filter to verify the change.
Create a HubSpot Source in ProxyHook, configure a Private App in your HubSpot Developer account to deliver deal-stage change events to that Source, add a Discord Destination with your channel's incoming webhook URL, and connect them in an Automation. Add a Payload Contents filter for propertyName equals dealstage to gate out unrelated property updates. Your team gets a Discord message every time a deal moves.