Every confirmed booking, reported to Google Ads, Meta, TikTok, Microsoft Ads and GA4 from the server

TapTime turns a table reservation or an appointment into a conversion the ad platforms can learn from: sent server-side with the guest's click id, deduplicated against your pixel, and delivered to your own systems by webhook, postback or API. Included with reservations and appointments from 669 PHP a month.

14 days freeNo card requiredConnect Google, Meta and TikTok in 10 minutes

Ad click or link gclid · fbclid · UTM tags
Booking confirmed evt_… · value · attribution
  • Google AdsClick conversion upload
  • MetaConversions API
  • TikTokEvents API
  • Microsoft AdsUET Conversions API
  • GA4Measurement Protocol
  • Tag ManagerdataLayer on the page
  • WebhookSigned JSON, any 2xx
  • PostbackTracker URL with macros
  • REST APIBookings and event feed
One confirmed booking, nine destinations, one event id.

What is booking conversion tracking?

Booking conversion tracking is reporting each confirmed reservation or appointment back to the platform that brought the guest, so Google Ads, Meta, TikTok, Microsoft Ads and Google Analytics 4 measure bookings instead of page views and optimise towards people who actually book. TapTime does it from the server, joined to the ad click id, with one event id per booking so a pixel on the page never double-counts it.

In short

  • Conversions are sent from TapTime's server when a booking is confirmed, so ad blockers, a closed tab or a slow phone cannot lose them.
  • Google Ads gets the click conversion with the gclid, gbraid or wbraid; Meta and TikTok get a server event on their Conversions and Events APIs; Microsoft Ads gets a UET event with the msclkid; GA4 gets a Measurement Protocol event joined to the visitor's session.
  • Every booking carries one event id. Your pixel or conversion tag fires with the same id, and the platforms keep exactly one.
  • Only bookings guests made themselves count. Phone bookings and walk-ins typed in by staff are never reported as conversions.
  • Webhooks, server-to-server postbacks and a REST API deliver the same booking, with its attribution, to your CRM, tracker, Zapier or your own code.
  • Guests’ orders and new loyalty members can be reported too — as a purchase with its value and items, and as a sign-up — each once.
  • Telegram, Slack, Microsoft Teams, Google Chat, Discord and Mattermost get every new booking request, order or reward as a readable message; Zapier, Make, n8n and Pipedream get it as data for any workflow.
  • There is no extra fee. Conversion tracking, webhooks, postbacks, chat alerts, automation and the API are part of every module.
9
destinations for one confirmed booking
1
event id shared by server and browser
30 days
the guest's campaign is remembered
8
delivery attempts over about a day

Why most restaurant and salon ads optimise for the wrong thing

Ad platforms learn from whatever you report as a conversion. If all they see is a page view, they find people who look. If they see confirmed bookings, they find people who book.

01

“The pixel says 12 bookings. The board says 31.”

A browser tag only fires if the guest's browser lets it: no ad blocker, no strict iOS privacy setting, tab still open when the confirmation loads. Every booking it misses is a signal Google and Meta never learn from.

02

“My conversions include the phone calls my staff typed in.”

A booking your receptionist entered by hand did not come from an ad. When it is counted as a conversion, the campaign looks better than it is and the budget goes to the wrong keywords.

03

“I cannot tell which campaign actually filled the terrace.”

Without the campaign, click id and referrer saved on the booking itself, every reservation looks the same on the board. The Instagram post, the Google ad and the partner hotel all get the same credit, which is none.

How a booking becomes a conversion in TapTime

