What you can automate
Zapier connects Everybooking to thousands of other apps without code. Everybooking tells Zapier the moment something happens to a deal, and Zapier can look up customers, add or update them, and put new inquiries on your board.
Triggers
A trigger starts a Zap the moment it happens.
| Trigger | When it fires |
|---|---|
| Deal Marked Booked | A deal's status is set to Booked. This is a pipeline status. On its own it doesn't mean a payment was taken, inventory was reserved or an invoice was created. |
| Deal Marked Lost | A deal's status is set to Lost. The reason given is included. |
| Deal Needs a Reply | A deal moves to Reply Now, meaning the customer is waiting on your team. |
| Deal Waiting on Customer | A deal moves to Waiting on Customer. |
| Deal Assigned | A team member is put in charge of a deal. |
| Deal Unassigned | A deal's assignee is removed. |
One change to one deal sends one event, even when the deal has many emails on it.
Searches
- Find Customer: by email or phone number. Any email or number on file counts, and phone numbers can be in any common format. It never matches by name.
- Find Deal: by deal ID (
4900ordeal_4900), or the most recently active deal for a customer's email.
Actions
Create Inquiry puts an inquiry from somewhere else (a website form, Typeform, Jotform, Google Forms) on your board, quietly:
- It finds or creates the customer with the same rules as Create or Update Customer below: email first, then phone, never by name. It only fills empty name fields, so a form never renames a customer you already have.
- If that customer has an open card with activity in the last 21 days, the inquiry is added to it as a note. A snoozed card wakes up. A card that was waiting on the customer comes back to Reply Now, which fires the usual "Deal Needs a Reply" trigger. Otherwise a new Reply Now card is made, marked as from Zapier. Making a new card fires no trigger.
- The submission (message, date, party size, which form) is written on the card as a note, in your business's time zone, under the name of the person whose API key connected Zapier. A date or party size the form gave as free text ("next summer", "about 40") is kept in the note as written instead of refusing the inquiry.
- It never calls the AI, drafts a reply, starts a quote, reserves anything, or sends anything to the customer or your staff. Someone on your team answers it like a phone message.
- Pass the form tool's own entry ID as Form Entry ID. A repeat of the same entry from the same person then returns the same card. Without it, the same contact and message within 10 minutes count as a repeat.
- Up to 60 inquiries per business per clock hour. Beyond that Everybooking asks Zapier to wait, and Zapier retries the step for a while. A step that still fails shows in your Zap history, where you can replay it.
Create or Update Customer looks for the customer by email, then by phone:
- No match: the customer is created.
- Matched by email: the fields you fill in are changed (first name, last name, company, job title).
- Matched by phone alone: only empty fields are filled. Two people can share a phone (an office line, a family number), so stored details are kept.
- A stored email is never changed. If the customer already has a phone number, a new number is added to their contact list instead of replacing it.
- Nothing is written, and the step stops with a message, when the email belongs to one customer and the phone to another (unless that customer has the phone on file too, as on a family line), or when the phone belongs to a customer who has a different email. It never guesses or merges two people.
- Found by phone alone: a new email is only added when a name comes with it and the name matches.
- It sends no email or text and charges nothing. If Zapier retries the step, it finds the customer it already made instead of creating a second one.
- It always looks for the customer before creating one, so a separate Find step isn't needed.
Not available through Zapier: charging cards, refunds, payments, sending messages, or creating quotes and bookings.
Who can connect
- Only the business owner or an admin can connect. A key from anyone else is refused with a message saying so.
- Zapier works on every Everybooking plan. Your Zapier plan decides how many Zaps and steps you can run.
How to connect
- In Everybooking, go to Settings → API keys and make a key named "Zapier". Copy it.
- In Zapier, create a Zap and search for Everybooking.
- When Zapier asks you to sign in, paste the key. The connection shows as your business name and your email.
- Choose a trigger, search or action, map the fields, test, and turn the Zap on.
Your connections are listed in Everybooking under Manage → Integrations (the Zapier card). Each Zap that starts with an Everybooking trigger shows there with its status, when Everybooking last delivered to it, and the last problem, if any. Your Zaps' other steps and their run history are in your Zapier account; Everybooking can't see them.
When access changes
If the person who connected Zapier stops being an owner or admin, or their API key is deleted or expires, Everybooking stops sending to their Zaps. Each one shows as Paused from its next event on, and Zapier asks you to reconnect the next time a search or action runs. To fix it, reconnect the Everybooking account in Zapier with a current admin's key, then turn each Zap off and on.
Troubleshooting
| What you see | What it means | What to do |
|---|---|---|
| "Only the business owner or an admin can connect" | The key belongs to someone who isn't an owner or admin. | Use an admin's key. |
| "API token expired" or "Invalid API token" | The key was deleted or expired. | Make a new key and reconnect in Zapier. |
| Paused (on the Integrations page) | The connection lost access. | Reconnect, then turn the Zap off and on. |
| Stopped after repeated failures | 10 delivery attempts in a row failed (retries count). | Turn the Zap off and on. |
| A Zap ran twice for one event | Rare: a delivery reached Zapier but the reply didn't come back, so it was sent again. Zapier doesn't filter repeats for instant triggers. | If it matters, add a step that skips an Event ID you've already handled. |
| A test shows "is_sample: true" | Zapier tests with up to three of your recent deals, or a made-up example if you have none. | Expected. Real events start when the Zap is on. |
| "belong to two different customers" or "has a different email" | The email and phone point at two different people. | Use one of them, or correct or merge the customers in Everybooking first. |
Example Zaps
- Deal Marked Booked → Google Sheets: add a row (deal ID, contact, estimated value).
- Deal Needs a Reply → Slack or Microsoft Teams: post in the team channel.
- Deal Assigned → Asana, Trello or Todoist: create a task for the assignee.
- Form submission (Typeform, Jotform, Google Forms) → Everybooking: Create Inquiry, with the form's entry ID mapped to Form Entry ID.
- Customer details changed in another system → Everybooking: Create or Update Customer.
If you use Everybooking's built-in HubSpot connection, you don't need a Zap to copy deals to HubSpot.
API reference
These are the endpoints the Everybooking app on Zapier calls. They are documented for transparency and for anyone building a similar connection.
Base URL: https://everybooking.com/api/v1/zapier. Every request sends Authorization: Bearer <API key>. A
signed-in browser session is refused here. A key whose person isn't the business owner or an admin gets 403.
| Method and path | Purpose | Answer |
|---|---|---|
GET /auth_test |
Connection test | {account: {id, subdomain, display_name}, user: {id, email, name}} |
POST /subscriptions {hook_url, event_type} |
Subscribe a Zap | 201 new or 200 existing: {id, event_type, active, created_at}. hook_url has to be a https://hooks.zapier.com/... address; event_type is one of the six event types below. The same hook again returns the existing subscription. |
DELETE /subscriptions/:id |
Unsubscribe a Zap | {id, status: "deleted" or "already_removed"}. Only this business's Zapier subscriptions. |
GET /recent_events?event_type= |
Trigger samples | Up to 3 envelopes from your own recent deals (or 1 made-up example), each with is_sample: true and an event_id starting sample-. |
GET /customers/search?email=&phone= |
Find Customer | 0 or 1 customer, with matched_by (email or phone). 409 when the email and phone point at different customers, or the phone belongs to a customer with a different email. A phone-shaped value in email is treated as a phone. |
POST /customers {email, phone, first_name, last_name, company, job_title} |
Create or Update Customer | The customer plus created (201 created, 200 found). An email match overwrites the given fields; a phone-only match fills empty ones. 409 as above. 422 without a usable email or phone. |
GET /deals/search?deal_id= or ?customer_email= |
Find Deal | 0 or 1 deal. |
POST /inquiries {email, phone, first_name, last_name, message, event_date, party_size, source_label, reference_id} |
Create Inquiry | {id, deal_id, deal_reference, deal_url, deal_status, deal_created, duplicate, customer_id, customer_name, customer_email, customer_created, matched_by}. 201 new card; 200 added to an open card or a repeat (duplicate: true). 409 as for customers. 422 without a usable email or phone. event_date is read as YYYY-MM-DD and party_size as a whole number of 1 or more; anything else is kept in the note as given. 429 with Retry-After past 60 in a clock hour. message is kept up to 5,000 characters. |
Errors are JSON {"error": "<plain sentence>"}. 401 means the key is missing, invalid or expired; the Zapier app
treats the owner/admin 403 the same way. Either way Zapier asks the user to reconnect. 429 and 5xx are
temporary.
Events and webhooks
The same events go to Zapier, to webhooks you set up yourself, and to Everybooking's built-in CRM connections.
Event types
deal.booked, deal.lost, deal.reply_now, deal.waiting_on_customer, deal.assigned, deal.unassigned.
Event payload
{
"schema_version": "1.0",
"event_id": "8a1c4c2e-0d0e-4a55-9f0e-6d1b2f8c7a10",
"event_type": "deal.booked",
"account_id": 52,
"timestamp": "2026-10-07T15:04:05Z",
"data": {
"deal_id": 4900,
"legacy_deal_id": "a1b2c3d4e5f6",
"contact_email": "[email protected]",
"contact_name": "Sample Guest",
"deal_status": "booked",
"inquiry_type": "new_inquiry",
"deal_value": 2400.0,
"classification_id": 12345,
"email_id": 67890,
"subject": "Weekend in June",
"source": "email",
"schema_version": "1.1",
"previous_status": "reply_now",
"reason": null,
"changed_by": { "id": 7, "name": "Pat Admin", "email": "[email protected]" }
}
}
- event_id: unique per event, and the same on every retry of that event. It's also sent as the
X-Everybooking-Event-Idheader. In Zapier it's the record'sid. Zapier doesn't de-duplicate instant triggers on it, so a receiver that can't act twice should check it. Two different events about the same deal have different ids. - timestamp: when the event happened, ISO-8601 in UTC. Retries keep the original time.
- is_sample (Zapier only):
falseon real deliveries,trueon setup samples. - data.deal_id: a number for businesses on Everybooking's current deal records (inner
schema_version"1.1", withlegacy_deal_idandsourcepresent). Older records send a 12-character text code (innerschema_version"1.0"). Treat it as text if you store it. - data.deal_value: the pipeline's estimated value, a number or
null. It is not money collected. There's no currency field; amounts are in the business's own currency. - Optional or empty:
contact_email,contact_name,deal_value,subject,reason(set for Lost),changed_by(nullwhen the system made the change), and on cards that came in without an email,classification_id,email_idandinquiry_type. - Assignment events carry
previous_assignee_id,assignee {id, name, email}andchanged_byinstead ofprevious_statusandreason. - Webhooks you set up yourself are signed:
X-Everybooking-Signature: sha256=<HMAC-SHA256 of the raw body with the endpoint secret>. Zapier subscriptions don't need it, because the Zapier hook address is private to the Zap.
Delivery
- Sent from a background job right after the change is saved. Up to 5 attempts in all on
5xx,408,429and network errors, with growing waits, always with the sameevent_id. After the 5th, that event is dropped. - Delivery is at least once. A receiver should de-duplicate on
event_id; exactly-once delivery isn't promised. - Not retried: other
4xx, and3xx(redirects are never followed). For a webhook you set up yourself a3xxcounts as delivered; for a Zapier hook it counts as a failure. 410 Gonefrom a Zapier hook deletes that subscription (Zapier has dropped the Zap).- After 10 failed attempts in a row (retries count) a destination stops receiving until it's switched back on (for Zapier, by turning the Zap off and on).
- Addresses on private or internal networks are refused, both when saved and again at send time.
- A Zapier subscription pauses at its next event when its API key is revoked or expired, or its person is no longer an owner or admin. Webhooks you set up yourself aren't tied to a person or key and keep running.