Webhooks vs events in Dataverse

By Emil Björk · Microsoft business apps consultant, Gothenburg

How Dataverse exposes change notifications — webhooks, service endpoints to Azure Service Bus / Event Hub / Event Grid.

Reviewed May 20264 min read · 842 wordsPublished
On this page (6)

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.

AspectWebhookService BusEvent HubEvent Grid
CouplingTightLooseLooseLoose
ReliabilityOKHighHighHigh
VolumeLow-midMid-highVery highMid-high
Setup complexityLowMidMidMid
CostNonePer msgPer ingestionPer operation
Use caseSimple webhookCritical integrationTelemetryPub/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.

Where to go next

Deeper on each destination: Service Bus integration, Event Grid with Dataverse, and the reliability pattern that makes any of them safe, the outbox pattern. Receivers need idempotency; the step that publishes is a plug-in, whose failure modes are in plug-in exceptions explained.

Frequently asked questions

What are the options for publishing Dataverse events externally?

A plug-in step registered on a table event whose destination is a webhook (HTTPS POST) or a service endpoint to Azure Service Bus, Event Hub, or Event Grid. All are configured through the Plug-in Registration Tool with similar metadata.

Why not use webhooks for critical integrations?

Webhooks have limited retries and no dead-letter queue, so a failing receiver eventually means a permanently lost event. Service Bus and Event Grid buffer, guarantee delivery, and dead-letter failures for inspection and replay.

Should the publishing step be synchronous or asynchronous?

Asynchronous, almost always. A synchronous webhook makes the user wait for the external receiver, and a slow receiver makes Dataverse feel slow.

Do receivers need to be idempotent?

Yes. Every mechanism delivers at least once, so duplicates happen. Receivers must handle the same event twice without duplicate side effects.

Which Azure service fits which scenario?

Service Bus for critical integrations with heavy downstream processing; Event Grid for pub/sub routing to multiple Azure subscribers at moderate volume; Event Hub for very high-volume telemetry-style streams.

Further reading

Microsoft Docs & product blog

Related guides

Browse every guide in Integrations or just Eventing & messaging.

Was this helpful?

Signals which guides land and which need work. No account, no comment box — corrections go through the contact page.

Spot something wrong or want a topic covered? Send a correction or a topic request — both are welcome.