Hi,
We have faced a problem with webhook execution. Our webhooks are set to execute on new contact, delete contact, restore contact and permanently delete contact. After we have uploaded a file with 500 contacts and our throttle was set to 100, many of our webhook events failed with Concurency limited exception. See attachment. We are unable to reproduce the issue again, so we can investigate further, but we are seeing it constantly in our logs.
We are trying to understand why this happens, and how to prevent it in the future.
Thank you!
Hi @LApostolovski,
Will you be consistently uploading larger lists to the account? If not, I wouldn’t expect you’ll run into this often. This usually shows up during big “bursty” actions like imports.
While I can’t be 100% certain without seeing timing data from the moment it happened, you’re likely not able to recreate it because imports can trigger a lot of webhook deliveries in a short window. If your webhook endpoint is even a bit slow at that moment (server load, DB latency, queue backlog, etc.), HubSpot can hit its delivery concurrency limits and you’ll see “Concurrency limited” with retries in the logs.
Based on what you shared, to avoid this in the future I’d recommend:
- Return 200 fast - This is set on your side, in the webhook receiving endpoint. The goal is to acknowledge “received” immediately, then do the heavier sync work in the background (queue/job). HubSpot just needs a quick 2xx response.
- Make processing idempotent - This is also set on your side. HubSpot will retry deliveries, so your code should safely ignore duplicates. Typically that means storing a unique event identifier from the webhook payload and skipping it if you’ve already processed it.
- Adjust the webhook concurrency setting to match your capacity - If your infrastructure struggles with parallel requests, lower it. If you can reliably respond quickly under load, you can raise it.
Hope this helps and like I said, if you aren’t going to be processing larger volumes via imports, you may not need to take any further action at this time.
Josh