Four steps, none of them yours to babysit. The whole path runs on TapTime's side, from the click to the delivery log.

  1. 1

    The guest arrives with a click id or a tagged link

    Google Ads adds gclid, gbraid or wbraid to the link. Meta adds fbclid, Microsoft msclkid, TikTok ttclid. Your own links carry utm_source, utm_medium, utm_campaign, utm_term and utm_content. An affiliate tracker's id arrives as click_id, clickid or subid. TapTime reads them once, on your booking page, your menu or the booking widget on your own site, and keeps them for 30 days on the guest's device.

  2. 2

    The booking is confirmed

    Automatically, or by your staff approving a pending request later. Either way, the moment the booking becomes confirmed TapTime writes a booking event and one delivery row per destination, in the same database transaction as the booking itself. A delivery can never be lost between two systems.

  3. 3

    Each destination gets the event with one shared id

    Google Ads receives a click conversion upload with the click id and the conversion value. Meta and TikTok receive a server event on their Conversions and Events APIs. Microsoft Ads receives a UET custom event through its Conversions API. GA4 receives a Measurement Protocol event joined to the visitor's client id and session id. Your webhooks receive signed JSON, your tracker receives its postback URL with the macros filled, and the API event feed adds a row. The event id is the same everywhere.

  4. 4

    Failures retry, and you can see every delivery

    A destination that answers with an error is retried after 1, 5 and 15 minutes, then 1, 3, 6 and 12 hours, eight attempts in all. The Integrations screen shows the last 25 deliveries per destination with the platform's own answer, and a Send again button for the one you want to push right now.

Nine ways a confirmed booking leaves TapTime

Connect one or all of them from Integrations in the panel. Each has a Test connection or Send test button, a delivery log, and a step-by-step guide in the help centre. Orders and loyalty sign-ups can be reported to the same platforms.

Google Ads conversion tracking

Two halves you can use together. A browser tag (Conversion ID and label) fires on the confirmation page. A server upload sends the conversion through the Google Ads API with the gclid, gbraid or wbraid from the booking link, even when the browser tag was blocked. Google accepts uploads for clicks from the last 90 days. Both carry the same order id, so a booking is one conversion.

Set up Google Ads conversions

Meta Conversions API (Facebook and Instagram)

A server event per confirmed booking, sent to your pixel's dataset with the fbclid, the Meta browser cookies, the guest's IP and browser, and, unless you switch it off, the guest's email and phone hashed with SHA-256 before they leave TapTime. Choose Schedule, Lead or Purchase as the event name. Test with a test event code from Events Manager and watch it arrive.

Set up Meta conversions

TikTok Events API

A server event per confirmed booking, sent to your TikTok pixel with the ttclid from the booking link, the guest's IP and browser, and, unless you switch it off, their email and phone hashed with SHA-256 before they leave TapTime. Choose Schedule, Lead, Submit form or Place an order as the event name. TapTime also puts your pixel on the booking page, so the browser and the server event share one id and TikTok keeps one.

Set up TikTok conversions

Microsoft Ads (Bing) conversions

Two halves, like Google Ads. TapTime puts your UET tag on the booking page and fires a custom event when a guest books. Add the Conversions API token and the server reports what the tag cannot see: bookings confirmed after the guest left, guests' orders and new loyalty members, credited by the msclkid or by hashed email and phone. Microsoft accepts server events for the last 7 days.

Set up Microsoft Ads conversions

Google Analytics 4 booking events

A booking_confirmed event per booking through the Measurement Protocol, with value and currency, the visitor's GA client id and the per-property session id, so the booking joins the visit and the campaign that led to it. Mark it as a key event in GA4 and it counts as a conversion in every report and in Google Ads bidding.

Connect Google Analytics 4

Webhooks for your CRM, Zapier, Make, n8n or Pipedream

An https endpoint per system, subscribed to the booking, order and loyalty events you choose. Each request is JSON with the whole booking, order or loyalty card and its attribution, signed with HMAC-SHA256 so you can verify it came from TapTime. Any 2xx is success, 410 stops the retries, and every event has an id you can deduplicate on.

Add a webhook

Server-to-server postbacks for trackers and affiliates

Paste the postback URL an ad network, affiliate platform or tracker gave you and insert placeholders: {click_id}, {event}, {status}, {value}, {currency}, {party_size}, {booking_id}, {utm_source}, {utm_campaign}, {gclid}, {fbclid} and more. GET or POST. The tracker's click id reaches the booking when your link carries click_id, clickid or subid.

Configure a postback

REST API for bookings and events

Bearer keys, read-only or read-write, 50 requests a minute per key. List reservations and appointments filtered by status, branch, date range or updatedSince, fetch one booking, change a status from your own system, or poll the ordered event feed with a cursor to stay in sync. Status changes made through the API fire the same webhooks and conversions as the board.

