Unlock real-time data with virtual webhooks

Updated:


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?

virtual_webhooks.png

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:

  1. Poll the API (which wastes API calls and delays updates), or
  2. 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.

Explore documentation

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.

FeatureUnified's Virtual + Native WebhooksNative WebhooksPolling
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.

Unified Ticketing API

Build an AI Support Bot

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

Unified Accounting API

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.

Unified ATS API

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?

  1. 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/webhook with connection_id, object_type and event.
  2. 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.
  3. 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.
  4. Optionally backfill history: Add the include_all query parameter (or check Initially sync all data in the app). Historical records arrive in pages marked INITIAL-PARTIAL, followed by a final INITIAL-COMPLETE payload.
  5. Point it at your endpoint: Set hook_url to your webhook URL, and verify incoming payloads with the sig256 signature.

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:

Share
All guidesWebhooksWebhook modelVirtual webhooksAdvertising Report Metrics by IntegrationATS to Vector DB: How to Power Talent Intelligence with Real-Time DataBuilding AI applications with Unified and LangbaseConcur & Concur (Company) — Connection GuideConfigure Greenhouse Native Candidate WebhooksConnect Amazon Seller Central to Unified.toConnecting BambooHR via OAuth 2Connecting Google Workspace Integrations with a Service AccountCorrect WelcomeKit Scopes for Jungle IntegrationCreating Ads using the Unified Ads APICreating Walmart Items via UnifiedEnd-Users, Integrations, and ConnectionsEnriching Unified Objects with Custom MetadataEnterprise-managed authorization (EMA) with a static keyEnterprise-managed authorization (EMA) with a workspace secretEnterprise-managed authorization (EMA) with Microsoft Entra IDExtended observability — pushing API logs to ClickHouseExtended observability — pushing API logs to Grafana / LokiExtended Observability - Pushing API Logs to your Datadog InstanceFacebook Messenger Webhook SetupFireflies Integration GuideGetting started with WorkableHandling Delegated vs. Application Scopes in Microsoft IntegrationsHiBob & Unified: connection and time off guideHow long are logs retainedHow to access employees and usersHow to add API support for the Create Activity in CrelateHow to Associate a Connection ID with Your End-UserHow to build a Candidate Assessment product with Unified.toHow to build a candidate sourcing or job board app with Unified.toHow to build a Discord support bot with Unified.to and LangbaseHow to Build a Fintech Application with Unified's Payments APIHow to Build an E-Commerce Product Integration with UnifiedHow to build an invoicing system with Unified.toHow to build Enterprise Search using RAGHow to configure Bullhorn Redirect URI for creating a connectionHow to configure webhooks in HubSpotHow to configure webhooks in Thrive LearningHow to configure webhooks in Toast for UnifiedHow to Connect Anthropic to Real-Time SaaS Data with Unified.to MCP ServerHow to Connect Cohere to Real-Time SaaS Data with Unified.to MCP ServerHow to Connect Google Gemini to Real-Time SaaS Data with Unified.to MCP ServerHow to Connect LLMs to Real-Time SaaS Data with Unified.to MCP ServerHow to Connect OpenAI to Real-Time SaaS Data with Unified.to MCP ServerHow to Connect Zoom and Zoom PhoneHow to create a Connection In Microsoft TeamsHow to create a token-based connection in HighlevelHow to Create a Unified.to Connection to HighLevelHow to Create a Xero Connection in Unified.toHow to create and configure webhooksHow to create Connection with HubspotHow to customize portal URLs for Stripe and GoCardlessHow to filter webhook eventsHow-to Get a Private Support Channel for Your Unified IntegrationHow to get your 8x8 Connect API Key and Account ID: Step-by-step guideHow to get your ADP Workforce Now Oauth2 client ID, Oauth2 client secret, Oauth2 PEM certificate and Oauth2 private key: Step-by-step guideHow to get your Amazon S3 AWS Region, AWS S3 Key and AWS S3 Secret: Step-by-step guideHow to get your Ashby API Key: Step-by-step guideHow to get your Brex API token: Step-by-step guideHow to get your Bullhorn OAuth2 Client ID, OAuth2 Client Secret, API Username and API Password: Step-by-step guideHow to get your Ceridian Dayforce Username, Password and Client Namespace: Step-by-step guideHow to get your Crelate API key: Step-by-step guideHow to get your Dashlane API Key: Step-by-step guideHow to get your Deel Access Token: Step-by-step guideHow to get your Dialpad API Key: Step-by-step guideHow to get your Discord OAuth 2 credentials and bot tokenHow to get your ELMO client ID and client secret: Step-by-step guideHow to get your Gainsight Client ID, Client Secret and Gainsight API Domain: Step-by-step guideHow to get your Greenhouse API Key and Job board token: Step-by-step guideHow to get your Helpscout API Key: Step-by-step guideHow to get your HiBob Service User ID and Service User Token: Step-by-step guideHow to get your HighLevel API Key and Location ID: Step-by-step guideHow to get your HubSpot developer key and OAuth 2 credentials (Legacy Apps)How to get your Humaans API Key: Step-by-step guideHow to get your iCIMS API Username, API Password and Customer ID: Step-by-step guideHow to get your JobDiva Client ID, Username/email and Password: Step-by-step guideHow to get your Jobvite API Key, API Key Secret and Email: Step-by-step guideHow to get your Lever API Key: Step-by-step guideHow to get your Loxo Agency slug, API Key and Agency ID: Step-by-step guideHow to get your Microsoft Active Directory / Entra ID Client ID, Client Secret and Tenant ID: Step-by-step guideHow to get your Microsoft Azure AD OAuth 2 credentialsHow to get your OAuth 2 credentials for GmailHow to get your OAuth 2 credentials for Microsoft Dynamics 365How to get your OAuth 2 credentials in PipeDriveHow to get your OpenAI API Key: Step-by-step guideHow to get your Paycom SID/Username and Token/Password: Step-by-step guideHow to get your PCRecruiter Username, Password, Database ID, App Key and App ID: Step-by-step guideHow to get your SAP SuccessFactors (OpenID Connect) Username, Password, Client ID, Client Secret, Dependency Name, IAS Host and API URL: Step-by-step guideHow to get your SAP SuccessFactors Username, Company ID, Password and API URL: Step-by-step guideHow to get your Shopify Admin API access token and Store ID: Step-by-step guideHow to get your Wayfair Client ID, Client Secret and Vendor Encrypted Key: Step-by-step guideHow to get your Workable API Token and Subdomain: Step-by-step guideHow to get your yotpo APP Key / Store ID and Secret Key: Step-by-step guideHow to Handle Attachments in Invoice, Bill and Credit MemoHow to migrate or import your integrations into Unified.toHow to obtain your GitHub OAuth2 credentialsHow to Power Claude with Live Customer Data Using Unified MCPHow to register a Google developer app and get OAuth 2 credentialsHow to register a Salesforce developer app and get OAuth 2 credentialsHow to register a Slack developer account and get OAuth 2 credentialsHow to Register a Workday Developer App and Get OAUTH2 CredentialsHow to Register a Workday Developer App and Get OAUTH2/ SOAP CredentialsHow to Register a ZendeskSell Developer App and Get OAUTH2 CredentialsHow to Register a Zoho Developer App and Get OAUTH2 CredentialsHow to Register an ADP Developer App and Get OAUTH2 CredentialsHow to Register an Atlassian Developer App and Get OAUTH2 CredentialsHow to Register your Facebook OAuth2 ApplicationHow to Register your Google Ads OAuth2 ApplicationHow to Register your MetaAds OAuth2 applicationHow To Request & Write Raw Integration DataHow to Retrieve Microsoft Dynamics 365 Business Central CredentialsHow to set up a custom API URL with a CNAMEHow to Set Up a Microsoft Teams Bot with UnifiedHow to set up and configure NotionHow to set up Google Business Profile API access and get OAuth 2 credentialsHow to Set Up LinkedIn Webhooks with UnifiedHow to set up native webhooks for QuickBooks Online with UnifiedHow to set up Slack webhooks using event subscriptionsHow to set up Telegram (bot) with Unified.toHow to set up your scopes in HubSpotHow to setup a Freshbooks developer appHow to setup a TikTok Shop applicationHow to Setup AWS Assume Role for AWS Secret ManagerHow to setup Oracle JD EdwardsHow to Setup Quickbooks DesktopHow to setup Sage 100 with Unified.toHow to troubleshoot unhealthy connectionsHow to troubleshoot unhealthy webhooksHow to use SCIM with the Unified APIHow to use the Passthrough APIHow to Use Unified.to's Generative AI API with OpenAI and ClaudeHow to use User Provisioning and Verification with UnifiedHow virtual webhook retry and recovery worksIntegration set-up guide for LeverManaging custom validation rules in SalesforceNetSuite Authentication Setup for UnifiedNotice of Deprecation of Fields and Objects (Nov 2025)Oracle HCM / Taleo OAuth Credentials GuideRetrieval-Augmented Generation (RAG)SalesForce (External Client Apps) on Multiple OrganizationsSAML Single-Sign-OnScaling MCP Tools with Anthropic's (& OpenAI's) Defer LoadingSet Environments for your Unified.to WorkspaceSetting up a Slack Bot Connection with Unified.toSetting up OAuth 2 Credentials for Greenhouse's APIsTrello Connection Guide in UnifiedUnderstanding OAuth2 Authorization flowsUnderstanding Response Time Headers in the Unified APIUnified Assessment API: Embed Assessments Inside ATS PlatformsUnified's MCP ServerUnified MCP Server with LangChain and LangGraphUse Unified to sign in your users into your applicationWorkable: Creating candidates and attaching them to jobsWorkday vs Workday Legacy — Why Unified.to Supports BothWorking with hierarchical tree data in Storage, Messaging, and KMS APIs
Are we missing anything? Let us know
Was this page helpful?