floe
Home / Docs / Integrations

Integrations

A sales conversation is only useful if what happened reaches the person who follows up. Site → Integrations is where you decide where recaps go, and where you check that each one went through.

The page runs in the order you set it up: connect your CRM and calendar, choose where leads go, set which contacts may reach the CRM, turn on analytics, then read the delivery log. Connecting or disconnecting a provider, choosing a scheduling page, and switching a CRM write on or off apply at once. Each notification channel, the booking link, the custom links, the contact-delivery policy and the Factors card has its own Save Changes button, which saves that card only.

Two summaries are prepared for an eligible session: an internal one for your team and a warmer one for the prospect. Floe never substitutes the internal summary into a prospect email.

Contact capture — storing the email or phone a prospect shares and using it for recaps and CRM delivery — is enabled per deployment. Contact Floe to turn it on for yours.

Notification channels

Four channels. The two emails and Teams each have a card with a switch, a destination, and a Save Changes button, and a change takes effect when you save its card. Slack has no switch or Save: connecting with Add to Slack and choosing its channel apply at once, and Disconnect turns it off.

ChannelDefaultWhere it goes
Prospect recap emailOnThe email address the prospect shared during the session
AE recap emailOffOne address you set, and the lead's HubSpot owner when Floe finds one
SlackOffA channel you choose
Microsoft TeamsOffAn incoming webhook you paste

Prospect recap email

Sent when the prospect shared an email during the session and prospect recaps are enabled for the site. It contains a short summary of the conversation, up to seven features the agent actually showed them, and up to three of their own questions quoted back. A temporary delivery failure is retried automatically. If the address bounces permanently or the recipient reports the recap as spam, Floe stops using that address for that visitor, as it does after Not you?: no later recaps, and no later CRM write. A CRM write that already completed is not reversed.

It carries your branding: your site logo (falling back to your favicon) and your accent colour. The footer reads "Powered by Floe".

The call to action adapts to how the session ended — a trial invite, an offer to bring in their team, a deeper walkthrough, or a plain follow-up. When you have configured a booking URL, the email includes Schedule a follow-up. Every recap also includes a Not you? link.

What the recap actions do

  • Schedule a follow-up takes the prospect to your configured booking page. Opening it in the same browser they used for the demo also confirms their email address. Opening it elsewhere still leads to scheduling but does not confirm the address.
  • Not you? opens a Floe confirmation page. Nothing changes until the recipient chooses Confirm this was not me, which marks the address as rejected so it is not used for later contact. It does not recall an email already delivered or reverse a CRM write that already completed.

Both links carry a single-purpose token that is never exposed to your page's analytics.

AE recap email

Sent to the address you configure. With HubSpot connected, the lead's owner there gets their own copy when Floe finds one (see Lead owners). This is the internal version. It arrives under the same sender name as the prospect recap — your product name — but the body is Floe-attributed, so an AE cannot mistake it for something forwardable.

It contains the prospect's identity and role, session duration, the internal summary, an intent chip (or Not a fit for a request outside your product; none when the visitor left no email or phone), and the structured read on the conversation: buying signals (except for leads marked Not a fit), features shown, questions asked, tech stack, pain points, capability gaps, objections, and what they said they were interested in. Each list is capped at six items. It deep-links to the full session in the dashboard. For a returning lead, the subject starts with Returning and the session number. The History block shows their first session and how long ago the previous one was, earlier sessions with summaries and links, and earlier open questions. When available, the score line above the summary compares the current and previous scores. With visitor analytics on, it also shows retained visits, pages read most, and where their first recorded visit came from.

AE email, Slack, and Teams label the lead as Confirmed contact, Unverified email claim, or Anonymous lead, and show a phone number with a Prospect-confirmed label (the prospect checked the transcription during the call) or a Stated label (entered on a form or demo link). These labels tell the person following up how much to trust the details; neither verifies ownership.

Slack

Add to Slack installs the Floe app in your workspace. Approve it on Slack's own screen, then choose a channel on the card. Public channels are listed straight away; for a private channel, run /invite @Floe in it and select Refresh.

