Webhooks vs events in Dataverse

How Dataverse exposes change notifications — webhooks, service endpoints to Azure Service Bus / Event Hub / Event Grid, and the trade-offs in reliability and scale.

Updated 2026-08-07

When something happens in Dataverse — a record created, updated, or deleted — external systems often need to react. Dataverse provides multiple mechanisms to publish these events: plug-in step → webhook, plug-in step → service endpoint (Service Bus, Event Hub, Event Grid). Each has different reliability, scale, and operational characteristics.

The plug-in step pattern. All event publication originates from the same place: a plug-in step registered against a table event. The step's destination determines the mechanism:

  • In-process plug-in — runs in Dataverse, mutates the row or related rows.
  • Webhook — Dataverse POSTs to an external HTTPS endpoint.
  • Service endpoint — Dataverse publishes to Azure Service Bus, Event Hub, or Event Grid.

Each is configured via the Plug-in Registration Tool or solution-aware code, with similar registration metadata.

Webhooks.

  • Dataverse calls an HTTPS URL with the event payload.
  • Endpoint receives, returns 200 (or fails).
  • Synchronous delivery — Dataverse waits for the response before continuing (with timeout).
  • Retries on failure (limited retries; eventually gives up).
  • Authentication via shared key or no auth (with caution).

Best for:

  • Custom logic running in Azure Functions, Logic Apps, or your own services.
  • Quick integration without infrastructure.
  • Scenarios where occasional event loss is tolerable.

Limitations:

  • Reliability — receiver failures lead to dropped events after retry exhaustion.
  • Scale — Dataverse blocks while waiting for response; slow receivers impact source.
  • Ordering — no strict ordering guaranteed.

Azure Service Bus.

  • Dataverse publishes to a Service Bus queue or topic.
  • Decoupled — events buffered for subscribers.
  • Strong reliability — guaranteed delivery to receivers.
  • Subscribers process at their own pace.
  • Higher infrastructure cost; needs Service Bus namespace.

Best for:

  • High-reliability integrations.
  • Heavy downstream processing.
  • Multiple consumers of the same event.

Azure Event Hub.

  • High-throughput event ingestion.
  • Optimised for many events per second.
  • Used with telemetry-style scenarios.

Best for:

  • Very high-volume event streams.
  • Analytics ingestion.
  • Event sourcing patterns.

Azure Event Grid.

  • Event routing with topic/subscription model.
  • Multiple subscribers per event.
  • Native integration with many Azure services.
  • Generally lower cost for moderate volumes than Service Bus.

Best for:

  • Pub/sub patterns with multiple receivers.
  • Routing events to various Azure services.
  • Cross-product Azure-centric integrations.

Comparison table.

| Aspect | Webhook | Service Bus | Event Hub | Event Grid | |---|---|---|---|---| | Coupling | Tight | Loose | Loose | Loose | | Reliability | OK | High | High | High | | Volume | Low-mid | Mid-high | Very high | Mid-high | | Setup complexity | Low | Mid | Mid | Mid | | Cost | None | Per msg | Per ingestion | Per operation | | Use case | Simple webhook | Critical integration | Telemetry | Pub/sub routing |

Synchronous vs asynchronous.

  • Synchronous (Pre/Post-op stage) — plug-in fires inline with the Dataverse operation; user waits.
  • Asynchronous (Post-op + async) — fires after commit, queued, executed by Dataverse's async job processor.

For external publication, asynchronous is almost always right — sync webhooks block the user's experience.

Payload format. The payload varies:

  • Native Dataverse formatExecutionContext serialised.
  • CloudEvents — when configured for Event Grid in CloudEvents schema mode.

CloudEvents is the modern, interoperable format; preferred for new integrations.

Authentication.

  • Webhook — shared key (header value), or HTTP Basic.
  • Service Bus — connection string (SAS key) with policy.
  • Event Hub / Event Grid — similar SAS-based auth.

Service principal-based auth is preferred over shared keys; setup is more complex but more secure.

Filtering at source. Reduce noise by only publishing events that matter:

  • Filtering attributes — only fire when specific columns change.
  • Conditional execution — plug-in checks before publishing.

Source-side filtering reduces downstream volume.

Replay and dead-letter handling.

  • Service Bus — dead-letter queue for failed messages; messages can be inspected and re-processed.
  • Event Hub — events persist for configurable retention; consumers can replay.
  • Event Grid — dead-letter to storage; advanced retry policy.
  • Webhook — no dead-letter; permanent loss after retries.

For critical integrations, never use webhooks alone — the lack of dead-letter handling is operationally risky.

Idempotency. Receivers should be idempotent — handle the same event twice without bad side effects. All event mechanisms have at-least-once delivery; duplicates happen.

Monitoring.

  • Plug-in execution failures — visible in Dataverse async job logs.
  • Service Bus metrics — message counts, dead-letter counts.
  • Webhook failures — show in Dataverse but not retrievable beyond a window.

Service Bus and Event Grid provide much richer observability than webhooks alone.

Common pitfalls.

  • Webhook for critical events. Receiver failure = event lost; downstream system out of sync. Use Service Bus or Event Grid for reliability.
  • No idempotency at receiver. Duplicate events cause duplicate side effects.
  • Source-side filtering missing. All updates published; downstream system overwhelmed.
  • Authentication via shared keys. Keys leak in code or logs; security incident.
  • No dead-letter handling. Failed events disappear; integration silently incomplete.
  • Synchronous webhook with slow receiver. Dataverse operations slow for users; blame the system.

Strategic positioning. Choose the mechanism per integration's needs:

  • Internal Power Platform integrationsPower Automate flows triggered by Dataverse events, no Service Bus needed.
  • Lightweight external — webhook to Azure Function.
  • Critical external — Service Bus or Event Grid.
  • Very high-volume telemetry — Event Hub.

The cost of choosing wrong: brittle integrations. The cost of choosing right: infrastructure investment that pays back in reliability. Most production integrations should use Service Bus or Event Grid; webhooks are for prototypes and low-stakes scenarios.

Related guides