There are two ways to connect Kwazi with Zapier:
- The Kwazi app for Zapier (in development; until it is published, Kwazi shares an invite link). Search for Kwazi when you build a Zap: no addresses or secrets to copy. See below.
- Webhooks by Zapier, Zapier’s built-in app: works today, on a Zapier plan that includes it. See the rest of this page.
The names of Zapier’s menus below can differ slightly as Zapier changes its editor.
The Kwazi app for Zapier
Connect your site once: its address (https://…), your WordPress username and an application password (Kwazi → Integrations → API & keys). By default only administrators may use one; others can be allowed there.
| Kind | Name | What it does |
|---|---|---|
| Trigger (instant) | New Contact, Updated Contact, New Organization | contact.created, contact.updated, organization.created |
| Trigger (instant) | New Marketing Subscriber, Marketing Unsubscribe | marketing.subscribed, marketing.unsubscribed: keep an email tool in step with who said yes |
| Trigger (instant) | New Form Submission | form.submitted, optionally for one form; answers also as contact_email, … |
| Trigger (instant) | New Appointment, Appointment Changed | appointment.booked; confirmed, declined, moved, place changed, cancelled, completed or no-show, as you choose |
| Action | Create or Update Contact | Creates, or updates the contact with the same email address (only filling in what’s empty, or replacing) |
| Action | Update Contact, Add Note to Contact, Create Organization, Book Appointment | |
| Search | Find Contact, Find or Create Contact | By exact email address |
- Instant triggers make a webhook in Kwazi when you turn the Zap on, named Zapier: …, and delete it when you turn it off. You need the right to manage Integrations. Every Zap with a Kwazi trigger uses one of the 20 webhooks a site can have. Every message is checked against that webhook’s secret; Zapier ignores anything not signed by Kwazi.
- Actions act as your WordPress user: Kwazi checks every right and field, and its errors show in Zapier as they are. Changes show in the timeline and audit log under the name of the application password.
- Zapier must be able to reach your site: a site on
localhostor behind a login wall doesn’t work. - The app’s code is in
zapier/of Kwazi’s repository (spec).
Start a Zap when something happens in Kwazi
Example: every new booking goes to a Google Sheet.
- In Zapier, create a Zap. Trigger: Webhooks by Zapier → Catch Hook. Copy the webhook URL Zapier shows (
https://hooks.zapier.com/hooks/catch/…). - In WordPress: Kwazi → Integrations → Webhooks → New webhook. Name: Zapier – new bookings. Address: the Zapier URL. Events:
appointment.booked. Create it. - Click Send test event in Kwazi, then Test trigger in Zapier. Zapier now knows the fields:
event,id,data__appointment__starts_at,data__appointment__service__name… - Add the action (e.g. Google Sheets → Create Spreadsheet Row) and map the fields.
Kwazi sends the event within seconds, signed. Zapier’s Catch Hook does not check the signature; if the Zap does something sensitive, add a Code by Zapier step that checks X-Kwazi-Signature (see webhooks) with your signing secret, or keep the Zapier URL secret.
Create or update a contact from Zapier
Example: a new lead from a Facebook Lead Ad becomes a Kwazi contact.
- In WordPress, make an application password for a user who may edit contacts, e.g. named Zapier.
- In the Zap, add Webhooks by Zapier → POST:
- URL:
https://your-site.example/wp-json/kwazi/v1/contacts - Payload type:
json - Data:
first_name,last_name,email,phone, andsource=Facebook - Basic auth:
your-username|abcd EFGH ijkl MNOP qrst UVWX(Zapier separates username and password with|)
- URL:
- Test the action. Kwazi answers
201with the new contact.
If a contact with that email address already exists, Kwazi answers 409 kwazi_duplicate with the existing contact’s id in details.id. To update instead, send a Custom Request with method PATCH to /contacts/{id}: Kwazi only fills empty values, unless you add ?mode=overwrite. Every change is in the contact’s timeline and in the audit log, with the name Zapier.
Polling instead of webhooks
When a webhook is not possible, a Webhooks by Zapier → Retrieve Poll trigger can read GET /contacts?updated_since=… with Basic auth. Zapier recognises items by their id. See pagination and polling.
