Managing WordPress sites shouldn’t mean living inside your browser tab, refreshing dashboards, and manually updating spreadsheets every time something happens. You’ve got better things to do.
That’s why we just shipped Webhooks; a new feature in your InstaWP dashboard that lets your account automatically notify any external service the moment a site is created or deleted. No polling. No manual steps. No “hey, did someone spin up that client site yet?” messages in Slack.
It just works. In real time.
Table of Contents
What exactly are webhooks?
Before we get into the InstaWP side of things, let’s quickly cover the concept itself.
A webhook is a way for one application to send real-time data to another application the moment something happens. Instead of App B constantly asking App A “hey, anything new?” every few seconds (that’s called polling, and it’s wasteful), App A simply pushes a message to App B the instant there’s something worth knowing.

Think of it like the difference between refreshing your email inbox every 30 seconds versus getting a push notification when a new email lands. Same outcome, wildly different efficiency.
Technically, a webhook is just an HTTP POST request sent to a URL you specify, carrying a payload of data about what just happened. The receiving end, whether it’s Slack, a Google Sheet, your CRM, or a custom API, processes that data and takes action. No middleman, no delay.
Now, InstaWP brings this concept directly into your WordPress site management workflow.
From your InstaWP dashboard, you can configure webhooks under Settings → Webhooks. You pick which events should trigger a notification and you provide a destination URL where InstaWP should send the data.

You also get full visibility into what’s happening. Every webhook in your dashboard tracks total deliveries, error rate, and average response time. The Event Deliveries tab logs every single request with its status, HTTP code, and timestamp — so if something fails, you’ll know exactly what went wrong and when.
Why this matters for your workflow
If you’re a solo developer managing a handful of sites, this is a nice convenience. If you’re running an agency with 10, 50, or 100+ client sites, this is a workflow game-changer.
Here’s why.
- No more “is the site ready yet?” messages. When a developer on your team creates a new staging site, your project manager doesn’t need to be told. A Slack notification drops into your channel automatically, with the site name, URL, and timestamp. The team stays synced without anyone lifting a finger.
- Client onboarding gets smoother. Using InstaWP for WaaS or client demos? Every time a demo site spins up from a shared snapshot, a webhook can push that data, email, site URL, snapshot name, straight into your CRM, Google Sheets, or onboarding pipeline. You stop losing track of who launched what.
- Audit trails build themselves. Need a record of every site created and deleted in your account for compliance, billing, or internal reporting? Pipe webhook data into a spreadsheet or database and you’ve got a live audit trail without writing a single line of custom code.
- You can automate the boring stuff. Site created? Trigger a welcome email through your email provider. Site deleted? Update your internal billing system. Webhook + Zapier/Make gives you the glue to connect InstaWP to virtually anything; no middleware, no custom API integrations, no DevOps overhead.

How to Set-up Webhooks on InstaWP
Setting up your first webhook is straightforward.
Head to Settings → Webhooks in your InstaWP dashboard. You’ll see a clean interface with everything you need.
Click + Create Webhook and you’ll walk through a simple 3-step wizard.

Step 1: Pick your events.
Choose what should trigger a notification: Site Created (site.create), Site Deleted (site.delete), or both. Select what matters for your workflow.

Step 2: Configure the destination.
Give it a name so you can identify it later. Paste in the endpoint URL where you want notifications sent. Choose your request type, JSON or x-www-form-urlencoded. You can optionally add a secret key for signature verification, which is recommended if you’re building anything production-grade.

Step 3: Review and save.
Confirm your settings and hit Create. Your webhook goes live immediately.
That’s it. The next time a site event happens, InstaWP will POST the event data to your endpoint. You can monitor deliveries from the webhook detail page, every request is logged with its event type, delivery status, response time, and HTTP status code.
Real-world setup: InstaWP → Slack notifications
Here’s a practical example that takes about 5 minutes to wire up end-to-end.
The goal: Get a Slack message in your team channel every time a site is created or deleted on InstaWP.
Here’s the flow: InstaWP fires an event → the Cloudflare Worker catches it → reformats it into Slack’s Block Kit format → POSTs it to your Slack channel. Total cost: zero. Total setup time: under 5 minutes.
Step 1: Create a Slack App
Go to api.slack.com/apps → click “Create New App” → choose “From scratch” → give it a name like “InstaWP Notifications” → pick your workspace.

Step 2: Enable Incoming Webhooks
Inside your new app’s settings, go to Features → Incoming Webhooks in the left sidebar → toggle it On.

