Esc

Start typing to search.

Improvado
Sign In

Webhooks

Updated on Aug 19, 2026

Overview

Webhooks allow you to receive automated HTTP notifications when events occur in your Improvado workspace — such as connection status changes, extraction completions, data table updates, and more. Instead of polling the API, your server gets notified automatically.

Note

Think of webhooks like a text message alert. Instead of constantly checking Improvado for updates, you register a web address (URL) that Improvado will automatically "ping" whenever something happens — like when a data extraction finishes or a connection breaks. Your system receives the message and can act on it immediately.

Event delivery is not instant: half of all events arrive within 13–15 minutes of occurring, and 95% within 20–26 minutes. Webhooks are designed for automation and integration workflows, not for use cases that require instant reaction — size any timeout you build on top accordingly.

You can manage webhooks from Settings → Notification Center → Webhooks.

__wf_reserved_inherit

Adding a Webhook

Before you start

You'll need a publicly accessible URL that Improvado can send data to. If you don't have a developer or server set up, here are two easy options to get started:

  • Zapier or Make (Integromat): These no-code tools generate a webhook URL for you in seconds. Go to zapier.com, create a new Zap, choose "Webhooks by Zapier" as the trigger, and copy the URL provided.
  • webhook.site: A free tool at webhook.site that instantly gives you a test URL and lets you see incoming notifications in your browser — no setup needed. Great for testing before you go live.

To start receiving event notifications, register your existing server endpoint in Improvado:

  1. Navigate to Settings → Notification Center.
  2. Scroll to the Webhooks section and click Add.
  3. Enter the URL of your server that will receive webhook events (the endpoint must already be deployed and publicly accessible).
  4. Select the event types you want to subscribe to.
  5. Click Save.

After registration, the webhook will be in Unverified status. Events will not be delivered until the endpoint passes verification.

For a step-by-step example of using webhooks with Make, see our Make.com integration guide.

Endpoint Verification

Improvado uses a challenge-response mechanism to verify that you own and control the webhook endpoint URL. Until verification is complete, the endpoint stays in unverified status and will not receive any events.

Note

What this means in plain terms: Improvado sends a quick test to your URL to confirm it's real and working. Your server must respond with the exact code Improvado sent. Tools like Zapier and webhook.site handle this automatically.

Improvado uses a challenge-response mechanism to verify that you own and control the webhook endpoint URL. Until verification is complete, the endpoint stays in unverified status and will not receive any events.

Verification Flow

  1. Click the Verify button next to your webhook URL in the Notification Center.
  2. Improvado generates a random challenge token and sends a GET request to your endpoint URL with the following headers:
    • X-Improvado-Challenge — a random challenge string your server must echo back.
    • X-Improvado-Verify-Token — the signing secret of your endpoint (so your server can confirm the request is from Improvado).
  3. Your server must respond with:
    • HTTP status 200
    • The exact value of the X-Improvado-Challenge header as the response body (plain text).
  4. If the response body matches the challenge, the endpoint status changes to active and events will start being delivered.

Verification Errors

  • Challenge response did not match — your server returned a response, but the body did not match the challenge value. Make sure you are returning the exact value from the X-Improvado-Challenge header.
  • Failed to reach endpoint — Improvado could not connect to your URL. Verify the URL is publicly accessible and your server is running.

Event Payload

When an event occurs, Improvado sends a POST request to your endpoint with a JSON payload. Here is an example of an extraction_paused event:

{
 "id": "A1B2C3D4E5F6789012345678ABCDEF90",
 "type": "extraction_paused",
 "timestamp": "2026-04-06 11:39:46.752000",
 "data": {
   "product_domain_event_inserted_at": "2026-04-06 12:00:12.000",
   "product_domain_event_aggregate_class": "Extraction",
   "product_domain_event_class": "ExtractionPaused",
   "product_domain_event_usecase": "PauseExtractionUseCase",
   "product_domain_event": "",
   "is_action_log": "1",
   "agency_title": "My Agency",
   "workspace_title": "Main Workspace",
   "dts_order_params_id": "123456",
   "order_id": "654321"
 }
}
  

