How do I use Webhooks?
Contents of this article
What is a webhook?
Webhooks are a high-performance alternative to email alerts, designed for users who need to process change notifications with structured data. When Visualping detects a change, it "pushes" a JSON payload directly to your endpoint, allowing you to instantly trigger workflows in platforms like Zapier, n8n, Slack, or custom internal tools.
The payload provides everything you need to automate your response:
Direct Links: Access to screenshots, HTML snapshots, and processed PDF files.
Context: Timestamps, job descriptions, and labels.
Structured Data: AI-generated summaries, important alert flag and custom data extraction for specific fields.
How to set up a webhook
Step 1:
Copy the webhook's URL
Obtain a webhook URL from the platform you intend on using Visualping with. Some commonly used apps are:
Step 2:
Enable Webhook notifications
Open the Notifications tab in the job settings and click on Webhook.
Step 3:
Connect the Webhook
Paste the Webhook URL into the URL field. If the URL is not valid, an inline warning will appear and the Test button will remain disabled until a valid URL is entered. Once a valid URL is detected, click Test to push a test JSON payload to the third-party app and confirm the connection.
Green check mark - Success
Red X mark - Fail
Pro Tip: To scale your automation, use bulk edit to apply a single webhook URL to multiple jobs simultaneously. You can also save your URL as a preset and set it as the workspace default to automatically configure webhooks for every new job you create.
Webhook variables
All standard variables are included in every alert. However, conditional fields are omitted from the payload entirely if they are not active for that specific job.
Key | Data Type | Description |
job_id | integer | Unique identifier for the monitoring job. |
workspace_id | integer | Unique identifier for the workspace containing this job (present in business plans) |
workspace_name | string | The workspace name (present in business plans) |
url | string (url) | The URL being monitored for changes |
description | string | User-defined job name or description for this monitoring job |
datetime | string | Timestamp when the change was detected (UTC format) |
original | string (url) | URL to the original (baseline) screenshot image |
current | string (url) | URL to the current screenshot image |
preview | string (url) | URL to a preview image highlighting the visual differences |
html_previous | string (url) | URL to the HTML snapshot of the previous page version |
html_current | string (url) | URL to the HTML snapshot of the current page version |
change | string | Percentage of visual change detected (e.g., '10 %') |
view_changes | string (url) | Link to view the detected changes in the dashboard |
job_settings | string (url) | Link to the job settings in the dashboard |
visual_changes | string (url) | Shareable link to view visual changes |
text_changes | string (url) | Shareable link to view text changes |
added_text | string | Semicolon-separated list of text content that was added to the page |
removed_text | string | Semicolon-separated list of text content that was removed from the page |
advancedfiletype_original_previous | string (url) | URL to download the original PDF file from the previous check. (Omitted if the job is not monitoring a PDF). |
advancedfiletype_original_current | string (url) | URL to download the original PDF file from the current check. (Omitted if the job is not monitoring a PDF). |
labels | string | Comma-separated list of user-defined labels. (Omitted if no labels are assigned). |
summarizer | string | AI-generated summary of the detected changes |
important | string | Indicates if the change is flagged as important by AI (values: "true" or "false"). Requires text input in "Alert me when:" or "Any important changes". |
good_feedback | string (url) | Link to submit positive feedback on the change detection |
bad_feedback | string (url) | Link to submit negative feedback on the change detection |
extracted_data | object (JSON) | Custom data extracted from the page. Requires a Solutions plan. Omitted if not configured. |
Webhook payload example
Below is an example of the JSON payload sent to your webhook endpoint.
{
"job_id": 12344567,
"workspace_id": 12345,
"workspace_name": "my workspace",
"url": "https://www.visualping.io/",
"description": "Example job name",
"datetime": "Thu Apr 24 2025 17:10:41 GMT+0000 (Coordinated Universal Time)",
"original": "https://vp-public-assets.s3.us-west-2.amazonaws.com/emails/onboarding-emails/text-change-alerts.png",
"current": "https://vp-public-assets.s3.us-west-2.amazonaws.com/emails/onboarding-emails/text-change-alerts.png",
"preview": "https://vp-public-assets.s3.us-west-2.amazonaws.com/emails/onboarding-emails/text-change-alerts.png",
"html_previous": "https://vp-public-assets.s3.us-west-2.amazonaws.com/emails/onboarding-emails/text-change-alerts.html",
"html_current": "https://vp-public-assets.s3.us-west-2.amazonaws.com/emails/onboarding-emails/text-change-alerts.html",
"change": "10 %",
"view_changes": "https://visualping.io/autologin?redirect=%2Fjobs%2F5922158%3Fmode%3Dtext",
"job_settings": "https://visualping.io/autologin?redirect=%2Fjobs%2F5922158%3Fmode%3Dtext",
"visual_changes": "https://visualping.io/diff/123456789?disableId=1234567890abcde&mode=visual",
"text_changes": "https://visualping.io/diff/123456789?disableId=1234567890abcde&mode=text",
"added_text": "Added text",
"removed_text": "Removed text",
"advancedfiletype_original_previous": "https://vp-public-assets.s3.us-west-2.amazonaws.com/emails/onboarding-emails/text-change-alerts.pdf", // Omitted if the job is not monitoring a PDF.
"advancedfiletype_original_current": "https://vp-public-assets.s3.us-west-2.amazonaws.com/emails/onboarding-emails/text-change-alerts.pdf", // Omitted if the job is not monitoring a PDF.
"labels": "⚽ label1, 🎁 label2",
"summarizer": "Example change summary",
"important": "false", // Requires text input in "Alert me when:" or "Any important changes" to return "true" or "false", otherwise "no analyzer call".
"good_feedback": "https://visualping.io/feedback?id=0&jobId=0&vote=GOOD&processId=0&source=Webhook",
"bad_feedback": "https://visualping.io/feedback?id=0&jobId=0&vote=BAD&processId=0&source=Webhook",
"extracted_data": {
"product_price": "$99.99",
"stock_status": "In Stock",
"last_updated": "2024-05-01"
}, // Omitted if custom data extraction is not enabled
}Note: The extracted_data object supports flexible structures, including nested keys and arrays, depending on your specific data requirements. Contact us for more details.
Frequently Asked Questions
Why are some variables, like labels or advancedfiletype, missing from my webhook payload?
To keep the data payload clean and efficient, Visualping omits certain fields entirely if they aren't applicable to the specific job. For example, PDF download links only appear if you are monitoring a PDF file, and the labels key is only included if you have assigned labels to that job. If a field is missing, it simply means there was no data to report for that specific attribute.
How can I include custom website data (like price or stock status) in my webhook?
You can use the extracted_data variable to send specific data points from a webpage directly to your endpoint. This feature allows for structured JSON output of specific fields (supporting nested keys and arrays). This is a premium feature available on our Solutions plan. If you need custom data extraction, please contact our support team to have it configured for your jobs.