Each recap leads with the company, or the person when there is no company, and is marked when the lead scored Hot. It shows their role, how to reach them, the lead score and why, the intent, the summary, and the signals worth acting on, with a link to open the session in Floe. A lead outside your product is marked Not a fit instead of showing a score or buying intent. A visitor who left no email or phone shows no intent, since there is no one to follow up with. A Website Agent conversation is labelled as one, and every recap shows when it ended, in each reader's own timezone. Returning leads are marked in the header, with earlier sessions and links under Before this. When visitor analytics is on, visits and pages read most appear too.

The card says when something needs you: Pick a channel until one is chosen, Channel unavailable when the chosen channel was archived or Floe was removed from it (choose another; there is nothing to reconnect), and Reconnect required when Slack refused Floe's access (usually because the app was removed from the workspace) or posts to Slack kept failing. An org-wide install on Slack Enterprise Grid is not supported; install the app into a single workspace.

Microsoft Teams

Paste an incoming webhook and turn the channel on. It must be a *.webhook.office.com or *.logic.azure.com URL. Create one via the Workflows app in Teams: Post to a channel when a webhook request is received. The card distinguishes demos from Website Agent conversations and carries the same returning-lead history, visits and pages as the Slack recap.

The host restriction is enforced, not advisory: recaps contain prospect details, so Floe posts them only to Microsoft's webhook hosts.

Testing a channel

Each channel has a Test send button that runs the real notifier against a sample session, so you can see the actual formatting before a prospect does.

Two things that trip people up:

  • Save first. The Teams test uses the saved webhook, so its Test button stays disabled while the field holds an unsaved URL. The AE email channel works the same way unless you type a different inbox next to its button, which previews without saving. The Slack test posts to the channel you chose.
  • The prospect test needs an address to deliver to — pass your own inbox. If your booking URL contains {email}, the sample booking link uses that inbox.

Booking integrations

Connect Cal.com or Calendly from the Booking card on Site → Integrations in two steps:

  1. Select Connect and approve Floe in the provider's authorization screen, in the same browser. This connects the current provider user's meetings. If you administer the provider account and want team-wide coverage, choose Connect whole organization (admin) instead.
  2. Choose the scheduling page or event type Floe should offer for this site. If your existing Booking link matches one of them, Floe selects it for you.

That is the complete setup. Floe registers booking notifications itself; you do not create a webhook, copy a signing secret, or issue a personal access token.

The connection is shared by your Floe organization, while each site selects its own scheduling page. Owners and Admins can connect or disconnect providers and change the site's page; Members keep read-only access. Disconnecting releases every site that used the connection; each saved booking URL remains available in Link only mode.

Provider Connect is enabled per deployment. If Connect is unavailable, keep using the link-only fallback below and contact Floe to enable the provider.

What the connection status means

StatusMeaning
ProvisioningAuthorization succeeded and Floe is finishing setup. You can leave the page.
Bookings verifiedThe provider confirms booked, rescheduled, and cancelled meetings to Floe.
Delayed verificationBooking links still work. Floe is repairing the provider notification.
Tracks your meetings onlyThe provider granted user-level rather than organization-level access, so meetings owned by other hosts may not be verified.
Reconnect requiredProvider access expired or was revoked; reconnect to resume verification.
Link onlyThe scheduling link works, but Floe cannot verify a booked call from it.

Organization-wide access depends on the connected user's provider role and plan. When those permissions are unavailable, the organization-wide attempt leaves the current configuration unchanged; use the user connection and ask a provider admin to upgrade it later.

Cal.com event types with multiple seats per time slot or manual confirmation are not offered in the picker yet. Choose a standard personal, team, or round-robin event type.

Floe's provider access is limited to identifying the connected account, listing scheduling pages, reading booking state, and receiving booking notifications. Floe does not create, cancel, or reschedule meetings for you.

How a booking gets verified

A call counts as booked only when the provider confirms it to Floe; a click on a booking button never counts. The reference Floe matches it against contains no name, email, or company. Bookings that did not start from Floe are ignored.

Verified booking records, including a later cancellation or reschedule, follow the site's conversation-retention window.

You can still set Booking link, at the foot of the Booking card, to any https:// scheduling link without connecting a provider, and save it there. It becomes the call to action in the prospect recap email and the destination the agents offer when a visitor asks to talk to someone. Internal recaps do not include it. A per-prospect Demo Link booking override must also use HTTPS.

