Unlock real-time data with virtual webhooks
February 13, 2025
Product teams building event-driven applications face a common challenge: most third-party APIs don't offer webhooks (In fact, our State of SaaS APIs report found only 11% of APIs have built-in support for webhooks). This leads to inefficient polling, manually handling rate limits, and writing custom logic just to avoid stale data.
For how virtual webhooks compare with native webhooks and polling, see What Are Virtual Webhooks?.
But what if you could control webhook updates while reducing API costs and complexity?
That's exactly what Unified.to's virtual webhooks enable. In this article, we'll review:
- How virtual webhooks work
- Why they help control API costs by managing request frequency
- How they reduce the custom rate-limit handling you need to write
- How virtual webhooks shorten the time to receive change events from APIs without webhooks
Why use virtual webhooks?

Pairing Unified.to's virtual webhooks with your product's integration strategy means:
- Webhooks on supported integrations and objects: Receive change events from APIs that don't offer webhooks, through the same API you use for native ones.
- Predictable API usage: Virtual webhooks check on the interval you set, so you control how often the source API is called. A check that finds nothing isn't billed.
- One unified schema: Whether the source sends its own webhooks or not, data arrives in the same format. No custom polling logic needed.
- Configurable change detection: Set the check interval (e.g., every minute, every 30 minutes, every hour; minimum 1 minute on paid plans, 60 minutes on the trial). Unified.to honours each integration's retry-after hints.
- Faster time-to-market: Virtual webhooks eliminate the need to build custom data collection.
- Historical data access: Receive existing records when you create a webhook subscription, paged until the initial sync completes.
- Built-in observability: Monitor webhook activity with logs (metadata only) and health status.
- Event-driven AI and automation: Trigger AI actions and automation as change events arrive.
Instead of dealing with a patchwork of webhook, polling, and batch sync solutions, Unified.to's virtual webhooks give you one way to receive change events across the integrations that support them.
How virtual webhooks work
Webhooks deliver data updates to you, eliminating the need for polling. But most APIs don't support them, which forces developers to either:
- Poll the API (which wastes API calls and delays updates), or
- Manually mix polling and webhooks (adding complexity and inconsistencies).
Unified.to's virtual webhooks detect changes and deliver events, even when the source API doesn't offer webhooks:
- We monitor your customers' connections on a scheduled interval that you configure (e.g., as frequently as every minute on paid plans) and detect changes automatically
- We deliver events to your webhook URL in the same format as native webhooks
- You create and manage them with the same webhook API as native webhooks
No polling logic to write. Events on your interval, as often as every minute on paid plans.
How virtual webhooks compare to traditional webhooks and polling
Most third-party APIs don't offer native webhooks, forcing teams to choose between batch syncs, polling, or manual workarounds.
| Feature | Unified's Virtual + Native Webhooks | Native Webhooks | Polling |
|---|---|---|---|
| Works even if API doesn't support webhooks | ✅ Yes | ❌ No | ✅ Yes, but inefficient |
| Event updates on your interval (virtual) or as sent (native) | ✅ Yes | ✅ Yes | ❌ No, delayed |
| API rate limit friendly | ✅ Yes | ✅ Yes | ❌ No, high API usage |
| Historical data retrieval | ✅ Yes | ✅ With include_all, where initial sync is supported | ❌ No |
| Fine-grained sync control | ✅ Yes (set the check interval) | ❌ No | ✅ Yes, but manual |
| Built-in error handling & retries | ✅ Yes | ❌ Varies by API | ❌ No |
| Webhook observability (logs, health monitoring) | ✅ Yes | ❌ Varies by API | ❌ No |
| Virtual webhooks use the same subscription API and payload format as native webhooks, and work where APIs don't offer webhooks. |
Product use cases
Let's look at how developers and product teams can use virtual webhooks.
AI-powered customer support
Virtual webhooks can update AI models within your configured interval when new support tickets are created. Instead of writing polling logic against a help desk API, an AI assistant can respond to customer inquiries or escalate issues as events arrive.
Automated financial reporting
Fintech and accounting applications rely on up-to-date financial data to generate reports, sync transactions, and reconcile accounts. However, many accounting platforms don't offer webhooks, meaning transaction updates often rely on batch syncs or polling.
With Unified.to's virtual webhooks, accounting software can:
- Get notified within your configured interval when new transactions, invoices, or payments are recorded
- Trigger automatic reconciliation instead of waiting for scheduled syncs
Recruitment automation
Hiring teams often integrate with multiple ATS platforms, some of which don't offer webhooks. Virtual webhooks let AI-powered candidate screening start within your configured interval of a new application arriving.
How HeroHunt added 20 integrations in 1 week
How much polling actually costs
Polling isn't just inefficient. It's expensive.
Example:
- Polling every 5 minutes on 1000 accounts = 288,000 API requests per day
- Polling every 1 minute on 1000 accounts = 1.4 million API requests per day
- With virtual webhooks, you're billed only when a check finds changes, so a low-activity account costs little even on a one-minute interval. Checks still call the integration's API, and Unified.to honours the integration's retry-after hints.
Instead of writing and running your own polling, you pay per page of changes delivered.
What happens if you don't use virtual webhooks?
- You could hit API rate limits while continuously polling for updates
- You could rely on batch syncs, leading to outdated or incomplete data
- You could spend months building and maintaining custom webhook fallbacks for every integration
Or you could use Unified.to's virtual webhooks, which detect changes on your interval and deliver change events across the integrations that support them.
How do you set up a virtual webhook?
- Start from a connection and object: Webhooks are created from an existing connection. In the app, go to Integrations > Webhooks, click New Webhook and select the connection, or send a POST request to
/unified/webhookwithconnection_id,object_typeandevent. - Choose the virtual type: Set Type to virtual where the integration supports it. Webhook support varies by integration and object, so check the integration's Feature Support tab first. The type can't be changed after creation; delete and recreate the webhook to switch.
- Set the interval: Choose how often Unified.to checks the integration for changes. The minimum is 1 minute on paid plans and 60 minutes on the trial. The interval doesn't affect the initial sync.
- Optionally backfill history: Add the
include_allquery parameter (or check Initially sync all data in the app). Historical records arrive in pages markedINITIAL-PARTIAL, followed by a finalINITIAL-COMPLETEpayload. - Point it at your endpoint: Set
hook_urlto your webhook URL, and verify incoming payloads with thesig256signature.
For every configuration option, including filters and fields, see How to create and configure webhooks.
Start using Unified.to's virtual webhooks
Ready to stop polling and start receiving change events? Here's how to get started:
- Start a free trial to access virtual webhooks
- Join our Discord to connect with our team and get support
- Review our documentation for step-by-step guidance on setting up webhooks
- See our changelog for virtual webhook enhancements