Each event contains:

  • id — unique event identifier
  • type — the event type name (matches your subscription)
  • timestamp — when the event occurred
  • data — event-specific payload with details about what happened

Signing Secret

Each webhook has a unique signing secret, visible in the Notification Center while the endpoint is unverified. Use this secret to verify that incoming webhook requests are genuinely from Improvado. During verification, the secret is sent in the X-Improvado-Verify-Token header. During event delivery, the secret is used to compute an HMAC-SHA256 signature sent in the X-Improvado-Signature header — compute the same signature on your side and compare.

Event delivery requests also include an X-Improvado-Idempotency-Key header that you can use to deduplicate events.

Managing Subscriptions

Each webhook can subscribe to specific event types. You can update subscriptions at any time by editing the Subscribed events field on the webhook card. Use the clear button to remove all subscriptions, or select individual events from the dropdown.

Improvado publishes 90 event types. The identifiers below are exactly what the Subscribed events dropdown offers.

17 of them are marked "rare" — they are valid subscriptions, but produced no events in a 30-day sample of production traffic. Do not build a flow that waits on one.

For the payload each event delivers, see the webhook events reference in the developer documentation.

Account events

EventFrequency
account_createdRare
account_disabledRare
account_disabled_for_copied_connectionRare
account_enabledRegular
account_enabled_for_copied_connectionRare
account_item_changedRegular
account_name_changedRegular
enabled_for_embedded_extraction_changedRegular

Agency events

EventFrequency
agency_createdRegular
agency_is_test_changedRegular
agency_migrated_to_workspace_separated_schemasRare
agency_offboardedRegular
agency_toggleRegular

Connection events

EventFrequency
connection_accounts_update_errorRegular
connection_accounts_update_failRegular
connection_accounts_update_startedRare
connection_accounts_update_successRare
connection_createdRare
connection_deletedRegular
connection_invalidatedRegular
connection_privacy_updatedRegular
connection_reconnectedRare

Data table events

EventFrequency
data_table_createdRegular
data_table_marked_as_deletingRegular
extraction_addedRegular
table_auto_add_new_fields_changedRegular
table_auto_extract_new_accounts_changedRegular
table_extract_template_changedRegular
table_freshness_changedRegular
table_meta_setRegular
table_sql_available_at_changedRegular
table_title_changedRegular

Destination events

EventFrequency
create_load_changedRegular
destination_connection_changedRegular
destination_connection_check_runRegular
destination_connection_createdRegular
destination_connection_deletedRare
error_text_changedRegular
gbq_by_improvado_createdRare
gbq_by_improvado_for_sandbox_createdRare
secret_key_changedRegular
status_changedRegular
title_changedRegular

Extraction events

EventFrequency
additional_params_changedRegular
custom_filters_changedRare
extraction_account_changedRegular
extraction_completedRegular
extraction_createdRegular
extraction_marked_as_deletingRegular
extraction_pausedRegular
extraction_schedules_changedRegular
extraction_template_changedRegular
extraction_unpausedRegular
fields_changedRegular
historical_download_startedRegular
regular_download_startedRegular
sync_historical_data_changedRegular

Invite events

EventFrequency
agency_invite_createdRare
invite_acceptedRegular
invite_deletedRare
invite_sentRegular

Load events

EventFrequency
error_changedRegular
execution_policy_changedRegular
load_completedRegular
load_createdRegular
load_startedRegular
order_pausedRegular
order_startedRegular
run_policy_changedRegular
schedules_changedRegular

Recipe events

EventFrequency
recipe_activatedRegular
recipe_backward_compatibility_validatedRegular
recipe_backward_compatibility_validation_failedRegular
recipe_backward_compatibility_validation_skippedRegular
recipe_columns_validatedRegular
recipe_deactivatedRegular
recipe_promotedRegular
recipe_validate_complexity_failedRegular
recipe_validate_complexity_successRegular
recipe_view_name_updatedRegular

Transformation events