Cal.com, Calendly, and Schedule Hero open inside the Demo Agent's follow-up screen and the Website Agent's booking view, with an option to open separately. Other HTTPS schedulers open in a new tab. Schedule Hero does not require a provider connection and works in Link only mode; it does not report verified bookings to Floe.

If your site restricts embedded content with a Content Security Policy, allow your scheduling provider's origin in frame-src.

Floe does not add visitor details to ordinary booking links. To pass the visitor's email to a scheduler, explicitly set a complete query value to {email}, for example:

https://your-team.schedulehero.io/inbound/demo-router?email={email}

Use your own scheduling route and keep {email} as the placeholder, rather than pasting a fixed person's address. Custom HTTPS providers can use their own query parameter name, such as invitee={email}. The agents fill it from the email supplied for the current prospect, subject to your site's consent setting; without an email, that parameter is omitted and the visitor enters it on the scheduling page. Names and company details are not added.

The prospect's Schedule a follow-up recap action also fills an explicitly configured email placeholder when opened. Internal recaps carry no booking link. Fixed identity-prefill parameters such as email=someone@example.com, name, or company are refused by recap links.

Email templates use Link only mode. With a connected provider's selected scheduling page, Floe instead adds one anonymous attribution parameter (utm_content for Calendly, metadata[floe_ref] for Cal.com). Leave the setting blank to omit booking controls; the Not you? action in the recap remains.

Choosing Use link only removes the selected provider page but keeps the URL. Booking buttons continue to work, but the funnel cannot count a booking under Booked a call until you select a connected event type again.

Without a booking link, you can still give visitors a way to reach your team, such as Chat on WhatsApp. Add up to three links on the Custom links card on Site → Integrations, each with a label of up to 40 characters and an https:// address. For WhatsApp, use your https://wa.me/<number> link. The card saves on its own.

The Demo Agent shows these links on its wrap-up dialog, its follow-up screen and its connection-error screen; the Website Agent shows them beside its message box during a conversation, and with a video avatar the presenter's bubble shows the first one. Each opens in a new tab. They appear only while no booking destination is set: a booking link, a Demo Link booking override, or demoCalendarLink in your snippet takes their place. English sessions show your labels as written. In other languages the agents show your first link, labelled Contact us in the visitor's language. Custom links are not added to recap emails. When the agent closes a demo, it suggests your first link as the next step. When a visitor asks the Website Agent to talk to someone and no booking destination is set, it offers no calendar or other channel: it says your team will reach out and asks them to type a phone number or email, whichever your contact capture collects (an email if it collects neither). It asks only when Website Agent transcript recording is on and the visitor's consent allows it.

Changing a link's label keeps its count; changing its address starts a new one. The card shows each link's clicks over the last 30 days, how many visitors clicked it and when it was last clicked, followed by the most recent clicks with the page and the agent each came from. A lead's timeline shows when they clicked one. Clicks are counted through visitor analytics, so nothing is counted while collection is off or before a visitor consents. A click means the visitor opened the link: it is not a booking and never counts under Booked a call.

Sender identity

Recap emails always send from Floe's verified sending address, with your product name as the display name. Sending from your own domain isn't supported yet. You can set a Reply-To address you own, so a prospect who hits Reply reaches your team.

CRM

Floe can write demo recaps into HubSpot, Salesforce or Leadrat.

You connect a CRM from Site → Integrations with the Connect button. HubSpot and Salesforce ask you to sign in and approve Floe; Leadrat is connected with your tenant and API key (see Leadrat). Once connected, the integration writes:

WhatHubSpotSalesforceLeadratDefault
The recapA Note on the contactA Task on the contactA lead, with the recap in its notesOn
A dealA Deal linked to the contactAn Opportunity, attached to the contact's account when it has oneNot availableOff

A lead marked Not a fit still reaches your CRM when it meets your contact delivery policy. Its recap notes say Not a fit and omit the score, buying intent and recommended next step. Mapped HubSpot and Salesforce score fields show Cold, 0; mapped intent and next-step fields are cleared. No Deal or Opportunity is created.

Contact delivery