Create an API key

Analytics tags on the page

Your TapTime page carries your own GA4 measurement id, GTM container and Meta Pixel in a security-isolated analytics sandbox. When a guest books, the page pushes booking_confirmed or booking_requested to the allowlisted dataLayer with the booking's type, value and event id, so analytics tools can trigger on it. Order and payment pages receive no venue tags, and the booking widget on your own website does the same for your site's tags.

Add tags to your page

Not just bookings: orders and loyalty count too

The same outbox that reports bookings reports what happens after the guest sits down. Switch each goal on per platform, in the connection’s “What to report” section.

Orders as purchases

A guest’s order from your page, a table’s QR code, takeaway or delivery is sent once, when it reaches you: a GA4 purchase with its items, a Meta or TikTok Purchase with its contents, a Microsoft Ads purchase event, a Google Ads upload to its own conversion action. The value is what was ordered, without the tip. Sales rung up at the register are never reported — no ad caused them.

Loyalty sign-ups

A customer’s first stamp on a program is a sign-up: GA4 sign_up, Meta and TikTok CompleteRegistration matched by their hashed phone, a Microsoft Ads sign-up event, Google Ads only when they came from an ad click. Once per member and program, however many cards they fill.

Every event, everywhere else

Webhooks, postbacks, chat alerts, automation platforms and the REST API receive all eleven events: a booking requested, confirmed, cancelled, marked no-show or completed; an order placed or paid; a member joining, a stamp, a reward earned and redeemed.

Browser-side or server-side conversion tracking: which one does a restaurant or salon need?

Both, and TapTime runs both. The browser tag gives the platforms the visit; the server event guarantees the booking is counted. Here is what changes when the server side is connected.

Situation Pixel or tag on the page only TapTime server-side + your tag
Ad blockers and strict browser privacy The conversion is silently lost Sent from the server regardless of the guest's browser
Guest closes the tab before the confirmation loads Lost Sent when the booking is saved, not when a page renders
Staff confirm a pending request the next morning No page loads, no conversion Sent at the moment of confirmation, whoever confirmed
Phone bookings and walk-ins Counted if staff use the same page Never reported; only bookings the guest made online
Both the tag and the server fire Two conversions for one booking One shared event id; the platform keeps one
Conversion value Whatever the tag hard-codes Service price, or your value per booking, optionally multiplied by party size
Which campaign gets the credit Depends on cookies surviving Click id and UTM tags saved on the booking, remembered 30 days

How does TapTime stop a booking being counted twice?

Each booking has exactly one conversion event id, an HMAC of the booking that TapTime returns to the page in the booking response and sends from the server. The browser event carries it as the Google Ads transaction id and as the event id for Meta, TikTok and the Microsoft UET tag; the server event carries the same value. Those four platforms deduplicate on it, and GA4 gets no browser event at all while the server integration is connected. A booking confirmed, cancelled and confirmed again sends a second webhook, because your system should know, but it stays one conversion.

Platform Server side Browser side Dedup key
Google Ads uploadClickConversions with the click id gtag conversion with send_to orderId / transaction_id
Meta Conversions API, events up to 7 days old fbq track with eventID event_id
TikTok Events API with the ttclid ttq.track with event_id event_id
Microsoft Ads Conversions API, events up to 7 days old uetq push with event_id event_id
GA4 Measurement Protocol with client and session id only when the server side is not connected one source at a time

What does a TapTime booking webhook look like?

A POST with a JSON body: the event’s id, type and time, whether it is a test, and the whole booking (or order, or loyalty card), including the guest, the time, the table or service, the status and where it came from. Four headers identify and sign it.

TapTime-Event
the event type: booking.confirmed, order.placed, loyalty.reward_issued and eight more
TapTime-Event-Id
the event id, the same on every retry, for deduplication
TapTime-Delivery
the id of this particular delivery attempt
TapTime-Signature
t=<unix time>,v1=<hex HMAC-SHA256 of "t.body"> with your whsec_ secret
  • Answer with any 2xx status within the request timeout and the delivery is marked delivered.
  • Any other answer, or no answer, is retried up to eight times over about a day with growing delays.
  • Answer 410 Gone and TapTime stops retrying that event to that endpoint.
  • Redirects are not followed. Endpoints must be https in production and may not point at private or loopback addresses.
  • Up to 50 endpoints, chats and automation connections per company. The signing secret can be revealed again or rotated by the owner; rotating stops the old one at once.