Step 3: Add a Webhook to a Channel
Scroll down and click “Add New Webhook to Workspace” → pick the channel you want notifications in (e.g. #site-notifications) → click Allow.

Slack will generate a URL that looks like https://hooks.slack.com/services/T.../B.../xxx. Copy it.
Step 4: Now you have two paths
This Slack webhook URL expects a JSON body like {"text": "your message"}. Since InstaWP sends a different JSON structure, you still need that middleware layer. Your cleanest options are:
Path A: Zapier/Make: Use the Zapier URL as InstaWP’s endpoint (same as before). In the Zapier action step, instead of choosing the Slack integration, you can use a “Webhooks by Zapier” action that POSTs to your new Slack App webhook URL with the formatted message.
Path B : Cloudflare Worker (free, ~20 lines): This is honestly the cleanest for this use case. Want me to write the exact code? You’d just deploy it once, paste the Worker URL into InstaWP, and it runs forever for free.
Here, we’re going with the Path B.
Step 1: Go to dash.cloudflare.com → sign up or log in (free account works).
Step 2: In the left sidebar, click Workers & Pages → Create Application

Step 3: Give it a name like instawp-to-slack → click Deploy (it deploys a “Hello World” placeholder first).
Step 4: Click Edit Code → delete everything → paste the code below → click Deploy.
Here’s the Worker code:
export default {
async fetch(request) {
const SLACK_WEBHOOK_URL = "Your Webhook URL"
if (request.method !== "POST") {
return new Response("InstaWP-to-Slack bridge is running", { status: 200 });
}
try {
let payload;
const contentType = request.headers.get("content-type") || "";
if (contentType.includes("application/json")) {
payload = await request.json();
} else if (contentType.includes("x-www-form-urlencoded")) {
const formData = await request.formData();
payload = Object.fromEntries(formData.entries());
} else {
const text = await request.text();
try { payload = JSON.parse(text); } catch { payload = { raw: text }; }
}
// Extract from InstaWP's nested payload structure
const event = payload.event || "unknown";
const site = payload.data && payload.data.site ? payload.data.site : {};
const siteName = site.name || "N/A";
const siteUrl = site.url || "N/A";
const domainUrl = site.domain_url || "";
const magicLogin = site.magic_login_url || "";
const triggeredAt = payload.triggered_at || new Date().toISOString();
let emoji = "🔔";
let label = "Event";
if (event.includes("create")) {
emoji = "🟢";
label = "Site Created";
} else if (event.includes("delete")) {
emoji = "🔴";
label = "Site Deleted";
}
// Build a rich Slack message
const blocks = [
{
type: "section",
text: { type: "mrkdwn", text: emoji + " *" + label + "* on InstaWP" }
},
{
type: "section",
fields: [
{ type: "mrkdwn", text: "*Site name:*\n" + siteName },
{ type: "mrkdwn", text: "*URL:*\n<" + siteUrl + "|" + domainUrl + ">" }
]
},
{
type: "context",
elements: [
{ type: "mrkdwn", text: "⏰ " + triggeredAt }
]
}
];
// Add magic login button only for site.create events
if (event.includes("create") && magicLogin) {
blocks.push({
type: "actions",
elements: [
{
type: "button",
text: { type: "plain_text", text: "🔑 Magic Login" },
url: magicLogin,
style: "primary"
},
{
type: "button",
text: { type: "plain_text", text: "🌐 Visit Site" },
url: siteUrl
}
]
});
}
const slackMessage = { blocks: blocks };
const slackResponse = await fetch(SLACK_WEBHOOK_URL, {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify(slackMessage)
});
if (!slackResponse.ok) {
return new Response("Slack delivery failed", { status: 502 });
}
return new Response("OK", { status: 200 });
} catch (err) {
return new Response("Error: " + err.message, { status: 500 });
}
}
};Note : Replace YOUR/SLACK/WEBHOOK_URL with your actual Slack webhook URL (the https://hooks.slack.com/services/T03DK79N9EZ/B0B00BMGA2J/70JnRlfl... one from your screenshot).
Step 5: Click Deploy. You’ll get a Worker URL like https://instawp-to-slack.yourname.workers.dev — copy it.
Now, go to InstaWP → Settings → Webhooks → + Create Webhook.
Select events: check both Site Created and Site Deleted.
On the “Configure destination” step, fill in: Destination name → “Slack notifications”, Endpoint URL → paste your Cloudflare Worker URL, Request Type → choose json (this is important — the Worker expects JSON).
Review and hit Create destination.
What’s in the webhook payload?
When InstaWP fires a webhook, it sends useful data about the event including the email address, site URL, site ID, admin credentials, auto-login hash, and more. For shared snapshot webhooks, you also get the snapshot slug and marketing opt-in status; perfect for tracking demo engagement.
The payload is sent as an HTTP POST, and you can choose between JSON and form-encoded formats depending on what your receiving service expects.
Monitoring and debugging
Every webhook in your dashboard shows a real-time overview with three key metrics: total deliveries, error rate, and average response time. You also get activity charts showing delivery volume and response time trends over the past week.
The Event Deliveries tab gives you a detailed log of every single delivery; which event triggered it, whether it succeeded or failed, how many attempts were made, the response time, the HTTP status code, and an exact timestamp. If something breaks, you’ll know exactly when and why.
Ideas to get you started
Here are a few ways teams are already using InstaWP webhooks:
- Agency teams are routing site creation events to Slack or Microsoft Teams so the whole team stays in the loop without interrupting anyone’s flow.
- Freelancers are logging every demo site spinup into Google Sheets via Make, creating an automatic lead tracker for prospects who try their shared snapshots.
- WaaS operators are connecting webhooks to their billing systems; when a client’s site is created, the billing entry is generated automatically.
- DevOps teams are feeding webhook data into monitoring dashboards, giving them a real-time view of sandbox and staging activity across the organization.
Get started today
Webhooks are available now in your InstaWP dashboard under Settings → Webhooks. There’s no extra cost, no plan upgrade required — it’s part of the platform.
If you haven’t tried it yet, create your first webhook in the next 2 minutes. Your WordPress workflow just got a whole lot more connected.