Run your workspace
Integrations
Integrations let your agent learn from data living outside the
Pitchbar database (Notion, Google Docs) and let leads flow into your
existing systems (CRMs, Slack, webhooks). Open
/app/integrations to manage them.
Notion
Connect once via OAuth. Pitchbar requests read access to the workspaces you select during the OAuth flow โ we never get global access. After connecting:
- The Add source modal exposes a Notion picker (page or database).
- Each picked page becomes a Notion source and is ingested via
IngestNotionPageJob. - Re-syncs are manual (per-source Reindex) โ we don't poll Notion on a schedule.
- The OAuth token is encrypted at rest using Laravel's
encryptedcast.
Google Docs
Same shape as Notion. OAuth-once, pick docs from a Drive picker, ingest
via IngestGoogleDocJob, manual re-sync per source. Tokens
encrypted at rest. Disconnect at any time โ disconnecting revokes our
access immediately and prevents further syncs.
Slack
Slack is for outgoing notifications:
- New leads โ posts to a configurable channel.
- Routed conversations โ pings when the inbox needs a human.
- Daily digest โ opt-in summary of conversation volume + new gaps.
Connect via OAuth, pick the channel, save. The bot posts under the integration's name, never as a user.
Webhooks (outgoing)
Pitchbar can POST to your endpoint when events happen. Configure under
/app/integrations/webhooks. Events available:
| Event | Fires when |
|---|---|
lead.captured | The widget lead form was submitted (the only event currently shipped). |
The other event names you might see in older roadmap notes
(conversation.started, conversation.message,
conversation.routed, lead.updated) are
on the roadmap but not yet wired. Add additional events by
extending SignedDispatcher.
Each webhook has a signing secret. Pitchbar HMACs the body with that
secret and sends the digest in the X-Pitchbar-Signature
header โ verify it on receipt. The lead-captured dispatcher
(app/Services/Webhooks/SignedDispatcher.php) is
single-attempt by design (the lead is already persisted; a failed
webhook delivery surfaces in the workflow run log rather than
blocking the visitor's submission). Workflow-step webhooks
(DispatchWebhookJob) retry up to 3 times via Laravel's
queue retry mechanism.
See Outgoing webhooks for the payload shapes.
HubSpot / Salesforce / Zapier
The webhooks above are the universal escape hatch โ they work with anything that can receive HTTP POSTs. Native HubSpot and Salesforce integrations are on the roadmap; in the meantime, point a webhook at a Zapier catch-hook and let Zapier route to your CRM.
Disconnecting
Each integration's row has a Disconnect button. We:
- Revoke our OAuth token with the upstream provider (Notion / Google).
- Mark the local
integration_connectionrow as inactive. - Stop syncing โ sources backed by the integration enter an "orphaned" state and stop refreshing, but their already-indexed content stays usable.
Reconnecting re-runs the OAuth flow and re-binds the existing sources. No data is lost.
Permissions
Connecting an integration requires the integrations.manage
permission, which is granted to Owners and Admins. Members can see
which integrations are connected but can't change them.