Complete Manual

Audience

Track visitors, capture structured data from conversations, and take bookings.

12 min readSidebar: AudienceSwitch to Quick Start
Who can see this: Hidden from agents and supervisors.

Complete reference for the Audience section — visitor analytics, data collections, and booking calendars.

Hidden from agents and supervisors.

For the fast path, use the Quick Start.

Section map#

Sidebar pagePathWhat it is
Visitor Dashboard/visitor-dashboardWho visited the sites carrying your chat widget
Data Collections/data-collectionsStructured tables the AI reads and writes
Calendars/calendarsBookable calendars backed by a data collection

Data collections are the load-bearing concept here. The same store powers the Call Centre lead book, workflow data lookups, campaign contact sources, and calendar appointments — so a change here is felt in several places.

Visitor Dashboard#

The Visitor Dashboard.

Filters

ControlNotes
WidgetAll widgets, or one specific widget
Start Date / End DateCannot be set past today

The default range is the first of the current month through today.

This page is not live. It fetches when you open it or change a filter, and otherwise only on Refresh.

Tiles

TileWhat it counts
Visitors In RangeVisitors seen in the window
Unique VisitorsDistinct visitors
Recurring VisitorsVisitors seen across more than one session
Tracked LocationsDistinct locations resolved
Page ViewsTotal page views
Avg Active TimeMean active time per visitor

Avg Active Time is active time, not time-on-page — it comes from heartbeats while the tab is actually in use, so it is a much more honest engagement figure than a raw duration.

How a visitor is identified

Each visitor gets an id that is unique per widget. The same person visiting two sites that carry two different widgets is two visitors, and there is no cross-widget identity stitching here. Compare a single widget over time rather than summing widgets.

Nothing here requires a login — this is anonymous website analytics, tied to the widget rather than to a customer record. To connect a visitor to a person, see Contacts, where Visitor ID is one of the identifier types.

What is tracked

GroupFields
DeviceType, OS, browser, user agent, language, timezone, screen and viewport size
LocationCountry, region, city, coordinates, timezone, source
Per pagePath, URL, title, referrer, page type, page views, active time, heartbeats, events, engagement score
TimingFirst seen, last seen

Panels

Device Breakdown — a percentage split per device with a visitor count. Empty: No device data yet.

Location Breakdown — expandable region rows that drill down to cities. Empty: Waiting for visitor location data...

Page Details — columns Page, Type, Visits, Page Views, Unique, Recurring, Locations, Avg Active, Score, Devices. Empty: No visitor page data has been collected for this date range yet.

The Score column is an engagement score computed from active time, heartbeats, and events. Use it to find pages that hold attention rather than merely attract clicks.

Data Collections#

The Data Collections list.

The collections list

Heading Data Collections, with a subheading counting collections and how many are sheet-linked.

ControlNotes
Create CollectionDisabled at your plan limit, replaced by Upgrade to create more
Add Shopify dataOwner or admin, where Shopify collections are enabled
SearchSearch collections...
Link filterAll collections, Sheet-linked, No sheet, Sync halted
SortRecently updated, Name, Most rows

Each card shows row and column counts, when it was updated, and status chips:

ChipMeaning
Shopify · Products / Orders / Customers / Abandoned checkoutsA managed Shopify mirror
Sync failed, Syncing…, Synced {when}Shopify sync state
Sheet linked, No sheet linked, Sync haltedSpreadsheet state
Used by {n} campaign(s)A campaign depends on this collection

Card actions: View Data →, an export menu (Export as CSV, Export as Excel), Edit, and delete.

Used by {n} campaign(s) is a warning, not decoration. Deleting such a collection breaks those campaigns' contact source, and the confirmation says so explicitly.

Empty: No data collectionsGet started by creating a new data collection.

Creating a collection

Create New CollectionDefine the structure for your data collection. Two modes:

ModeBehaviour
Start blankDefine columns by hand
Upload a fileChoose a .csv, .xlsx or .xls fileThe schema is detected automatically · up to 7MB

Multi-sheet workbooks prompt for a WorksheetThis file has multiple sheets — pick which one to import.