CRM contact delivery, under Site → Integrations, decides when the email or phone a prospect gave is trusted enough to reach your CRM:

PolicyWhat reaches the CRM
Confirmed only (default)The contact is written once the prospect confirms their email through Schedule a follow-up or a booking. Until then, the write waits. For Leadrat, a prospect who gave only a phone and verified it with a code is written without a confirmed email.
As stated (explicit opt-in)The contact is written from the address the prospect gave, labelled as unverified in the recap. A prospect who gave only a phone number, and confirmed it during the call, reaches a CRM that takes a phone (Leadrat). Your team checks it on follow-up.

Confirming a spoken email in the message box during the call confirms the transcription, not the address; it does not release a Confirmed-only write. A lead with neither an email nor a phone they confirmed never reaches a CRM.

If your agent asks for an email code, completing it also confirms ownership. Contact delivery waits until they complete it.

A phone number the prospect verified with a code (see Ask for their details) does not wait for either policy. Once the lead is delivered, Leadrat receives it as the lead's mobile number, including a number entered on the start form. HubSpot receives it as the contact's phone only on a contact Floe creates, or on an existing contact matched by a confirmed email that has no phone yet. In Salesforce it stays in the Task text. A lead with only a phone never reaches HubSpot or Salesforce. With Confirmed only, a lead whose email is not yet confirmed still waits, except that a Leadrat lead with only a phone the prospect verified with a code is written without one.

Switching back to Confirmed only holds any contacts that are still waiting; it does not remove records already delivered. A contact is only ever written once: a later confirmation does not create a second Note or Task.

As-stated delivery is limited to 200 CRM writes per site per rolling 24 hours, counting each recap and each deal. Additional writes are held when the limit is reached. Contact Floe about the limit for your deployment.

HubSpot Notes and optional Deal descriptions include available first-touch and session source details, including campaigns, referrer hosts, landing pages and Demo Link labels.

Both HubSpot and Salesforce find or create contacts by email. A phone-only lead is not delivered to them. Floe never populates Salesforce's phone field, and fills HubSpot's only with a verified number as described above; any other phone the prospect confirmed appears in the Note or Task text instead. HubSpot contacts get name, company and job title; Salesforce contacts get name and job title only. Floe never creates a Salesforce Account, so a contact Floe created has no account to attach an Opportunity to.

The Note, the Task, or the Leadrat lead's notes carry a lead card with, when the session supplied them:

  • Whether the lead came from a demo or a Website Agent conversation
  • The visitor's approximate location, where available
  • Conversation summary and products or features of interest
  • Buying and intent signals, except for leads marked Not a fit
  • Questions, pain points, objections, capability gaps, and relevant tech stack
  • Budget and qualification answers
  • The lead score and its tier, when the lead has been scored and is not marked Not a fit
  • The recommended next step, except for leads marked Not a fit
  • How the contact was verified, and a link to the Floe session

The same values can be written to custom contact fields when Floe has configured a field mapping for your integration; there is no dashboard for that yet.

Leadrat

To connect Leadrat, choose Connect on its row and enter your Tenant and API key. Both are in the webhook URL Leadrat gives you for an API integration: https://connect.leadrat.com/api/v1/integration/Webhook/<tenant>/<API key>. Floe stores the key encrypted and never shows it again. To replace it, choose Disconnect, then Connect and enter both values; Disconnect deletes the stored key.

Floe cannot check the tenant and key until it sends the first lead. The delivery log shows whether Leadrat accepted it. If Leadrat answers that the key is not authorized, or three sends in a row fail for a reason other than the lead itself, Floe pauses the connection and the row shows Reconnect required. While it is paused, leads are not sent to Leadrat; choose Reconnect and enter both values to resume.

Each recap creates a Leadrat lead with:

  • The prospect's name, or Website lead or Demo lead when they gave none
  • Their email address, when the contact-delivery policy allows it
  • With As stated, the phone number they confirmed during the call, with its country code, as the lead's mobile number. Under either policy that phone also appears in the notes. A number they verified with a code is sent as the mobile number under either policy, including one entered on the start form. Any other number entered only on a form or demo link is never sent.
  • Notes holding their company and role, followed by the lead card above