EventFrequency
transformation_completedRegular
transformation_createdRegular
transformation_startedRegular

User events

EventFrequency
user_deactivatedRare
user_invited_to_workspacesRare

Workspace events

EventFrequency
user_added_to_workspaceRegular
user_removed_from_workspaceRegular
user_workspace_role_changedRegular
workspace_connector_changedRegular
workspace_createdRegular

Webhook Statuses

  • Unverified — the endpoint has not passed the challenge-response verification. No events will be delivered.
  • Active — the endpoint is verified and receiving events.

Best Practices

  • Always validate the X-Improvado-Signature header by computing HMAC-SHA256 of the request body with your signing secret and comparing the result.
  • Respond to webhook deliveries with a 2xx status code promptly. Long-running processing should be done asynchronously.
  • Use the X-Improvado-Idempotency-Key header to deduplicate events in case of retries.
  • Keep your endpoint URL publicly accessible and ensure TLS (HTTPS) is configured.

What a webhook notification looks like

When an event fires, Improvado sends a message (called a "POST request") to your URL containing a JSON payload — a structured block of data. Here's what that looks like in practice:

Example: an extraction is paused

{
  "id": "A1B2C3D4E5F6789012345678ABCDEF90",
  "type": "extraction_paused",
  "timestamp": "2026-04-06 11:39:46.752000",
  "data": {
    "agency_title": "My Agency",
    "workspace_title": "Main Workspace",
    "order_id": "654321"
  }
}
  

Each field tells your system something useful:

  • id — a unique ID for this specific notification (useful for deduplication)
  • type — what happened (e.g. extraction_pausedload_completed)
  • timestamp — when it happened
  • data — the details: which workspace, which extraction, etc.

If you're using a no-code tool like Zapier, this is what you'd see in your trigger step:

__wf_reserved_inherit

From here, you can route the event to Slack, send an email, trigger another workflow, and more — all without code.

Integrating webhooks with Make

<strong>Use Case: Integrating webhooks with Make</strong>

Make (formerly Integromat) is a no-code automation platform that lets you connect Improvado webhook events to hundreds of other apps — like Slack, Google Sheets, Notion, Jira, and more — without writing any code. This section walks you through setting up your first Make scenario using an Improvado webhook as the trigger.

Step 1. Create a webhook module in Make

Log in to your Make account at make.com and click Create a new scenario.

Click the + button to add your first module, search for Webhooks, and select Custom webhook under Triggers.

__wf_reserved_inherit

Click Create a webhook, give it a name (e.g., "Improvado — Extraction paused"), and click Save.

__wf_reserved_inherit

Make generates a unique webhook URL and starts listening for incoming data. Click Copy address to clipboard — you'll need this URL in the next step.

__wf_reserved_inherit

Register the URL in Improvado

Verify the endpoint

__wf_reserved_inherit
__wf_reserved_inherit

Step 4. Map the payload and build your automation

Once the first event arrives, Make will automatically detect the payload structure and let you map fields to other actions. Here's an example of what the incoming data looks like inside Make:

{
  "id": "A1B2C3D4E5F6789012345678ABCDEF90",
  "type": "extraction_paused",
  "timestamp": "2026-04-06 11:39:46.752000",
  "data": {
    "agency_title": "My Agency",
    "workspace_title": "Main Workspace",
    "order_id": "654321"
  }
}
  

You can use any of these fields in downstream modules. For example:

__wf_reserved_inherit
__wf_reserved_inherit

Tips for working with Make:

  • Test before going live: Use Make's built-in Run once button to send a test event from Improvado and verify your scenario works end-to-end before turning it on permanently.
  • Filter by event type: Add a Filter module between the webhook and your action to only trigger when type equals a specific value (e.g. load_completed).
  • Handle retries gracefully: Make may replay events. Use the id field in the payload to detect and skip duplicates in your downstream apps.
  • Free plan limits: Make's free tier allows 1,000 operations per month. If you expect high event volume, check your Improvado subscription frequency and plan accordingly.

Was this article helpful?