Read the webhook guide
POST · application/json · booking.confirmed
{
  "id": "evt_9f3c2a7e1b",
  "type": "booking.confirmed",
  "createdAt": "2026-09-12T19:02:11+03:00",
  "test": false,
  "data": {
    "booking": {
      "kind": "reservation",
      "id": 4821,
      "status": "confirmed",
      "startsAt": "2026-09-12T20:00:00+03:00",
      "partySize": 4,
      "guest": { "name": "Maria K.", "email": "…", "phone": "…" },
      "attribution": {
        "channel": "widget",
        "utmSource": "instagram",
        "utmMedium": "paid_social",
        "utmCampaign": "summer_terrace",
        "gclid": null,
        "fbclid": "IwAR2…",
        "landingUrl": "https://example-bistro.com/?fbclid=…"
      }
    }
  }
}
Verify the signature (Node.js)
const [t, v1] = req.headers["taptime-signature"]
  .split(",").map(part => part.split("=")[1]);
const expected = crypto
  .createHmac("sha256", process.env.TAPTIME_WEBHOOK_SECRET)
  .update(`${t}.${rawBody}`)
  .digest("hex");
const valid = crypto.timingSafeEqual(
  Buffer.from(expected), Buffer.from(v1));

How do server-to-server postbacks work for booking conversions?

A postback is the tracker's own URL, called by TapTime's server on each event with the booking's details substituted into placeholders. It is how affiliate networks, CPA platforms and click trackers count a conversion without any code on the page. Your booking link carries the tracker's click id as click_id, clickid or subid; TapTime stores it with the booking and puts it back into the URL when the booking is confirmed, cancelled or marked as no-show.

Read the postback guide
Postback URL with placeholders · GET or POST
https://tracker.example/postback
  ?cid={click_id}
  &event={event}
  &status={status}
  &payout={value}
  &cur={currency}
  &guests={party_size}
  &src={utm_source}

Available placeholders

  • {event}
  • {event_id}
  • {status}
  • {booking_id}
  • {booking_type}
  • {order_id}
  • {customer_id}
  • {conversion_id}
  • {value}
  • {currency}
  • {party_size}
  • {branch_id}
  • {timestamp}
  • {utm_source}
  • {utm_medium}
  • {utm_campaign}
  • {utm_term}
  • {utm_content}
  • {gclid}
  • {fbclid}
  • {msclkid}
  • {ttclid}
  • {click_id}

Alerts in the chat your team already uses — and no-code automation

Choose which events a chat hears: a new booking request to confirm, a new order, a cancellation, a reward earned. Each arrives in seconds as a short message in the language you pick, with who, when, how many and how much, and a link back to the panel.

Messengers

Telegram

A bot you create with @BotFather posts into a group, a channel or one topic of a group. The panel finds the chat for you.

Slack

An incoming webhook posts formatted messages to any channel.

Microsoft Teams

A Workflows webhook posts an Adaptive Card with the details and a button to the panel.

Google Chat

A space webhook posts each event into the space.

Discord

A server webhook posts a colour-coded embed; mentions are always switched off.

Mattermost

An incoming webhook on your cloud or self-hosted server.

Set up chat alerts

Automation platforms

Zapier

Catch Hook trigger: add each booking to Google Sheets, each order to your accounting, each new member to Mailchimp.

Make

Custom webhook trigger for scenarios with routers, filters and 2,000+ apps.

n8n

Webhook node on n8n Cloud or your own server — the data never has to leave your infrastructure.

Pipedream

HTTP trigger for workflows with your own Node.js or Python steps.

Automation platforms receive the same signed JSON as webhooks. Apps built for them can subscribe and unsubscribe through the REST API, so users switch triggers on without pasting a URL.

Connect an automation platform

What can the TapTime REST API do?

Enough to run your own reporting, sync a CRM or a till, or confirm bookings from another system, without a partner programme or a sales call. Keys are created under Integrations, shown once, stored as a SHA-256 hash, and revoked in one click.