Some column names are reserved for the system; the form refuses until you rename them.

FieldNotes
Collection Name *Required — e.g., Customer Database, Product Catalog
DescriptionOptional
Columns *At least one, names unique

Column types

String, Number, Date, Boolean, Email, URL, Phone, each with an optional Required flag.

The type is not cosmetic. Phone and Email are what make a row addressable by SMS, WhatsApp, email, and the dialler; a phone number typed as String will not reliably work downstream. Fix types before importing thousands of rows.

Columns written by the platform are badged SystemWritten automatically by campaigns — cannot be edited or removed. Campaign slot answers and Call * outcome columns land here.

Renaming or removing a column that holds data warns first: Existing values will no longer be shown — the values stay in the database but stop appearing, and This cannot be undone from here.

Spreadsheet Sync

Optional, configured on the create or edit form.

ControlOptions
Enable SynchronizationToggle
ProviderGoogle Sheets, Microsoft Excel
Google Account / Microsoft AccountA connected account
Folder LocationRoot Folder, Select Folder, Create Folder
File OptionCreate new file, Select existing file
Spreadsheet Title, Sheet TitleFor a new file

Accounts come from IntegrationsSheets. With none connected: No Google/Microsoft accounts connected. Go to Integrations → Sheets to connect one.

The sync is bidirectional. Rows flow both ways, conflicts resolve in favour of the more recently updated side, and column changes here are pushed to the sheet — Column changes are applied to the linked spreadsheet as well.

Once linked, the collection is pinned to that file: Spreadsheet Integration ActiveThis collection is locked to a specific Google Spreadsheet / Excel Workbook to maintain sync integrity.

If the sheet stops matching the expected layout, sync halts rather than corrupting data: Spreadsheet sync halted — sheet failed validationData here is safe and stays usable, but changes no longer flow to or from the sheet. Fix the sheet, then re-validate to resume synchronization. Fix the layout and press Re-validate.

The practical warning: people rearranging columns in the shared sheet is the single most common cause of a halted sync. If several people can edit the sheet, expect this.

The detail page

Header shows the name, row count, the backing import source, a link to the linked sheet, and the last sync time.

ControlNotes
Add EntryOne row, typed inputs per column
Upload FileAppend CSV or Excel
Manage ColumnsEdit the schema
ExportExport as CSV, Export as Excel
Sync from SpreadsheetPull from the linked sheet
Delete AllEvery row — This action cannot be undone

Table controls: rows per page (10, 25, 50, 100), Search rows..., and a Filters panel offering a per-column value filter, Call Status where such a column exists, Sheet Sync (All, Synced, Not synced), and a created-date range. Rows are editable in place.

There is no template download anywhere — to get a correctly shaped file, create the collection and export it empty.

Shopify-managed collections

A collection mirroring Shopify is read-only: Synced from Shopify — read-only, with Rows refresh automatically every 30 minutes and a Sync now button.

Do not plan to edit these. To enrich Shopify data, copy what you need into a collection of your own. See FloGPT for Shopify.

Data collections as lead lists

A collection doubles as a lead list for the Call Centre. Alongside your columns, each row carries lead fields the calling floor maintains:

FieldValues
Assigned rep and assignment time
Pipeline statusnew, contacted, callback, won, lost
Potentialhot, warm, cold
Follow-up, first and last contacted timestamps
Tags, messaging opt-out

This is why a collection built here appears as a lead list there, and why the Call * columns appear on rows you never touched. The two features are one store viewed two ways.

Calendars#

The Calendars list.

Each calendar wraps a data collection whose rows are appointments. One calendar per collection.

The calendars list

Cards show the calendar name, description, its backing collection, the appointment count, and the timezone, plus a sync pill — Not synced, Sync error, Syncing, Connected — and a Google or Microsoft provider chip. Actions: Open, Sync now, delete.

Empty: No calendars yetCreate your first calendar to start booking appointments through the call agent.

Deleting is deliberately conservative: The backing DataCollection (and all its appointment rows) will be preserved — only the calendar wrapper is removed. You can delete the DataCollection separately if you want the data gone.

Creating a calendar

