WorkestraDocs
PlatformCalendar & Scheduling

CRM & Marketing Integrations

Push bookings to Salesforce as Events and HubSpot as Meetings, route by CRM owner, accept Slack `/book` commands, and track conversions in GA4 + Meta Pixel.

Workestra's scheduling already runs against the built-in CRM — every booking creates a contact, optionally a deal, and lives on the same Postgres as the rest of your sales data. This page is about pushing bookings to external CRMs and marketing tools that you may already use.

The four primary integrations covered here:

  • Salesforce — booking → SFDC Event, owner mapping, owner-based routing
  • HubSpot — booking → HubSpot Meeting engagement, contact + deal association
  • Slack/wx book <user> slash command, plus inbound notifications
  • GA4 + Meta Pixel — conversion event firing from the public booking page

Plus secondary pages on Zapier, browser extensions, and the Outlook add-in and Gmail add-on.

Integrations directory

Screenshot needed — /settings/integrations directory with Salesforce + HubSpot tiles available

Salesforce

What gets pushed

Workestra eventSalesforce result
Booking confirmedNew Event record on the SFDC contact / lead — date, time, subject, description, location, attendees
Booking rescheduledExisting Event is updated with the new time
Booking cancelledExisting Event is deleted (or marked closed, configurable)
Recap pushed (from Notetaker)Note attached to the SFDC contact / deal with the summary + action items

Each push also writes an entry to Workestra's audit log so you can see "this booking pushed to SF at this timestamp."

Owner mapping

By default, the host on the Workestra booking link is mapped to the SFDC user with the same email. So if alice@acme.com is the booked host, the resulting SFDC Event.OwnerId is the SFDC user with that email.

For mismatched emails (e.g. host's Workestra email is alice@workestra.io but SFDC is a.smith@acme.com), set the override on /settings/integrations/salesforceUser mapping.

Owner-based routing

A routing form route can use Salesforce lookup as its action. It pulls the matched SFDC owner for an inbound contact and routes to that owner's booking link automatically.

Configure on a routing form route:

  1. Set the action to Salesforce lookup
  2. Pick the SFDC object to query (Lead, Contact, Account, Opportunity)
  3. Pick the field to match against the form answer (e.g. "match the form's email field against Lead.Email")
  4. Pick the field on the matched record to use as the routing key (e.g. Lead.Owner.Email)
  5. Pick the booking link to fall back to if no match is found

When a respondent submits the form, Workestra queries SFDC live, finds the owner, and routes them to that owner's link. Latency is typically 200–800ms.

What's NOT supported (yet)

  • Deeper SFDC sync beyond Event records — no Lead create, no Opportunity stage update
  • Custom field mapping beyond the standard Event fields
  • Sandbox vs production toggle — connect to either, but separate workspaces
  • AppExchange managed package — not published yet; the integration is OAuth-only

The substrate ships with this release. Live OAuth client IDs (SALESFORCE_CLIENT_ID, SALESFORCE_CLIENT_SECRET) need to be configured in workspace settings before connect works — Workestra ships with example values for staging, but production workspaces need their own SFDC connected app.

Connecting

/settings/integrations/salesforceConnect. OAuth flow against your SFDC org. Pick the user mapping. Pick the object scope (Events alone, or Events + Notes for recaps). Save.

HubSpot

What gets pushed

Workestra eventHubSpot result
Booking confirmedNew Meeting engagement on the HubSpot contact — type, time, attendees, notes
Booking rescheduledEngagement updated in place
Booking cancelledEngagement marked cancelled
Deal auto-created from bookingEngagement associated with that HubSpot deal too
Recap pushedNote engagement on the contact with summary + action items

Contact and deal association

HubSpot finds-or-creates the contact by email. If the workspace has CRM auto-create-deal turned on for the booking link, Workestra creates the deal in its own CRM first, then mirrors the deal into HubSpot — single source of truth on the Workestra side, copy on the HubSpot side. Edits in HubSpot don't sync back (one-way push).

Owner-based routing (HubSpot lookup)

Same pattern as Salesforce. A routing form route with action = HubSpot lookup pulls the contact's owner from HubSpot and routes to that owner's booking link.

FieldWhat it does
ObjectContact or Company
Match fieldForm field to match against (typically email for contact, domain for company)
Owner fieldhubspot_owner_id resolved to the owner's email
Target booking linkThe link to route to (Workestra finds the link owned by the matched HubSpot owner)

Connecting

/settings/integrations/hubspotConnect. OAuth, pick scopes, pick the user mapping, save. Same caveat about live OAuth client IDs.

Slack /wx book

When the workspace has Slack connected (see Slack Integration), a slash command becomes available:

/wx book @alice
/wx book alice@acme.com

This DMs the user with their booking link URL, copyable. Most useful inside an internal Slack — "I need 30 min on Alice's calendar" without leaving the keyboard.

For external Slack workspaces (Slack Connect), the command resolves Workestra users by email — useful for shared-channel scheduling.

The /wx book slash command requires the Workestra Slack app to be installed in your Slack workspace. Ask your Slack admin to install via /settings/integrations/slack. If you see "command not found," the app isn't installed yet.

GA4 + Meta Pixel

The public booking page (/book/<slug>) and the embed widget can fire conversion events to Google Analytics 4 and Meta's Pixel automatically.

Configure in /settings/integrations/analytics:

PropertyWhat it does
GA4 Measurement IDG-XXXXXXXXXX. When set, page views and meeting_booked events are sent.
GA4 Conversion event nameDefault: meeting_booked. Overrideable.
Meta Pixel IDWhen set, Lead and Schedule events are sent.

The events fire on the booking confirmation step — after slot pick, after form submit, after payment if required. Event payload includes booking ID, slug, attendee email (hashed for Meta), and any UTM parameters captured at booking.

For embed widgets, the parent page receives a workestra:event_scheduled CustomEvent with the same payload — wire your own GTM trigger off that. See Embed Widget for details.

Webhooks (the hidden CRM integration)

For any CRM not listed here, the outbound webhook is your friend. Every booking lifecycle event fires a webhook to a URL you configure. See Booking LinksWebhooks tab and Zapier.