With As stated, a prospect who gave only a confirmed phone reaches Leadrat. With Confirmed only, a lead reaches it once the prospect confirms their email, or at once when the prospect gave only a phone and verified it with a code. Floe sends a mobile number with As stated and a phone the prospect confirmed, or under either policy with a number they verified with a code. Leadrat may refuse a lead without one; a refused lead shows as Failed in the delivery log. Leadrat's recap has no switch of its own: Disconnect stops it, including while the connection is paused.

Lead owners

While the AE recap email and HubSpot's Sync recap to the Contact are both on, Floe looks up who owns each lead once its recap is in HubSpot: the contact's owner, otherwise the owner of the contact's company, otherwise the owner of its most recently updated open deal. That person gets their own copy of the AE recap, so with Confirmed only it arrives when the contact is written, not when the session ends. Floe sends it only to an owner whose address is on your site's domain or your AE address's domain, and never a second time to your AE address. It is not listed in the delivery log.

A confirmed contact that Floe creates is also linked to its company, when exactly one company in your HubSpot has the email's domain. Common free-mail domains and ambiguous matches stay unlinked. Floe never changes an existing contact's company or anyone's ownership.

This needs HubSpot read access to owners, companies and deals, which Floe asks for when you connect; the person connecting can grant only what their own HubSpot access allows. If HubSpot was connected without it, the HubSpot card under Site → Integrations shows Reconnect. Until then, recaps are delivered as before, without the owner's copy.

Deal creation is off by default on purpose: if you already sync your scheduling tool to your CRM, that tool usually creates the deal, and turning both on gives you two. Deal stage and amount are configured by Floe for your deployment; there is no customer dashboard for those yet.

Factors

If your site runs Factors, Floe can send its Website Agent and Demo Agent conversations to it, so you can see which accounts talked to your agent, score accounts on it, and count it in your attribution.

Turn it on under Site → Integrations → Factors with Send conversations to Factors. It takes effect on the next page your visitors load, with no change to your snippet, and covers the Website and Demo Agents on your own site. The card says when Factors was last seen on your site, checked each time a visitor opens a conversation, enters their email on a demo's start form, or taps Start demo, so you can tell the setup is right. A factors option in your snippet overrides the card for that page, and is how you turn it on for the in-product agent (see the SDK reference).

Factors then receives these events. Each carries floe_agent: website, demo, or onboarding for the in-product onboarding and support agent.

EventSent whenAgents
floe_agent_openedThe visitor opened the agent. trigger is user, nudge or auto.Website, in-product
floe_conversation_startedA conversation started. Once per page; a conversation that carries on to the next page is not counted again. For the Demo Agent, it is counted with the demo start.Website, Demo
floe_demo_startedA live demo started. For the Demo Agent, this is when the visitor finishes the start form, or taps Start demo when the demo has no form to fill in.Website, Demo
floe_demo_endedA demo finished. features_shown is how many features it showed.Website, Demo
floe_contact_sharedThe visitor gave the agent a contact detail and confirmed it, or typed their email into the demo start form. field is name, email, phone, company or role; the detail itself is never sent. Once per value, so a corrected detail counts again.Website, Demo
floe_booking_calendar_shownThe agent showed your booking calendar.Website
floe_booking_clickedThe visitor pressed the booking button.Website, Demo
floe_booking_completedThe Calendly page shown in the agent reported a completed booking. Treat it as a hint: use Booked a call in Insights for verified bookings.Website, Demo

Events are sent only while the Factors tracking script is on the page. With consentMode: "pending", nothing is sent before the visitor grants consent, and what happened before the grant is not sent later.

Identify visitors by email (or factors: { identify: true } in the snippet) also tells Factors who the visitor is when they confirm their email with the agent, so their earlier visits join that person's profile in Factors. An email typed into the demo start form identifies no one, and an email you pre-fill with prospectEmail is never used. Floe does not confirm that every address belongs to the visitor, so a visitor who gives someone else's address is identified as that person. Cover this in your privacy notice before you turn it on.