FieldNotes
NameRequired — e.g. Sales demos, Doctor visits
Description (optional)
TimezoneAll availability is interpreted in it
Slot duration (min)5–240, step 5, default 30
StorageAuto-create a new Data Collection or Use an existing Data Collection

Take the recommended storage option — We'll create a Data Collection with the standard appointment columns (Start, End, Customer Name, Customer Phone, etc.). The existing-collection path exists for appointment data you already hold, and requires mapping columns by hand afterwards.

Availability settings

Settings on the detail page:

FieldRangeDefault
Slot duration (min)5–24030
Buffer (min)0–60
Capacity per slot1–1001
Max advance days1–36530
Working hoursPer day, with enable and start/end timesMon–Fri 09:00–17:00

Capacity per slot above 1 turns the calendar into a group booking — several people in the same slot, with the UI showing Remaining {r} / {c}. Leave it at 1 for one-to-one appointments.

Max advance days is how far ahead anyone can book. Set it to match how far ahead you can actually honour commitments.

Column mapping

Each appointment is a row in the backing Data Collection. Pick which column stores each field. Required fields (Start, End) must point at columns that exist on the Data Collection.

Logical fieldDefault column
Start *, End *Start, End
Customer name, Customer phone, Customer emailCustomer Name, Customer Phone, Customer Email
Status, Notes, SourceStatus, Notes, Source
External event id, External calendar id, External updated atExternal Event ID, External Calendar ID, External Updated At

Auto-created collections are mapped for you. You only touch this when you brought your own collection.

Booking

The month grid shows appointments per day, an Appointments ({n}) panel, and an Available slots list with a Block slot control per slot.

Book an appointment takes:

FieldRules
DateNot in the past, not beyond Max advance days
Start timeChosen from free slots; shows {n}-minute slots · {timezone}
Customer name2–80 characters, letters, spaces, hyphens, apostrophes, dots, commas
Phone (with country code)E.164 — e.g. +919876543210 or +14155552671
Email, NotesOptional

Block slot removes availability without creating a customer appointment — the right tool for holidays and meetings. With capacity above 1 it blocks all remaining seats.

Every appointment records how it arrived: from a call, manually, imported, from the external calendar, or as a manual block. Your voice and chat agents book through the same path and the same capacity rules, so a slot cannot be double-booked between a human and the AI.

External calendar sync

Sync with Google / Microsoft Calendar uses the accounts connected under Integrations → Sheets.

With none connected: No Google or Microsoft account connected for this organization. Go to Integration → Sheets and connect one.

The common failure is a connected account that lacks calendar scope: This account is missing Calendar permission. Disconnect and reconnect it under Integration → Sheets so Google/Microsoft can grant Calendar access, then try again. Reconnecting is the only fix — the permission cannot be added to an existing connection.

Pick an Account, Load its calendars, choose an External calendar, then Save sync config. Sync now runs it on demand, and the panel reports Last synced and Connected. Sync is bidirectional.

Troubleshooting#

SymptomUsual cause
Visitor numbers look doubledVisitors are identified per widget; the same person on two widgets counts twice
Visitor dashboard looks staleIt does not auto-refresh — press Refresh
Waiting for visitor location data...No location resolved yet for this range
SMS or dialling ignores a columnThe column is typed String rather than Phone
A column cannot be editedIt is a System column written by campaigns
Old cell values vanished after renaming a columnExpected — the data remains but is no longer displayed
Upload rejectedNot .csv/.xlsx/.xls, or over 7MB
Cannot find a template to fill inThere is none; export an empty collection instead
Sync halted on a collectionSomeone changed the sheet's layout — fix it and Re-validate
Rows will not editIt is a Shopify-managed mirror, which is read-only
Deleting a collection warns about campaignsA campaign uses it as its contact source
Calendar deleted but the data is still thereBy design — delete the backing collection separately
Calendar sync fails on permissionThe account lacks calendar scope; disconnect and reconnect it
AI booked outside working hoursCheck the calendar's timezone, not just its hours
Slot shows as unavailable unexpectedlyBuffer minutes, or the slot was blocked with Block slot