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.
Connect once via OAuth. Pitchbar requests read access to the workspaces you select during the OAuth flow — we never get global access. After connecting:
IngestNotionPageJob.encrypted cast.
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 is for outgoing notifications:
Connect via OAuth, pick the channel, save. The bot posts under the integration's name, never as a user.
Ticking Send test on save posts a sample "New lead" message to the channel so you can confirm the wiring before a real visitor submits. The test payload uses the authenticated user's name and email (suffixed with "Slack test from <workspace name>") so the alert is obviously a self-test — operators won't panic thinking a real lead came through.
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.
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.
Each integration's row has a Disconnect button. We:
integration_connection row as inactive.Reconnecting re-runs the OAuth flow and re-binds the existing sources. No data is lost.
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.