Unified.to
All articles

Virtual Webhooks vs Polling Jobs: How Unified API Platforms Handle Change Detection


March 30, 2026

Most teams think they're choosing between webhooks and polling.

They're not.

They're choosing how change detection actually works under the hood—and that decision determines latency, system complexity, and whether your 'real-time' features are actually real-time.

The problem is that almost every unified API platform claims 'webhook support,' but that label is used to describe fundamentally different architectures.

The three models behind 'webhooks'

There are three distinct ways unified API platforms detect and deliver changes. They behave very differently in production.

1. Native webhooks (true push)

This is the ideal case.

  • The source system detects a change
  • It immediately sends an event
  • Your application reacts

Examples include payments, ecommerce orders, or Git events.

The limitation is coverage. Most SaaS APIs don't support webhooks consistently—some don't support them at all.

2. Virtual webhooks (poll → detect → deliver)

This is where modern unified APIs step in.

Under the hood:

  • The platform polls the source API
  • Detects changes using timestamps, cursors, or diffs
  • Emits a webhook event when something changes

From your perspective, it behaves like a normal webhook. You subscribe once and receive events.

The key detail:

Polling still exists—it's just handled by the platform instead of your application.

Freshness depends on the polling interval. That can mean minutes, or it can mean hours depending on the provider.

3. Sync-based 'webhooks' (sync → notify)

This is where things get misleading.

In this model:

  • The platform runs a scheduled sync
  • Stores data in its own database
  • Sends a webhook after the sync completes

These are often labeled as webhooks, but they are not event-driven.

They are notifications that a batch process finished.

In most cases:

  • The webhook does not include the data
  • Your application must make another API call to fetch updates

Why this distinction matters

At a glance, all three models look similar. In practice, they create very different systems.

Freshness (what 'real-time' actually means)

  • Native webhooks → near instant
  • Virtual webhooks → bounded by polling interval
  • Sync-based webhooks → bounded by sync cadence (often hours or days)

A webhook that fires after a daily sync is not real-time, even if it's described that way.

What you actually receive

There are two patterns:

Data delivery

  • Webhook contains updated records
  • No follow-up request required

Notification only

  • Webhook signals a change
  • You must fetch data separately

That second pattern is more common than most teams expect.

If you still need to fetch data after every webhook, you haven't eliminated polling—you've just moved it.

Where polling lives

Polling never disappears. It just moves.

  • In polling jobs → you build and maintain it
  • In virtual webhooks → the platform owns it
  • In sync systems → it runs as scheduled batch jobs

The real question is:

Do you want polling logic in your product—or contained inside your integration layer?

Data storage and system design

Architectures diverge sharply here.

  • Sync-based platforms store full copies of customer data
  • Virtual/pass-through platforms fetch data on demand

That impacts:

  • compliance scope
  • latency
  • long-term migration risk

Where unified API platforms actually fall

Based on documented behavior, unified API platforms cluster into these models.

Virtual webhook platforms (poll → detect → deliver)

  • Unified
  • Apideck

Both use virtual webhooks, but differ in default freshness and whether events are usable without a second API call.

Sync-based notification platforms (sync → notify)

  • Merge
  • Kombo
  • Paragon (Managed Sync)
  • Truto (scheduled sync jobs)
  • StackOne (synthetic events)

These rely on stored data and emit notifications after syncs.

Hybrid models

Some platforms combine multiple approaches:

  • Paragon (workflow triggers vs sync layer)
  • Truto (real-time proxy + scheduled pipelines)

The behavior depends on which feature you use.

How unified API platforms actually handle change detection

PlatformModelHow changes are detectedWhat the webhook sendsFollow-up fetch requiredDefault freshness
UnifiedNative + VirtualPush or poll → detect → deliverData includedNoConfigurable (~1 min+)
ApideckVirtualPoll → detectNotification (often)Often yesDaily default (configurable)
MergeSync-basedScheduled syncSync completion signalYesDaily (default)
KomboSync-basedScheduled syncSync completion signalYes~3 hours
ParagonHybridPolling or syncTrigger / notificationOften yesVaries
TrutoHybridProxy + scheduled jobsBatch or notificationDependsCron-based
StackOneSynthetic eventsPoll + hash detectionNotificationYesHourly

The subtle differences between virtual webhook platforms

Not all virtual webhook implementations behave the same.

Two platforms may sit in the same category but produce very different outcomes.

Default freshness

  • Apideck → polling often defaults to daily intervals unless adjusted
  • Unified → configurable intervals, down to ~1 minute

That difference shows up immediately in user-facing features.

Payload design

  • Apideck → events often require a follow-up fetch
  • Unified → events can include the updated records directly

This changes your architecture:

  • one-step event processing vs
  • event → fetch → process pipelines

Event model

  • Apideck → change notification pattern
  • Unified → unified event stream (initial sync + incremental updates through one interface)

What this looks like in your system

Two teams building the same feature will end up with very different architectures.

With sync-based webhooks:

  • Receive notification
  • Call API to fetch updates
  • Handle pagination
  • Deduplicate records
  • Manage retries

With virtual webhooks (data included):

  • Receive event
  • Process data
  • Done

That difference compounds across:

  • every integration
  • every object
  • every customer

Why 'webhook support' is the wrong question

Most evaluations start with:

'Does this platform support webhooks?'

That question hides the real tradeoffs.

A better set of questions:

  • How are events generated—push, polling, or batch sync?
  • What is the default latency?
  • Do webhook events include actual records?
  • Do I still need polling or follow-up fetches?
  • Is customer data stored?

Those answers determine how your system behaves under load—not the presence of a webhook endpoint.

When each model makes sense

Each approach has a place depending on your requirements.

Use polling jobs when

  • data is not time-sensitive
  • you want full control over scheduling
  • you're building simple or internal workflows

Use native webhooks when

  • the provider supports them reliably
  • you need immediate updates
  • event coverage is sufficient

Use virtual webhooks when

  • APIs don't provide webhooks
  • your product depends on fresh data
  • you want to avoid building polling infrastructure

Be cautious with sync-based webhooks when

  • latency matters
  • you want to avoid double-fetch patterns
  • your system depends on event-driven workflows

The takeaway

'Webhook' is not a capability. It's an interface.

What matters is:

  • how events are generated
  • how quickly they arrive
  • whether they include usable data

Virtual webhooks represent a shift in how integrations are built. Polling still exists, but it's centralized, controlled, and exposed as events instead of leaking into your application.

That's the difference between managing integrations—and building on top of them.

Start your 30-day free trial

Book a demo

All articles