Request Returns
GET /v1/company The company the key belongs to
GET /v1/company/reservations Reservations, filtered by status, branchId, from, to or updatedSince; up to 100 per page
GET /v1/company/appointments Appointments with the same filters
GET /v1/company/reservations/{id} One booking, in the webhook payload shape, with its attribution
POST /v1/company/reservations/{id}/status Confirm, cancel, mark no-show, complete, seat or reopen (write keys); fires the same webhooks and conversions
GET /v1/company/orders Orders with their lines and totals, filtered by status, source, fulfilment, date or paidSince
GET /v1/company/loyalty/cards Members’ loyalty cards; programs and rewards have their own lists
GET /v1/company/events?after={cursor} Every booking, order and loyalty event in order, optionally only some types; poll it with the last cursor to stay in sync
POST /v1/company/webhooks Subscribe a URL to events, and DELETE it to unsubscribe — REST hooks for Zapier, Make, n8n and Pipedream apps
Confirmed reservations changed since a date
curl "https://api.tapti.me/v1/company/reservations?status=confirmed&updatedSince=2026-09-01T00:00:00Z" \
  -H "Authorization: Bearer tt_live_…"
Stay in sync with the event feed
curl "https://api.tapti.me/v1/company/events?after=eyJpZCI6OTk4fQ&limit=100" \
  -H "Authorization: Bearer tt_live_…"
Full API reference Read the API guide

What attribution data is stored with every booking?

Every reservation and appointment keeps the campaign that brought the guest, sanitised and stored on the booking itself. It is shown on the booking's detail panel, summarised on the dashboard as Where bookings come from, included in CSV and Excel exports, and sent with every webhook, API response and conversion.

Campaign

  • utm_source
  • utm_medium
  • utm_campaign
  • utm_term
  • utm_content

Ad click ids

  • gclid
  • gbraid
  • wbraid
  • fbclid
  • msclkid
  • ttclid
  • click_id / clickid / subid

Analytics identity

  • GA4 client id
  • GA4 session id per property
  • Meta fbp cookie
  • Meta fbc (built from fbclid when the cookie is missing)

Context

  • channel: web, widget or app
  • landing URL
  • referrer
  • IP address and user agent

The guest page reads the campaign once, on the address it was opened at, keeps it for 30 days, and a later visit without tags does not erase it. Last campaign wins. Bookings staff type in by hand, and orders rung up at the till, have no campaign, which is correct: the guest did not arrive through a link.

Read the attribution guide

What counts as a conversion, and what never does?

Counts as a conversion

  • A reservation or appointment the guest made online, on your TapTime page or in the booking widget on your own site, once it is confirmed.
  • A pending request your staff approve later. The conversion is sent at the moment of approval.
  • A booking with a Google click id, for Google Ads server uploads. Bookings without one are skipped for Google, never failed, and still go to Meta, GA4 and your webhooks.

Never counted

  • Bookings your staff typed in from a phone call or a walk-in. They have no click and no campaign.
  • A second conversion for the same booking, however many times it is reopened and confirmed again.
  • A cancelled or no-show booking. Those go out as webhook and postback events with their own status, not as conversions.

Built for businesses that pay for bookings

If you buy clicks that end in a reservation or an appointment, this is the missing half of your ad account.

Conversion tracking glossary

The terms the platforms use, in one place, with what they mean for a booking.