When Factors' data layer is switched on for your Factors account, the Website and Demo Agents are also given the industry, company size and revenue band Factors matched to the visitor, and use them to choose relevant examples. The agent is instructed to treat this as a guess and never to mention it or how it knows. The same match shows on the conversation in Conversations, labelled as Factors' match. This follows the Factors setting and the visitor's consent, not Tailor the agent to what a visitor has read.

Support escalation

When a user of your product asks the Support Agent for a person, or accepts its offer to involve your team when it cannot resolve their question, Floe can open a ticket for your team in Periskope, the WhatsApp helpdesk.

The ticket opens with status open and the label floe, so your team can filter for it. It goes on the user's WhatsApp group with your team when they are in exactly one; when they are in none or several, or Periskope cannot be asked which, it goes on their own 1-1 chat. A private note on that chat, visible to your team only and never sent on WhatsApp, holds who the user is, why the agent handed over, a summary, the last messages of the conversation, and a link to the session recording when there is one. When Record conversation transcripts is off, the note carries the summary but no messages; when your MCP tools are connected, it carries only the user's own messages, and the summary leaves out anything looked up in their account. Each support session opens at most one ticket. If the note cannot be added, the ticket still opens without it.

To connect Periskope, open Site → Integrations, choose Connect on the Periskope card, and enter:

  • your Periskope API key, from Settings → Integrations → API in Periskope;
  • the WhatsApp number connected to Periskope, with its country code.

Floe stores the key encrypted and never shows it again; the card shows the number's last four digits. Floe cannot check the key until it opens the first ticket. If Periskope refuses the key, or refuses three tickets in a row, the card shows Reconnect required and no tickets are opened until you reconnect. If Periskope rejects a ticket, for example because it has no WhatsApp chat with that user, the card says so. Disconnect deletes the stored key.

Floe finds the user's chat by the phone number in their verified identity, so escalation needs identity verification set to Check, never block or Required, and a signed phone number that includes its country code, and a visitor whose consent lets their identity reach the agent (see Consent gating). Without these, the agent does not offer to hand over.

What triggers a recap

A completed Demo Agent session triggers the configured channels. A Website Agent session triggers them when it ends — completed or abandoned — and the conversation produced an email address, a phone number, or concrete qualification or intent evidence. A name, a page view, generic Q&A, or an outside-product request alone does not generate sales traffic.

Recaps are sent once per qualifying session. A late signal can make a session eligible, but it never sends a second email or Slack message for that session. Each new qualifying session from the same lead sends its own team alert, marked as returning.

Delivery log

The Delivery log at the foot of Site → Integrations answers "what did Floe send for this lead, and did it get there?". It lists one row per lead and destination, newest first: the recap in your CRM, the deal if you create one, Slack, Microsoft Teams, the AE recap email, and the prospect recap email. Each row shows the lead, the destination, Sent or Failed, when Floe last tried, and how many tries it took. Select the lead to open their conversation or demo. Filter the list by channel and by outcome.

  • Sent means the destination accepted it. If a prospect recap later bounces permanently, its row changes to Failed; the other channels report no later bounce.
  • Failed rows say why in a sentence, and what to do when there is something to do: reconnect a CRM or Slack workspace that refused Floe's access, or check a Slack channel or Teams webhook URL that no longer accepts messages.
  • A CRM write Floe could not confirm is shown as Failed and is not sent again. Check the record in your CRM.
  • A channel that is off or has no destination sends nothing and adds no row. Test sends are not logged.

A row holds no message text, email address, or webhook URL. It is deleted 90 days after its session began, the same default as session recordings, and sooner when that lead's data is deleted, for example by deleting their People record. The Conversation retention setting does not change this. Reading the log needs the same access as Leads: Owners and Admins.

FAQ

Can I change what the prospect email says? Not the copy. You control your logo, accent colour, product name, and booking URL; the structure and the summary are generated per session.

Can I send to more than one AE? The AE recap takes a single address you set. With HubSpot connected, the lead's owner gets a copy too, when Floe finds one. For more people than that, a shared inbox or a distribution list is the usual workaround, or use the Slack channel instead.

Do I need a CRM for any of this to work? No. Email, Slack and Teams are independent of the CRM integration.

Which other CRMs are supported? HubSpot, Salesforce and Leadrat. Nothing else today. Periskope is a helpdesk for support escalation, not a CRM: it receives no recaps.