Home › Integrations › Zapier & Make

Send every call to Zapier or Make

AskMuse works with Zapier and Make through webhooks. You paste one address into your dashboard, and every finished call, phone booking, moved or cancelled booking and new lead is posted to it the moment it happens — signed, over HTTPS. The webhook is on every plan, including $39.99, and it takes about 10 minutes to set up.

Before you start

What you need

✓An AskMuse account, on any plan. The outgoing webhook has no plan gate: the $39.99 line sends exactly what the top plan sends.
✓A Zapier or Make account. They are separate services with their own prices; Zapier's webhook trigger is on its paid plans. AskMuse is not an app listed inside either one — it sends them a webhook, which both accept.
✓Your own phone. One test call gives Zapier or Make a real sample to map fields from.
Step 1

Get an address from Zapier or Make

1Zapier. Create a Zap › for the trigger choose Webhooks by Zapier › Trigger event Catch Hook › Continue. Copy the webhook URL it shows you — it starts with https://hooks.zapier.com/hooks/catch/.
1Make. Create a new scenario › add the Webhooks module › Custom webhook › Add › name it AskMuse › Save › Copy address to clipboard. Leave the scenario open and press Run once, so Make is listening when the first sample arrives.
Step 2

Paste it into your AskMuse dashboard

Open Settings › Integrations, find Outgoing webhook, paste the address and press Save webhook. It must start with https://. Once it is saved, the same row shows your signing secret (keep it for the signature check below) and a Test ping button.

Step 3

Send a real sample

Test ping posts {"event":"test_ping"} from your browser. It proves the address answers, but it has no fields to map. For a real sample, call your AI number from your own phone, give your name and what you need, and hang up: a call.ended event arrives seconds later. Then press Test trigger in Zapier (in Make, the Run once bubble fills in). Every field below can now be mapped.

What AskMuse sends

6 events, one shape

Every event is one JSON POST with the same envelope. Events sent from the website side (a booking moved or cancelled from your dashboard or the customer's own link, and both lead events) also carry "locale": "en-CA" or "fr-CA" beside business. The field names never change with the language.

{
  "event": "booking.created",
  "business": "Harbor Roofing",
  "data": {
    "confirmation": "ALG-4821",
    "starts_at": "2026-10-02T09:00:00-04:00",
    "caller_name": "Jon Smith",
    "callback_number": "+16475551234",
    "notes": null
  }
}

call.ended

A call to your AI number ended.

outcome
booked, lead, call (questions only) or missed
summary
what she captured, joined with " · " — usually the caller's name, number and what they wanted
duration_s
the call's length in seconds
booked_for
the booked time (ISO 8601, UTC), or null
urgent
true when she marked the call urgent
intake
only for trades that ask intake questions: the answers, as codes

This event has no separate name or number field. For those as their own fields, use booking.created or lead.created.

booking.created

She booked a caller in, on a call.

confirmation
the booking's confirmation code
starts_at
the start time (ISO 8601, with its UTC offset)
caller_name
the caller's name
callback_number
the caller's number
notes
a note on the booking, when there is one (often empty)

booking.moved

A booking was moved, from your dashboard or the customer's own link.

confirmation
the booking's confirmation code
customer
the customer's name, or their number when there is no name
was / when
the old and new time, written out in your language
starts_at / previous_starts_at
the new and old time (ISO 8601)

booking.cancelled

A booking was cancelled.

On a call
confirmation, starts_at, caller_name
From your dashboard or the customer's link
confirmation, customer, when (written out), starts_at

lead.created and lead.escalated

A new lead reached your Leads inbox, or a website visitor asked for a person.

lead_id
the lead's id in AskMuse
name, phone, email
what the person gave
wants
what they asked for
source / page
the door it came through, in words and as a code
call_id
set when the lead came from a call
submitted_at
when it arrived (ISO 8601)
reason
why they asked for a person (lead.escalated only; empty otherwise)

Leads from your website chat and the call-back card are posted within seconds; leads from other doors are posted by a sweep that runs once a day. Lead events go out only while a notification email is set in Settings.

Health practices

Privacy mode sends less, on purpose

For a dental office, clinic, physio, chiro, massage, vet, pharmacy or other health practice, AskMuse leaves out what the caller said. summary, notes, reason, need, wants, transcript and message arrive as empty strings — the fields stay, so your mapping keeps working — and an escalation's reason says to open the dashboard. Names, numbers, times and outcomes still go.

Security

Check that it really came from AskMuse

Every event carries 2 headers, signed with your signing secret:

X-ALG-Timestamp: 1790000000
X-ALG-Signature: sha256=<hex HMAC-SHA256(secret, timestamp + "." + raw body)>

Take the body exactly as it arrived, compute the same HMAC, compare, and refuse a timestamp more than 5 minutes old so a copied request cannot be replayed. In Node:

const crypto = require("crypto");

function fromAskMuse(rawBody, headers, secret) {
  const ts = headers["x-alg-timestamp"];
  const sig = String(headers["x-alg-signature"] || "");
  if (!ts || Math.abs(Date.now() / 1000 - Number(ts)) > 300) return false;
  const want = "sha256=" + crypto.createHmac("sha256", secret)
    .update(ts + "." + rawBody).digest("hex");
  return sig.length === want.length &&
    crypto.timingSafeEqual(Buffer.from(sig), Buffer.from(want));
}
✓In Zapier and Make, the address is the secret. Keep it private. The check needs the raw body, so it is easiest on your own server or in n8n; a step that rebuilds the JSON will not match.
✓One try, 5 seconds. Each event is sent once, with a 5-second limit, and redirects are not followed. If your endpoint is down, that event is not sent again — the call or booking is still in your dashboard.
✓Test ping is not signed. It comes from your browser, not from our server.
3 examples

Zaps and scenarios people build first

Every call as a row in Google Sheets

Zapier: Catch Hook › Filter: event exactly matches call.ended › Google Sheets: Create Spreadsheet Row, mapping outcome, summary, duration_s and booked_for to your columns. Make: Custom webhook › a filter on event › Google Sheets: Add a Row.

AskMuse also has Google Sheets built in (Settings › Integrations). Use this when you want your own columns or your own sheet layout.

Lead and booked calls in a Slack channel

Zapier: Catch Hook › Filter: event is call.ended AND outcome is lead or booked › Slack: Send Channel Message — for example "New {{outcome}} call: {{summary}}". Make: the same filter, then Slack: Create a Message.

Slack is built in too; a Zap lets you pick which calls post and what the message says.

Every booking into your CRM

Zapier: Catch Hook › Filter: event is booking.created › your CRM's Find or Create Contact with caller_name and callback_number › add a note or activity with starts_at, confirmation and notes. Add a second path for lead.created (name, phone, email, wants) to catch web leads too. Make: a Router after the webhook, one route per event.

Rather we wire it with you?

It is part of the free setup — start here and say which tool you want your calls in.