Conversion
An action you told an ad platform to count and optimise for. For TapTime it is a confirmed reservation or appointment the guest made online.
Server-side conversion tracking
Reporting the conversion from a server to the platform's API instead of from a script in the guest's browser, so it is not lost to ad blockers, privacy settings or a closed tab.
gclid, gbraid, wbraid
Google's click identifiers, added to the ad's landing URL. gclid is the classic one; gbraid and wbraid are the privacy-preserving variants from iOS app campaigns and web campaigns. Google Ads can only credit an uploaded conversion to a click it recognises by one of them.
fbclid, fbp, fbc
Meta's click id in the URL, the browser id cookie the pixel sets, and the click cookie built from fbclid. All three help the Conversions API match a booking to the ad click.
Google Ads click conversion upload
The Google Ads API method (uploadClickConversions) a server uses to report a conversion for a specific click, with the click id, time, value and an order id used for deduplication.
ttclid, msclkid
TikTok's and Microsoft's click identifiers, added to the ad's landing URL by auto-tagging. The TikTok Events API and the Microsoft Conversions API use them to credit a booking to the ad click that earned it.
Meta Conversions API (CAPI)
Meta's server-to-server endpoint for events. Each event carries an event_id; when the pixel sends the same event with the same id, Meta keeps one.
GA4 Measurement Protocol
Google Analytics 4's HTTP endpoint for server events. An event joins the visitor's session when it carries the client id and session id from the GA cookies and the session is less than about 72 hours old.
Key event
GA4's name for a conversion. An event only counts as a conversion in GA4 reports and in Google Ads bidding after you mark it as a key event under Admin → Events.
Event deduplication
Sending one shared identifier with the browser event and the server event so a platform that receives both counts a single conversion.
UTM parameters
utm_source, utm_medium, utm_campaign, utm_term and utm_content: tags you add to your own links so a booking remembers the post, newsletter, flyer or partner that brought the guest.
Webhook
An HTTP request TapTime sends to a URL you own whenever something happens, with the full details in JSON and a signature to verify it.
Postback (server-to-server pixel)
A URL provided by an ad network or tracker that the advertiser's server calls on each conversion, with the tracker's click id and the payout filled into placeholders.
HMAC-SHA256 signature
A keyed hash of the request body and a timestamp, computed with a shared secret. Recomputing it on your side proves the request came from TapTime and was not altered.
At-least-once delivery
The guarantee that every event is delivered, with the trade-off that a retry can deliver one twice. That is why every TapTime event carries an id to ignore duplicates by.
Offline conversion
A conversion that happens outside the browser session, such as staff confirming a request the next day. TapTime sends it at the moment of confirmation with the original click id.

Included. Not an add-on, not a higher tier.

Conversion tracking, webhooks, postbacks, chat alerts, automation and the REST API come with every module: booking events with Table reservations from 669 PHP a month per location and Appointments from 669 PHP a month per location, order events with the QR menu, loyalty events with Loyalty. There is no per-event fee and no usage cap on deliveries.

Every module has its own 14-day free trial, no card to start, monthly billing, no contract. Stop paying and the module is paused after a short grace period; nothing is deleted.

Questions ad managers and developers ask

Does TapTime send conversions from the server or from the guest's browser?

Both. The server sends the conversion the moment the booking is confirmed, through the Google Ads API, the Meta Conversions API and the GA4 Measurement Protocol. Your browser tag or pixel can fire too; it carries the same event id, so the platforms count one conversion.

Do I need Google Tag Manager to track booking conversions?

No. TapTime talks to Google Ads, Meta and GA4 directly from the server. Tag Manager is only useful if you want to trigger other tools from the booking_confirmed event the page pushes to the dataLayer.

What do I need from Google Ads to enable server-side uploads?

A conversion action, your Customer ID, the Conversion action ID (the number after ctId= in the action's address) and API access: a developer token, an OAuth client id and secret, and a refresh token. Your agency or developer can issue them. Without API access you can still use the browser tag.

Why does a delivery say “No Google ad click on this booking”?

The guest did not arrive through a Google ad, so the booking link had no gclid, gbraid or wbraid. Google only accepts uploaded conversions for clicks it recognises, so that booking is skipped for Google Ads rather than retried. It still goes to Meta, GA4 and your webhooks.

How does the Meta Conversions API match a booking to the ad?

With the fbclid from the link, the Meta browser cookies (fbp and fbc), the guest's IP address and browser, and, unless you switch Send hashed email and phone off, the guest's email and phone number hashed with SHA-256 before they leave TapTime.

How does TapTime report bookings to TikTok?

Through the TikTok Events API, from the server, the moment a booking is confirmed. TapTime also puts your TikTok Pixel on the booking page, so you do not have to add it there. Both events carry the same event id and TikTok keeps one. Matching uses the ttclid from the link, the guest's IP address and browser, and, unless you switch it off, their email and phone hashed with SHA-256.

What do I need to track conversions in Microsoft Ads (Bing)?

The UET tag ID is enough to start: TapTime puts the tag on your booking page and fires your event action when a guest books. Add the Conversions API token from the tag's settings and the server reports bookings confirmed after the guest left, guests' orders and new loyalty members too. Microsoft enables the Conversions API account by account, and only accepts events from the last 7 days.

Which conversion value is sent?

For appointments, the service price. For table reservations, the value per booking you set, an average spend, optionally multiplied by the party size. Leave it empty and conversions are sent without a value.

Will bookings my staff type in count as ad conversions?

No. Only bookings guests made themselves online are reported as conversions. Phone bookings and walk-ins entered by staff never inflate your ad results. They do still appear in exports and on the board.

What happens when a booking is confirmed, cancelled and confirmed again?

Your webhooks and postbacks receive every change, each with its own event id and status, because your system should know. Google Ads, Meta and GA4 receive one conversion per booking, ever.

How do I verify that a webhook really came from TapTime?

Read the TapTime-Signature header, which looks like t=1726128000,v1=<hex>. Compute HMAC-SHA256 over the string t.body with your signing secret and compare it to v1 using a constant-time comparison. Reject the request if it differs or if t is older than you are comfortable with.

Can a webhook go to Zapier, Make or n8n?

Yes. Create a catch or custom webhook in the tool, paste its address as the endpoint and press Send test so the tool learns the fields. The booking's guest details, time, status and attribution are all in the JSON.

How long is a campaign remembered before the booking?

30 days on the guest's device. A guest can open your menu from an Instagram ad on Monday and book on Thursday; the booking still carries that campaign. A later visit without tags does not erase it, and a later visit with a different campaign replaces it.

Does the booking widget on my own website track conversions too?

Yes. The embed script reads your site's UTM tags, click ids and GA and Meta cookies and hands them to the booking, so a widget booking is credited to the ad that brought the visitor to your site. It also pushes taptime_booking_confirmed to your site's dataLayer and can fire your page's own GA4 and Meta tags.

Is there a rate limit or a cost per API call or per webhook?

API keys are limited to 50 requests a minute each, and a company can hold up to 10 active keys and 20 webhook or postback endpoints. There is no fee per call, per event or per conversion; everything is included in the reservations and appointments subscriptions.

What if I stop paying for the module?

After a short grace period the module is paused and the booking page shows a temporarily unavailable note. Nothing is deleted, integrations included; pay again and deliveries resume for new bookings.

Is any of this a separate subscription?

No. Google Ads, Meta and GA4 conversions, webhooks, postbacks and the REST API are part of the Table reservations module from 669 PHP a month and the Appointments module from 669 PHP a month, per location, with a 14-day free trial and no card to start.

Can TapTime report orders and loyalty sign-ups as conversions?

Yes. In each connection’s “What to report” section, switch on guests’ orders (sent as a purchase with value and items: GA4 purchase, Meta Purchase, or a second Google Ads conversion action) and new loyalty members (GA4 sign_up, Meta CompleteRegistration). Each is sent once per order and once per member and program. Sales rung up at the register are never reported.

How do I get new bookings and orders in Telegram or Slack?

Open Integrations → Notifications, choose the messenger, paste the bot token (Telegram) or webhook URL (Slack, Teams, Google Chat, Discord, Mattermost), pick the events and the language and press Send test. From then on every chosen event arrives as a short message with a link to the panel. The address and token are stored encrypted.

Does TapTime work with Zapier, Make, n8n and Pipedream?

Yes, with no plugin to install. Create a catch hook in the platform, paste its URL under Integrations → Automation, choose the events and press Send test so the platform learns the fields. Every booking, order and loyalty event then starts your workflow, signed like our webhooks. Apps can also subscribe themselves through POST /v1/company/webhooks.

Give your ads the one signal that matters: the booking.

Connect Google Ads, Meta, TikTok, Microsoft Ads and GA4 in ten minutes, add a webhook for your CRM, and watch the delivery log fill up. Free for 14 days, no card, cancel anytime.

14 days free No card required Cancel anytime

Track bookings as conversions Start free for 14 days