# Action Items
Source: https://docs.flowla.com/api/action-items
Create and manage action items (Mutual Action Plan tasks). Supports room-wide, page-wide, and block-scoped listing with pagination.
**Terminology:** the *action-plan block* is the container (created via
`POST /api/v2/blocks` with `type: "action-plan"`). The individual tasks
inside it are called **action items** and are managed via the endpoints
on this page.
## Endpoints
| Method | Path | Description |
| -------- | --------------------------------------- | --------------------- |
| `GET` | `/api/v2/action-items` | List action items |
| `POST` | `/api/v2/action-items` | Create action items |
| `PATCH` | `/api/v2/action-items/{action_item_id}` | Update an action item |
| `DELETE` | `/api/v2/action-items/{action_item_id}` | Delete an action item |
## Action item fields
| Field | Type | Notes |
| ------------- | -------------- | ------------------------------------------------ |
| `id` | string | |
| `blockId` | string \| null | ID of the action-plan block this item belongs to |
| `title` | string | **Required on create.** |
| `description` | string | |
| `status` | enum | `todo`, `in_progress`, `done`, `cancelled` |
| `startDate` | string | ISO 8601 |
| `dueDate` | string | ISO 8601 |
| `internal` | boolean | Hidden from buyers when `true`. Default `false`. |
| `assignees` | object\[] | `{ userId, email, name }` per assignee |
| `completedAt` | string \| null | ISO 8601 |
| `createdAt` | string | ISO 8601 |
| `updatedAt` | string | ISO 8601 |
***
## List action items
`GET /api/v2/action-items`
Returns action items scoped to a room, page, or specific block.
All scope parameters are optional, but at least one should be
provided. If `blockId` is set, `pageId` **must** also be set
(otherwise the API returns 400).
### Scoping
| `roomId` | `pageId` | `blockId` | Result |
| -------- | -------- | --------- | ---------------------------------- |
| ✓ | — | — | All action items in the room |
| — | ✓ | — | All action items on the page |
| — | ✓ | ✓ | Action items in the specific block |
| — | — | ✓ | **400 Bad Request** |
### Query parameters
Room ID — returns all action items across the room.
Page ID — returns all action items on the page.
Action-plan block ID — returns items in that block.
Requires `pageId`.
Page number (default: 1).
Results per page (default: 100, max: 1000).
### Response
```json theme={null}
{
"items": [ ... ],
"totalRecords": 42,
"totalPages": 1
}
```
```bash cURL — room scope theme={null}
curl "https://api.flowla.com/api/v2/action-items?roomId=" \
-H "x-flowla-api-key: YOUR_API_KEY"
```
```bash cURL — page scope theme={null}
curl "https://api.flowla.com/api/v2/action-items?pageId=" \
-H "x-flowla-api-key: YOUR_API_KEY"
```
```bash cURL — block scope theme={null}
curl "https://api.flowla.com/api/v2/action-items?pageId=&blockId=" \
-H "x-flowla-api-key: YOUR_API_KEY"
```
```python Python theme={null}
import requests
response = requests.get(
"https://api.flowla.com/api/v2/action-items",
headers={"x-flowla-api-key": "YOUR_API_KEY"},
params={"roomId": ""},
)
```
```js JavaScript theme={null}
const res = await fetch(
"https://api.flowla.com/api/v2/action-items?roomId=",
{ headers: { "x-flowla-api-key": "YOUR_API_KEY" } }
);
```
***
## Create action items
`POST /api/v2/action-items`
The page containing the action-plan block.
The action-plan block to add action items to.
Array of action item objects.
```json Example theme={null}
{
"pageId": "",
"blockId": "",
"items": [
{
"title": "Review proposal",
"description": "Check pricing and terms",
"status": "in_progress",
"startDate": "2026-05-28",
"dueDate": "2026-06-01",
"internal": false,
"assignees": ["owner@example.com", "buyer@example.com"]
},
{ "title": "Schedule kickoff call", "status": "todo" }
]
}
```
```bash cURL theme={null}
curl -X POST https://api.flowla.com/api/v2/action-items \
-H "x-flowla-api-key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"pageId": "",
"blockId": "",
"items": [
{ "title": "Review proposal", "status": "in_progress", "dueDate": "2026-06-01" },
{ "title": "Confirm legal sign-off", "internal": true }
]
}'
```
```python Python theme={null}
requests.post(
"https://api.flowla.com/api/v2/action-items",
headers={"x-flowla-api-key": "YOUR_API_KEY"},
json={
"pageId": "",
"blockId": "",
"items": [
{"title": "Review proposal", "dueDate": "2026-06-01"},
{"title": "Confirm legal sign-off", "internal": True},
],
},
)
```
```js JavaScript theme={null}
await fetch("https://api.flowla.com/api/v2/action-items", {
method: "POST",
headers: {
"x-flowla-api-key": "YOUR_API_KEY",
"Content-Type": "application/json",
},
body: JSON.stringify({
pageId: "",
blockId: "",
items: [
{ title: "Review proposal", dueDate: "2026-06-01" },
{ title: "Confirm legal sign-off", internal: true },
],
}),
});
```
***
## Update an action item
`PATCH /api/v2/action-items/{action_item_id}`
All fields are optional. `assignees` **replaces** the full assignee list.
Updated title.
Updated description.
New status.
ISO 8601 start date.
ISO 8601 due date.
Whether hidden from buyers.
Replaces the full assignee list. Pass an empty array to remove all.
```json Example theme={null}
{ "status": "done", "assignees": ["alex@ourcompany.com"] }
```
```bash cURL theme={null}
curl -X PATCH https://api.flowla.com/api/v2/action-items/ \
-H "x-flowla-api-key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"status": "done"}'
```
```python Python theme={null}
requests.patch(
"https://api.flowla.com/api/v2/action-items/",
headers={"x-flowla-api-key": "YOUR_API_KEY"},
json={"status": "done"},
)
```
```js JavaScript theme={null}
await fetch("https://api.flowla.com/api/v2/action-items/", {
method: "PATCH",
headers: { "x-flowla-api-key": "YOUR_API_KEY", "Content-Type": "application/json" },
body: JSON.stringify({ status: "done" }),
});
```
***
## Delete an action item
`DELETE /api/v2/action-items/{action_item_id}`
```bash cURL theme={null}
curl -X DELETE https://api.flowla.com/api/v2/action-items/ \
-H "x-flowla-api-key: YOUR_API_KEY"
```
```python Python theme={null}
requests.delete(
"https://api.flowla.com/api/v2/action-items/",
headers={"x-flowla-api-key": "YOUR_API_KEY"},
)
```
```js JavaScript theme={null}
await fetch("https://api.flowla.com/api/v2/action-items/", {
method: "DELETE",
headers: { "x-flowla-api-key": "YOUR_API_KEY" },
});
```
# Analytics
Source: https://docs.flowla.com/api/analytics
Retrieve rich engagement data for a room: progress, assignees, and per-section/step viewership.
## Endpoints
| Method | Path | Description |
| ------ | ----------------------------------- | ------------------ |
| `GET` | `/api/v2/rooms/{room_id}/analytics` | Get room analytics |
***
## Get room analytics
`GET /api/v2/rooms/{room_id}/analytics`
Returns engagement data for the room: overall progress, the internal company, all assignees (internal and external), and a breakdown of viewership per section, step, and action.
```bash cURL theme={null}
curl https://api.flowla.com/api/v2/rooms//analytics \
-H "x-flowla-api-key: YOUR_API_KEY"
```
```python Python theme={null}
import requests
response = requests.get(
"https://api.flowla.com/api/v2/rooms//analytics",
headers={"x-flowla-api-key": "YOUR_API_KEY"},
)
print(response.json())
```
```js JavaScript theme={null}
const res = await fetch(
"https://api.flowla.com/api/v2/rooms//analytics",
{ headers: { "x-flowla-api-key": "YOUR_API_KEY" } }
);
const data = await res.json();
```
### Response fields
Room title.
Overall completion percentage (0–100).
`{ type, name }` of the owning organization.
Everyone on the room — internal team members and external contacts.
`internal_organization` or `external_organization`.
Assignee email.
Full name.
Job title.
Present on internal assignees. `true` if this person owns the room.
Present on external assignees.
ISO 8601 timestamp. Present on external assignees.
Total visits. Present on external assignees.
Per-section analytics.
Section ID.
Section title.
Whether the section is marked complete.
Whether buyers can see this section.
Page-level viewership. Each entry has `id`, `title`, `isVisibleToExternal`, and a `viewership` array with `durationInSeconds`, `timesViewed`, `engagements`, and the `user` who viewed it.
Action-plan items with analytics. Each includes `id`, `title`, `status`, `description`, `internal`, `assignees`, `dueDate`, `isOverdue`, `isVisibleToExternal`, `actionType`, and `viewership`.
```json theme={null}
{
"title": "Flowla <> Acme",
"progressPercentage": 14.29,
"internalCompany": { "type": "internal", "name": "Flowla" },
"assignees": [
{
"belongsTo": "internal_organization",
"email": "jordan@flowla.com",
"name": "Jordan Avery",
"title": "Account Executive",
"isRoomOwner": true
},
{
"belongsTo": "external_organization",
"email": "morgan.lee@acme.com",
"name": "Morgan Lee",
"title": "VP of Operations",
"isPrimaryContact": true,
"lastSeen": "2026-05-05T14:30:44.260Z",
"viewCount": 4
}
],
"sections": [
{
"id": "e6136fc8-0036-472c-886d-5f4089f22af0",
"title": "Welcome",
"isCompleted": false,
"isVisibleToExternal": true,
"steps": [
{
"id": "14968206-ac51-4da1-9846-8b6b85a10edf",
"title": "Introduction",
"isVisibleToExternal": true,
"viewership": [
{
"user": {
"belongsTo": "external_organization",
"email": "morgan.lee@acme.com",
"name": "Morgan Lee",
"isPrimaryContact": true,
"lastSeen": "2026-05-05T14:30:44.260Z",
"viewCount": 4
},
"durationInSeconds": 144,
"timesViewed": 1,
"engagements": [
{ "type": "TASK_COMPLETED", "createdAt": "2026-05-05T14:30:54.168Z" }
]
}
]
}
],
"actions": [
{
"id": "7e06cab8-4bf6-49ca-a1c6-f49893ae28c2",
"title": "Sign mutual NDA",
"status": "in_progress",
"description": "Review and countersign the NDA before kickoff",
"internal": false,
"dueDate": "2026-05-11T22:00:00.000Z",
"isOverdue": true,
"isVisibleToExternal": true,
"actionType": "fill-form",
"assignees": [
{
"type": "user",
"user": {
"belongsTo": "internal_organization",
"email": "delia@flowla.com",
"name": "Delia Barbat",
"isRoomOwner": false
}
}
],
"viewership": [
{
"user": {
"belongsTo": "external_organization",
"email": "morgan.lee@acme.com",
"name": "Morgan Lee",
"isPrimaryContact": true,
"lastSeen": "2026-05-05T14:30:44.260Z",
"viewCount": 4
},
"durationInSeconds": 3,
"timesViewed": 1,
"engagements": []
}
]
}
]
}
]
}
```
# Blocks
Source: https://docs.flowla.com/api/blocks
Blocks are the content units inside a group. Type is fixed at creation.
## Endpoints
| Method | Path | Description |
| -------- | ---------------------------------------------------- | ---------------------- |
| `POST` | `/api/v2/blocks` | Create blocks |
| `GET` | `/api/v2/blocks?pageId={page_id}&groupId={group_id}` | List blocks in a group |
| `PATCH` | `/api/v2/blocks/{block_id}` | Update a block |
| `DELETE` | `/api/v2/blocks/{block_id}?pageId={page_id}` | Delete a block |
Block type is **immutable** after creation. To change a block's type, delete it and create a new one.
## Block types
| Type | Use it for | Content field |
| ------------- | ------------------ | -------------------------------- |
| `text` | Rich text | `content` — accepts **Markdown** |
| `image` | Images | `url` — auto-stored in Flowla S3 |
| `embed` | Web pages, iframes | `url` |
| `link` | Clickable URLs | `url` |
| `pdf` | PDF documents | `url` — auto-stored in Flowla S3 |
| `action-plan` | Task checklists | *(no extra fields)* |
***
## Create blocks
`POST /api/v2/blocks`
Blocks are organized into **columns**. Each element of `columns` is a vertical stack of blocks; multiple elements appear side by side.
The page the group belongs to.
The group to add blocks to.
Array of column objects. Each column contains a `blocks` array stacked vertically.
Multiple columns appear side by side on the page.
Array of block objects for this column.
Block type. Immutable after creation.
Text content for `text` blocks. Accepts **Markdown** — bold, italic, headings,
lists, tables, blockquotes, and code blocks are converted automatically.
URL for `image`, `embed`, `link`, and `pdf` blocks.
For `image` and `pdf`, any public URL is accepted — the file is automatically
fetched and stored in Flowla S3.
### Layout examples
```json theme={null}
{
"pageId": "",
"groupId": "",
"columns": [
{
"blocks": [
{ "type": "text", "content": "## Welcome\n\nThis is **bold** text." },
{ "type": "image", "url": "https://cdn.example.com/banner.png" }
]
}
]
}
```
```json theme={null}
{
"pageId": "",
"groupId": "",
"columns": [
{ "blocks": [{ "type": "text", "content": "Left column" }] },
{ "blocks": [{ "type": "image", "url": "https://cdn.example.com/img.png" }] }
]
}
```
```json theme={null}
{
"pageId": "",
"groupId": "",
"columns": [
{ "blocks": [{ "type": "text", "content": "Welcome to the room." }] }
]
}
```
The `content` field accepts Markdown. Formatting like `**bold**`, `# Heading`, bullet lists, and tables are rendered correctly.
```json theme={null}
{
"pageId": "",
"groupId": "",
"columns": [
{ "blocks": [{ "type": "image", "url": "https://cdn.example.com/banner.png" }] }
]
}
```
The image is automatically fetched from the provided URL and stored in Flowla S3.
```json theme={null}
{
"pageId": "",
"groupId": "",
"columns": [
{ "blocks": [{ "type": "embed", "url": "https://example.com/page" }] }
]
}
```
```json theme={null}
{
"pageId": "",
"groupId": "",
"columns": [
{ "blocks": [{ "type": "link", "url": "https://example.com/pricing" }] }
]
}
```
```json theme={null}
{
"pageId": "",
"groupId": "",
"columns": [
{ "blocks": [{ "type": "pdf", "url": "https://cdn.example.com/proposal.pdf" }] }
]
}
```
The PDF is automatically fetched and stored in Flowla S3.
```json theme={null}
{
"pageId": "",
"groupId": "",
"columns": [
{ "blocks": [{ "type": "action-plan" }] }
]
}
```
Once created, use the [Action Items](/api/action-items) endpoints to add tasks to this block.
```bash cURL theme={null}
curl -X POST https://api.flowla.com/api/v2/blocks \
-H "x-flowla-api-key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"pageId": "",
"groupId": "",
"columns": [{ "blocks": [{ "type": "action-plan" }] }]
}'
```
```python Python theme={null}
import requests
requests.post(
"https://api.flowla.com/api/v2/blocks",
headers={"x-flowla-api-key": "YOUR_API_KEY"},
json={
"pageId": "",
"groupId": "",
"columns": [{"blocks": [{"type": "action-plan"}]}],
},
)
```
```js JavaScript theme={null}
await fetch("https://api.flowla.com/api/v2/blocks", {
method: "POST",
headers: {
"x-flowla-api-key": "YOUR_API_KEY",
"Content-Type": "application/json",
},
body: JSON.stringify({
pageId: "",
groupId: "",
columns: [{ blocks: [{ type: "action-plan" }] }],
}),
});
```
***
## List blocks
`GET /api/v2/blocks?pageId={page_id}&groupId={group_id}`
```bash cURL theme={null}
curl "https://api.flowla.com/api/v2/blocks?pageId=&groupId=" \
-H "x-flowla-api-key: YOUR_API_KEY"
```
```python Python theme={null}
response = requests.get(
"https://api.flowla.com/api/v2/blocks",
headers={"x-flowla-api-key": "YOUR_API_KEY"},
params={"pageId": "", "groupId": ""},
)
```
***
## Update a block
`PATCH /api/v2/blocks/{block_id}`
The page the block belongs to.
Updated text content (for `text` blocks). Accepts Markdown.
Updated URL (for `image`, `embed`, `link`, `pdf` blocks).
For `image` and `pdf`, the file is automatically fetched and stored in Flowla S3.
```json Example theme={null}
{ "pageId": "", "content": "Updated **text** content" }
```
```bash cURL theme={null}
curl -X PATCH https://api.flowla.com/api/v2/blocks/ \
-H "x-flowla-api-key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"pageId": "", "content": "Updated text content"}'
```
```python Python theme={null}
requests.patch(
"https://api.flowla.com/api/v2/blocks/",
headers={"x-flowla-api-key": "YOUR_API_KEY"},
json={"pageId": "", "content": "Updated text content"},
)
```
***
## Delete a block
`DELETE /api/v2/blocks/{block_id}?pageId={page_id}`
If the block is an `action-plan` block, all its action items are deleted too.
```bash cURL theme={null}
curl -X DELETE "https://api.flowla.com/api/v2/blocks/?pageId=" \
-H "x-flowla-api-key: YOUR_API_KEY"
```
```python Python theme={null}
requests.delete(
"https://api.flowla.com/api/v2/blocks/",
headers={"x-flowla-api-key": "YOUR_API_KEY"},
params={"pageId": ""},
)
```
# Companies
Source: https://docs.flowla.com/api/companies
List and create companies in your organization. Use a returned ID as companyId when creating or updating a room.
## Endpoints
| Method | Path | Description |
| ------ | ------------------- | ---------------- |
| `GET` | `/api/v2/companies` | List companies |
| `POST` | `/api/v2/companies` | Create a company |
***
## List companies
`GET /api/v2/companies`
### Query parameters
Search by company name or domain (e.g. `"Acme"` or `"acme.com"`).
Page number (default: 1).
Results per page (default: 10).
```bash cURL theme={null}
curl "https://api.flowla.com/api/v2/companies?keyword=acme&page=1&limit=20" \
-H "x-flowla-api-key: YOUR_API_KEY"
```
```python Python theme={null}
import requests
response = requests.get(
"https://api.flowla.com/api/v2/companies",
headers={"x-flowla-api-key": "YOUR_API_KEY"},
params={"keyword": "acme", "page": 1, "limit": 20},
)
print(response.json())
```
```js JavaScript theme={null}
const res = await fetch(
"https://api.flowla.com/api/v2/companies?keyword=acme&page=1&limit=20",
{ headers: { "x-flowla-api-key": "YOUR_API_KEY" } }
);
const data = await res.json();
```
### Response
Array of company objects.
Company identifier. Use this as `companyId` when creating or updating a room.
Company display name.
Company domain (e.g. `acme.com`).
Total matching companies.
Total pages at the current limit.
```json Response 200 theme={null}
{
"results": [
{ "id": "cmp_01ab2", "name": "Acme Corp", "domain": "acme.com" }
],
"totalRecords": 1,
"totalPages": 1
}
```
***
## Create a company
`POST /api/v2/companies`
Company domain (e.g. `acme.com`). Also used as `name` when `name` is omitted.
Company display name. Defaults to `domain` when not provided.
Full website URL (e.g. `https://acme.com`).
```json Example theme={null}
{ "domain": "acme.com", "name": "Acme Corp" }
```
```bash cURL theme={null}
curl -X POST https://api.flowla.com/api/v2/companies \
-H "x-flowla-api-key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "domain": "acme.com", "name": "Acme Corp" }'
```
```python Python theme={null}
import requests
response = requests.post(
"https://api.flowla.com/api/v2/companies",
headers={"x-flowla-api-key": "YOUR_API_KEY"},
json={"domain": "acme.com", "name": "Acme Corp"},
)
print(response.json())
```
```js JavaScript theme={null}
const res = await fetch("https://api.flowla.com/api/v2/companies", {
method: "POST",
headers: {
"x-flowla-api-key": "YOUR_API_KEY",
"Content-Type": "application/json",
},
body: JSON.stringify({ domain: "acme.com", name: "Acme Corp" }),
});
const company = await res.json();
```
### Response
```json Response 201 theme={null}
{
"id": "cmp_01ab2",
"name": "Acme Corp",
"domain": "acme.com",
"website": null,
"createdAt": "2026-06-01T10:00:00.000Z"
}
```
# Groups
Source: https://docs.flowla.com/api/groups
Groups are rows on a page. They hold one or more blocks and can have optional titles.
## Endpoints
| Method | Path | Description |
| -------- | -------------------------------------------- | ----------------------------- |
| `GET` | `/api/v2/groups?pageId={page_id}` | List groups on a page |
| `POST` | `/api/v2/groups` | Create groups |
| `PATCH` | `/api/v2/groups/{group_id}` | Update a group |
| `DELETE` | `/api/v2/groups/{group_id}?pageId={page_id}` | Delete a group and its blocks |
***
## List groups
`GET /api/v2/groups?pageId={page_id}`
```bash cURL theme={null}
curl "https://api.flowla.com/api/v2/groups?pageId=" \
-H "x-flowla-api-key: YOUR_API_KEY"
```
```python Python theme={null}
import requests
response = requests.get(
"https://api.flowla.com/api/v2/groups",
headers={"x-flowla-api-key": "YOUR_API_KEY"},
params={"pageId": ""},
)
```
```js JavaScript theme={null}
const res = await fetch(
"https://api.flowla.com/api/v2/groups?pageId=",
{ headers: { "x-flowla-api-key": "YOUR_API_KEY" } }
);
```
***
## Create groups
`POST /api/v2/groups`
Create one or more groups on a page in a single request.
The page to add groups to.
Array of group objects.
Display title shown above the group.
```json Example theme={null}
{
"pageId": "",
"groups": [
{ "title": "Quick links" },
{ "title": "Resources" }
]
}
```
```bash cURL theme={null}
curl -X POST https://api.flowla.com/api/v2/groups \
-H "x-flowla-api-key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"pageId": "",
"groups": [{ "title": "Quick links" }]
}'
```
```python Python theme={null}
requests.post(
"https://api.flowla.com/api/v2/groups",
headers={"x-flowla-api-key": "YOUR_API_KEY"},
json={
"pageId": "",
"groups": [{"title": "Quick links"}],
},
)
```
```js JavaScript theme={null}
await fetch("https://api.flowla.com/api/v2/groups", {
method: "POST",
headers: {
"x-flowla-api-key": "YOUR_API_KEY",
"Content-Type": "application/json",
},
body: JSON.stringify({
pageId: "",
groups: [{ title: "Quick links" }],
}),
});
```
***
## Update a group
`PATCH /api/v2/groups/{group_id}`
The page the group belongs to.
New display title.
```json Example theme={null}
{ "pageId": "", "title": "Updated Group Title" }
```
```bash cURL theme={null}
curl -X PATCH https://api.flowla.com/api/v2/groups/ \
-H "x-flowla-api-key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"pageId": "", "title": "Updated Group Title"}'
```
```python Python theme={null}
requests.patch(
"https://api.flowla.com/api/v2/groups/",
headers={"x-flowla-api-key": "YOUR_API_KEY"},
json={"pageId": "", "title": "Updated Group Title"},
)
```
***
## Delete a group
`DELETE /api/v2/groups/{group_id}?pageId={page_id}`
Deletes the group and all its blocks permanently. Any action-plan tasks inside the group are also deleted.
```bash cURL theme={null}
curl -X DELETE "https://api.flowla.com/api/v2/groups/?pageId=" \
-H "x-flowla-api-key: YOUR_API_KEY"
```
```python Python theme={null}
requests.delete(
"https://api.flowla.com/api/v2/groups/",
headers={"x-flowla-api-key": "YOUR_API_KEY"},
params={"pageId": ""},
)
```
# Labels
Source: https://docs.flowla.com/api/labels
List label definitions configured in your organization.
## Endpoints
| Method | Path | Description |
| ------ | ---------------- | ----------- |
| `GET` | `/api/v2/labels` | List labels |
***
## List labels
`GET /api/v2/labels`
Returns all labels available in the organization. Use a returned `id` as `labelId` when creating a room.
```bash cURL theme={null}
curl https://api.flowla.com/api/v2/labels \
-H "x-flowla-api-key: YOUR_API_KEY"
```
```python Python theme={null}
import requests
response = requests.get(
"https://api.flowla.com/api/v2/labels",
headers={"x-flowla-api-key": "YOUR_API_KEY"},
)
print(response.json())
```
```js JavaScript theme={null}
const res = await fetch("https://api.flowla.com/api/v2/labels", {
headers: { "x-flowla-api-key": "YOUR_API_KEY" },
});
const labels = await res.json();
```
### Response
```json Response 200 theme={null}
[
{ "id": "lbl_01ab2", "title": "Strategic" },
{ "id": "lbl_01xy9", "title": "At Risk" }
]
```
# API Reference
Source: https://docs.flowla.com/api/overview
The Flowla REST API lets you programmatically create rooms, manage content, and retrieve analytics.
## Base URL
```
https://api.flowla.com/api/v2
```
## Authentication
All requests require your API key in the `x-flowla-api-key` header. Generate API keys from your workspace under **Settings → API**.
```bash cURL theme={null}
curl https://api.flowla.com/api/v2/rooms \
-H "x-flowla-api-key: YOUR_API_KEY"
```
```python Python theme={null}
import requests
headers = {"x-flowla-api-key": "YOUR_API_KEY"}
response = requests.get("https://api.flowla.com/api/v2/rooms", headers=headers)
```
```js JavaScript theme={null}
const res = await fetch("https://api.flowla.com/api/v2/rooms", {
headers: { "x-flowla-api-key": "YOUR_API_KEY" },
});
```
## Pagination
List endpoints accept `page` and `limit` query parameters.
## Typical workflow
`POST /api/v2/rooms` — optionally from a template or by duplicating an existing room.
`POST /api/v2/sections` — create one or more sections in a single request.
`POST /api/v2/pages` — create pages inside each section.
`POST /api/v2/groups` then `POST /api/v2/blocks` — build page content.
`POST /api/v2/action-items` — add action items to an action-plan block.
Register a webhook (`FLOW_COMPLETED`) or trigger workflows for follow-ups.
***
## Endpoints
Create, list, retrieve, and update rooms. Supports CRM linking and duplication.
Rich engagement data per room: progress, assignees, section/step viewership.
Add and manage sections with access level control.
Add and organise pages within sections, with access levels.
Group blocks together on a page.
Add text, images, links, embeds, PDFs, and action-plan blocks to groups.
Create and manage action items with assignees, dates, and statuses.
Trigger configured automations on a room.
Register and remove webhooks for room completion events.
List templates available in your org.
List and create companies to associate with rooms.
List organization users.
List room status definitions.
# Pages
Source: https://docs.flowla.com/api/pages
Pages live inside sections and contain groups of blocks. Each supports an access level for buyer visibility control.
## Endpoints
| Method | Path | Description |
| -------- | -------------------------------------- | ----------------------------- |
| `GET` | `/api/v2/pages?sectionId={section_id}` | List pages in a section |
| `POST` | `/api/v2/pages` | Create pages |
| `PATCH` | `/api/v2/pages/{page_id}` | Update a page |
| `DELETE` | `/api/v2/pages/{page_id}` | Delete a page and its content |
## Access levels
| Value | Behaviour |
| ------------ | ---------------------------- |
| `visible` | Shown to everyone |
| `restricted` | Requires password or sign-in |
| `locked` | Visible but not accessible |
| `hidden` | Not shown to the buyer |
***
## List pages
`GET /api/v2/pages?sectionId={section_id}`
```bash cURL theme={null}
curl "https://api.flowla.com/api/v2/pages?sectionId=" \
-H "x-flowla-api-key: YOUR_API_KEY"
```
```python Python theme={null}
import requests
response = requests.get(
"https://api.flowla.com/api/v2/pages",
headers={"x-flowla-api-key": "YOUR_API_KEY"},
params={"sectionId": ""},
)
```
```js JavaScript theme={null}
const res = await fetch(
"https://api.flowla.com/api/v2/pages?sectionId=",
{ headers: { "x-flowla-api-key": "YOUR_API_KEY" } }
);
```
***
## Create pages
`POST /api/v2/pages`
Create one or more pages in a single request.
The section to add pages to.
Array of page objects.
Display title of the page.
Visibility setting. Defaults to `visible`.
```json Example theme={null}
{
"sectionId": "",
"pages": [
{ "title": "Plans", "access": "visible" },
{ "title": "FAQ", "access": "visible" }
]
}
```
```bash cURL theme={null}
curl -X POST https://api.flowla.com/api/v2/pages \
-H "x-flowla-api-key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"sectionId": "",
"pages": [
{ "title": "Plans", "access": "visible" },
{ "title": "FAQ", "access": "visible" }
]
}'
```
```python Python theme={null}
requests.post(
"https://api.flowla.com/api/v2/pages",
headers={"x-flowla-api-key": "YOUR_API_KEY"},
json={
"sectionId": "",
"pages": [
{"title": "Plans", "access": "visible"},
{"title": "FAQ", "access": "visible"},
],
},
)
```
```js JavaScript theme={null}
await fetch("https://api.flowla.com/api/v2/pages", {
method: "POST",
headers: {
"x-flowla-api-key": "YOUR_API_KEY",
"Content-Type": "application/json",
},
body: JSON.stringify({
sectionId: "",
pages: [
{ title: "Plans", access: "visible" },
{ title: "FAQ", access: "visible" },
],
}),
});
```
***
## Update a page
`PATCH /api/v2/pages/{page_id}`
New display title.
New access level.
```json Example theme={null}
{ "title": "Questions & Answers", "access": "visible" }
```
```bash cURL theme={null}
curl -X PATCH https://api.flowla.com/api/v2/pages/ \
-H "x-flowla-api-key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"title": "Questions & Answers"}'
```
```python Python theme={null}
requests.patch(
"https://api.flowla.com/api/v2/pages/",
headers={"x-flowla-api-key": "YOUR_API_KEY"},
json={"title": "Questions & Answers"},
)
```
***
## Delete a page
`DELETE /api/v2/pages/{page_id}`
Deletes the page and all its groups and blocks permanently.
```bash cURL theme={null}
curl -X DELETE https://api.flowla.com/api/v2/pages/ \
-H "x-flowla-api-key: YOUR_API_KEY"
```
```python Python theme={null}
requests.delete(
"https://api.flowla.com/api/v2/pages/",
headers={"x-flowla-api-key": "YOUR_API_KEY"},
)
```
# Room Completed Events
Source: https://docs.flowla.com/api/room-completed-events
List events triggered when a room is marked as completed.
## Endpoints
| Method | Path | Description |
| ------ | ------------------------------- | -------------------------- |
| `GET` | `/api/v2/room-completed-events` | List room completed events |
***
## List room completed events
`GET /api/v2/room-completed-events`
Returns events for rooms that have been completed in your organization.
### Query parameters
Page number (default: 1).
Results per page (default: 10).
```bash cURL theme={null}
curl "https://api.flowla.com/api/v2/room-completed-events?page=1&limit=20" \
-H "x-flowla-api-key: YOUR_API_KEY"
```
```python Python theme={null}
import requests
response = requests.get(
"https://api.flowla.com/api/v2/room-completed-events",
headers={"x-flowla-api-key": "YOUR_API_KEY"},
params={"page": 1, "limit": 20},
)
print(response.json())
```
```js JavaScript theme={null}
const res = await fetch(
"https://api.flowla.com/api/v2/room-completed-events?page=1&limit=20",
{ headers: { "x-flowla-api-key": "YOUR_API_KEY" } }
);
const events = await res.json();
```
### Response fields
| Field | Type | Description |
| ---------------- | ------ | ----------------------------------- |
| `flowId` | string | Room identifier |
| `flowTitle` | string | Room title |
| `flowOwnerEmail` | string | Email of the room owner |
| `flowOwnerName` | string | Name of the room owner |
| `linkAnalytics` | string | Direct link to the room's analytics |
| `linkEditView` | string | Direct link to edit the room |
| `linkLiveView` | string | Direct link to the live room view |
You can also register a webhook to be notified in real time when a room is completed. See [Webhooks](/api/webhooks).
# Rooms
Source: https://docs.flowla.com/api/rooms
Create, list, retrieve, and update rooms. Supports CRM linking, templates, and duplication.
## Endpoints
| Method | Path | Description |
| ------- | ---------------------------------- | ------------------------------------ |
| `POST` | `/api/v2/rooms` | Create a room |
| `GET` | `/api/v2/rooms/{room_id}` | Get a room |
| `GET` | `/api/v2/rooms/{room_id}/contents` | Get room structure and block content |
| `GET` | `/api/v2/rooms` | List rooms |
| `PATCH` | `/api/v2/rooms/{room_id}` | Update a room |
***
## Create a room
`POST /api/v2/rooms`
### Body parameters
The display title of the room.
Optional description.
Template ID to initialise the room from. Ignored when `duplicateFromId` is set.
ID of an existing room to duplicate.
ID of the company to associate with this room.
ID of the status to set on the room.
ID of the label to apply.
ID of the Flowla user to assign as room owner.
Email address of the primary contact.
HubSpot deal ID to link this room to.
Salesforce opportunity ID (e.g. `0064x000009abcD`).
Attio deal ID (e.g. `deal-abc-123`).
Title displayed on the room's cover page.
Description displayed on the room's cover page.
When `true`, the cover page is hidden.
Background color as a hex value (e.g. `#FF5500`).
Navigation bar color. Accepts a hex value, `"flow-org-color"` (your org's brand color), or `"target-company-color"` (the associated company's color).
### Modes
```json theme={null}
{
"title": "Acme Corp – Onboarding",
"email": "buyer@acme.com",
"companyId": ""
}
```
```json theme={null}
{
"title": "Acme Corp – Onboarding",
"templateId": "",
"email": "buyer@acme.com"
}
```
```json theme={null}
{
"title": "Acme Corp – Onboarding (copy)",
"duplicateFromId": ""
}
```
```json theme={null}
{
"title": "Globex Q3 Deal",
"templateId": "",
"hsDealId": "12345678",
"userId": ""
}
```
```bash cURL theme={null}
curl -X POST https://api.flowla.com/api/v2/rooms \
-H "x-flowla-api-key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"title": "Acme Corp – Onboarding",
"templateId": "",
"email": "buyer@acme.com",
"hsDealId": "12345678"
}'
```
```python Python theme={null}
import requests
response = requests.post(
"https://api.flowla.com/api/v2/rooms",
headers={"x-flowla-api-key": "YOUR_API_KEY"},
json={
"title": "Acme Corp – Onboarding",
"templateId": "",
"email": "buyer@acme.com",
"hsDealId": "12345678",
},
)
print(response.json())
```
```js JavaScript theme={null}
const res = await fetch("https://api.flowla.com/api/v2/rooms", {
method: "POST",
headers: {
"x-flowla-api-key": "YOUR_API_KEY",
"Content-Type": "application/json",
},
body: JSON.stringify({
title: "Acme Corp – Onboarding",
templateId: "",
email: "buyer@acme.com",
hsDealId: "12345678",
}),
});
const room = await res.json();
```
***
## Get a room
`GET /api/v2/rooms/{room_id}`
```bash cURL theme={null}
curl https://api.flowla.com/api/v2/rooms/ \
-H "x-flowla-api-key: YOUR_API_KEY"
```
```python Python theme={null}
response = requests.get(
"https://api.flowla.com/api/v2/rooms/",
headers={"x-flowla-api-key": "YOUR_API_KEY"},
)
```
```js JavaScript theme={null}
const res = await fetch("https://api.flowla.com/api/v2/rooms/", {
headers: { "x-flowla-api-key": "YOUR_API_KEY" },
});
```
***
## Get room contents
`GET /api/v2/rooms/{room_id}/contents`
Returns the full structure of a room: sections → pages → groups →
blocks, with text content extracted from each block. Action-plan
blocks also include their action items.
Use this endpoint when you need to understand what is inside a room
— for example, before suggesting next best actions or edits.
### Response shape
```json theme={null}
{
"sections": [
{
"id": "",
"title": "Introduction",
"access": "visible",
"pages": [
{
"id": "",
"title": "Overview",
"access": "visible",
"groups": [
{
"id": "",
"title": null,
"blocks": [
{
"id": "",
"type": "text",
"content": "Welcome to Acme Corp's onboarding room."
},
{
"id": "",
"type": "action-plan",
"content": null,
"actionItems": [
{
"id": "",
"title": "Sign NDA",
"status": "done",
"dueDate": "2026-06-15T00:00:00.000Z",
"completedAt": "2026-06-10T09:23:00.000Z"
}
]
}
]
}
]
}
]
}
]
}
```
```bash cURL theme={null}
curl https://api.flowla.com/api/v2/rooms//contents \
-H "x-flowla-api-key: YOUR_API_KEY"
```
```python Python theme={null}
response = requests.get(
"https://api.flowla.com/api/v2/rooms//contents",
headers={"x-flowla-api-key": "YOUR_API_KEY"},
)
```
```js JavaScript theme={null}
const res = await fetch(
"https://api.flowla.com/api/v2/rooms//contents",
{ headers: { "x-flowla-api-key": "YOUR_API_KEY" } }
);
```
***
## List rooms
`GET /api/v2/rooms`
### Query parameters
Page number (default: 1).
Results per page (default: 10).
Field to sort by (default: `createdAt`).
Sort direction (default: `DESC`).
### Response fields
Each room in `results` includes:
| Field | Type | Description |
| ------------------ | --------------- | ---------------------------------------------------------------------------------------------- |
| `id` | string | Room identifier |
| `title` | string | Room title |
| `userId` | string \| null | Room owner user ID |
| `companyId` | string \| null | Associated company ID |
| `createdAt` | string | ISO 8601 |
| `updatedAt` | string | ISO 8601 |
| `totalEngagements` | number \| null | Total engagement actions across all types |
| `lastEngagedAt` | string \| null | Timestamp of the last engagement |
| `totalViews` | number \| null | Total page view count |
| `totalUniqueViews` | number \| null | Unique viewer count |
| `engagements` | object \| null | Breakdown: `clicks`, `comments`, `downloads`, `reactions`, `shares`, `views`, `tasksCompleted` |
| `coverTitle` | string \| null | Cover page title |
| `coverDescription` | string \| null | Cover page description |
| `coverDisabled` | boolean \| null | Whether the cover page is hidden |
| `themeColor` | string \| null | Background color |
| `navColor` | string \| null | Navigation bar color |
```bash cURL theme={null}
curl "https://api.flowla.com/api/v2/rooms?page=1&limit=20" \
-H "x-flowla-api-key: YOUR_API_KEY"
```
```python Python theme={null}
response = requests.get(
"https://api.flowla.com/api/v2/rooms",
headers={"x-flowla-api-key": "YOUR_API_KEY"},
params={"page": 1, "limit": 20},
)
```
```js JavaScript theme={null}
const res = await fetch("https://api.flowla.com/api/v2/rooms?page=1&limit=20", {
headers: { "x-flowla-api-key": "YOUR_API_KEY" },
});
```
***
## Update a room
`PATCH /api/v2/rooms/{room_id}`
All fields are optional. Only provided fields are updated.
New display title.
New description.
New status ID.
Sets the room owner.
Links the room to a company.
HubSpot deal ID.
Salesforce opportunity ID.
Attio deal ID.
Cover page title.
Cover page description.
When `true`, the cover page is hidden.
Background color as a hex value (e.g. `#FF5500`).
Navigation bar color. Accepts a hex value, `"flow-org-color"`, or `"target-company-color"`.
```json Example theme={null}
{
"title": "Globex – Closed Won",
"statusId": "",
"userId": ""
}
```
```bash cURL theme={null}
curl -X PATCH https://api.flowla.com/api/v2/rooms/ \
-H "x-flowla-api-key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"title": "Globex – Closed Won", "statusId": ""}'
```
```python Python theme={null}
requests.patch(
"https://api.flowla.com/api/v2/rooms/",
headers={"x-flowla-api-key": "YOUR_API_KEY"},
json={"title": "Globex – Closed Won", "statusId": ""},
)
```
```js JavaScript theme={null}
await fetch("https://api.flowla.com/api/v2/rooms/", {
method: "PATCH",
headers: {
"x-flowla-api-key": "YOUR_API_KEY",
"Content-Type": "application/json",
},
body: JSON.stringify({ title: "Globex – Closed Won", statusId: "" }),
});
```
# Sections
Source: https://docs.flowla.com/api/sections
Sections are the top-level chapters within a room. Each supports an access level that controls buyer visibility.
## Endpoints
| Method | Path | Description |
| -------- | ----------------------------------- | ------------------------------ |
| `GET` | `/api/v2/sections?roomId={room_id}` | List sections in a room |
| `POST` | `/api/v2/sections` | Create sections |
| `PATCH` | `/api/v2/sections/{section_id}` | Update a section |
| `DELETE` | `/api/v2/sections/{section_id}` | Delete a section and its pages |
## Access levels
| Value | Behaviour |
| ------------ | ---------------------------- |
| `visible` | Shown to everyone |
| `restricted` | Requires password or sign-in |
| `locked` | Visible but not accessible |
| `hidden` | Not shown to the buyer |
***
## List sections
`GET /api/v2/sections?roomId={room_id}`
```bash cURL theme={null}
curl "https://api.flowla.com/api/v2/sections?roomId=" \
-H "x-flowla-api-key: YOUR_API_KEY"
```
```python Python theme={null}
import requests
response = requests.get(
"https://api.flowla.com/api/v2/sections",
headers={"x-flowla-api-key": "YOUR_API_KEY"},
params={"roomId": ""},
)
```
```js JavaScript theme={null}
const res = await fetch(
"https://api.flowla.com/api/v2/sections?roomId=",
{ headers: { "x-flowla-api-key": "YOUR_API_KEY" } }
);
```
***
## Create sections
`POST /api/v2/sections`
Create one or more sections in a single request.
The room to add sections to.
Array of section objects.
Display title of the section.
Visibility setting. Defaults to `visible`.
```json Example theme={null}
{
"roomId": "",
"sections": [
{ "title": "Introduction", "access": "visible" },
{ "title": "Pricing", "access": "visible" },
{ "title": "Internal Notes", "access": "hidden" }
]
}
```
```bash cURL theme={null}
curl -X POST https://api.flowla.com/api/v2/sections \
-H "x-flowla-api-key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"roomId": "",
"sections": [
{ "title": "Introduction", "access": "visible" },
{ "title": "Pricing", "access": "visible" }
]
}'
```
```python Python theme={null}
requests.post(
"https://api.flowla.com/api/v2/sections",
headers={"x-flowla-api-key": "YOUR_API_KEY"},
json={
"roomId": "",
"sections": [
{"title": "Introduction", "access": "visible"},
{"title": "Pricing", "access": "visible"},
],
},
)
```
```js JavaScript theme={null}
await fetch("https://api.flowla.com/api/v2/sections", {
method: "POST",
headers: {
"x-flowla-api-key": "YOUR_API_KEY",
"Content-Type": "application/json",
},
body: JSON.stringify({
roomId: "",
sections: [
{ title: "Introduction", access: "visible" },
{ title: "Pricing", access: "visible" },
],
}),
});
```
***
## Update a section
`PATCH /api/v2/sections/{section_id}`
New display title.
New access level.
```json Example theme={null}
{ "title": "New Title", "access": "visible" }
```
```bash cURL theme={null}
curl -X PATCH https://api.flowla.com/api/v2/sections/ \
-H "x-flowla-api-key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"title": "New Title", "access": "visible"}'
```
```python Python theme={null}
requests.patch(
"https://api.flowla.com/api/v2/sections/",
headers={"x-flowla-api-key": "YOUR_API_KEY"},
json={"title": "New Title", "access": "visible"},
)
```
***
## Delete a section
`DELETE /api/v2/sections/{section_id}`
Deletes the section and all its pages, groups, and blocks permanently.
```bash cURL theme={null}
curl -X DELETE https://api.flowla.com/api/v2/sections/ \
-H "x-flowla-api-key: YOUR_API_KEY"
```
```python Python theme={null}
requests.delete(
"https://api.flowla.com/api/v2/sections/",
headers={"x-flowla-api-key": "YOUR_API_KEY"},
)
```
# Sessions
Source: https://docs.flowla.com/api/sessions
List visitor sessions — each time someone viewed a room.
## Endpoints
| Method | Path | Description |
| ------ | ------------------ | ------------- |
| `GET` | `/api/v2/sessions` | List sessions |
***
## List sessions
`GET /api/v2/sessions`
Returns visitor sessions across rooms in your organization,
with location, device, and contact information.
### Query parameters
Page number (default: 1).
Results per page (default: 10).
Filter sessions to a specific room.
Filter by identified contact ID.
Search by visitor name or email.
When `true`, return only sessions with an identified contact.
Sort field (default: `createdAt`).
Sort direction (default: `DESC`).
Return sessions created at or after this ISO 8601 date.
Return sessions created at or before this ISO 8601 date.
### Response fields
Each item in `results` includes:
| Field | Type | Description |
| ------------------ | -------------- | --------------------------------------------------- |
| `id` | string | Session identifier |
| `roomId` | string | Room the session belongs to |
| `createdAt` | string | ISO 8601 — when the session started |
| `updatedAt` | string | ISO 8601 |
| `city` | string \| null | Visitor city |
| `region` | string \| null | Visitor region |
| `country` | string \| null | Visitor country |
| `visitorNumber` | number \| null | Ordinal visitor number for this room |
| `browser.software` | string \| null | Browser name |
| `browser.os` | string \| null | Operating system |
| `browser.contact` | object \| null | Identified contact (`id`, `email`, `fullName`) |
| `user` | object \| null | Room owner (`id`, `email`, `firstName`, `lastName`) |
```bash cURL theme={null}
curl "https://api.flowla.com/api/v2/sessions?roomId=&limit=20" \
-H "x-flowla-api-key: YOUR_API_KEY"
```
```python Python theme={null}
import requests
response = requests.get(
"https://api.flowla.com/api/v2/sessions",
headers={"x-flowla-api-key": "YOUR_API_KEY"},
params={"roomId": "", "page": 1, "limit": 20},
)
print(response.json())
```
```js JavaScript theme={null}
const res = await fetch(
"https://api.flowla.com/api/v2/sessions?roomId=&limit=20",
{ headers: { "x-flowla-api-key": "YOUR_API_KEY" } }
);
const data = await res.json();
```
# Statuses
Source: https://docs.flowla.com/api/statuses
List room status definitions configured in your organization.
## Endpoints
| Method | Path | Description |
| ------ | ------------------ | ------------------ |
| `GET` | `/api/v2/statuses` | List room statuses |
***
## List room statuses
`GET /api/v2/statuses`
Returns all room statuses available in the organization. Use a returned `id` as `statusId` when creating or updating a room.
```bash cURL theme={null}
curl https://api.flowla.com/api/v2/statuses \
-H "x-flowla-api-key: YOUR_API_KEY"
```
```python Python theme={null}
import requests
response = requests.get(
"https://api.flowla.com/api/v2/statuses",
headers={"x-flowla-api-key": "YOUR_API_KEY"},
)
print(response.json())
```
```js JavaScript theme={null}
const res = await fetch("https://api.flowla.com/api/v2/statuses", {
headers: { "x-flowla-api-key": "YOUR_API_KEY" },
});
const statuses = await res.json();
```
### Response
Status identifier. Use this as `statusId` when creating or updating a room.
Display name of the status.
`true` if this status is automatically assigned to new rooms.
```json Response 200 theme={null}
[
{ "id": "st_01ab2", "title": "In Progress", "defaultStatus": true },
{ "id": "st_01xy9", "title": "Closed Won", "defaultStatus": false }
]
```
Colors and other visual metadata are not included in the API response.
# Templates
Source: https://docs.flowla.com/api/templates
List room templates available in your organization. Use a returned ID as templateId when creating a room.
## Endpoints
| Method | Path | Description |
| ------ | ------------------- | -------------- |
| `GET` | `/api/v2/templates` | List templates |
***
## List templates
`GET /api/v2/templates`
### Query parameters
`org` (default) returns your organization's templates. `public` returns marketplace templates.
Page number (default: 1).
Results per page (default: 10).
```bash cURL theme={null}
curl "https://api.flowla.com/api/v2/templates?source=org&page=1&limit=20" \
-H "x-flowla-api-key: YOUR_API_KEY"
```
```python Python theme={null}
import requests
response = requests.get(
"https://api.flowla.com/api/v2/templates",
headers={"x-flowla-api-key": "YOUR_API_KEY"},
params={"source": "org", "page": 1, "limit": 20},
)
print(response.json())
```
```js JavaScript theme={null}
const res = await fetch(
"https://api.flowla.com/api/v2/templates?source=org&page=1&limit=20",
{ headers: { "x-flowla-api-key": "YOUR_API_KEY" } }
);
const data = await res.json();
```
### Response
Array of template objects.
Template identifier. Pass this as `templateId` when creating a room.
Template display name.
Optional description.
ISO 8601 creation timestamp.
Total number of matching templates.
Total number of pages at the current `limit`.
```json Response 200 theme={null}
{
"results": [
{ "id": "tpl_01ab2", "title": "Enterprise onboarding", "description": null, "createdAt": "2026-01-15T10:00:00.000Z" },
{ "id": "tpl_01xy9", "title": "POC kickoff", "description": null, "createdAt": "2026-02-01T09:00:00.000Z" }
],
"totalRecords": 2,
"totalPages": 1
}
```
# Users
Source: https://docs.flowla.com/api/users
List users in your organization.
## Endpoints
| Method | Path | Description |
| ------ | --------------- | ----------------------- |
| `GET` | `/api/v2/users` | List organization users |
***
## List users
`GET /api/v2/users`
Returns active users in the organization. Use a returned ID as `userId` when creating or updating a room.
```bash cURL theme={null}
curl https://api.flowla.com/api/v2/users \
-H "x-flowla-api-key: YOUR_API_KEY"
```
```python Python theme={null}
import requests
response = requests.get(
"https://api.flowla.com/api/v2/users",
headers={"x-flowla-api-key": "YOUR_API_KEY"},
)
print(response.json())
```
```js JavaScript theme={null}
const res = await fetch("https://api.flowla.com/api/v2/users", {
headers: { "x-flowla-api-key": "YOUR_API_KEY" },
});
const users = await res.json();
```
# Workflows
Source: https://docs.flowla.com/api/workflows
Trigger configured Flowla automations on a room.
## Endpoints
| Method | Path | Description |
| ------ | ------------------------------------- | ----------------------------- |
| `POST` | `/api/v2/workflows/{workflow_id}` | Trigger a workflow |
| `POST` | `/api/v2/workflows/{workflow_id}/raw` | Trigger a workflow (raw body) |
***
## Trigger a workflow
`POST /api/v2/workflows/{workflow_id}`
Triggers a configured automation. The request body is wrapped in a `data` object.
Arbitrary key-value data passed to the workflow.
```json Example theme={null}
{ "data": { "roomId": "", "stage": "kickoff" } }
```
```bash cURL theme={null}
curl -X POST https://api.flowla.com/api/v2/workflows/ \
-H "x-flowla-api-key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"data": {"roomId": "", "stage": "kickoff"}}'
```
```python Python theme={null}
import requests
requests.post(
"https://api.flowla.com/api/v2/workflows/",
headers={"x-flowla-api-key": "YOUR_API_KEY"},
json={"data": {"roomId": "", "stage": "kickoff"}},
)
```
```js JavaScript theme={null}
await fetch("https://api.flowla.com/api/v2/workflows/", {
method: "POST",
headers: {
"x-flowla-api-key": "YOUR_API_KEY",
"Content-Type": "application/json",
},
body: JSON.stringify({ data: { roomId: "", stage: "kickoff" } }),
});
```
***
## Trigger a workflow (raw)
`POST /api/v2/workflows/{workflow_id}/raw`
Same as above but sends the full request body as workflow data — no `data` wrapper.
```json Example theme={null}
{ "roomId": "", "stage": "kickoff" }
```
```bash cURL theme={null}
curl -X POST https://api.flowla.com/api/v2/workflows//raw \
-H "x-flowla-api-key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"roomId": "", "stage": "kickoff"}'
```
```python Python theme={null}
requests.post(
"https://api.flowla.com/api/v2/workflows//raw",
headers={"x-flowla-api-key": "YOUR_API_KEY"},
json={"roomId": "", "stage": "kickoff"},
)
```
```js JavaScript theme={null}
await fetch("https://api.flowla.com/api/v2/workflows//raw", {
method: "POST",
headers: {
"x-flowla-api-key": "YOUR_API_KEY",
"Content-Type": "application/json",
},
body: JSON.stringify({ roomId: "", stage: "kickoff" }),
});
```
# Attio automations
Source: https://docs.flowla.com/automations/Attio
Trigger Flowla workflows from Attio events like deal stage changes and attribute updates.
## TL;DR
Trigger Flowla workflows from Attio events — like a deal stage changing or an attribute being updated — to automatically create rooms, personalise content, and keep your CRM in sync.
***
### Why it matters
Attio tracks every stage of your deal pipeline. When something changes there, that's the right moment for Flowla to act. By using Attio as a trigger, you can:
* **Create a personalised room the moment a deal reaches a new stage** — auto-fill company name, contact details, and deal data so your team hits the ground running
* **Update Attio when something happens inside the room** — when a buyer completes an action or section, automatically log it as an engagement note on the deal record
* **Keep both platforms in sync** — room views, action completions, and content engagement flow back to Attio automatically, so your CRM always reflects real buyer activity
***
### What you can use as triggers
Flowla currently supports the following Attio-triggered workflows:
* **Deal Stage Changed** — when a deal moves to a specific stage (e.g. *In Progress* or *Closed Won*), trigger room creation or content updates
* **Attribute Updated** — when a deal or contact attribute is updated in Attio, trigger room actions or personalisation updates
#### Actions you can trigger from Attio events
Using the Attio triggers above, you can:
* **Create a room from a template**
* **Assign the room creator based on the deal owner**
* **Fill variables** using company, contact, or deal data from Attio
* **Unlock room sections** based on deal stage progression
* **Log room activity** back into Attio as engagement notes
***
### How to set it up
In Flowla, navigate to **Workflows** in the main navigation.
Click **+ Create New Workflow** then **Add Trigger**.
Select **Attio** as the trigger type, then choose the event:
* **Deal stage changed**
* **Attribute updated** — e.g. a specific field value changing
Add the actions you want to trigger:
* Create a room from a template
* Unlock a section
* Change the room's status
* Add CRM data as variables
Learn more about setting up the two-way sync between Flowla and Attio in the [Attio integration guide](/integrations/Attio).
# HubSpot automations
Source: https://docs.flowla.com/automations/HubSpot
Trigger Flowla workflows from HubSpot events like deal stage changes and property updates.
## TL;DR
Trigger Flowla workflows from HubSpot events — like a deal moving to a new stage or a contact property being updated — to automatically create rooms, send follow-ups, and keep your CRM in sync.
***
### Why it matters
Your HubSpot deals hold the source of truth for every customer relationship. When something happens in HubSpot, that's the perfect moment to act. By using HubSpot as a trigger, you can:
* **Create a personalised room the moment a deal is created or moves to a new stage** — auto-fill company name, logo, and contact details so your team doesn't start from scratch
* **Update HubSpot when something happens inside the room** — when a buyer completes an action or submits a form, automatically update a HubSpot property or deal field
* **Change the room status based on deal stage updates** — if a deal moves to "Closed Won" in HubSpot, Flowla can update the room's status and unlock onboarding sections automatically
***
### What you can use as triggers
Flowla currently supports the following HubSpot-triggered workflows:
* **New Deal Created** — when a new deal is created in HubSpot, trigger a room automatically
* **Deal Stage Changed** — when a deal moves to a specific stage (e.g. *Proposal Sent* or *Closed Won*), trigger room creation, content updates, or a sync back to HubSpot
* **Property Updated** — when a contact or deal field is updated (e.g. "Contract Signed = True"), trigger room actions or field updates
#### Actions you can trigger from HubSpot events
Using the HubSpot triggers above, you can:
* **Create a room from a template**
* **Assign the room creator based on the deal owner**
* **Fill variables** using contact, company, or deal data from HubSpot
* **Update HubSpot fields** (e.g. mark onboarding as started when a room section is completed)
* **Unlock room sections** based on deal stage progression
* **Track room status changes** back into HubSpot
***
### How to set it up
In Flowla, navigate to **Workflows** in the main navigation.
Click **+ Create New Workflow** then **Add Trigger**.
Select **HubSpot** as the trigger type, then choose the event:
* **New deal** — when a new deal is created
* **Deal stage changed**
* **Property updated** — e.g. "Contract Signed = True"
Add the actions you want to trigger:
* Create a room from a template
* Unlock a section
* Update HubSpot fields
* Change the room's status
* Add CRM data as variables
You can also automate room creation directly from HubSpot deal records. Learn more about the [HubSpot integration](/integrations/HubSpot).
# Salesforce automations
Source: https://docs.flowla.com/automations/Salesforce
Trigger Flowla workflows from Salesforce events like opportunity stage changes and property updates.
## TL;DR
Trigger Flowla workflows from Salesforce events — like an opportunity stage changing or a property being updated — to automatically create rooms, send follow-ups, and keep your CRM in sync.
***
### Why it matters
Your CRM holds the source of truth for every deal. When something happens in Salesforce, that's the perfect moment to act. By using Salesforce as a trigger, you can:
* **Create a personalised room the moment a new opportunity is logged** — auto-fill company name, logo, and primary contact so your team doesn't start from scratch
* **Update Salesforce when something happens inside the room** — when a section is marked complete in Flowla, automatically update a Salesforce field
* **Change the room status based on Salesforce property updates** — if "Contract Signed" is checked in Salesforce, Flowla can update the room's status and unlock onboarding sections
***
### What you can use as triggers
Flowla currently supports the following Salesforce-triggered workflows:
* **New Object Created** — when a new Opportunity is created, trigger a room automatically
* **Opportunity Stage Changed** — when an opportunity moves to a specific stage (e.g. *Proposal Sent* or *Closed Won*), trigger room creation, content updates, or a sync back to Salesforce
* **Property Updated** — when a field (e.g. "Contract Signed") is updated, trigger room actions or field updates
#### Actions you can trigger from Salesforce events
Using the Salesforce triggers above, you can:
* **Create a room from a template**
* **Assign the room creator based on the opportunity owner**
* **Fill variables** using contact, company, or deal data
* **Update Salesforce fields** (e.g. mark onboarding as started when a section is completed)
* **Unlock room sections** based on deal progression
* **Track room status changes** back into Salesforce
***
### How to set it up
In Flowla, navigate to **Workflows** in the main navigation.
Click **+ Create New Workflow** then **Add Trigger**.
Select **Salesforce** as the trigger type, then choose the event:
* **New object** — e.g. when a new opportunity is created
* **Opportunity stage changed**
* **Property updated** — e.g. "Contract Signed = True"
Add the actions you want to trigger:
* Create a room from a template
* Unlock a section
* Update Salesforce fields
* Change the room's status
* Add CRM data as variables
Learn more about setting up the two-way sync between Flowla and Salesforce in the [Salesforce integration guide](/integrations/SalesForce).
# Actions
Source: https://docs.flowla.com/automations/actions
See everything your workflows can do — from creating rooms to sending emails and updating your CRM.
Actions are what your workflow actually does — the steps Flowla takes once a trigger fires.
***
### Room actions
| Action | What it does |
| ----------------------------- | -------------------------------------------------- |
| **Create room from template** | Creates a new room using a template you choose |
| **Change room status** | Updates the room's status (e.g. active, closed) |
| **Change section access** | Lock, unlock, hide, or show sections inside a room |
***
### Communication actions
| Action | What it does |
| ---------------------- | ------------------------------------------------------------------------- |
| **Send email** | Sends an email from Flowla or via your connected Gmail or Outlook account |
| **Slack send message** | Posts a message to a Slack channel or a specific person |
***
### Contact & company actions
| Action | What it does |
| ------------------------------- | -------------------------------------------------------------------------- |
| **Create company from contact** | Creates a company record using the contact's email domain and details |
| **Find or create a company** | Looks up an existing company or creates a new one if it doesn't exist yet |
| **Find or create contact** | Looks up a contact by email and creates one if they're not already there |
| **Enrich contact** | Pulls in extra details about a contact — job title, LinkedIn, company info |
| **Add a contact to room** | Adds an existing contact as a stakeholder in the current room |
***
### Task actions
| Action | What it does |
| ------------------------ | ---------------------------------------------------- |
| **Create action** | Adds a new task to a room |
| **Change action status** | Marks a task as done, in progress, or another status |
| **Duplicate action** | Copies an existing task |
***
### CRM actions — HubSpot
| Action | What it does |
| --------------------- | -------------------------------------------- |
| **Change deal stage** | Moves a deal to a different stage in HubSpot |
| **Change property** | Updates any field in HubSpot |
***
### CRM actions — Salesforce
| Action | What it does |
| ----------------------------- | ------------------------------------------------------- |
| **Change opportunity status** | Moves an opportunity to a different stage in Salesforce |
| **Change property** | Updates any field in Salesforce |
***
### CRM actions — Attio
| Action | What it does |
| ------------------- | --------------------------------------------- |
| **Find Attio deal** | Searches for an existing deal record in Attio |
| **Change property** | Updates any field in Attio |
***
### AI actions
| Action | What it does |
| ------------- | ------------------------------------------------------- |
| **AI prompt** | Generates content using custom instructions you provide |
***
### Advanced actions
| Action | What it does |
| --------------------------------- | -------------------------------------------------------------- |
| **Stop workflow with conditions** | Stops the workflow if certain conditions are met |
| **Conditional path** | Branches the workflow in different directions based on logic |
| **Loop** | Repeats a set of actions for each item in a list |
| **Delay** | Pauses the workflow for a set amount of time before continuing |
| **Make an HTTP request** | Sends a request to an external tool or service |
| **Code** | Runs custom code at a specific point in the workflow |
***
### Configuring actions
**Using dynamic values**
You can pull in real data from earlier in the workflow — like the contact's name, the room link, or the deal name — so each action is personalized automatically.
Examples:
* `{{trigger.deal_name}}` — the name of the deal that triggered the workflow
* `{{contact.email}}` — the contact's email address
* `{{room.link}}` — the shareable link to the room
Use dynamic values wherever possible — hardcoding a contact name or email address makes the workflow brittle and less useful across your team.
**Sending to the Smart Queue for review**
Toggle on **"Add to queue for review"** on any action to hold it for your approval before it runs. This is especially useful for AI-generated emails or updates you want to check before they go out.
***
### Best practices
1. **Order actions logically** — Run them in the sequence they should happen
2. **Use dynamic values** — Personalise each action with real data from the trigger
3. **Plan for errors** — Think about what should happen if an action doesn't work
4. **Test one step at a time** — Add actions gradually and verify each one before adding the next
# AI Agents
Source: https://docs.flowla.com/automations/ai-actions
Add AI-powered content generation to your workflows — write follow-ups, summarise calls, and personalise rooms automatically.
AI Agents bring intelligence to your workflows, generating personalised content on the spot so your team can move faster without losing the human touch.
***
### Why use AI Agents?
Most sales and CS teams spend too much time on things like writing follow-up emails, pulling together business cases, or summarising call takeaways. AI Agents handle these steps for you — based on what actually happened, every time.
That means you can:
* Send better, more personalised follow-ups faster
* Keep deals moving even when you're back-to-back
* Give your CS team rich context without manually writing it up
* Scale your process without making it feel templated
***
### What can AI Agents do?
Drop an AI Agent anywhere in your workflow before an action. It reads the situation and generates something ready to use.
Examples:
* Write a personalised follow-up email based on form responses or room activity
* Generate a business case from your call transcript
* Summarise a kickoff form and share the highlights with your CS team
* Notify your team with enriched contact info and engagement insights
* Personalise a proposal or mutual action plan using CRM data
You can review and approve any AI-generated content before it goes out by routing the workflow through your [Smart Queue](/automations/smart-queue).
***
### Real examples
#### Example 1: Form submitted → Summary sent to team
* **Trigger**: Kickoff form submitted
* **AI Agent**: Summarise the key answers
* **Action**: Email or Slack the summary to your CS team
#### Example 2: Room not viewed → Nudge email
1. **Trigger**: Room not opened after 3 days
2. **AI Agent**: Write a friendly follow-up with key next steps
3. **Action**: Send the email from the rep's work address, personalised with the contact's name and room link
#### Example 3: Call transcript → Business case
1. **Trigger**: Gong call recording processed
2. **AI Agent**: Generate a business case from the key discussion points
3. **Action**: Add it to the room and notify the deal owner
***
### Writing a good prompt
The better your instructions, the better the output. A strong prompt includes five things:
1. **Role** — Who should the AI write as?
2. **Task** — What should it produce?
3. **Context** — What information should it use? (Use variables to pull in real data)
4. **Constraints** — How long? What tone? What format?
5. **Example** — What does a good result look like?
**Example prompt:**
```
You are a sales rep at {{organization_name}}.
Write a brief follow-up email to {{primary_contact_first_name}} at
{{target_company_name}}. The room was shared 3 days ago but hasn't
been viewed yet.
Keep it friendly, under 100 words, and include a soft call-to-action
to check out the room.
Sign off as {{room_creator_full_name}}.
```
Include a short example of the output you want in your prompt — a concrete example produces better results than a long description alone.
***
### Best practices
1. **Be specific** — Vague instructions produce vague results
2. **Add context** — More relevant data leads to better personalisation
3. **Set constraints** — Always specify the length, tone, and format you want
4. **Use the Smart Queue** — Review AI-generated messages before they reach customers
5. **Refine over time** — Test your prompts and tweak them based on the output you get
# Automations overview
Source: https://docs.flowla.com/automations/automations-overview
Set up workflows that handle your sales and onboarding process automatically — no coding needed.
## TL;DR
Workflows let Flowla do the repetitive work for you. Trigger them from CRM events, form submissions, or room activity, and Flowla creates rooms, sends emails, and updates your CRM automatically — so your team can focus on the conversations that actually close deals.
***
### What is a workflow?
A **workflow** is a set of rules that tells Flowla: *"When this happens, do that."*
For example: when a deal moves to a new stage in your CRM (your customer relationship tool, like HubSpot or Salesforce), Flowla automatically creates a room, fills it in with the right content, and sends a follow-up email — all without anyone lifting a finger.
***
### Why use workflows?
Every deal has a next step. But when your team is handling dozens of deals at once, things slip through the cracks — someone forgets to follow up, the CRM doesn't get updated, or a buyer is left waiting.
Workflows fix that. They:
* Create and personalize rooms automatically
* Keep your CRM updated based on what buyers actually do
* Notify your team at exactly the right moment
* Send timely follow-ups to buyers without manual effort
* Give every customer a consistent experience, regardless of who's running the deal
***
### How a workflow is built
Every workflow has up to three parts:
**1. Trigger — what starts it**
This is the event that kicks everything off. Examples:
* A room is created
* A deal stage changes in your CRM
* A customer submits a form
* A call recording is processed
**2. Action — what Flowla does next**
This is Flowla's response to the trigger. Examples:
* Create a room from a template
* Unlock a section in an existing room
* Send an email
* Update a field in Salesforce
* Notify a teammate in Slack
**3. AI Agent — optional, but powerful**
An AI Agent sits between a trigger and an action, adding intelligence to your workflow. It analyzes what just happened and generates personalized content for you. You give it instructions, it does the thinking.
You can use AI Agents to:
* Write follow-up emails tailored to the buyer
* Generate a business case from a call transcript
* Create handoff summaries from Sales to Customer Success
* Personalize mutual action plans based on discovery notes
***
### A real example
Your deal moves to "Proposal Sent" in your CRM. Here's what Flowla does automatically:
1. Creates a room using your proposal template
2. Fills it in with the company name, logo, and contact info from your CRM
3. Uses an AI Agent to generate a business case from your call transcript
4. Adds the proposal to your **Smart Queue** (a holding area where you can review and approve before it goes live)
5. Once approved, adds it to the room automatically
6. Drafts a personalized follow-up email with the room link
7. Sends the email from your work address
That's a complete, personalized follow-up — and nobody did it manually.
***
### No coding required
You don't need any technical skills to build workflows. Just choose what should happen and when.
* Start from scratch
* Use one of Flowla's pre-built **recipes** (ready-made workflows you can use straight away)
* Run actions immediately, or send them to your **Smart Queue** for review before they go out
***
### FAQs
Anyone on your team can build workflows. In practice, RevOps, Sales Ops, or team leads usually set them up to standardize processes across the org. Admins can create workflows that run for the entire team.
Yes. When building a workflow, you can scope it to only run for rooms you create — useful for testing something out or setting up a personal automation before rolling it out to the team.
Absolutely. Send workflow outputs to your **Smart Queue** for a manual review step before they execute. This gives you a checkpoint for anything sensitive — like sending emails or updating CRM records.
Yes. A single workflow can run multiple actions in sequence. For example: create a room, then send an email with the room link, then ping your team in Slack.
Yes. Add conditions to your workflow so it only fires when specific criteria are met — for example, only when a deal is above a certain value, or only for specific deal stages.
***
Use Smart Queue for any workflow that generates AI content or updates CRM fields — a quick review before it goes out is worth it for anything that reaches customers.
### What's next
Learn what events can start your workflows
See everything workflows can do in response
Add AI-powered content generation to your workflows
Review and approve workflow outputs before they run
Get started with pre-built workflow templates
# Custom integrations
Source: https://docs.flowla.com/automations/custom-integrations
Connect any external tool to Flowla using webhooks, custom code, and HTTP requests.
Flowla's built-in integrations cover the most common tools — but if you use something that isn't natively supported, these three building blocks let you connect anything.
| Building block | What it does |
| ----------------------- | ------------------------------------------------------------------------ |
| **Webhook Trigger** | Lets an external tool start a Flowla workflow by sending it a signal |
| **Code Action** | Runs a small piece of JavaScript to process or reshape data mid-workflow |
| **HTTP Request Action** | Sends data from Flowla outward to any external tool or service |
You can use these on their own or combine them depending on what you need.
***
## Webhook trigger — Receive data from external tools
### What it does
A Webhook trigger gives your workflow a unique URL. When any external tool sends a request to that URL, your workflow starts automatically.
Use this when:
* A tool your team uses in-house (like a custom CRM or billing system) needs to kick off a Flowla workflow
* An external event — like a contract being signed, or a form submitted on your website — should create or update a room
* You want to trigger Flowla from a tool that doesn't have a native integration
### How to set it up
Go to **AutoPilot** → **New Workflow**.
Choose **Webhook** from the trigger options.
Flowla generates a unique URL for this workflow. Copy it.
In your external tool, set it up to send a `POST` request (a way of pushing data) to that URL whenever the relevant event happens.
A typical payload (the data sent to Flowla) might look like this:
```json theme={null}
{
"deal_id": "deal_8821",
"contact_email": "jane@acmecorp.com",
"contact_name": "Jane Doe",
"company": "Acme Corp",
"stage": "Proposal",
"deal_value": 42000
}
```
Use a tool like Postman to send a test payload before building out the rest of the workflow. Check the workflow run history to confirm it fired correctly.
### What happens to the data
The data your external tool sends lands in Flowla as a raw block of text. To use individual fields from it in later steps — like the contact's name or deal value — you'll need to extract them using a Code action (explained below).
***
## Code action — Process data mid-workflow
### What it does
The Code action runs a small JavaScript snippet at any point in your workflow. It reads data from earlier in the workflow, transforms it if needed, and outputs named values that all your later actions can use.
You'll most commonly use it to extract specific fields from a webhook payload, but it works anywhere you need to reshape data.
### How to set it up
Add a **Code** action at the point in your workflow where you need to process data. Write your JavaScript snippet, then `return` the values you want to pass forward.
For each value you want to use later:
1. Click **Add variable**
2. The variable is added to your code as a `const`
### Extracting fields from a webhook payload
```javascript theme={null}
// The trigger data lives under this key in context
const triggerData = context["00000000-0000-0000-0000-000000000000"];
// The webhook payload is raw text, so parse it into usable data
const payload = JSON.parse(triggerData.payload);
// Return the specific field you want to use downstream
return payload.dataPoint;
```
After this runs, **dataPoint** is available in every subsequent action — just like any built-in variable.
***
## HTTP Request action — Send data to external tools
### What it does
The HTTP Request action sends data from Flowla to any external tool or service. Use it to push information out of Flowla into a system that doesn't have a native integration.
This action can follow **any trigger** in Flowla — not just a webhook.
### Common uses
* Room viewed for the first time → notify your internal system
* Form submitted in a room → push responses to a ticketing tool or database
* HubSpot deal stage changes → sync a field to an in-house CRM
* A task in a room is completed → trigger a downstream process in your ops tools
* A call transcript is processed → send a summary to an internal Slack bot
### How to set it up
Add an **HTTP Request** action to your workflow and fill in:
| Field | What to enter |
| ----------- | ---------------------------------------------------------- |
| **Method** | `POST`, `PATCH`, `PUT`, or `GET` |
| **URL** | The endpoint to send data to — can include `{{variables}}` |
| **Headers** | Authentication details and content type |
| **Body** | The data to send — use `{{variables}}` from earlier steps |
### Example: Notify an internal system when a room is first viewed
**Trigger:** Room viewed first time
**Method:** `POST`
**URL:**
```
https://api.yourcompany.com/events/room-viewed
```
**Headers:**
```
Content-Type: application/json
Authorization: Bearer YOUR_API_TOKEN
```
**Body:**
```json theme={null}
{
"room_id": "{{room.id}}",
"room_link": "{{room.link}}",
"viewer_email": "{{contact.email}}",
"viewed_at": "{{trigger.timestamp}}"
}
```
### Authentication options
**Bearer token:**
```
Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR...
```
**API key header:**
```
X-API-Key: your_api_key_here
```
**Basic auth:**
```
Authorization: Basic base64(username:password)
```
Always put authentication credentials in the **Headers** field, not in the body, so they don't appear in payload logs.
***
## Combining the building blocks
These three tools work alongside any other Flowla action — room creation, email sending, CRM updates, Slack messages, and more. Here are three common patterns:
### Pattern A — External event → Flowla action
An external tool fires a webhook. You extract the data and use it to create a room or send an email.
```
[Webhook Trigger]
↓
[Code Action — extract fields from the payload]
↓
[Create Room from Template — using {{company}}, {{contactEmail}}, etc.]
↓
[Send Email — with room link]
```
### Pattern B — Flowla event → External tool
Something happens inside Flowla and you push the data outward. No webhook or code action needed.
```
[Form Submitted Trigger]
↓
[HTTP Request — POST form responses to your database]
```
### Pattern C — External event → Flowla → Back out again
An external tool triggers the workflow, Flowla acts on it, then sends data back.
```
[Webhook Trigger]
↓
[Code Action — extract payload fields]
↓
[Create Room from Template]
↓
[Send Email]
↓
[HTTP Request — POST room URL back to the originating system]
```
***
## FAQs
Yes. Place it anywhere in the sequence — for example, between a CRM trigger and an HTTP Request if you need to reformat a value before sending it out.
Yes. It's a standard action that can follow any trigger — room activity, form submissions, CRM changes, call transcripts, email, or a webhook.
Yes. Add as many as you need — they run in sequence. For example, you could notify two different external systems in the same workflow.
Send a sample POST request to your Flowla webhook URL using a tool like Postman. Then check the workflow run history to confirm the trigger fired and your Code action extracted the right values.
Use optional chaining in your Code action (`data.field?.subfield ?? "fallback"`) to handle missing or inconsistent fields without breaking the workflow.
***
## What's next
Full list of available triggers
Full list of available actions
Add AI-generated content between steps
Pre-built workflow templates to get started
# Smart Queue
Source: https://docs.flowla.com/automations/smart-queue
Review and approve workflow outputs before they go out — your daily checkpoint for automated content.
Smart Queue lets you review, edit, and approve anything your workflows generate before it reaches a customer or updates your CRM.
***
### Why use Smart Queue?
Automation saves time, but not everything should go out without a human eye on it. An AI-drafted follow-up email or a generated business case might be 90% perfect — Smart Queue gives you the space to get it to 100%.
Use it to:
* Add your personal touch to AI-generated messages before they're sent
* Approve content before it reaches a prospect
* Catch anything that doesn't look quite right
* Avoid awkward or rushed automated messages going out unchecked
It's the best of both worlds: the speed of automation, with the quality of a manual review.
***
### How it works
When you turn on Smart Queue for a workflow action, here's what happens:
1. A **trigger** fires — for example, a deal stage changes or a form is submitted
2. The workflow runs and reaches an action like **Send Email** or **Add to Room**
3. That action has **"Add to queue for review"** turned on
4. Flowla generates the draft content
5. Instead of sending it immediately, the draft goes to your **Smart Queue**
6. You open the queue, review it, make any edits, then **approve** or **dismiss** it
The content only goes out once you say so.
***
### When should I use it?
Smart Queue is ideal whenever the output matters and a quick read-through adds value.
Use it when:
* You want to **personalise a follow-up email** after a demo with details from the conversation
* You'd like to **review a business case** before adding it to the room
* You want to **check a Slack handoff note** before it goes to your CS team
* You're sending something **high-stakes** and want a final look before it goes live
The heavy lifting is already done — Smart Queue just gives you a moment to make it yours.
***
### How to turn it on
Inside the Workflow Builder:
1. Add an action like **Send Email**, **Post to Slack**, or **Add to Room**
2. If the action includes AI-generated content, toggle on **"Add to queue for review"**
That action will now wait for your approval before it runs.
***
### Accessing your queue
1. Click **Smart Queue** from your Workflow menu
2. Open any draft, make edits if needed, then click **Send** or **Dismiss**
Each item in the queue shows:
* **Workflow name** — which workflow created it
* **Trigger context** — what set it off
* **Content preview** — the draft ready for your review
* **Created time** — when it was added
For each item, you can:
* **Approve** — send it or execute the action as-is
* **Edit** — tweak the content first, then approve
* **Reject** — discard it without sending
***
### Best practices
1. **Start with it on** — Enable Smart Queue while you're testing a new workflow to review output before it goes live
2. **Turn it off once you're confident** — Once a workflow is producing reliable results, disable the queue so it runs fully automatically
3. **Always keep it on for AI content** — AI-generated customer-facing messages are worth a quick review
4. **Build it into your routine** — Check your queue morning and evening so drafts don't sit too long
# Suggested Recipes
Source: https://docs.flowla.com/automations/suggested-recipes
Pre-built workflow templates that get you up and running with automation in minutes.
Recipes are ready-made workflows you can use straight away — no setup from scratch needed.
***
### Create & send rooms
#### Kick off buyer journeys automatically
Launch personalized rooms the moment something important happens:
* **From CRM triggers** — Create and share a room when a deal moves to a new stage in your CRM
* **After recorded calls** — Generate a personalized room immediately when a call ends
* **Via webhooks** — Trigger room creation from any external tool that can send a signal to Flowla
***
### Follow-ups & nudges
#### Keep deals moving without manual effort
* **Nudge inactive invitees** — Automatically remind contacts who haven't opened the room yet
* **Re-engage quiet buyers** — Reach out when a stakeholder goes silent, with a single nudge or a scheduled sequence
* **Custom message sequences** — Schedule personalized messages for feedback, meeting reminders, renewals, or upsell moments
* **Internal inactivity alerts** — Notify your team when a deal room has had no activity for a set period
* **Overdue action reminders** — Prompt buyers to complete tasks they haven't finished yet
***
### Stakeholder engagement
#### Connect with the right people at the right moment
* **Automatic welcome emails** — Greet first-time room visitors with a warm, personalized welcome
* **Decision maker alerts** — Get an instant notification with enriched contact details when a key decision maker joins the room, plus suggested next steps for outreach
***
### Room rules
#### Control what buyers see and when
* **Status automation** — Automatically update a room's status (active, closed, archived) when key events happen
* **Section access control** — Lock or unlock specific room sections based on what a buyer has done, so they always see the right content at the right time
* **Action status updates** — Automatically mark tasks as complete or update their status when buyers take action
***
### CRM sync & hygiene
#### Keep your CRM accurate without the manual work
* **Form data sync** — Push buyer form responses directly into your CRM fields
* **Call insight extraction** — Update CRM properties with answers and details pulled from call transcripts
* **Room activity tracking** — Capture engagement signals and update CRM fields to reflect buyer intent
* **Stage progression** — Automatically advance a deal to the next stage when buyers complete agreed actions
* **Two-way CRM sync** — Mirror CRM updates in Flowla, including task statuses and room status changes
* **Access control** — Lock or unlock room sections based on CRM stage or field changes
* **Dynamic personalisation** — Pre-fill room content with data pulled directly from your CRM
***
### Generate content from calls
#### Turn conversations into content that moves deals forward
* **Auto-add recordings** — Automatically include full meeting recordings in the buyer's room so stakeholders can catch up anytime
* **Business case generation** — Build a tailored business case using pain points, goals, and metrics from the call transcript
* **Mutual action plan creation** — Convert meeting notes or transcripts into a structured action plan with clear next steps and deadlines
***
### Internal notes & handoffs
#### Make sure nothing gets lost between teams
* **Onboarding handoff notes** — Generate structured summaries of buyer context, goals, and commitments for a clean handoff to Customer Success
* **Internal deal briefs** — Auto-create summaries covering stakeholders, engagement levels, risks, and open items
* **Activity summaries with recommendations** — Analyse buyer engagement trends and suggest next steps for your team
***
Ready to build your own? See all available [triggers](/automations/triggers) and [actions](/automations/actions) to create workflows from scratch.
# Triggers
Source: https://docs.flowla.com/automations/triggers
Choose the event that starts your workflow — from room activity to CRM changes and call recordings.
A trigger is the starting signal for your workflow — the moment Flowla knows it's time to act.
***
### What is a trigger?
Think of a trigger as Flowla's way of listening. You tell it what to watch for, and the moment it happens, your workflow kicks off automatically.
That could be something like:
* A prospect opens your room for the first time
* A customer submits a form
* A deal moves to a new stage in your CRM (your customer relationship tool, like HubSpot or Salesforce)
* A contact hasn't opened their room in 3 days
You decide what counts as the right moment. Flowla does the rest.
***
### Types of triggers
#### Room activity
| Trigger | What it does |
| -------------------------- | ------------------------------------------------------------- |
| **Room viewed** | Fires when any visitor opens the room |
| **Room viewed first time** | Fires only on a visitor's very first view |
| **Room not viewed** | Fires when a room hasn't been opened within a set time period |
| **Room status changed** | Fires when the room's status is updated |
| **Room met criteria** | Fires when the room matches conditions you define |
#### Forms
| Trigger | What it does |
| ------------------ | -------------------------------------------------- |
| **Form submitted** | Fires when a customer completes a form in the room |
#### Actions (tasks inside rooms)
| Trigger | What it does |
| ------------------------- | ----------------------------------------------------------- |
| **Action status changed** | Fires when a task is marked done, in progress, or cancelled |
| **Action not completed** | Fires when a task is still incomplete after its due date |
| **Stage completed** | Fires when every task in a section is finished |
#### CRM — HubSpot
| Trigger | What it does |
| ------------------------------- | --------------------------------------------------- |
| **Deal stage changed** | Fires when a deal moves to a different stage |
| **Contact lead status changed** | Fires when a lead's status is updated |
| **Object created** | Fires when a new deal, contact, or company is added |
| **Property changed** | Fires when any HubSpot field is updated |
| **Ticket status changed** | Fires when a support ticket status changes |
| **Task completed** | Fires when a HubSpot task is marked complete |
#### CRM — Salesforce
| Trigger | What it does |
| ----------------------------- | -------------------------------------------- |
| **Opportunity stage changed** | Fires when a deal moves to a different stage |
| **Object created** | Fires when a new record is added |
| **Property changed** | Fires when any Salesforce field is updated |
#### CRM — Attio
| Trigger | What it does |
| -------------------- | ----------------------------------------- |
| **Record created** | Fires when a new record is added in Attio |
| **Property changed** | Fires when any Attio field is updated |
#### Call transcripts
| Trigger | What it does |
| ------------------------------------- | -------------------------------------------------- |
| **Fireflies transcription completed** | Fires when Fireflies.ai finishes processing a call |
| **Gong transcription completed** | Fires when Gong finishes processing a call |
#### Email
| Trigger | What it does |
| ------------------------------- | -------------------------------------------------- |
| **Gmail thread email received** | Fires when a new email arrives in a tracked thread |
#### Webhooks & external apps
| Trigger | What it does |
| ------------------ | ---------------------------------------------------- |
| **Custom webhook** | Fires when an external tool sends a signal to Flowla |
***
### What are scopes?
Sometimes you don't want a workflow to fire every time a trigger happens — only when something **specific** is true.
That's what **scopes** are for. A scope acts as a filter, so your workflow only runs at exactly the right moment.
### Example
* **Trigger**: Deal stage changed
* **Scope**: Only when the new stage is *Contract Sent*
Without a scope, the workflow fires every time the deal stage changes. With a scope, it only fires when the deal reaches that one specific stage.
After setting up a new trigger, check your [workflow logs](/automations/automations-overview) to confirm it fires exactly when expected — it's the quickest way to catch a misconfigured scope before it causes issues.
***
### Best practices
1. **Start specific** — Begin with narrow conditions and expand later if needed
2. **Check for duplicates** — Make sure you don't have two workflows with the same trigger
3. **Test before going live** — Create a test record to confirm the trigger fires correctly
4. **Use scopes** — Filter down to exactly the scenario you care about
5. **Review regularly** — Check your workflow logs to make sure triggers are firing as expected
# Collaborative forms
Source: https://docs.flowla.com/forms/collaborative-forms
Enable multiple stakeholders to contribute to the same form for shared data collection.
Collaborative forms let multiple people from your customer's organisation contribute to the same form at the same time. Instead of chasing separate responses from different departments or running multiple back-and-forth email threads, everyone fills in their part in one place — and everyone can see the full picture.
This works with both linear and table-style forms. The system tracks who made each contribution and when.
***
## How to enable collaborative mode
You can turn on collaborative forms in two ways:
* **During form creation** — Toggle on the collaborative option when building a new form
* **From form settings** — Open an existing form and enable the collaborative toggle in settings
***
## Why use collaborative forms?
### Multi-stakeholder input without the admin
Gather information from multiple departments or decision-makers without creating separate forms or email threads. Everyone contributes to one shared response.
### Shared understanding
All contributors see the complete form with all inputs — creating alignment on requirements, technical specs, or implementation plans before a single meeting is needed.
### Collaborative data building
Multiple users can add rows to table-style forms, building comprehensive datasets together — ideal for requirements lists, contact directories, or action plans.
### Faster deal cycles
Reduce back-and-forth by letting all parties contribute directly in the room. No chasing, no consolidating separate spreadsheets.
***
## Common use cases
### Mutual action plan construction
Buyers and sellers jointly define implementation steps, with each party adding their responsibilities and timelines to a shared plan.
### Technical requirements gathering
Multiple customer teams — engineering, security, IT — each contribute their specific needs to a single requirements form.
### Stakeholder alignment
Decision-makers from different departments review and add their input to proposals, with everything captured in one place.
# Form fields
Source: https://docs.flowla.com/forms/form-fields
Understand all available field types and how to configure them for your forms.
Flowla forms support a range of field types so you can collect exactly the right kind of information — whether that's a date, a file, a number, or a simple yes/no. Choosing the right field type makes forms easier to complete and keeps the data clean and usable on your end.
***
## All field types
| Type | Description | Best for |
| ------------------- | ---------------------------------------- | ----------------------------- |
| **Text** | Short or long text input | Names, descriptions, comments |
| **Email** | Email address with validation | Contact information |
| **Number** | Numeric input only | Quantities, budgets, scores |
| **Link** | URL input with validation | Website URLs, resource links |
| **Date** | Single date picker | Deadlines, target dates |
| **Date Range** | Start and end date | Project timelines, periods |
| **Date Time** | Date with time selection | Meeting scheduling, deadlines |
| **File Upload** | Accept file attachments | Documents, images, contracts |
| **Single Choice** | Radio buttons — one selection only | Yes/No, categories |
| **Multiple Choice** | Checkboxes — multiple selections allowed | Features, preferences |
***
## Field settings
Each field has additional configuration options available when building your form.
**Pre-fill answer**
When enabled, the field appears with a default answer already filled in. The respondent can edit or overwrite it before submitting. Useful for suggesting a typical answer or pre-populating information you already know.
**Placeholder**
The helper text displayed inside an empty field (e.g. *Enter your response*). Guides respondents on what to type without pre-filling the field — the text disappears as soon as they start typing.
# Forms overview
Source: https://docs.flowla.com/forms/forms-overview
Collect information from customers with smart forms that support conditional logic and automation.
## TL;DR
Forms let you collect structured information, from sales qualification details to onboarding requirements, directly inside your rooms. No separate survey links, no chasing answers over email.
***
Navigate to forms from **Library → Form**
***
## Where forms fit in Flowla
Forms let you collect structured information from customers directly inside your rooms. Instead of sending separate survey links or chasing answers over email, you embed forms right where your customer is already engaged — making it much more likely they'll actually complete them.
Forms connect seamlessly with rooms and workflows:
* **Embed in rooms** — Add forms to any section of your room
* **[Trigger workflows](/automations/automations-overview)** — Use form submissions to kick off automated actions
* **Sync to CRM** — Push form responses to [HubSpot](/integrations/HubSpot) or [Salesforce](/integrations/SalesForce) automatically
* **Build with REX**: ask [REX](/rex/chat) to create a form for you in plain language, rather than building it field by field
***
## Common use cases
**Sales qualification**
Collect budget, timeline, and decision-maker information before your next call.
**Onboarding intake**
Gather technical requirements, team contacts, and project goals during kickoff.
**Feedback collection**
Get structured feedback at key milestones throughout the customer journey.
**Document requests**
Request files, contracts, or other materials with file upload fields.
***
## How forms work end to end
1. **Create** — Build your form with the question types you need
2. **Configure** — Add logic rules to show or hide questions based on answers
3. **Embed** — Add the form to one or more rooms
4. **Collect** — Customers submit responses directly in the room
5. **Review** — View submissions in Flowla or sync them to your CRM
6. **Automate** — Trigger workflows based on form submissions
***
## Adding a form to a room
Navigate to the room where you want to add a form and enter edit mode.
In the section where you want the form, click **Add Page**.
On the new page, click **Add Action Plan**.
Click **Add Action Item** within the action plan.
Choose **Fill a form** from the action type options, then select an existing form from your library or create a new one.
When a respondent clicks the action, the form slides out on the right-hand side of the room for them to complete inline.
Embedding a form as an action item makes completion trackable — you'll see exactly who submitted it and can trigger follow-up workflows automatically when they do.
***
## Viewing form responses
Navigate to **Forms** from the main left-hand menu.
Click on the form whose responses you want to review.
In the top right corner of the form, click **Responses**.
Browse individual responses — each one shows who submitted it, when, and the answers they provided.
# Conditional visibility on questions
Source: https://docs.flowla.com/forms/logic-rules
Create dynamic forms with conditional fields that show or hide based on previous answers.
Logic rules make your forms smarter — questions only appear when they're relevant to the respondent. This keeps forms short and focused, reduces the chance of irrelevant or confusing questions, and makes the whole experience feel tailored rather than generic.
Logic rules are only available for [linear forms](/forms/table-linear-forms).
***
## Conditional fields
Show or hide fields based on how respondents answer other questions.
### Visibility options
When setting up a conditional rule, choose one of two behaviours:
* **Visible until condition is met** — The field shows by default, then hides when the condition becomes true
* **Hidden until condition is met** — The field is hidden by default, then appears when the condition becomes true
### How to set up a conditional field
Open the field settings for that question.
Choose whether the field should be visible or hidden until the condition is met.
Select a source field (a previous question) and the answer that triggers the rule.
***
## Combining conditions
When you need multiple conditions, choose how they work together:
* **AND** — All conditions must be true for the rule to apply
* **OR** — Any single condition being true applies the rule
### Example with AND
Show the "Enterprise requirements" field only when:
* Company size = "500+" **AND** Industry = "Technology"
### Example with OR
Show the "Integration details" field when:
* Current CRM = "Salesforce" **OR** Current CRM = "HubSpot"
***
## Example
```
Question 1: "Are you currently using a CRM?"
- Yes
- No
Question 2 (conditional): "Which CRM do you use?"
Visibility: Hidden until condition is met
Condition: Question 1 = "Yes"
```
In this example, Question 2 only appears if the respondent answers "Yes" to Question 1. Anyone who answers "No" skips it entirely — keeping the form clean and relevant.
# Linear and table forms
Source: https://docs.flowla.com/forms/table-linear-forms
Choose between linear forms for guided responses or table forms for spreadsheet-style data entry.
Flowla offers two form layouts to match different data collection needs. Picking the right one reduces friction for your respondent and makes their data easier to work with on your end. Select your preferred layout during form creation or change it from form settings.
***
## Linear forms
Linear forms present one question at a time, guiding respondents through a structured flow.
**Best for:**
* Qualification questionnaires with conditional logic
* Onboarding intake where context matters
* Feedback collection requiring thoughtful responses
* Any form where question order and focus are important
Respondents see each field one at a time, completing one answer before moving to the next. This focused approach reduces overwhelm and improves completion rates, especially for longer forms.
***
## Table forms
Table forms display fields as columns in a spreadsheet-style interface, allowing multiple entries as rows.
**Best for:**
* Collecting lists of items (contacts, requirements, action items)
* Data that needs to be compared across entries
* Bulk data entry from multiple contributors
* Any scenario requiring many similar records
Each row represents one entry, with columns showing your form fields. Respondents can add as many rows as needed, building a comprehensive dataset in one go.
**Import option:** Table forms support importing from spreadsheets. Respondents can upload a CSV or paste data directly, mapping columns to form fields for quick bulk entry.
***
## Choosing the right layout
| Scenario | Recommended layout |
| ------------------------------- | ------------------ |
| Single response per person | Linear |
| Multiple similar entries needed | Table |
| Complex conditional logic | Linear |
| Bulk data collection | Table |
| Guided user experience | Linear |
| Collaborative list building | Table |
# 4️⃣ Utilize analytics
Source: https://docs.flowla.com/getting-started/analytics
Learn how to track room engagement, identify active prospects, and use data to prioritize follow-ups.
### Why analytics matter
Flowla analytics show you exactly how prospects engage with your rooms—who's viewing, what they're looking at, and when they're active. Use this data to prioritize follow-ups, identify stuck deals, and understand what content resonates.
Without visibility into buyer behavior, you're guessing. With Flowla analytics, you know:
* Which deals are hot (and which have gone cold)
* Who the key stakeholders are in each deal
* What content gets the most attention
* When to follow up for maximum impact
### Key metrics to watch
**Engagement signals:**
* **Room views** - Who viewed and how often
* **Time spent** - How long visitors engaged with which content
* **Last activity** - When the room was most recently viewed
* **Tasks completed** - Progress on mutual action plans
* **Forms submitted** - Customer submitted their data
**Content performance:**
* **Asset views** - Which files and materials get opened
* **Downloads** - What content prospects save locally
* **Section engagement** - Which parts of your room get the most attention
### Using analytics to prioritize
**Hot deals** - Rooms with recent activity and multiple stakeholders viewing indicate active evaluation. Prioritize these for follow-up.
**Cold deals** - Rooms with no activity for 7+ days may need a nudge. Use this signal to re-engage.
Set up a workflow triggered by room inactivity to send an automated nudge after 7 days — no manual follow-up needed. Learn more in [Automations](/automations/automations-overview).
**Champion identification** - See which contacts view most frequently. These are likely your internal champions.
**Content optimization** - Notice which assets get ignored? Consider replacing or repositioning them.
### Learn more
Dive deeper into specific analytics views:
* [Room Analytics](/reports-analytics/room-analytics) - Individual room performance
* [Engagement Trends](/reports-analytics/engagement-trends) - Patterns over time
* [Content Analytics](/reports-analytics/content-analytics) - Asset performance
* [Account Analytics](/reports-analytics/account-analytics) - Company-level insights
* [Team Activity](/reports-analytics/team-activity) - Team performance metrics
# 3️⃣ Automate with workflows & AI
Source: https://docs.flowla.com/getting-started/automate-with-workflows-&-AI
Build your first workflow to automate follow-ups, room creation, and team notifications.
### Why use workflows
Workflows automate the steps you repeat every day, like sending follow-ups, unlocking rooms, or notifying your team. In just a few clicks, you can build your first Flowla workflow and start scaling without the manual work.
In this guide, you'll build a simple, automated workflow that:
* Listens for a trigger (like a form submission or deal stage change)
* Runs one or more actions (like sending an email, adding content to a room, or posting to Slack)
* Optionally adds an AI Agent to generate content for you
If your workflow uses AI Agents to generate content, route it through [Smart Queue](/automations/smart-queue) so you can review the output before it goes live to customers.
### Before you start: Make sure integrations are live
If your workflow uses:
* A **CRM trigger** (e.g. HubSpot or Salesforce)
* An **email action** (e.g. Gmail or Outlook)
* Or pulls data from **call transcripts**
You'll need to connect those integrations first. Go to **Integrations** in Flowla and follow the setup instructions.
### Example workflows
* **Auto-create rooms** when deals reach specific stages in your CRM
* **Manipulate rooms based on CRM triggers** Update your room based on changes in CRM.
* **Update CRM based on room triggers** Automate processes in your CRM when something happens inside your room.
* **Send follow-up emails** when rooms are viewed (or not viewed)
* **Unlock sections** based on form submissions or task completions
* **Notify your team** when key engagement happens
Browse pre-built workflow templates in [Suggested Recipes](/automations/suggested-recipes).
### Navigating the workflow builder
The workflow builder displays your automation as a visual sequence of steps.
Click any card in the workflow to view and configure its details.
The setup fields will appear in the right panel, use it to adjust settings, map data, and set conditions for each step in your workflow.
### Step 1: Start with a recipe
Recipes are pre-built workflow templates designed to get you started quickly. Instead of building from scratch, select a recipe that matches your use case and customize it.
From your Flowla dashboard, go to **AutoPilot → Suggested recipes**.
Choose the recipe that best fits your needs. You can customize it after selection.
Click the **Use recipe** button to make workflow yours.
### Step 2: Configure fields
Recipes are mostly configured, however there are some fields which require configuration.
On the cards, you'll see a warning if there are fields requiring configuration. Click on the cards to configure.
**Input types**
Dynamic inputs pull data from previous steps in your workflow, allowing values to change based on the actual data flowing through the automation. These inputs adapt to each unique execution.
Reference data from trigger events or previous actions, changes with each workflow execution.
Static inputs are fixed values that you define when setting up your workflow. These values remain constant across all executions of the workflow, regardless of the data that triggers it.
Set once during workflow configuration, same value used every time the workflow runs.
### Step 3: Test, and enable
Once your workflow is ready:
1. Give it a clear name
2. Run a test inside a room or connected CRM deal
3. Once you're confident, click **Enable**
💡 *You can always come back and edit it later.*
### Step 4: Review the output before it goes live
If your action involves AI-generated content (like an email), you can enable the **“Add to queue for review”** toggle.That way, the content will be added to your **Smart Queue** for final approval before anything gets sent or published.
**Smart Queue is where you'll see all your pending workflow drafts**: follow-ups, summaries, business cases, and more. Spend just a few minutes each morning reviewing and sending what matters, all without writing from scratch.
### Step 1: Choose a Trigger
Start in the **Workflow Builder** and click **“Select a Trigger.”** This defines what event will activate your workflow.
Some trigger examples:
* A **room is viewed**
* A **form is submitted**
* A **deal changes stage** in CRM
* A **webhook fires** from another app
You can add a **scope** to narrow it down: e.g. “Only run this workflow when a deal moves to ‘Discovery held”
### Step 2: Add an Action
Click the **+** icon to add your first action. Actions define what happens once the workflow is triggered.
For example:
* Send an email
* Create a new room from a template
* Push or pull CRM data (HubSpot, Salesforce)
* Notify your team in Slack
Each action can also include **conditions** - rules for when it should run.
### Step 3: Add an AI-agent (Optional)
If you want Flowla to generate personalized content for you, drop in an **AI Agent** before your action.
For example:
* Use the **Email Composer Agent** to draft a follow-up or a nudging email
* Use the **Summarizer Agent** to turn form answers into key takeaways
* Use the **Business Case Agent** to generate tailored messaging from transcripts
Each Agent supports **custom prompts**, so you can guide the output.Example: *“*Compose a nudging email for the contact who did not view room that they are invited to*”*
### Step 4: Test, and enable
Once your workflow is ready:
1. Give it a clear name
2. Click **Save**
3. Run a test inside a room or connected CRM deal
4. Once you're confident, click **Enable**
💡 *You can always come back and edit it later.*
### Step 5: Review the output before it goes live
If your action involves AI-generated content (like an email), you can enable the **“Add to queue for review”** toggle.That way, the content will be added to your **Smart Queue** for final approval before anything gets sent or published.
**Smart Queue is where you'll see all your pending workflow drafts**: follow-ups, summaries, business cases, and more. Spend just a few minutes each morning reviewing and sending what matters, all without writing from scratch.
***
### What's next
Now that you've built your first workflow, explore more advanced options:
* [Triggers](/automations/triggers) - See all available trigger types
* [Actions](/automations/actions) - Explore the full list of workflow actions
* [AI Actions](/automations/ai-actions) - Learn more about AI-powered content generation
* [Suggested Recipes](/automations/suggested-recipes) - Browse pre-built workflow templates
# 1️⃣ Build & launch your first room
Source: https://docs.flowla.com/getting-started/build-&-launch-your-first-room
A step-by-step guide to creating, customizing, and sharing your first Flowla room.
# What is a room?
A **room** is your shared workspace. It's a branded hub where customers or teammates find everything they need in terms of content, forms, timelines and next steps.
It allows you to guide sales, onboarding, or internal processes in one shared link.
Learn more about [rooms](/rooms/room-overview).
# Step by step guide
## Step 1: Create a template
Templates are the foundation of Flowla. They allow you to centrally manage your processes and ensure consistency across your team.
Start by creating a template for your main use case, then create rooms from it. Create more templates as you go.
Templates are shared across your whole team — build one great room and everyone benefits from it instantly.
### Need help getting started?
Your customer success manager can help you build your first template with a personalized workshop.
This service is only available depending on your plan.
Flowla templates are built with best practices in mind and designed to get you started quickly.
Navigate to the **Templates** section from the sidebar.
Explore Flowla's pre-built templates organized by use case (e.g., Sales, Onboarding, Customer Success).
Choose the template that fits your needs and copy it to your organization to make it on your own. Proceed to 'Review' step to name your template.
Give it a clear, descriptive name so teammates can find it easily.
Start from scratch and build your template exactly the way you want.
Navigate to the **Templates** section from the sidebar.
Click the **Create new template** button.
Give it a clear, descriptive name so teammates can find it easily.
Learn more about [templates](/rooms/room-templates).
## Step 2: Edit your template
Customize your template with sections, content, and actions that match your process.
### Customize sections
Sections represent stages in your process and create a clear plan for both your team and your prospects.
Click on your template from the Templates dashboard to open it.
Look at the left-hand navigation to see your template's structure.
Add sections to organize your template into logical stages (e.g., "Discovery", "Proposal", "Implementation").
Learn more about [sections](/rooms/room-elements/sections).
### Customize content
Add the materials your customers need to move forward.
Click on the section where you want to add content.
Use the content menu to add different types of content.
Add files, videos, links, embedded calendars, forms, or rich text blocks.
These [variables](/rooms/room-variables) help ensure every room feels tailor-made without repetitive work.
Learn more about [content types](/rooms/room-elements/pages).
### Add actions
Actions are structured, trackable steps that move the process forward.
They help you:
* Set clear goals and expectations
* Assign action items to team members or customers
* Keep both sides aligned on next steps
* Collect information
Unlike content (which informs), actions require completion, and you can track progress and deadlines without chasing anyone.
Click on the section where you want to add content.
Use the content menu to add different types of content.
Add files, videos, links, embedded calendars, forms, or rich text blocks.
Create accountability with clear deadlines
Learn more about [actions](/rooms/room-elements/actions).
## Step 3: Create a room from your template
Now that your template is ready, create a room for a specific company or deal.
From the main dashboard, click the **Create new room** button.
Choose the template you just created from your organization's templates.
Click to move to the next step where you'll assign a target company.
## Step 4: Choose a company
The target company tailors the room automatically: personalizing branding and content while keeping stakeholder and engagement data organized.
**Option A: Create or select a company in Flowla**
Search by domain or name to quickly create and link a target company.
**Option B: Select a HubSpot deal**
When you select the relevant deal:
* Flowla automatically pulls the deal's company information and enriches branding and logo
* Deal information will be synced to your room
* Room information and engagements will be synced to your CRM
Learn more about [room personalization](/rooms/personalising-rooms) and target companies.
## Step 5: Share your room
Your room is ready—now share it with your prospects or customers.
You can edit content and actions to
Find the **Share** button in the top right corner of your room.
Copy the unique URL to share via email, Slack, or any channel or send a personalized email.
Learn more about [sharing options](/rooms/room-sharing).
## Step 6: Analyze room analytics
Analytics are accessible from inside the room or navigating to reports -> Room analytics -> selecting the room.
Once your room is shared, track engagement in real-time:
* **Who viewed** - See which stakeholders opened your room
* **When and how often they viewed** - Track views over time
* **What they engaged with** - See which content and sections got the most attention
* **Task progress** - Monitor action completion times and rates
Access analytics from your room or from the [Reports dashboard](/reports-analytics/room-analytics).
## Best practices
1. **Start with a template** - Don't reinvent the wheel. Use existing templates and customize from there.
2. **Keep it focused** - Include only what's relevant to move the deal forward. Too much content overwhelms buyers.
3. **Use clear section names** - Make it obvious what each stage of the process involves.
4. **Assign actions with due dates** - Create accountability on both sides.
5. **[Save successful rooms as templates](/rooms/room-templates)** - When something works, make it repeatable for your whole team.
6. **Review analytics regularly** - Use engagement data to prioritize follow-ups and identify stuck deals.
Learn more about [room building best practices](/rooms/room-building-best-practices).
# 2️⃣ Connect your tools
Source: https://docs.flowla.com/getting-started/connect-your-tools
Integrate Flowla with your existing stack to personalize, automate, and sync.
## CRM
Connect to CRM to create room automatically, sync rooms to deals, view analytics and notifications without leaving CRM.
All CRM integrations are Organizational.
## Note takers
Connect note taker to add meeting recordings, transcripts, and AI-generated summaries directly in your Flowla rooms. Share call insights with buyers and teammates without forwarding files or links.
Fireflies.ai and Gong are Organizational integrations. Fathom is a Personal integration.
**Fireflies, Gong, and Fathom auto-sync.** Every new call is picked up automatically the moment it ends and matched to the right room. **Avoma and Granola work via manual add.** You connect the integration, then pull in a specific call when you want it processed.
Connecting a note-taker is the single biggest thing you can do to make [REX](/rex/overview) useful. Transcripts are what REX reads to build [Deal Score](/rex/deal-score), [MEDDPICC](/rex/meddpicc), and [signals](/rex/signals). Without one, those will stay thin or show "Not scored yet." See [where REX's data comes from](/rex/knowledge-graph#where-the-data-comes-from).
## Work emails
Connect your work email to send emails directly from your own email address. Emails are sent from your address just like you'd have send it manually.
All work email integrations are Organizational.
## Other integrations
# 👋 Introduction
Source: https://docs.flowla.com/getting-started/introduction
Flowla is the platform behind your customer-facing processes, combining collaborative rooms, real-time engagement signals, and automation to help you close faster and onboard smoother.
# Step by step guide to get started
Create, customize, and share your first Flowla room.
Integrate with your CRM, email, and note-taking tools.
Build workflows to automate processes, sync data and send notifications.
Track engagement, estimate intent and prioritize your follow-ups.
# Meet REX
REX reads every meeting, CRM update, and room interaction, and turns it into deal scores, MEDDPICC qualification, and a signals feed with next steps it can execute for you.
# Documentation
Create and manage collaborative deal rooms for your customers.
Automate workflows and let AI handle repetitive tasks.
Understand how customers interact with your content.
Build shared plans to keep deals on track with clear next steps.
Collect information directly inside rooms with flexible forms.
Centralize your best content for easy access and sharing.
Connect your CRM, calendar, and communication tools.
Manage users, permissions, and organization settings.
Handle plans, credits, and subscription management.
# Attio
Source: https://docs.flowla.com/integrations/Attio
Sync deal pipelines, log engagement activity, and automate room creation with Attio CRM.
Connect Attio to Flowla and your deal rooms and CRM stay in sync automatically. Pull in company details, contacts, and deal stages to personalise rooms, and push buyer engagement back to Attio — so your CRM always reflects what's happening in the room.
***
### Why connect Attio?
* **Automatic deal sync** — Deal pipelines sync with Flowla rooms, bringing company details, contacts, and deal stages into your rooms
* **Bidirectional activity logging** — Room views, action completions, and content engagement flow back to Attio as engagement notes on deal records
* **Workflow automation** — Trigger room creation and updates based on deal stage changes, attribute updates, or meeting transcriptions
* **Complete visibility** — See buyer engagement directly in your CRM without switching tools
***
### How to connect Attio
In the left sidebar, click **Integrations**. Find **Attio** under CRM integrations and click **Connect**. Confirm to complete the connection.
After connecting, you'll see a connection key. Copy it.
In Attio, go to **Workspace Settings → Apps → Flowla**. Under the **Connections** tab, click **Connect** and paste your key.
Once connected, the integration is active for your entire organisation.
***
### What gets synced
#### From Attio → Flowla
| Data | How it's used |
| ----------------------- | ------------------------------------- |
| **Company details** | Displayed in linked rooms |
| **Contact information** | Pre-populated for personalisation |
| **Deal stages** | Synced automatically with room status |
#### From Flowla → Attio
| Activity | Where it appears |
| ---------------------- | ------------------------------- |
| **Room views** | Engagement notes on deal record |
| **Action completions** | Logged as deal activity |
| **Content engagement** | Tracked on contact timeline |
***
### Workflow automation
Set up workflows that automatically create personalised deal rooms when opportunities hit specific stages in Attio — so your team never has to manually trigger room creation.
### Example workflow
1. Discovery call completed
2. Deal stage moves to "In Progress" in Attio
3. Workflow triggers automatically
4. Personalised deal room is created
### Trigger options
* Deal stage changes
* Attribute updates
***
### Disconnect Attio
In the left sidebar, click **Integrations**.
Find **Attio** and click **Settings**.
Click **Disconnect** and confirm your choice.
### After disconnecting
* Data sync stops immediately
* Existing data in both platforms remains intact
***
# Avoma
Source: https://docs.flowla.com/integrations/Avoma
Import Avoma meeting recordings, transcripts, and AI summaries into your Flowla rooms.
Connect Avoma to embed meeting recordings, transcripts, and AI-generated summaries directly in your Flowla rooms. Share call insights with buyers and teammates without forwarding files — everything is in one place, in the room they're already visiting.
***
### What is Avoma?
Avoma is an AI meeting assistant that records, transcribes, and summarises your video calls. It works with Zoom, Google Meet, and Microsoft Teams, and provides collaborative note-taking and conversation intelligence features.
***
### Why connect Avoma?
* **Embed recordings in rooms** — Buyers can rewatch key moments without digging through email
* **Share transcripts** — Everyone sees what was discussed, without attending the call
* **Include AI summaries** — Quick reference for busy stakeholders who want the highlights
* **Improve handoffs** — CS teams see sales conversations in context before their first touchpoint
* **Feed REX**: transcripts become the evidence behind deal scores, MEDDPICC, and signals
Avoma works via **manual add**: you connect the integration once, then pull in a specific call when you want it processed. A manually added call has the identical effect on [REX's](/rex/overview) scores and [signals](/rex/signals) as an auto-synced one. See [where REX's data comes from](/rex/knowledge-graph#where-the-data-comes-from).
***
### How to connect Avoma
Go to your **Avoma dashboard** and navigate to **Settings → Integrations → API**. Copy your **API Key**.
In the left sidebar, click **Integrations**. Find the **Note taker** section, locate **Avoma**, and click **Connect**. Paste your API Key.
You're now connected. New meetings processed by Avoma will be accessible from within Flowla.
***
### Adding Avoma recordings to rooms
Open the room where you want to add a recording.
Click **Add Content**.
Paste your Avoma meeting link. Flowla embeds the recording automatically.
Your buyers and teammates can:
* Watch the full recording
* Read the transcript
* View AI-generated highlights and summaries
***
### Meeting notes auto-sync
Meeting recordings no longer need to be manually attached to rooms — Flowla now handles matching and syncing automatically.
* Flowla detects when a meeting where your note taker has joined ends, and matches it to the right room based on participant emails and company
* Matched meetings are added to the room with no setup required
* To opt out, use the auto-sync toggle in the Avoma integration settings
***
### Disconnect Avoma
In the left sidebar, click **Integrations**.
Find **Avoma** and click **Settings & More**.
Click **Disconnect** to remove the integration.
Existing embeds will no longer load after disconnecting.
***
# Clay
Source: https://docs.flowla.com/integrations/Clay
Automatically create personalised Flowla rooms from your Clay tables.
Connect Clay to Flowla to automatically create personalised rooms for every prospect in your Clay tables. Each prospect gets their own room with a shareable link — at scale, without manual work.
***
### What you'll need
Before setting up Clay, gather these three pieces of information from Flowla:
1. **Template ID** — The room template to use for created rooms
2. **User ID** — The Flowla user who will be the room creator
3. **API key** — Your Flowla API key for authentication
***
### Get your Flowla information
#### Template ID
In Flowla, navigate to the **Templates** tab.
Click on the template you want to use for your Clay-created rooms.
Look at the URL in your browser. Delete everything after the question mark, then delete everything before `template/`. The remaining string is your template ID.
#### User ID
Select the person who should be the room creator for Clay-generated rooms.
Click on the user profile icon.
Click to copy the user ID.
#### API key
In the left sidebar, click **Integrations**.
Find **Clay** and click **Settings**.
Copy your API key.
***
### Set up Clay
Ensure your Clay table has a column with prospect emails.
Click **Add Column → Add Enrichment**, search for **Flowla**, and under Tables click **Templates**. Select **Flowla Create Flow**.
Your prospect's email should be selected automatically. Click **Apply Template** and enter your collected information:
* **Body**: Template ID and User ID
* **Headers**: API key
Click **Save**. When the API call runs successfully, you'll see the response data in the cell.
***
### View created rooms
After the enrichment runs:
* Click on any cell to see the returned information
* Add the live view link as a new column for easy access
* Each prospect now has a personalised Flowla room ready to share
# Fathom
Source: https://docs.flowla.com/integrations/Fathom
Import Fathom meeting recordings and AI summaries into your Flowla rooms.
Connect Fathom to embed meeting recordings, transcripts, and AI-generated summaries directly in your Flowla rooms. Everything your buyer needs to review the conversation is in one place — no forwarding files, no hunting through email.
***
### What is Fathom?
Fathom is an AI meeting assistant that records, transcribes, and summarises your video calls. It works with Zoom, Google Meet, and Microsoft Teams.
***
### Why connect Fathom?
Keep meeting context in one place with your deal materials:
* **Embed recordings in rooms** — Buyers can rewatch key moments without digging through email
* **Share transcripts** — Everyone sees what was discussed, without attending the call
* **Include AI summaries** — Quick reference for busy stakeholders who just want the highlights
* **Improve handoffs** — CS teams see sales conversations in context before the first onboarding call
* **Feed REX**: transcripts become the evidence behind deal scores, MEDDPICC, and signals
Fathom **auto-syncs**: every new call is picked up automatically the moment it ends and matched to the right room. Each transcript is then read by [REX](/rex/overview) to build [Deal Score](/rex/deal-score), [MEDDPICC](/rex/meddpicc) and [signals](/rex/signals). See [where REX's data comes from](/rex/knowledge-graph#where-the-data-comes-from).
***
### Adding Fathom recordings to rooms
Open the room where you want to add a recording.
Click **Add Content**.
Paste your Fathom meeting link. Flowla embeds the recording automatically.
Your buyers and teammates can:
* Watch the full recording
* Read the transcript
* View AI-generated highlights and summaries
***
### Meeting notes auto-sync
Meeting recordings no longer need to be manually attached to rooms — Flowla now handles matching and syncing automatically.
* Flowla detects when a meeting where your note taker has joined ends, and matches it to the right room based on participant emails and company
* Matched meetings are added to the room with no setup required
* To opt out, use the auto-sync toggle in the Fathom integration settings
***
### Disconnect Fathom
In the left sidebar, click **Integrations**.
Find **Fathom** and click **Settings & More**.
Click **Disconnect** to remove the integration.
Existing embeds will no longer load after disconnecting.
***
# Fireflies.ai
Source: https://docs.flowla.com/integrations/Fireflies.ai
Import meeting recordings, transcripts, and AI summaries from Fireflies into your Flowla rooms.
Fireflies + Flowla helps you turn every meeting into a follow-up that actually gets read. Instead of letting call insights sit in a dashboard, you can instantly share the recording, AI summary, and next steps — all inside the same room your buyer is already in.
***
### Why connect Fireflies?
If you already record meetings with Fireflies, connecting it to Flowla means your transcripts don't just sit in a dashboard. They become actionable context inside the room.
Here's what that unlocks:
* **Embed recordings and transcripts directly** — No need to dig through call logs
* **Give buyers and teammates visibility** into what was actually discussed, without forwarding files or emails
* **Add AI-generated summaries or follow-up sections** right below the transcript to keep momentum going
* **Use it in onboarding** to ensure the handoff includes the voice of the customer
* **Feed REX**: transcripts become the evidence behind deal scores, MEDDPICC, and signals
Fireflies **auto-syncs**: every new call is picked up automatically the moment it ends and matched to the right room. Each transcript is then read by [REX](/rex/overview) to build [Deal Score](/rex/deal-score), [MEDDPICC](/rex/meddpicc), and [signals](/rex/signals). See [where REX's data comes from](/rex/knowledge-graph#where-the-data-comes-from).
***
### How to set it up
Go to your **Fireflies dashboard** and navigate to **Settings → Developer Settings**. Copy your **API Key**.
In the left sidebar, click **Integrations**. Find the **Notetaker** section and click **Connect**. Choose **Fireflies.ai**, click **Connect**, and paste your API Key.
You're now connected. New meetings processed by Fireflies will be accessible from within Flowla.
***
### How to add a Fireflies recording to a room
After your call ends, open the room where you want to share the recap.
Click **Add Content**.
Paste your **Fireflies meeting link**. Flowla automatically embeds the recording, pulls in the notes and transcript, and makes it available to your buyer and team.
***
### Meeting notes auto-sync
Meeting recordings no longer need to be manually attached to rooms — Flowla now handles matching and syncing automatically.
* Flowla detects when a meeting where your note taker has joined ends, and matches it to the right room based on participant emails and company
* Matched meetings are added to the room with no setup required
* To opt out, use the auto-sync toggle in the Fireflies integration settings
***
### Let AI turn calls into business cases
Instead of writing a follow-up deck from scratch, use Flowla to generate a business case directly from your Fireflies transcript.
With an automated workflow, Flowla can:
* Analyse the call
* Extract key pain points, goals, and objections
* Draft a business case tailored to that conversation
You'll get a ready-to-review version you can drop straight into the room — saving hours and keeping the momentum going.
***
### Disconnect Fireflies
In the left sidebar, click **Integrations**.
Find the **Notetaker** section.
Click **Disconnect**.
Existing embeds in rooms will no longer update, but content that was already added remains.
***
# Gmail
Source: https://docs.flowla.com/integrations/Gmail
Send room sharing emails directly from your Gmail account.
Connect Gmail to send room sharing emails directly from your own email address. Recipients see emails from you — not from Flowla — which improves deliverability and keeps your outreach looking professional.
***
### Why connect Gmail?
* **Better deliverability** — Emails from your domain avoid spam filters
* **Professional appearance** — Recipients see your email address, not a third-party sender
* **Reply handling** — Responses come directly to your inbox
* **Consistent branding** — Uses your email signature and style
***
### How to connect Gmail
In the left sidebar, click **Integrations**.
Locate **Gmail** in the Email section and click **Connect**.
Select your Google account and sign in.
Allow Flowla to send emails on your behalf.
Flowla only requests permission to send emails. We don't read your inbox or access other Gmail data.
***
### Sending emails from Flowla
Once connected, you can send emails when sharing rooms:
Open a room and click **Share**.
Enter the recipient's email address.
Select an email template or write a custom message.
Click **Send**. The email is sent from your Gmail address and any replies go to your inbox.
***
### Disconnect Gmail
In the left sidebar, click **Integrations**.
Find **Gmail** and click **Settings & More**.
Click **Disconnect** to remove the integration.
You can also revoke access from your Google Account settings under **Security → Third-party apps → Find Flowla → Remove access**.
# Gong
Source: https://docs.flowla.com/integrations/Gong
Import Gong call recordings and insights directly into your Flowla rooms.
Connect Gong to embed call recordings, transcripts, and AI insights directly in your rooms. Buyers and teammates can review what was discussed without digging through email or the Gong dashboard.
***
### Why connect Gong?
* **Share recordings in rooms** — Buyers can review calls without digging through email
* **Add context to deals** — Include relevant conversations alongside your materials
* **Improve handoffs** — CS teams see exactly what was discussed during sales
* **Reference key moments** — Highlight specific calls in your follow-ups and proposals
* **Feed REX**: transcripts become the evidence behind deal scores, MEDDPICC, and signals
Gong **auto-syncs**: every new call is picked up automatically the moment it ends and matched to the right room. Each transcript is then read by [REX](/rex/overview) to build [Deal Score](/rex/deal-score), [MEDDPICC](/rex/meddpicc), and [signals](/rex/signals). See [where REX's data comes from](/rex/knowledge-graph#where-the-data-comes-from).
***
### How to connect Gong
In Gong, go to **Company Settings → API** and generate API credentials.
In the left sidebar, click **Integrations**.
Locate **Gong** in the Notetaker section and click **Connect**.
Paste your Gong API key and secret.
Once connected, the integration is active for everyone on your Flowla team.
***
### Adding Gong recordings to rooms
Open the room where you want to add a recording.
Click **Add Content**.
Paste the Gong call link. Flowla embeds the recording automatically.
Buyers and teammates can:
* Watch the full recording
* Read the transcript
* See AI-generated summaries (if available in Gong)
***
### Meeting notes auto-sync
Meeting recordings no longer need to be manually attached to rooms — Flowla now handles matching and syncing automatically.
* Flowla detects when a meeting where your note taker has joined ends, and matches it to the right room based on participant emails and company
* Matched meetings are added to the room with no setup required
* To opt out, use the auto-sync toggle in the Gong integration settings
***
### Use cases
### Sales follow-ups
After a discovery call, share the recording in the room so stakeholders who couldn't attend can catch up:
* Embed the call recording
* Add your proposal below
* Include next steps as actions
### CS handoffs
When transitioning from sales to customer success:
* Include key sales calls in the onboarding room
* Give CS full context on customer expectations
* Reference specific moments from discussions
### Multi-stakeholder deals
When new decision-makers join late in the process:
* Share previous demos and calls
* Get everyone aligned without repeating meetings
* Show the full conversation history
***
### Disconnect Gong
In the left sidebar, click **Integrations**.
Find **Gong** and click **Settings & More**.
Click **Disconnect** and confirm your choice.
Existing embeds in rooms will no longer load after disconnecting.
***
# Granola
Source: https://docs.flowla.com/integrations/Granola
Import Granola meeting notes and AI summaries into your Flowla rooms.
Connect Granola to pull meeting notes directly into your Flowla rooms — including titles, dates, notes, and transcripts — without any manual copy-pasting. Everything your buyer needs to see from the call lives in the room alongside your other materials.
***
### What is Granola?
Granola is an AI notepad for meetings that works with Zoom, Google Meet, and Microsoft Teams — enhancing your notes with AI, without a bot joining the call.
***
### Why connect Granola?
* **Embed notes in rooms** — Buyers and teammates can review what was discussed without leaving the room
* **Share AI summaries** — Quick reference for busy stakeholders who just want the highlights
* **Improve handoffs** — CS teams see sales conversations in context before the first onboarding call
* **Feed REX**: notes and transcripts become the evidence behind deal scores, MEDDPICC, and signals
Granola works via **manual add**: you connect the integration once, then pull in a specific meeting when you want it processed. A manually added meeting has the identical effect on [REX's](/rex/overview) scores and [signals](/rex/signals) as an auto-synced one. See [where REX's data comes from](/rex/knowledge-graph#where-the-data-comes-from).
***
### Adding Granola notes to rooms
There are three ways to bring a Granola note into a room:
**From the "Add a call" flow:**
Open the room and click **Add a call**.
Select **Granola** and choose the note you want to pull in.
Flowla imports the date, title, notes, and transcript automatically.
**By pasting a link:**
Open the room and click **Add a call**.
Paste a Granola note link. Flowla fetches the details automatically.
**Meeting notes auto-sync:**
Flowla detects when a meeting ends and matches it to the right room based on participant emails and company. Matched meetings are added automatically — no setup required. To opt out, use the auto-sync toggle in the Granola integration settings.
***
### Disconnect Granola
In the left sidebar, click **Integrations**.
Find **Granola** and click **Settings & More**.
Click **Disconnect** to remove the integration.
Existing meeting data already added to rooms will remain in place.
***
# HubSpot
Source: https://docs.flowla.com/integrations/HubSpot
Connect HubSpot to Flowla to sync deals, contacts, and engagement data automatically.
Connect HubSpot to Flowla and your deal rooms and CRM stay in sync without any manual work. Create rooms directly from HubSpot deals, pull in deal and contact data to personalise rooms automatically, and push buyer engagement back into HubSpot — so your CRM always reflects what's actually happening in the deal.
***
### How to connect HubSpot
In the left sidebar, click **Integrations**.
Click **Connect to CRM**.
Select **HubSpot** from the available options.
In the window that opens, select the account you want to use and click **Choose Account**.
You can connect your Flowla account with only one HubSpot account.
Click **Connect app** to allow access. You're now connected.
***
### How to create a room from a HubSpot deal
Find the Flowla card on the right-hand side of the deal. Learn more about [creating rooms from templates](/rooms/room-templates).
Click **Actions → Create Room** on the Flowla card.
A window opens with the deal's associated company pre-populated. If there's no company on the deal, you can select or create one manually.
Click **Next** to continue.
Choose an existing template or continue with a blank room to edit later.
Click **Create Room**. Your room is now live — follow the edit link to make any changes.
Once prospects visit your room, all insights are automatically synced back to your deal.
You can automate this entirely — set up a workflow that creates a room whenever a deal reaches a specific stage in HubSpot. Learn more about [automations](/automations/automations-overview).
***
### CRM sync features
Enable contact sync to automatically pull deal contacts into your rooms — the right stakeholders appear without any manual invite work.
* **Contact sync controls:** Two toggles in HubSpot settings let you independently control whether deal contacts are added to rooms and whether room contacts are pushed back to HubSpot deals
* **Deal stage labels:** HubSpot deal stage syncs as a human-readable label instead of an internal ID
* **Stale variable fix:** When the primary company or contact on a deal changes, all synced CRM variables refresh immediately — no more outdated names or fields showing the previous contact's data
### Meeting blocks
Meetings that auto-sync into your rooms can be surfaced directly as content blocks inside the editor.
* Add a **meeting list block** to display all meetings linked to the room — automatically populated as new calls are matched
* Add a **single meeting block** to highlight a specific call, with title, description, date, and attendees
* Meetings are **linked** from the room, not duplicated — any update to the meeting data reflects everywhere it's used
* The meeting list stays in sync automatically as new calls are matched
***
### Mapping HubSpot properties to variables
Any HubSpot property — from deals, contacts, or companies — can be mapped to a Flowla variable and used anywhere in your rooms and templates.
In the left sidebar, click **Integrations**, then click **CRM settings**.
Find HubSpot and click **Settings**.
Click the **Sync from HubSpot** tab.
Search for or select the object you want to pull from: **Deal**, **Contact**, or **Company**.
Browse or search for the specific property within that object (for example, *Latest traffic source* or any custom property on the object).
Edit the variable name as you'd like it to appear in Flowla, then click **Add**.
Once added, the variable is immediately available to insert in any room or template. It populates automatically from the linked HubSpot deal whenever a room is created or the deal data updates.
This works for any property on standard objects (Deal, Contact, Company), including custom properties you've added to those objects. For HubSpot **custom objects**, use an Autopilot workflow to pull the data instead — see [HubSpot automations](/automations/HubSpot).
***
### Disconnect HubSpot
From your dashboard, click **Integrations** in the left sidebar.
Click **CRM settings**, then find HubSpot and click **Settings**.
In the popup window, navigate to the settings icon in the top right and select **Disconnect**.
Select **Yes** when prompted. HubSpot is now disconnected from Flowla.
### What changes after disconnecting
* The corresponding room is no longer visible on each deal
* The Flowla card in HubSpot disappears
* Buyer engagement from rooms is no longer synced to HubSpot
### What stays the same
* All previously identified stakeholders and their room activity history remain intact
* No new activity or contacts will sync going forward
***
## Troubleshooting
**Likely cause:** OAuth token issue, or you were previously connected with a different account.
**Fix:** Disconnect any existing HubSpot connection first, clear your browser cache, then reconnect. Make sure you're authorising with the correct HubSpot account.
**Likely cause:** Token expiry or a permissions scope issue on the HubSpot side.
**Fix:** Reconnect the integration in **Settings > Integrations**. If it worked before and suddenly stopped, re-authorise the connection from the HubSpot marketplace listing.
**Yes** — any property on a standard HubSpot object (Deal, Contact, or Company), including custom properties you've added to those objects, can be mapped through the **Sync from HubSpot** tab in CRM settings. See [Mapping HubSpot properties to variables](#mapping-hubspot-properties-to-variables) for the full steps.
If you need to pull data from a HubSpot **custom object** (a non-standard object type), use an Autopilot workflow to build a custom sync — see [HubSpot automations](/automations/HubSpot).
**Likely cause:** Integrations are gated by plan.
**Fix:** HubSpot integration is available on Pro and above. Upgrade your plan in **Settings > Billing** to unlock it.
# Outlook
Source: https://docs.flowla.com/integrations/Outlook
Send room sharing emails directly from your Outlook account.
Connect Outlook to send room sharing emails directly from your own email address. Recipients see emails from you — not from Flowla — which improves deliverability and keeps your outreach looking professional.
***
### Why connect Outlook?
* **Better deliverability** — Emails from your domain avoid spam filters
* **Professional appearance** — Recipients see your email address, not a third-party sender
* **Reply handling** — Responses come directly to your Outlook inbox
* **Enterprise ready** — Works with Microsoft 365 and corporate Outlook accounts
***
### How to connect Outlook
In the left sidebar, click **Integrations**.
Locate **Outlook** in the Email section and click **Connect**.
Select your Microsoft account and sign in.
Allow Flowla to send emails on your behalf.
Flowla only requests permission to send emails. We don't read your inbox or access other Outlook data.
***
### Sending emails from Flowla
Once connected, you can send emails when sharing rooms:
Open a room and click **Share**.
Enter the recipient's email address.
Select an email template or write a custom message.
Click **Send**. The email is sent from your Outlook address and any replies go to your inbox.
***
### Disconnect Outlook
In the left sidebar, click **Integrations**.
Find **Outlook** and click **Settings & More**.
Click **Disconnect** to remove the integration.
You can also revoke access from your Microsoft account settings under **Privacy → Apps & services**.
# Salesforce
Source: https://docs.flowla.com/integrations/SalesForce
Connect Salesforce to Flowla to sync opportunities, contacts, and engagement data automatically.
## Overview
Connect Salesforce to Flowla and your deal rooms and CRM stay in sync — no manual work required. Pull in opportunity, contact, and account data to personalise rooms automatically, and push buyer engagement back into Salesforce so your CRM always reflects what's happening in the deal.
The Flowla Salesforce integration enables automatic two-way synchronisation of opportunity, contact, and account data between Salesforce and Flowla. This allows your team to:
* View and manage rooms inside your opportunities
* Pull in CRM data to personalize rooms automatically
* Push Flowla engagement data (views, form submissions, completions) back into Salesforce
***
## Setup Instructions
### Prerequisites
Before you begin, make sure you have:
* **Salesforce Edition**: Enterprise, Unlimited, or Developer edition (the integration requires API access, which is not available on Salesforce Essentials)
* **Salesforce Admin access**: You need admin-level permissions to install packages and modify page layouts
### Step 1: Install the Flowla Managed Package
The managed package installs the Flowla component, configures trusted URLs, sets up API permission sets, and creates the necessary external credentials — all automatically.
Use this [installation link](https://login.salesforce.com/packaging/installPackage.apexp?p0=04tJ7000000kkZeIAI) — you will be redirected to the Salesforce AppExchange / package installer.
Choose **Install for All Users** so every user can see Flowla data on their opportunity records, then click **Install**.
If prompted, check the box and click **Continue** — this allows the package to communicate with Flowla's API.
Salesforce will send a confirmation email once installation is complete. This may take a few minutes.
To verify: go to **Setup → Installed Packages** and confirm **Flowla** is listed as **Installed**.
***
### Step 2: Connect Salesforce to Flowla
This step links your Salesforce org to your Flowla workspace. The OAuth connection automatically handles API credential setup and user assignments that were previously done manually.
In the left sidebar, click **Integrations**. Find **Salesforce** and click **Connect**.
You will be redirected to Salesforce's OAuth login screen. Log in with a **Salesforce admin account** — the account used here determines the API access level for the integration.
Use a dedicated integration user or admin account — not a personal user account. If that user is deactivated, the integration will break. The connecting user must have **API Enabled** and admin rights in their Salesforce profile.
Review the permissions Flowla is requesting and click **Allow**. You will be redirected back to Flowla and the Salesforce CRM card should be connected.
***
### Step 3: Add the Flowla Component to the Opportunity Page Layout
This step embeds the Flowla widget directly inside your Salesforce opportunity records so users can see Flowla room and detailed activity without leaving Salesforce.
Open the **Sales Console** app, navigate to any **Opportunity record**, click the **gear icon (⚙)** in the top-right corner, and select **Edit Page**.
In the Lightning App Builder, find the **Flowla Aura Component** in the left-hand panel (search for "Flowla") and drag and drop it onto your preferred location on the layout.
Click **Save**. When prompted to activate, select **Assign as App Default** so the change applies to all users, then click **Back** to exit the builder.
To verify: open any Opportunity record — the Flowla widget should appear in the position you placed it. If the opportunity is linked to a Flowla room, engagement data will appear automatically.
***
## CRM Integrations
* **Stale variable fix:** When the primary company or contact on a deal changes, all synced CRM variables now refresh immediately. No more outdated names, emails, or fields showing the previous contact's data (HubSpot & Salesforce)
## Meeting list & single meeting blocks
Meetings that auto-sync into your rooms can now be surfaced directly as content blocks inside the editor — closing the loop between meeting intelligence and your buyer-facing rooms.
* Add a **meeting list block** to display all meetings linked to the room, automatically populated as new calls are matched and synced
* Add a **single meeting block** to highlight a specific call — title, description, date, and attendees rendered cleanly inline
* Meetings are **linked** from room, not duplicated — any update to the meeting data reflects everywhere it's used
* When you add a meeting block, a picker opens to select from the room's matched meetings, making it easy to pull in the right call without manual work
* The meeting list stays in sync automatically — as new calls are matched to the room via auto-sync, they appear in the block without any manual action
***
## Mapping Salesforce properties to variables
Any Salesforce property — from opportunities, contacts, or accounts — can be mapped to a Flowla variable and used anywhere in your rooms and templates.
In the left sidebar, click **Integrations**, then click **CRM settings**.
Find Salesforce and click **Settings**.
Click the **Sync from Salesforce** tab.
Search for or select the object you want to pull from: **Opportunity**, **Contact**, or **Account**.
Browse or search for the specific property within that object (for example, *Close Date* or any custom property on the object).
Edit the variable name as you'd like it to appear in Flowla, then click **Add**.
Once added, the variable is immediately available to insert in any room or template. It populates automatically from the linked Salesforce opportunity whenever a room is created or the opportunity data updates.
This works for any property on standard objects (Opportunity, Contact, Account), including custom properties you've added to those objects. For Salesforce **custom objects**, use an Autopilot workflow to pull the data instead — see [Salesforce automations](/automations/Salesforce).
***
## FAQ & Troubleshooting
This almost always comes down to one of the following. Check them in order:
1. **The Flowla managed package hasn't been installed yet.** Installing the package (Step 1 above) is what registers Flowla's Trusted URLs, permission sets, and external credentials in your org — connecting (Step 2) before that step is done can fail with an Unauthorized error.
**Fix:** Install the package first and confirm it shows as **Installed** under **Setup → Installed Packages**, then retry **Connect**.
2. **Flowla isn't allow-listed as a Trusted URL.** If your org's CSP settings block requests to domains that aren't explicitly trusted, the OAuth redirect back to Flowla can get blocked.
**Fix:** Go to **Setup → CSP Trusted Sites** and confirm `https://app.flowla.com` and `https://api.flowla.com` are both listed with the required CSP directives checked. Installing the managed package should add these automatically — if they're missing, add them manually.
3. **The Salesforce user completing the connection is missing required permissions.** The account used to connect determines the integration's API access — it needs **API Enabled** and admin rights on its Salesforce profile. A limited or deactivated user will fail here.
**Fix:** Reconnect using a dedicated integration user or admin account with **API Enabled** and admin permissions.
4. **Login IP restrictions on the org or profile.** If your Salesforce org or the connecting user's profile restricts login IP ranges, Flowla's OAuth request can be rejected as unauthorized even with valid credentials.
**Fix:** Ask your Salesforce admin to check **Setup → Network Access** (Trusted IP Ranges) and the connecting profile's **Login IP Ranges**, and allow Flowla's servers or temporarily relax the restriction while connecting.
5. **Your Flowla session expired mid-authorization.** If the Salesforce login/consent screen takes a while (SSO, MFA, or waiting on IT approval), your Flowla session can time out before the redirect back completes.
**Fix:** Make sure you're freshly logged into Flowla, then restart the **Connect** flow from the Integrations page in one continuous pass rather than resuming an old tab.
If none of these resolve it, contact Flowla support with the approximate time of the attempt so we can check server-side logs.
**Likely cause:** API credentials were not automatically configured during the OAuth connection.
**Fix:** Set them up manually in Salesforce:
1. Go to **Setup** → search for **Named Credentials** → click the **External Credentials** tab
2. Find and click **Flowla API**, then scroll to **Principals** → **FlowlaAPIPrincipal** → **Edit**
3. Under **Authentication Parameters**, add: **Parameter Name** `ApiKey`, **Value** = your API key from **Flowla → Integrations → Salesforce → Settings & more**
4. Click **Save**, then refresh the Opportunity page
**Likely cause:** That user is missing the Flowla API permission set assignment in Salesforce.
**Fix:** Go to **Setup** → **Permission Sets** → **Flowla API** → **Manage Assignments** → **Add Assignment**. Search for the affected user, click **Assign**, and ask them to refresh the page.
Connecting Salesforce to Flowla lets you automatically pull in your deals, contacts, and company data, so you can personalize rooms at scale and trigger powerful workflows based on CRM activity.
*Once it's set up, the connection is active for your entire team on Flowla.*
### Why Integrate Salesforce with Flowla?
Connecting Salesforce to Flowla gives you a powerful two-way sync between your CRM and your customer-facing rooms.
At its core, the integration allows you to:
* **Pull in CRM data** to personalize rooms automatically
* **Push Flowla engagement** (views, form submissions, completions) back into Salesforce
* Keep everything aligned across tools and teams, without manual work
When paired with **automated workflows**, it becomes even more powerful: You can trigger actions based on CRM events, auto-update Salesforce when buyers take key actions, and build an always-on sales system.
*(All your deal room activity synced to Salesforce)*
### What You Can Do With the Integration
By combining the two-way sync with automated workflows, you can:
✅ **Personalize rooms automatically** using Salesforce fields like company name, logo, contact info
✅ **Trigger workflows** from CRM events, like opportunity stage changes or creation
✅ **Push engagement data** (e.g. form submitted, section unlocked) back to Salesforce
✅ **Update CRM fields or create tasks** based on room activity using workflows
✅ **Keep Salesforce as your source of truth**, without needing manual copy-paste
✅ **Power your entire revenue process**, from deal creation to onboarding, with integrated data and actions
Learn more about [building automated workflows](/automations/automations-overview) to connect room activity with your CRM.
### How to set it up
In Salesforce, go to **Setup → CSP Trusted Sites**. Add `https://app.flowla.com` and `https://api.flowla.com`, and check all required CSP Directives for each.
In the left sidebar, click **Integrations**. Click **Connect** under Salesforce and complete the authentication flow.
Install the package for **All Users** using the [Flowla for Salesforce installer](https://login.salesforce.com/packaging/installPackage.apexp?p0=04tJ7000000kaBbIAI).
Go to the **Sales Console App**, open any opportunity, and click the ⚙️ icon → **Edit Page**. Drag and drop the **Flowla Aura Component** onto the layout, click **Save**, and activate the page as **App Default**.
Go to **Setup → Permission Sets → Flowla API → Manage Assignments**. Add the relevant users (e.g. Sales or CS team).
Search for **Named Credentials**, go to the **External Credentials** tab, find `Flowla API`, and edit `FlowlaAPIPrincipal`. Add your API key under **Authentication Parameters**.
Find your Flowla API key by going to **Integrations → Salesforce → Settings & more**.
Create automated workflows triggered by Salesforce events like opportunity stage changes.
# Slack
Source: https://docs.flowla.com/integrations/Slack
Get real-time notifications about room activity directly in your Slack channels.
Connect Slack to receive notifications about room views, buyer engagement, and deal activity in the channels where your team is already working. You'll know the moment a prospect opens your room — without having to check Flowla.
***
### Why connect Slack?
* **Real-time alerts** — Know instantly when prospects view your rooms
* **Team visibility** — Share deal updates in relevant channels automatically
* **Faster response** — React quickly to engaged buyers while you're top of mind
* **Workflow integration** — Trigger custom Slack messages from automated workflows
***
### How to connect Slack
In the left sidebar, click **Integrations**.
Locate **Slack** in the integrations list and click **Connect**.
Click **Allow** when Flowla requests permissions to your Slack workspace.
Choose which Slack channel should receive notifications.
You're now connected. Notifications about your rooms will start arriving in your chosen channel.
***
### Available notifications
Configure which events trigger Slack notifications:
| Event | Description |
| -------------------- | -------------------------------- |
| **Room Viewed** | Prospect opened your room |
| **Content Engaged** | Prospect interacted with content |
| **Action Completed** | Task was marked complete |
| **Form Submitted** | Prospect submitted a form |
| **Comment Added** | New message in the room |
***
### Managing notification settings
In the left sidebar, click **Integrations**, then select **Slack**.
Click **Settings** to open your notification preferences.
Toggle notifications on or off for each event type, and choose the channel for each notification type.
***
### Using Slack with workflows
Send custom Slack messages based on specific triggers:
### Example workflows
* When a room is viewed for the first time → Notify the room owner
* When a form is submitted → Alert the sales team channel
* When an action is overdue → Remind the assignee
Use separate Slack channels for deal activity alerts and internal team notifications — it keeps signals actionable and stops high-volume alerts from drowning out important messages.
***
### Disconnect Slack
In the left sidebar, click **Integrations**.
Find **Slack** and click **Settings & More**.
Click **Disconnect** and confirm your choice.
***
# Stripe
Source: https://docs.flowla.com/integrations/Stripe
Embed Stripe payment links and invoices directly in your Flowla rooms.
Accept payments directly inside your rooms for a smooth and secure payment experience — enhancing your sales process and customer satisfaction without buyers ever having to leave their dedicated space.
***
Coming soon
# Microsoft Teams
Source: https://docs.flowla.com/integrations/Teams
Connect Flowla to Microsoft Teams to receive real-time notifications about your rooms directly in your team's channels or as direct messages.
## Overview
Stay on top of every deal without leaving Teams. The Flowla × Microsoft Teams integration allows your team to stay on top of deal activity without leaving Teams. Once connected, Flowla can send automated notifications to any Teams channel or directly to individual users whenever key events happen in your rooms — like a prospect downloading an asset, viewing a room, or leaving a comment.
Route alerts to shared channels so your whole team sees deal activity as it happens.
Send notifications privately to individual team members.
Flowla detects who owns a room and notifies them automatically.
Choose which events trigger notifications and configure separate rules per recipient.
***
## Requirements
Before setting up the integration, make sure you have:
* A **Microsoft 365 account** with permission to grant admin consent for your organization (typically a Teams or Azure AD administrator)
* The **Flowla Teams bot** installed in at least one Teams team (required for sending notifications to channels and DMs — see Installation below)
* **Admin access in Flowla** to manage integrations
***
## Setting Up the Integration
The setup has two parts:
Authorizes Flowla to communicate with your Microsoft 365 environment.
Adds the Flowla bot to your Teams workspace so it can send messages.
Both steps are required. You can send notifications to channels or DMs only after the bot has been installed in a team.
***
### Part 1 — Connect Your Microsoft Tenant
In the left sidebar, click **Integrations**, then select **Microsoft Teams** and click **Connect**.
You will be redirected to a Microsoft login page. Sign in with your Microsoft 365 account and review the permissions Flowla is requesting.
Depending on your Microsoft permissions, one of two things will happen:
Click **Accept** on the Microsoft permissions screen.
You will be redirected back to Flowla — your tenant is now connected. Proceed to Part 2.
Microsoft will show a notice that admin approval is required. When you return to Flowla, a modal titled **"Admin consent required"** will appear.
In the modal, click **Click to copy** to copy the admin consent link.
Send that link to your Microsoft 365 administrator. **They do not need a Flowla account** to approve it.
Your admin visits the link, signs in with their Microsoft credentials, and clicks **Accept**.
Once your admin has approved, return to Flowla and click **Connect** again. Sign in and click **Accept** — you will be redirected back and the tenant will be connected.
The admin approval is a one-time step per Microsoft tenant. Once your admin has approved Flowla, all future users from the same organization can connect without needing admin involvement.
This authorization grants Flowla permission to read your Teams structure (teams, channels, members) and send messages via the Flowla bot. It does not give Flowla access to your Teams messages or files.
***
### Part 2 — Install the Flowla Bot
The Flowla bot must be installed in at least one Microsoft Teams team before notifications can be sent. Choose the option that fits your use case:
To send notifications to a Teams **channel**, install the Flowla bot directly into the team that contains the channel.
Navigate to the team where you want to receive Flowla notifications.
Click the **...** (More options) next to the team name → **Manage team**.
Click **Get more apps** (or **Add an app**).
Search for **Flowla** in the Teams App Store, click **Add** → select **Add to a team**, choose the team, and click **Set up a bot**.
Once installed, Flowla can post to any channel in that team. You will see a welcome message from the Flowla bot in the General channel confirming the installation.
Only **standard (public) channels** are supported. Private channels are not available.
To send notifications as **direct messages**, the Flowla bot must be installed in each recipient's personal Teams app space. This is a Microsoft Teams requirement for bot-initiated 1:1 messages.
Choose one of the following methods:
Each person who should receive DMs from Flowla needs to install the Flowla app in their personal Teams space:
Click **Apps** in the left sidebar.
Search for **Flowla** and click **Add** — make sure to add it to your **personal space** (not a team).
Once installed, Flowla can send that user direct messages.
A Teams administrator can push the Flowla app to all users so they don't have to install it themselves:
Sign in to the **Microsoft Teams Admin Center** at [admin.teams.microsoft.com](https://admin.teams.microsoft.com/).
Go to **Teams apps → Manage apps**, search for **Flowla**, and open the app. Under **Actions**, adjust the org-wide availability settings.
Go to **Teams apps → Setup policies** and edit the **Global (Org-wide default)** policy or create a new one.
Under **Installed apps**, click **Add apps**, search for Flowla, and add it. Save the policy.
Teams will automatically install the Flowla app in the personal space of all affected users.
If you only want to enable DMs for a specific group of users (not everyone):
Sign in to the **Microsoft Teams Admin Center**.
Go to **Teams apps → Setup policies** and click **Add**.
Under **Installed apps**, add **Flowla** and save the policy.
Go to **Users** and assign the policy to the relevant users.
Users assigned to this policy will have the Flowla app automatically installed in their personal Teams space.
Options B2 and B3 are performed entirely in Microsoft Teams Admin Center. The Teams admin does not need a Flowla account. Once users have the app in their personal space, Flowla can send them direct messages without any further action from the user.
If a user has not installed the Flowla app in their personal space (by any of the methods above), DMs to that user will fail silently — channel notifications are unaffected.
***
## Available Notifications
You can configure Flowla to notify you whenever any of the following events occur in your rooms:
| Notification | Description |
| -------------------- | --------------------------------------------------------------------------------------- |
| **Asset Downloaded** | A visitor downloaded a file or asset from a room |
| **Comment Added** | A visitor or team member added a comment in a room |
| **Room Viewed** | A visitor opened and viewed a room |
| **Room Shared** | A room was shared with a new recipient |
| **Reaction Added** | A visitor or team member commented in the room with an emoji or reaction in mobile view |
| **Task Completed** | A task inside a room was marked as complete |
| **Overdue Reminder** | A task or action item in a room is past its due date |
You can enable any combination of these per notification rule. For example, send only **Asset Downloaded** and **Room Viewed** events to a shared sales channel, while sending **all** events as a DM to the room owner.
***
## Managing Notification Settings
Notification rules (called **Notification Sets**) define who receives which notifications. Each rule targets a single recipient — a channel, a specific user, or the room's owner — and specifies which events to deliver.
### Accessing Notification Settings
1. In the left sidebar, click **Integrations**, then select **Microsoft Teams**
2. Your configured notification sets are listed in the left panel
3. Click any existing rule to edit it, or click **Add** to create a new one
***
### Creating a Notification Rule
Click **Add** (or the **+** button).
Choose the Microsoft Teams team this rule applies to.
* **Channel** — sends the notification to a Teams channel
* **User** — sends the notification as a direct message to a specific team member
* **Room Owner** — automatically sends the notification to whoever owns the Flowla room the event occurred in
* If **Channel**: choose from the list of available channels in the selected team
* If **User**: search for and select a team member by name
* If **Room Owner**: no additional selection needed — Flowla resolves the owner automatically
Check the events you want this rule to cover.
Click **Save**.
You can create multiple rules. For example: one rule sends all events to a shared **#sales-alerts** channel, and another rule sends only **Asset Downloaded** events as a DM to each room's owner.
***
### Editing a Notification Rule
1. Click the rule you want to edit from the left panel
2. Modify the recipient, notification types, or active status
3. Click **Save** to apply changes
### Deleting a Notification Rule
1. Select the rule from the left panel
2. Click **Delete** at the bottom of the editor
3. Confirm deletion — this cannot be undone
***
## Disconnecting Microsoft Teams
In the left sidebar, click **Integrations**, then select **Microsoft Teams**.
Click the **gear icon** (⚙) in the top-right corner of the Teams settings panel.
Select **Disconnect** and confirm when prompted.
Disconnecting from Flowla does not uninstall the Flowla bot from your Teams workspace. To fully remove the bot, go to Microsoft Teams → manage the team → Apps → remove the Flowla app.
***
## Troubleshooting
**Likely cause:** The Flowla bot has not been installed in a Teams team. The OAuth connection alone is not sufficient for message delivery.
**Fix:** Install the Flowla bot in at least one Microsoft Teams team — see Part 2 of the setup instructions above.
**Likely cause:** Private channels are not supported by the integration.
**Fix:** Only standard (public) channels are shown. Check that the channel you're looking for is not set to private in Teams.
**Likely cause:** The Flowla bot has not been installed in a team that the user is a member of.
**Fix:** Ensure the bot installation (Part 2) has been completed for a team that includes this user, or have the user install the Flowla app in their personal Teams space.
**Likely cause:** The room owner's email in Flowla does not match their email in the connected Microsoft Teams tenant.
**Fix:** Verify that the room owner's Flowla email matches their Microsoft 365 account email exactly.
**Likely cause:** The account used does not have Microsoft 365 admin permissions to grant consent on behalf of the organization.
**Fix:** Sign in with an account that has admin rights. Personal or standard user accounts cannot authorize the integration.
# Zapier
Source: https://docs.flowla.com/integrations/Zapier
Connect Flowla to 5,000+ apps with Zapier to automate your workflows.
Use Zapier to connect Flowla with thousands of other tools. Flowla works as both a **trigger** (when something happens in Flowla, do something elsewhere) and an **action** (when something happens elsewhere, do something in Flowla) — giving you flexible automation without writing any code.
***
### Example Zaps
**Calendly → Flowla → Email/Slack**
Event created in Calendly → Generate room → Send link via email or Slack
**Flowla → Google Sheets**
Contact views a room → Create a row in Google Sheets to track engagement
**Flowla → HubSpot**
Contact views a room → Add them to your contact list in HubSpot
***
### How to connect Zapier
In the left sidebar, click **Integrations**. Find **Zapier** and click **Settings & More**. Copy your API key.
Go to Zapier and create a new Zap.
Search for **Flowla** as a trigger or action app.
After selecting an event, go to the **Account** tab and click **Sign in**. Paste your API key.
***
Your Flowla API token in Zapier expires periodically — if your Zaps stop firing, regenerate the token in **Settings → Integrations → Zapier** and update your Zapier connection.
## Troubleshooting
**Likely cause:** The Flowla API token used in Zapier has expired or been regenerated.
**Fix:** Go to **Flowla Settings > API**, regenerate your token, and update it in your Zapier connection.
***
# Asset library
Source: https://docs.flowla.com/library/asset-library-overview
Manage and reuse content across all your rooms from one central place.
## TL;DR
The Asset Library is your single source of truth — upload content once, use it across all your rooms, and update it in one place to keep everything current everywhere.
## Why use the Asset Library
* **Central management** — Update a file once and it updates everywhere it's used
* **Consistency** — Ensure everyone uses the latest approved materials
* **Speed** — Add content to rooms without re-uploading files each time
* **[Analytics](/reports-analytics/content-analytics)** — Track how assets perform across all rooms
* **Organisation** — Keep content tidy with folders and tags
***
## File types
The Asset Library supports a wide range of file types:
| Category | Supported Types |
| ------------- | --------------------------------------------------- |
| **Documents** | PDF, DOC, DOCX, PPT, PPTX, XLS, XLSX |
| **Images** | PNG, JPG, JPEG, GIF, SVG, WEBP |
| **Videos** | MP4, MOV, WEBM (or embed from YouTube, Loom, Vimeo) |
| **Other** | ZIP, CSV, and most common file formats |
***
## Uploading
Add content to your library in two ways:
**Direct upload:**
Click **Library** in the main left-hand navigation.
Click **Upload** or drag and drop files directly onto the page.
Give the asset a title and optional description, and choose a folder to keep things organised.
Click **Save** — the asset is now available to add to any room.
**From a room:**
When you add content to a room, you can choose to save it to the library for future reuse.
Update a library asset once and it updates everywhere it's used — perfect for keeping proposal decks, case studies, and pricing sheets current across all your rooms.
***
## Organising content
Keep your library organised for easy discovery.
**Folders:**
* Create folders to group related content (e.g. "Case Studies", "Product Decks", "Contracts")
* Nest folders for hierarchical organisation
* Move assets between folders as needed
### How to create a folder
Click **Library** in the main left-hand navigation.
Click the **Create Folder** button in the top right.
* **Folder name** — e.g. "Brand Assets", "Case Studies", "Contracts"
* **Color** — Pick a colour to visually distinguish the folder
* **Icon** — Choose an emoji or icon to represent the folder's contents
Hit **Create** and your folder will appear in the library ready to use.
**Search and filter:**
* Search by asset name or description
* Filter by file type, upload date, or folder
**Tags (coming soon):**
* Add tags to assets for flexible categorisation
* Filter by multiple tags
***
## Asset intelligence
Beyond storing your content, Flowla can analyse it. [**Asset intelligence**](/rex/asset-intelligence) turns each asset into a structured profile: what it's about, which personas it speaks to, which sales stages it fits, which competitors it counters, and how fresh it still is.
That profile is what lets [REX](/rex/overview) search your library by *meaning* rather than filename, so a request like "find a case study for a fintech buyer" works even if the word "fintech" never appears in the file. It's also how REX picks the specific asset to recommend inside a [signal](/rex/signals).
**Two ways it gets generated:**
* **Automatically** on upload, if **Auto-generate asset intelligence** is turned on in Library settings
* **On demand**, from an asset's details, by clicking **Generate asset intelligence** (or **Regenerate**)
Every asset gets a **freshness score**, calculated purely from its last-updated date, with full marks under 3 months old tapering to zero past 3 years. Check it before sending anything with pricing, product screenshots, or competitive claims to a customer.
Generating asset intelligence spends [credits](/plans-billing/credits): 1 per page for documents, or 1 per minute for audio and video, plus a flat cost to build the profile. An asset with no intelligence generated is invisible to REX's search and recommendations.
# REX
Source: https://docs.flowla.com/mcp/REX
Read the deal intelligence REX builds — signals, scores, insight cards, and the evidence behind them — and write signals back.
[REX](/rex/overview) builds a continuously updated understanding of every deal from your calls, your CRM, and room activity. Over MCP, that understanding becomes queryable: Claude can pull a deal's signals, scores, and the specific evidence behind them, and write new signals back.
Everything REX exposes here reads from the room's [Knowledge Graph](/rex/knowledge-graph). Nothing is a separate or simplified copy — a score you fetch over MCP is the score on the room's Overview tab.
All REX data is **read-only** except signals. `upsert_signals` is the only tool that writes. Scores, insight cards, contacts, and findings are computed by REX and can't be set from outside.
## What you can read
The worklist for a deal — dated, actionable observations, each with an urgency level and recommended next steps.
One call for the whole picture: Deal Score, MEDDPICC, insight cards, and the quote-backed findings behind them.
Everyone on the room, including people added but never engaged.
***
## Signals
A [signal](/rex/signals) is one specific observation REX has made about a deal, with an urgency level, a justification, and one or more recommended actions. Signals are the most useful REX data to pull over MCP, because they're already scoped to "things worth doing something about."
### Query and triage
```text One room theme={null}
What signals are open on the Acme Corp room?
```
```text Across the pipeline theme={null}
Show me every high-urgency signal across all my rooms, newest first.
```
```text Triage counts theme={null}
How many open signals do I have by urgency across all rooms?
```
```text Keyword theme={null}
Find any open signals mentioning security review.
```
Leaving the room out is deliberate: `query_signals` and `aggregate_signals` both work across every room you have access to when no `roomId` is given, which is what makes a morning pipeline sweep a single call.
Ask for counts before details. `aggregate_signals` returns just the urgency breakdown (for example *4 low, 2 medium, 1 high*), so Claude can tell you where to look without pulling every signal body first.
### Signal properties
| Property | Values |
| ------------------- | ------------------------------------------------------------------------------ |
| Urgency | `HIGH` · `MEDIUM` · `LOW` |
| Status | `TODO` · `IN_PROGRESS` · `DONE` · `DISMISSED` |
| Justification | A capture (what triggered it) and an importance (why it matters for this deal) |
| Recommended actions | One or more `{ action, actionDescription }` next steps |
### Writing signals
`upsert_signals` lets an external agent or workflow add its own signals to a room's feed, or update ones it created earlier. A signal you write appears in the room's feed and in the org-wide **REX's signals** view exactly like a REX-generated one.
```text Create theme={null}
Add a high-urgency signal to the Acme room: the renewal date moved up to
September, so the security review needs to start this week.
```
```text Update theme={null}
Update that signal to medium urgency — the review is now scheduled.
```
Updating requires the signal `id` you got back when you created it. There's no dedupe on title, so calling `upsert_signals` twice without an `id` creates two signals rather than replacing the first.
***
## Knowledge graph
[`get_knowledge_graph`](/mcp/tools#rex-knowledge-graph) returns a room's whole picture in one call: its [Deal Score](/rex/deal-score), the eight [MEDDPICC](/rex/meddpicc) dimensions, the four [insight cards](/rex/insight-cards), and the quote-backed **findings** behind all of them. There's no separate call per view, so a question that spans several of them costs the same as a question about one.
```text Deal Score theme={null}
What's the deal score on the Globex room, and what's dragging it down?
```
```text Full MEDDPICC theme={null}
Give me the MEDDPICC breakdown for the Acme room.
```
```text One dimension theme={null}
Why is Paper Process scored so low on the Acme deal?
```
```text Narrative read theme={null}
Summarise where the Acme deal stands using REX's insight cards.
```
```text Across rooms theme={null}
Compare the MEDDPICC Champion scores on my three biggest open deals.
```
The eight MEDDPICC dimensions are `metrics`, `economic_buyer`, `decision_criteria`, `decision_process`, `paper_process`, `identify_pain`, `champion`, and `competition`. The four insight card categories are:
| Category | Covers |
| ------------ | ------------------------------------------------------------------------ |
| `motivation` | What's driving the deal — pain, problem, time pressure |
| `stance` | Where you stand — competitive position, perceived value |
| `obstacle` | What's putting the deal at risk — concerns, blockers, unmet requirements |
| `trajectory` | Who decides and what's next — the buying path and committed next steps |
A room without enough activity yet returns `notScored` rather than a `0`. Those are different things — `notScored` means REX doesn't have the evidence to judge, while `0` is a judgment. Don't let a summary flatten one into the other.
### Findings
Findings are the quote-backed moments REX has picked up from meetings — the raw material every score and card is built from. Each one carries a type, a description, the exact quote, and the meeting and contact it came from, which is what lets you answer questions no summary view covers.
```text By type theme={null}
List every unanswered question in the Acme room, with who asked it.
```
```text By person theme={null}
What objections has Sarah raised across all our calls with Globex?
```
```text Commitments theme={null}
What has the Acme buyer promised that they haven't delivered yet?
```
```text Competitive theme={null}
Every time RoutePath came up on the Globex deal, and what was said.
```
The knowledge graph and signals answer different questions. The graph gives you the narrative and the evidence for a deal review; signals give you the worklist. Pull the graph when you want to understand a deal, signals when you want to act on it.
***
## Room contacts
[`get_contacts`](/mcp/tools#contacts) returns everyone associated with a room (pass `roomIds`), enriched with view counts and company associations — not just people who've shown up. Omit `roomIds` to get every contact in the organization instead of one room.
```text Everyone theme={null}
Who's on the Acme room, and which of them have actually opened it?
```
```text Never engaged theme={null}
Which contacts on the Globex room have never visited?
```
***
## Putting it together
REX tools compose well with the room tools. A few things worth asking for in one go:
```text Pre-call prep theme={null}
Before my Acme call: give me the open signals, the insight cards, and anything
the buyer committed to that's still outstanding.
```
```text Pipeline sweep theme={null}
Across all my rooms, show me high-urgency signals grouped by room, and flag any
deal where the score is below 3.
```
```text Close the loop theme={null}
For the Acme room, list the unanswered questions REX found and add an action
item for each one so they don't get lost.
```
```text Stakeholder check theme={null}
Who's on the Globex room but has never opened it, and has anyone on a call
mentioned them?
```
REX's scores and statuses are AI assessments graded from evidence, not facts. Hard data like a close date or a CRM field value is captured as-is, but severity, urgency, and sentiment are judgments. Anything you pull over MCP carries its justification and source for exactly that reason — check the evidence before acting on the number.
## Full parameter reference
See the [REX signals](/mcp/tools#rex-signals), [Contacts](/mcp/tools#contacts), and [REX knowledge graph](/mcp/tools#rex-knowledge-graph) sections of the [tool reference](/mcp/tools).
# Action Items
Source: https://docs.flowla.com/mcp/action-items
Shared to-do lists that keep you and the buyer aligned on next steps.
Action items are tasks embedded inside an action-plan block on a room page. Each item can have a description, start and due dates, assignees, and a status. Mark an item **internal** to hide it from the buyer.
You need an action-plan block on the page first. Ask Claude to add one, then add action items inside it.
## Item properties
| Property | Options |
| ---------- | ---------------------------------------------------------- |
| Status | `todo` · `in_progress` · `done` · `cancelled` |
| Assignee | Team member or external email address |
| Visibility | Public (buyer can see) or **internal** (hidden from buyer) |
| Dates | Start date and/or due date |
People from your org are linked automatically. Outside email addresses are added as external contacts.
## Add action items
```text Add multiple items at once theme={null}
Add these action items to the Next Steps block: 'Review proposal' due June 1st
assigned to the buyer, and 'Schedule kickoff call' assigned to me.
```
```text Add an internal item theme={null}
Add an internal action item 'Confirm legal sign-off' that the buyer can't see.
```
## Update action items
```text Mark an item complete theme={null}
Mark the 'Review proposal' action item as done.
```
```text Reassign an item theme={null}
Reassign the kickoff item to alex@ourcompany.com.
```
## Review action items
```text theme={null}
Show me all the action items in the Acme room and who they're assigned to.
```
# Getting Started with MCP
Source: https://docs.flowla.com/mcp/getting-started
Connect Flowla to your AI assistant in minutes.
## Supported clients
Flowla is a published connector in Claude — the easiest way to connect is
directly from **Settings → Connectors**, no installer or setup required.
For other MCP-compatible clients, the server URL is:
```
https://mcp.flowla.com/mcp
```
The server uses OAuth 2.0 — your client will open a browser window to
authorise Flowla on the first connection.
**Claude Desktop** and **Claude Web** (claude.ai) both support Flowla as
a built-in connector. See the Claude Desktop section below.
**Cursor**, **Windsurf**, **Gemini CLI** and other MCP-compatible
clients connect via the server URL above. **Claude Code** users can
install the plugin directly — see below.
Need to connect a different client? [Contact us](mailto:tech@flowla.com)
and we will add the required callback URI.
## Claude Desktop
The same steps apply to **Claude Web** (claude.ai):
1. Open Claude (Desktop or [claude.ai](https://claude.ai)) and go to
**Settings → Connectors**.
2. Find **Flowla** in the connector directory and click **Connect**.
3. A browser window will open — sign in and authorise your Flowla account.
### Verify the connection
Back in **Settings → Connectors**, Flowla should now show as
**Connected**. You can enable it for any conversation from the tools
picker.
## Claude Code
[Claude Code](https://claude.ai/code) is Anthropic's CLI for Claude. Install the
Flowla plugin with two commands:
```bash theme={null}
claude plugin marketplace add flowlacom/claude-plugin
claude plugin install flowla
```
On first use, Claude will open a browser window to authorise your Flowla account.
## How to open your terminal
**Option 1 — Spotlight**
Press **⌘ Command + Space**, type `Terminal`, then press **Return**.
**Option 2 — Finder**
Open **Finder → Applications → Utilities → Terminal**.
**Option 3 — Launchpad**
Open Launchpad, search for `Terminal`, and click it.
**Option 1 — Start menu**
Press the **Windows** key, type `cmd` or `PowerShell`, then press **Enter**.
**Option 2 — Run dialog**
Press **Windows + R**, type `cmd`, then click **OK**.
**Option 3 — Right-click shortcut**
Hold **Shift** and right-click any folder in File Explorer, then select
**Open PowerShell window here** or **Open in Terminal**.
## Next steps
Learn how the MCP server works and what it connects to.
Browse the full list of tools Claude can call.
# What you can do
Source: https://docs.flowla.com/mcp/overview
Manage your Flowla rooms in plain language — no code required.
## Capabilities
Create rooms from scratch, a template, or by duplicating one. List, update, and pull engagement analytics.
Build out the structure of a room and control who can see each part.
Add text, images, links, embeds, PDFs, and task lists to any page.
Create and track shared to-do items with owners, due dates, and status.
Trigger automations and get notified when a room is completed.
Pull a deal's signals, scores, insight cards, and the quote-backed findings behind them — and write signals back.
Find companies, users, labels, statuses, and templates to reference in other actions.
## Tips for better results
Referring to "the Acme room" or "the Pricing section" helps Claude target the right object. The more specific the name, the less back-and-forth.
You can create several sections, pages, or actions in a single ask. Claude will handle them in order and report back on each.
Rooms → sections → pages → blocks → actions. If something can't be added, it's usually because the layer above it doesn't exist yet.
Say when something should be hidden or marked internal so buyer-facing content stays clean. Claude won't assume — it will do exactly what you ask.
For example: *"List the actions first, then mark the overdue ones done."* This keeps you in control of what gets changed.
## A full example
Here's what a complete room setup looks like in a single prompt:
```text theme={null}
Create a Flowla room called 'Initech – Evaluation' from our sales template,
assigned to me. Add sections for Overview, Pricing, and Next Steps. Under
Next Steps, add an action items: 'Sign NDA' due next Friday assigned to
buyer@initech.com and an internal task 'Loop in solutions engineer'.
Then show me the room.
```
Claude will create the room, build the section structure, populate the action-plan block, and return a summary of everything it made.
# Rooms
Source: https://docs.flowla.com/mcp/rooms
Create, find, and update the deal or onboarding spaces you share with buyers.
Rooms are the spaces you share with buyers — built from templates, duplicated from existing rooms, or created from scratch.
## Create a room
```text From scratch theme={null}
Create a new Flowla room called 'Acme Corp – Onboarding'.
```
```text From a template theme={null}
Spin up a room from our standard sales template and title it 'Globex Q3 Deal'.
```
```text Duplicate an existing room theme={null}
Duplicate my 'Acme Corp' room for a new prospect called Initech.
```
```text Connected to a CRM deal theme={null}
Create a room for the HubSpot deal 12345678 and assign it to me.
```
## Find and review rooms
```text List all rooms theme={null}
List all my Flowla rooms.
```
```text Engagement analytics theme={null}
Show me the engagement analytics for the Acme Corp room — who's been viewing it and how far they got.
```
## Update a room
```text Rename and set status theme={null}
Rename the Globex room to 'Globex – Closed Won' and set its status to Active.
```
```text Change owner theme={null}
Change the owner of the Acme room to jordan@ourcompany.com.
```
# Sections, Pages & Content
Source: https://docs.flowla.com/mcp/structure
Build out the structure of a room and fill pages with content blocks.
## Sections & pages
Sections are the top-level chapters of a room. Pages live inside sections. Both can have an **access level** that controls what the buyer sees.
| Access level | What it means |
| ------------ | ------------------------------ |
| `visible` | Shown to everyone |
| `restricted` | Requires a password or sign-in |
| `locked` | Visible but not accessible |
| `hidden` | Not shown to the buyer at all |
### Manage sections
```text Add multiple sections theme={null}
Add three sections to the Acme room: Introduction, Pricing, and Next Steps — all visible.
```
```text Hide a section from the buyer theme={null}
Hide the 'Internal Notes' section from the buyer.
```
```text Rename a section theme={null}
Rename the 'FAQ' page to 'Questions & Answers'.
```
```text Delete a section theme={null}
Delete the old 'Draft' section.
```
Deleting a section removes all its pages and content permanently.
### Manage pages
```text Add pages to a section theme={null}
Create two pages under the Pricing section called 'Plans' and 'FAQ'.
```
```text Rename a page theme={null}
Rename the 'FAQ' page to 'Questions & Answers'.
```
***
## Content blocks
Pages are filled with blocks. You can add text, images, links, embeds, PDFs, and action-plan blocks (then add action items inside).
| Block type | Use it for | Notes |
| ----------------- | --------------------------------------------------------- | ------------------------------------------- |
| Text | Welcome messages, descriptions, notes | Supports Markdown formatting |
| Image | Screenshots, logos, diagrams | Paste any public URL — stored automatically |
| Link | External URLs with a label | |
| Embed | Videos, interactive tools | |
| PDF | Proposals, one-pagers, contracts | Paste any public URL — stored automatically |
| Action-plan block | Shared task lists (see [Action items](/mcp/action-items)) | |
### Add content to a page
```text Text block with formatting theme={null}
Add a welcome message to the Introduction page with a heading and bullet points.
```
```text PDF theme={null}
Put our pricing PDF on the Plans page. [paste the file URL]
```
```text Embed theme={null}
Embed our demo video on the intro page.
```
```text Action-plan block theme={null}
Add an action-plan block to the Next Steps page.
```
### Review page content
```text theme={null}
List everything that's on the Pricing page.
```
# MCP Tools
Source: https://docs.flowla.com/mcp/tools
Complete reference for all Flowla MCP tools and their parameters.
All tool names use `snake_case`. Optional fields can be omitted entirely.
***
## Rooms
Returns a paginated list of rooms with engagement metrics.
| Field | Type | Required | Description |
| --------------- | ------ | -------- | ---------------------------------------------------------------- |
| `page` | number | | Page number (default: 1) |
| `limit` | number | | Results per page (default: 10) |
| `sortBy` | string | | `createdAt` · `updatedAt` · `totalEngagements` · `lastEngagedAt` |
| `sortDirection` | string | | `ASC` or `DESC` (default: `DESC`) |
**Response includes:** `id`, `title`, `userId`, `companyId`, `totalEngagements`, `lastEngagedAt`, `totalViews`, `totalUniqueViews`, `engagements` breakdown, and design fields.
Creates a new room. Resolve the company and owner first — call `list_companies` and `list_users` before this tool.
| Field | Type | Required | Description |
| ------------------ | ------- | -------- | -------------------------------------------------------------------- |
| `title` | string | | Room display title |
| `description` | string | | Optional description |
| `templateId` | string | | Create from a template |
| `duplicateFromId` | string | | Duplicate an existing room |
| `companyId` | string | | Associated company ID |
| `userId` | string | | Room owner user ID |
| `statusId` | string | | Initial status |
| `labelId` | string | | Label to apply |
| `email` | string | | Primary contact email |
| `hsDealId` | string | | HubSpot deal ID |
| `sfOpportunityId` | string | | Salesforce opportunity ID |
| `attioDealId` | string | | Attio deal ID |
| `coverTitle` | string | | Cover page title |
| `coverDescription` | string | | Cover page description |
| `coverDisabled` | boolean | | Hide the cover page |
| `themeColor` | string | | Background color (hex, e.g. `#FF5500`) |
| `navColor` | string | | Nav bar color (hex, `"flow-org-color"`, or `"target-company-color"`) |
Returns the full structure of a room: sections, pages, groups,
blocks (with extracted text content), and action items inside
each action-plan block. Use this before suggesting edits or
next best actions.
| Field | Type | Required | Description |
| ----- | ------ | -------- | ----------- |
| `id` | string | ✓ | Room ID |
Returns engagement data for a room: progress, assignees, and section/step viewership.
| Field | Type | Required | Description |
| ----- | ------ | -------- | ----------- |
| `id` | string | ✓ | Room ID |
Updates room properties. All fields optional.
| Field | Type | Required | Description |
| ------------------ | ------- | -------- | ------------------------- |
| `id` | string | ✓ | Room to update |
| `title` | string | | New title |
| `description` | string | | New description |
| `statusId` | string | | New status |
| `userId` | string | | New owner |
| `companyId` | string | | New associated company |
| `hsDealId` | string | | HubSpot deal ID |
| `sfOpportunityId` | string | | Salesforce opportunity ID |
| `attioDealId` | string | | Attio deal ID |
| `coverTitle` | string | | Cover page title |
| `coverDescription` | string | | Cover page description |
| `coverDisabled` | boolean | | Hide the cover page |
| `themeColor` | string | | Background color (hex) |
| `navColor` | string | | Nav bar color |
***
## Sections
| Field | Type | Required | Description |
| -------- | ------ | -------- | -------------------------- |
| `roomId` | string | ✓ | Room to list sections from |
| Field | Type | Required | Description |
| ---------- | ------ | -------- | ------------------------------------- |
| `roomId` | string | ✓ | Room to add sections to |
| `sections` | array | ✓ | Array of `{ title, access? }` objects |
`access` options: `visible` (default) · `restricted` · `locked` · `hidden`
| Field | Type | Required | Description |
| -------- | ------ | -------- | ----------------- |
| `id` | string | ✓ | Section to update |
| `title` | string | | New title |
| `access` | string | | New access level |
Permanently deletes the section and all its pages, groups, and blocks.
| Field | Type | Required | Description |
| ----- | ------ | -------- | ----------------- |
| `id` | string | ✓ | Section to delete |
***
## Pages
| Field | Type | Required | Description |
| ----------- | ------ | -------- | -------------------------- |
| `sectionId` | string | ✓ | Section to list pages from |
| Field | Type | Required | Description |
| ----------- | ------ | -------- | ------------------------------------- |
| `sectionId` | string | ✓ | Section to add pages to |
| `pages` | array | ✓ | Array of `{ title, access? }` objects |
| Field | Type | Required | Description |
| -------- | ------ | -------- | ---------------- |
| `id` | string | ✓ | Page to update |
| `title` | string | | New title |
| `access` | string | | New access level |
| Field | Type | Required | Description |
| ----- | ------ | -------- | -------------- |
| `id` | string | ✓ | Page to delete |
***
## Groups
| Field | Type | Required | Description |
| -------- | ------ | -------- | ------------------------ |
| `pageId` | string | ✓ | Page to list groups from |
| Field | Type | Required | Description |
| -------- | ------ | -------- | ----------------------------- |
| `pageId` | string | ✓ | Page to add groups to |
| `groups` | array | ✓ | Array of `{ title? }` objects |
| Field | Type | Required | Description |
| -------- | ------ | -------- | ------------------------- |
| `id` | string | ✓ | Group to update |
| `pageId` | string | ✓ | Page the group belongs to |
| `title` | string | | New title |
Deletes the group and all its blocks.
| Field | Type | Required | Description |
| -------- | ------ | -------- | ------------------------- |
| `id` | string | ✓ | Group to delete |
| `pageId` | string | ✓ | Page the group belongs to |
***
## Blocks
| Field | Type | Required | Description |
| --------- | ------ | -------- | ------------------------- |
| `pageId` | string | ✓ | Page containing the group |
| `groupId` | string | | Filter by group |
Adds blocks to a group. Each element of `columns` is a vertical stack; multiple elements appear side by side.
| Field | Type | Required | Description |
| --------- | ------ | -------- | ------------------------------------------------- |
| `pageId` | string | ✓ | Page the group belongs to |
| `groupId` | string | | Group to add blocks to |
| `columns` | array | ✓ | Array of `{ blocks: [{ type, content?, url? }] }` |
**Block types:** `text` · `image` · `embed` · `link` · `pdf` · `action-plan`
* `text`: `content` field accepts **Markdown** (headings, bold, lists, tables, etc.)
* `image` / `pdf`: provide any public `url` — the file is fetched and stored automatically
* `embed` / `link`: provide `url`
* `action-plan`: no extra fields needed; use `create_action_items` to add tasks
```json Single column theme={null}
{
"pageId": "",
"columns": [{ "blocks": [{ "type": "text", "content": "## Hello\n\nWelcome!" }] }]
}
```
```json Two side-by-side columns theme={null}
{
"pageId": "",
"columns": [
{ "blocks": [{ "type": "text", "content": "Left" }] },
{ "blocks": [{ "type": "image", "url": "https://example.com/img.png" }] }
]
}
```
| Field | Type | Required | Description |
| --------- | ------ | -------- | ---------------------------------------------------- |
| `id` | string | ✓ | Block to update |
| `pageId` | string | ✓ | Page the block belongs to |
| `content` | string | | New text (for `text` blocks; accepts Markdown) |
| `url` | string | | New URL (for `image`, `embed`, `link`, `pdf` blocks) |
| Field | Type | Required | Description |
| -------- | ------ | -------- | ------------------------- |
| `id` | string | ✓ | Block to delete |
| `pageId` | string | ✓ | Page the block belongs to |
***
## Assets
The organization's asset library. To add a library asset to a room, pass its id as `assetId` in `create_blocks` — do not use `libraryLink` for that.
Searches and lists assets in the library. Provide `llmQuery` for natural-language semantic search (returns only high-relevance matches), or `keyword` to match asset titles by name. Omit both to list assets filtered by type, tag, creator, folder, and date range, newest first.
| Field | Type | Required | Description |
| -------------------------------- | --------- | -------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `llmQuery` | string | | Semantic search query — ranked by relevance |
| `keyword` | string | | Match against asset titles (ignored when `llmQuery` is set) |
| `types` | string\[] | | Asset type names, e.g. `pdf` · `video` · `googleSlides` · `loom` · `notion` · `document` · `checklist` (mutual action plan) — see the library's type filter for the full list |
| `tags` | string\[] | | Tag names (case-insensitive) |
| `createdByIds` | string\[] | | Creator user IDs — resolve with `list_users` first |
| `folderId` | string | | Scope to one folder (direct children only) — resolve with `list_asset_folders` first |
| `createdAfter` / `createdBefore` | string | | ISO 8601 |
| `updatedAfter` / `updatedBefore` | string | | ISO 8601 |
| `page` | number | | Page number (default: 1) |
| `limit` | number | | Results per page (default: 5, max: 20) |
Lists the library's folders with their IDs, so a folder name can be resolved to an ID before calling `get_assets` with `folderId`.
| Field | Type | Required | Description |
| --------- | ------ | -------- | ----------------------------------------- |
| `keyword` | string | | Filter by folder title — omit to list all |
If more than one folder shares the target name, ask the user which one to use.
Returns a shareable public link for a library asset, creating the share if one doesn't exist yet.
| Field | Type | Required | Description |
| --------- | ------ | -------- | -------------- |
| `assetId` | string | ✓ | Asset to share |
**Response includes:** `id` (share id), `shareLink` (viewer-facing URL).
Returns one intelligence artifact for a single library asset. Exactly one of `includeIntelligenceGraph` or `includeParse` must be set.
| Field | Type | Required | Description |
| -------------------------- | ------- | -------- | ----------------------------------------------------------------------------------------------------------------- |
| `assetId` | string | ✓ | Asset ID |
| `includeIntelligenceGraph` | boolean | | Structured projection: overview, personas, features, integrations, competitors, sales stages — each with evidence |
| `includeParse` | boolean | | Parsed content: full extracted text plus per-page/section breakdown |
Either may return `null` if that artifact hasn't been generated yet for this asset.
***
## Action items
Returns action items scoped to a room, page, or block. Paginated
(default 100 per page, max 1000). If `blockId` is set, `pageId`
is required.
| Field | Type | Required | Description |
| --------- | ------ | -------- | --------------------------------------------- |
| `roomId` | string | | All items in the room |
| `pageId` | string | | All items on the page |
| `blockId` | string | | Items in a specific block (requires `pageId`) |
| `page` | number | | Page number (default: 1) |
| `limit` | number | | Results per page (default: 100, max: 1000) |
**Response:** `items` (each includes `blockId`), `totalRecords`, `totalPages`.
| Field | Type | Required | Description |
| --------- | ------ | -------- | --------------------------------- |
| `pageId` | string | ✓ | Page containing the block |
| `blockId` | string | ✓ | Action-plan block to add items to |
| `items` | array | ✓ | Array of action item objects |
**Item fields:** `title` (required), `description`, `status`, `dueDate`, `startDate`, `internal`, `assignees` (email array)
All fields optional. `assignees` replaces the full list.
| Field | Type | Required | Description |
| ------------- | --------- | -------- | --------------------------------------------- |
| `id` | string | ✓ | Action item to update |
| `title` | string | | |
| `description` | string | | |
| `status` | string | | `todo` · `in_progress` · `done` · `cancelled` |
| `dueDate` | string | | ISO 8601 |
| `startDate` | string | | ISO 8601 |
| `internal` | boolean | | Hide from buyers |
| `assignees` | string\[] | | Emails — replaces current list |
| Field | Type | Required | Description |
| ----- | ------ | -------- | --------------------- |
| `id` | string | ✓ | Action item to delete |
***
## Forms
Returns paginated forms in the organization.
| Field | Type | Required | Description |
| --------------- | ------ | -------- | ------------------------------------------------- |
| `search` | string | | Match against form title |
| `createdBy` | string | | Creator user ID — resolve with `list_users` first |
| `createdAtFrom` | string | | ISO 8601 datetime |
| `createdAtTo` | string | | ISO 8601 datetime |
| `page` | number | | Page number (default: 1) |
| `limit` | number | | Results per page (default: 10) |
**Response includes:** `id`, `title`, `createdAt`, `answerCount`, `questionCount`, `user` (creator: `id`, `firstName`, `lastName`, `email`).
Creates a form with optional questions.
| Field | Type | Required | Description |
| --------------- | ------- | -------- | --------------------------------------------------------------------------- |
| `title` | string | ✓ | Form title |
| `type` | string | ✓ | `linear` (standard single-answer) or `table` (multi-row, spreadsheet-style) |
| `collaborative` | boolean | | Allow multiple responders to fill it together (default: `true`) |
| `questions` | array | | Questions to add — see below |
**Question fields:** `type` (required — `text` · `email` · `number` · `link` · `date` · `date-range` · `date-time` · `date-time-range` · `file-upload` · `single-choice` · `multiple-choice`), `title`, `visibility` (`visible` default · `hidden`), `options` (choice labels — `single-choice`/`multiple-choice` only), `viewType` (`list` default · `dropdown` — choice types only), `placeholder` / `preFill` (text-based types only: `text`, `email`, `number`, `link`), `dateFormat` (`dd/mm/yyyy` · `mm/dd/yyyy` — date types only)
***
## Sessions
Returns visitor sessions (paginated). Each session represents one
visit to a room.
| Field | Type | Required | Description |
| --------------- | ------- | -------- | ------------------------------------------------ |
| `roomId` | string | | Filter by room |
| `contactId` | string | | Filter by identified contact |
| `keyword` | string | | Search by visitor name or email |
| `onlyContacts` | boolean | | Only sessions with an identified contact |
| `sortBy` | string | | `createdAt` · `updatedAt` (default: `createdAt`) |
| `sortDirection` | string | | `ASC` or `DESC` (default: `DESC`) |
| `from` | string | | Sessions created at or after this ISO date |
| `to` | string | | Sessions created at or before this ISO date |
| `page` | number | | Page number (default: 1) |
| `limit` | number | | Results per page (default: 10) |
**Response:** `results` (each includes `id`, `roomId`, `createdAt`,
location, browser, contact info, and room owner).
***
## Workflows & webhooks
Triggers a configured automation.
| Field | Type | Required | Description |
| ------------ | ------ | -------- | ---------------------------------------- |
| `workflowId` | string | ✓ | Workflow to trigger |
| `data` | object | | Key-value payload passed to the workflow |
***
## Contacts
Returns contacts enriched with company associations and view counts.
| Field | Type | Required | Description |
| --------- | ------ | -------- | ---------------------------------------------------------------------------------------- |
| `roomIds` | string | | Comma-separated room IDs to filter by — omit to return every contact in the organization |
**Response includes:** `id`, `email`, `fullName`, `title`, `headline`, `phone`, `linkedInUrl`, `avatar`, `isAccessGranted`, `source`, `addedAt`, `viewCount`, and `companies` (`id`, `name`, `domain`, `website`, `logo`).
***
## CRM
Updates properties on the primary contact associated with a room's linked CRM deal. Works with HubSpot and Salesforce. Requires a HubSpot or Salesforce integration to be connected.
| Field | Type | Required | Description |
| ------------ | ------ | -------- | ------------------------------------------------------------------------------------------------------------------------------------ |
| `roomId` | string | ✓ | Room whose linked CRM deal's contact to update |
| `crm` | string | | Target CRM — omit to use the first linked CRM (HubSpot → Salesforce → Attio priority) |
| `properties` | object | ✓ | Field name → new value. HubSpot examples: `jobtitle`, `phone`, `lifecyclestage`. Salesforce examples: `Title`, `Phone`, `LeadSource` |
Use exact CRM API field names — not display labels.
***
## Slack
Sends a Slack message to a user (DM) or a channel. Requires a Slack integration connected for the org.
| Field | Type | Required | Description |
| ------------- | ------ | -------- | ---------------------------------------------------------------------------- |
| `text` | string | ✓ | Message text |
| `userEmail` | string | | Send as a direct message to this user |
| `channelId` | string | | Send to a channel by its Slack ID |
| `channelName` | string | | Send to a channel by name (e.g. `"general"`) — ignored if `channelId` is set |
Provide at least one of `userEmail`, `channelId`, or `channelName`.
***
## Conversations
Searches the calling user's own past REX conversations, most recently updated first, by keyword (case-insensitive fuzzy match over titles and message content). Omit `search` to list the most recent conversations.
| Field | Type | Required | Description |
| -------- | ------ | -------- | --------------------------------------------------------------------- |
| `search` | string | | Fuzzy match over title and message content — omit to list most recent |
| `page` | number | | Page number (default: 1) |
| `limit` | number | | Results per page (default: 10) |
**Response includes:** `id`, `title`, `updatedAt` per match.
***
## REX signals
[Signals](/rex/signals) are the dated, actionable observations REX makes about a deal. Omitting `roomId` on `query_signals` and `aggregate_signals` searches every room you have access to.
Status values are `TODO` · `IN_PROGRESS` · `DONE` · `DISMISSED`. Urgency values are `LOW` · `MEDIUM` · `HIGH`.
Returns a single signal by id, or `null` if it doesn't exist for this org.
| Field | Type | Required | Description |
| ----- | ------ | -------- | ---------------- |
| `id` | string | ✓ | Signal ID (uuid) |
**Response includes:** `id`, `flowId`, `flowTitle`, `orgId`, `status`, `urgency`, `dismissReason`, `resolvedBy` (`user` or `agent`), `dateDone`, `dateDismissed`, `createdAt`, `updatedAt`, and `data` — the signal content: `title`, `description`, `justificationCapture` (what triggered it), `justificationImportance` (why it matters), `urgency`, `icon`, `recommendedActions` (array of `{ action, actionDescription }`, or `null`), `dismissReasons` (array of `{ reason }` options offered to the user, or `null`).
Returns a paginated list of signals (`{ results, totalRecords, totalPages }`). Without `roomId`, searches across every room you can access.
| Field | Type | Required | Description |
| ---------------- | ------- | -------- | ----------------------------------------------------------- |
| `roomId` | string | | Scope to one room — omit for all rooms |
| `onlyUnresolved` | boolean | | Only `TODO` / `IN_PROGRESS`, excluding `DONE` / `DISMISSED` |
| `conditions` | array | | Field filters, see below |
| `combinator` | string | | `AND` (default) or `OR` — how `conditions` combine |
| `keyword` | string | | Fuzzy match over signal title and description |
| `sortOrder` | string | | `ASC` or `DESC` (default: `DESC`, by `createdAt`) |
| `page` | number | | Page number (default: 1) |
| `limit` | number | | Results per page (default: 10) |
Each `conditions` entry is `{ field, operator, value }`:
| Field | Type | Description |
| ---------- | ------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `field` | string | `status` · `urgency` · `title` · `description` · `createdAt` |
| `operator` | string | `eq` · `neq` · `contains` · `gte` · `lte` — use `contains` for text, `gte`/`lte` for `createdAt` ranges |
| `value` | string | Compared against `field`. For `status`: `TODO`\|`IN_PROGRESS`\|`DONE`\|`DISMISSED`. For `urgency`: `LOW`\|`MEDIUM`\|`HIGH`. For `createdAt`: an ISO date string |
Add several `conditions` to filter in one call, e.g. `status=TODO AND urgency=HIGH`. Each result is tagged with `flowId`/`flowTitle`, so an org-wide query is actionable without a second lookup.
Returns signal counts for the org or one room: the total plus a breakdown by status and by urgency. Every enum value is included even at zero, so the response shape is stable, e.g. `{ total: 7, byStatus: { TODO: 5, IN_PROGRESS: 1, DONE: 1, DISMISSED: 0 }, byUrgency: { LOW: 4, MEDIUM: 2, HIGH: 1 } }`.
| Field | Type | Required | Description |
| -------- | ------ | -------- | -------------------------------------------- |
| `roomId` | string | | Scope to one room — omit for org-wide totals |
Use this before `query_signals` when you only need to know where to look.
Creates new signals and/or updates existing ones for a room in a single batch. The only REX tool that writes.
| Field | Type | Required | Description |
| -------- | ------ | -------- | -------------------------------------------------------------------- |
| `roomId` | string | ✓ | Room the signals belong to |
| `create` | array | | Brand-new signals to raise — see **Create fields** |
| `update` | array | | Changes to existing signals, addressed by id — see **Update fields** |
**Create fields** (each entry in `create`):
| Field | Type | Required | Description |
| ------------------------- | -------------- | -------- | ---------------------------------------------------------------------------------------------------------------------- |
| `title` | string | ✓ | A few words, e.g. "Champion sentiment dropped" |
| `description` | string \| null | ✓ | At most two short sentences |
| `justificationCapture` | string | ✓ | What in the data led to this signal |
| `justificationImportance` | string | ✓ | Why this signal matters |
| `urgency` | string | ✓ | `LOW` · `MEDIUM` · `HIGH` |
| `icon` | string | ✓ | One of a fixed icon vocabulary, e.g. `risk`, `competition`, `going_silent` (see `SignalIcons`), `milestone`, `general` |
| `recommendedActions` | array \| null | | `{ action, actionDescription }` next steps REX can carry out |
| `dismissReasons` | array \| null | | `{ reason }` options offered to the user when dismissing |
**Update fields** (each entry in `update`):
| Field | Type | Required | Description |
| --------- | ------ | -------- | ------------------------------------------------------------------------------------------------ |
| `id` | string | ✓ | Existing signal to update |
| `status` | string | | `TODO` · `IN_PROGRESS` · `DONE` · `DISMISSED` — resolving (`DONE`/`DISMISSED`) requires `reason` |
| `urgency` | string | | `LOW` · `MEDIUM` · `HIGH` |
| `reason` | string | | Why you're resolving/changing this signal. Required when setting `DONE` or `DISMISSED` |
There's no dedupe on title — a `create` call always creates a new signal, even if a similar one is already open.
```json Create one signal theme={null}
{
"roomId": "",
"create": [{
"title": "Security review hasn't started",
"description": "Close date is three weeks out and no review has been kicked off.",
"justificationCapture": "The IT contact said sign-off is required on last week's call, but nobody followed up.",
"justificationImportance": "Security review is where deals with a firm close date quietly slip.",
"urgency": "HIGH",
"icon": "security",
"recommendedActions": [{
"action": "Kick off the security review proactively",
"actionDescription": "Reach out to the IT contact with the standard security pack before they ask."
}],
"dismissReasons": [{ "reason": "Already in progress" }]
}]
}
```
```json Resolve one signal theme={null}
{
"roomId": "",
"update": [{
"id": "",
"status": "DONE",
"reason": "The security review kicked off this week."
}]
}
```
***
## REX knowledge graph
Read-only. Everything here is computed by REX from your calls, CRM, and room activity, and can't be set externally.
Returns a serialized snapshot of the room's [Knowledge Graph](/rex/knowledge-graph) — the same picture the room's own REX views read from, in one call.
| Field | Type | Required | Description |
| -------- | ------ | -------- | ----------- |
| `roomId` | string | ✓ | Room ID |
**Response includes:** `dealScore` — the aggregate 0–5 health score with its `analysis`; `meddpicc` — all eight [MEDDPICC](/rex/meddpicc) dimensions, each scored 0–5 with its own analysis; `insightCards` — the four [insight cards](/rex/insight-cards), each with a `status` (`on_track` · `needs_attention` · `neutral`) and `summary`; and `findings` — the quote-backed moments behind all of the above, each with a `type`, `description`, `quote` (the exact words said), and the `meetingId` and `contactId` it came from.
**MEDDPICC dimensions:** `metrics` · `economic_buyer` · `decision_criteria` · `decision_process` · `paper_process` · `identify_pain` · `champion` · `competition`
**Insight card categories:** `motivation` · `stance` · `obstacle` · `trajectory`
**Finding types:** `pain_point` · `concern` · `objection` · `blocker` · `urgency_signal` · `aha_moment` · `commitment` · `competitor_mention` · `unanswered_question` · `priority`
A score with no evidence behind it yet returns `notScored` rather than `0`.
***
## Lookups
| Field | Type | Required | Description |
| -------- | ------ | -------- | --------------------------- |
| `source` | string | | `org` (default) or `public` |
| `page` | number | | |
| `limit` | number | | |
Searches by name or domain.
| Field | Type | Required | Description |
| --------- | ------ | -------- | ---------------------------------------------- |
| `keyword` | string | | Name or domain (e.g. `"Acme"` or `"acme.com"`) |
| `page` | number | | |
| `limit` | number | | |
| Field | Type | Required | Description |
| --------- | ------ | -------- | --------------------------------- |
| `domain` | string | ✓ | Company domain (e.g. `acme.com`) |
| `name` | string | | Display name (defaults to domain) |
| `website` | string | | Full website URL |
Returns active users in the organization. Use returned IDs as `userId` when creating rooms.
*(No parameters)*
Returns room statuses. Each result has `id`, `title`, and `defaultStatus`.
*(No parameters)*
*(No parameters)*
# Troubleshooting
Source: https://docs.flowla.com/mcp/troubleshooting
Solutions to common issues with the Flowla MCP server.
## Switching to a different Flowla organisation
If you want to sign in to a different Flowla account or organisation:
1. Go to **Settings → Connectors**.
2. Find **Flowla** and click **Disconnect**.
3. Click **Connect** again and sign in with the account you want to use.
## Flowla does not appear in Settings → Connectors
1. Make sure you are on an up-to-date version of Claude Desktop or using
[claude.ai](https://claude.ai) directly.
2. Search for **Flowla** in the connector directory under
**Settings → Connectors** — published connectors are not pre-installed
and must be added with **Connect**.
3. If the connection attempt fails, disconnect and try connecting again.
## Tools are not available in a conversation
If Flowla shows as **Connected** in **Settings → Connectors** but Claude
says the tools are unavailable:
1. Make sure Flowla is enabled for the current conversation in the tools
picker — connectors can be turned on or off per conversation.
2. Start a **new conversation** — tools are loaded per session.
3. Check your internet connection — the MCP server is remote and requires
network access.
# Workflows, Webhooks & Lookups
Source: https://docs.flowla.com/mcp/workflows
Trigger automations, set up notifications, and find the right resources to reference.
## Workflows & webhooks
Trigger your configured Flowla automations or set up webhooks for external notifications.
```text Trigger a workflow theme={null}
Trigger the 'send welcome email' workflow for this room.
```
```text Set up a webhook theme={null}
Set up a webhook to notify my server at https://example.com/hook whenever a room is completed.
```
***
## Lookups
When an action needs a company, user, status, label, or template, you can refer to them by name — or browse what's available first.
```text Templates theme={null}
List the templates available in our org.
```
```text Room statuses theme={null}
What room statuses do we have set up?
```
```text Users theme={null}
Show me the users in our Flowla workspace.
```
```text Companies and labels theme={null}
List our companies and labels.
```
# Actions overview
Source: https://docs.flowla.com/mutual-action-plans/actions-overview
Create trackable tasks and next steps that drive mutual accountability in your rooms.
## TL;DR
Actions are the shared to-do list inside a room, visible to both your team and your customer. Instead of next steps scattered across emails and Slack messages, everything lives in one place where both sides can see what's been done and what's still outstanding. This shared accountability is what keeps deals moving.
***
## What are actions?
Actions are the task items in your room. Unlike content (which informs), actions require completion — they're how you move the process forward together.
**Actions help you:**
* Guide users through a process step by step
* Collect input or confirmations from the customer
* Track progress and completion rates
* Trigger automated workflows
* Create accountability with clear owners and due dates
[REX](/rex/overview) reads your action plan as part of the deal picture, not as a separate checklist. It can propose new items based on what was actually agreed on a call, suggest due-date changes, and flag overdue ones as [signals](/rex/signals). An item assigned to the buyer that's a week overdue is treated as a real risk. As always, nothing is added or changed until you approve it. You can also ask [REX](/rex/chat) to build a whole plan for you.
***
## Types of actions
### Prospect-facing actions
These are visible to external users — your prospects and customers. They drive the deal, onboarding, or project forward by making the next step unmissable.
| Action type | What it does |
| ----------------------------- | ------------------------------------------------- |
| **Go to URL** | Direct the prospect to an external link |
| **Watch video** | Ask them to watch a specific video |
| **View document** | Have them review a document in the room |
| **Download a file** | Prompt them to download a file |
| **Fill a form** | Collect information via a form |
| **Book a meeting** | Let them schedule time directly |
| **Sign a document** | Request a signature on a contract or agreement |
| **Invite contacts** | Ask them to add other stakeholders to the room |
| **Sub-actions** | Break a larger action into smaller steps |
| **Collaborate with contacts** | Assign a shared task to multiple people |
| **Custom** | Create a freeform task with your own instructions |
### Internal actions
Internal actions are visible only to your team — completely hidden from buyers and external collaborators. This lets you manage behind-the-scenes work from the same room, without cluttering the customer's view.
**How to mark an action as internal:**
Open the action you want to make internal.
This opens the action options.
The action icon changes to indicate it's internal-only.
Only team members invited to the room (or with org access) can see internal actions.
### What customers see
| Your view | Customer view |
| ---------------------------------------- | ---------------------------- |
| All actions (internal + customer-facing) | Only customer-facing actions |
| Internal actions marked with icon | Internal actions hidden |
| Full task context | Clean, focused experience |
**Common internal action examples:**
* **Sales handoff:** Brief the CS team, confirm technical requirements, get legal approval
* **Deal preparation:** Customise the proposal deck, schedule an internal deal review, prepare the demo environment
* **Onboarding coordination:** Create a customer Slack channel, send the welcome kit, schedule an internal kickoff sync
Use internal actions with **workflows** to trigger automated Slack alerts or email nudges when internal tasks are completed.
***
## Creating actions
Open your room and go to the right section.
This adds a new page within the section.
Click **Add block** on the new page.
Choose **Add Action Plan** from the block options.
Click on the action and fill in the title, description, action type, assignee, and due date.
***
## Action assignments
Assign actions to specific people to create clear accountability.
| Type | Description |
| ------------------------ | ----------------------------------------- |
| **Internal team member** | Assign to someone on your team |
| **External contact** | Assign to a prospect |
| **Primary contact** | Auto-assign to the room's primary contact |
| **Target company** | Assign the action to the whole company |
Assignees receive notifications when an action is assigned to them (if notifications are enabled). Reminders are sent for upcoming and overdue actions, and completion notifications keep everyone in the loop.
***
## Due dates and reminders
Set due dates to create urgency and accountability.
* Set specific dates or relative dates (e.g. "3 days after room creation")
* Automatic reminders go out before due dates
* Visual indicators show status at a glance
**Task statuses:**
| Status | Description |
| --------------- | ---------------- |
| **To do** | Not started |
| **In progress** | Work has begun |
| **Done** | Completed |
| **Cancelled** | No longer needed |
***
## How actions work with automation
Actions can both trigger and be triggered by workflows.
**Actions as triggers:**
* Action completed → Send a notification
* Action becomes overdue → Alert the team
* Specific action done → Unlock the next section
**Actions from workflows:**
* Automatically create actions when rooms are created
* Change action status based on CRM events
Learn more about [workflow triggers](/automations/triggers) and [workflow actions](/automations/actions).
***
## Best practices
1. **Use clear, descriptive names** — "Review pricing proposal" is better than "Review document"
2. **Order actions logically** — Arrange them in the sequence you expect completion
3. **Limit prospect-facing actions** — Only include what's truly necessary
4. **Use internal actions generously** — Keep your team coordinated without cluttering the prospect view
5. **Set realistic due dates** — Create urgency without being unreasonable
6. **Connect to workflows** — Automate follow-ups and notifications for key actions
***
See [Managing actions](/mutual-action-plans/managing-actions) for assignees, dynamic primary contact, and the actions dashboard.
***
## Troubleshooting
**Likely cause:** You're using a standard content step instead of an action step.
**Fix:** Use an **Action** step and select the **File Upload** action type. This lets your prospect upload a file directly into the room.
**Likely cause:** The current file upload action supports one file per field.
**Fix:** Add multiple file upload action steps — one per file expected.
# Managing actions
Source: https://docs.flowla.com/mutual-action-plans/managing-actions
Assign actions and track everything from one dashboard.
Every action in Flowla can have a clear owner, a deadline, and a status — so there's never any ambiguity about who's doing what and when. This section covers how to assign actions, set due dates, and use the actions dashboard to stay on top of everything across all your rooms.
***
## Assignees
Each action should have an assignee so there's never any confusion about who's responsible.
You can assign actions to a **customer** (e.g. "Sign the agreement") or a **teammate** via internal-only actions (e.g. "Review implementation checklist").
**Assignment types:**
| Type | Description |
| ------------------------ | ----------------------------------------- |
| **Internal team member** | Assign to someone on your team |
| **External contact** | Assign to a prospect or customer |
| **Primary contact** | Auto-assign to the room's primary contact |
| **Target company** | Assign the action to the whole company |
**To assign someone:**
This opens the assignee search.
Search for the person you want to assign.
This sends them an email letting them know they've been assigned.
Assigned users will see their thumbnail appear next to the action inside the mutual action plan.
### Dynamic Primary Contact
The Dynamic Primary Contact is automatically set to the first person you share the room with. When you create a room from a template, that person is assigned to any actions where **Dynamic Primary Contact** was selected — no manual updates needed. This is especially useful in templates, so you never have to re-assign actions every time you create a new room.
Assignees receive notifications when actions are assigned (if enabled), reminders for upcoming and overdue actions, and completion notifications to keep everyone in the loop.
***
## Due dates & start dates
### Fixed due dates
Set a specific deadline like "May 15" or "End of week" — useful when you've already agreed on timelines with the customer.
### Relative due dates
Tie the deadline to something that happens in the process, such as:
* "3 days after the room is created"
* "2 days after this section is completed"
* "1 day after another action is due or completed"
Relative due dates are especially powerful in templates — when someone creates a room from your template, all the deadlines calculate automatically based on when things actually happen. No manual date-setting required.
### Task statuses
| Status | Description |
| --------------- | ---------------- |
| **To do** | Not started |
| **In progress** | Work has begun |
| **Done** | Completed |
| **Cancelled** | No longer needed |
***
## Actions dashboard
The actions dashboard gives you a single view of every action across all your rooms — without having to open each room individually. It's the fastest way to stay on top of what's overdue, what's coming up, and what your team is working on.
**To access:**
This opens the actions dashboard.
All actions across your rooms are listed here.
Filter by status, assignee, due date, or room.
**What you can do from the dashboard:**
* **Update status** — Mark actions as complete, in progress, or pending
* **Change assignee** — Reassign tasks to different team members
* **Edit due dates** — Extend or adjust deadlines
* **Navigate to room** — Click the room name to open the full context
# Credits
Source: https://docs.flowla.com/plans-billing/credits
Learn how workflow credits work, avoid running out, and use them efficiently.
Credits power Flowla's workflows and AI features. Each time a workflow action runs successfully, it uses a credit. Standard actions use 1 credit, AI actions use 2. Credits renew monthly with your billing cycle.
You can check your current usage at the bottom of the left sidebar.
***
### Workflow credit usage
| Action type | Credits used |
| ------------------------ | ------------ |
| Standard workflow action | 1 credit |
| AI action | 2 credits |
| Trigger | 0 credits |
Only successful actions consume credits. If an action fails, you won't be charged.
***
### Asset intelligence credit usage
Generating [asset intelligence](/rex/asset-intelligence) on a library asset is metered differently from workflow actions, because it involves parsing and analysing a whole file rather than running a single step.
| Step | Credits used |
| --------------------------------- | ----------------------------------------- |
| Parsing a document | 1 credit per page |
| Parsing audio or video | 1 credit per minute |
| Building the intelligence profile | A flat cost per asset, regardless of size |
Bigger or longer assets therefore cost more, almost entirely because of the parsing step.
If your organisation doesn't have enough credit balance to cover generation, it's skipped rather than run partway. Turning on **Auto-generate asset intelligence** for a large existing library is a real one-time spend, worth knowing before you flip it on.
[REX Chat](/rex/chat) and [signal generation](/rex/signals) do not currently spend organisation credits. Asset intelligence generation is the one REX feature that's metered. REX Chat does require your organisation to have an available credit balance in order to run.
***
### Viewing your credits
Check your credit status at the bottom of the left sidebar:
* **Current usage** — Credits used this billing period
* **Credit limit** — Total credits available
* **Reset date** — When credits renew
***
### What happens when you run out
When your organisation's credits are exhausted:
1. **Workflows pause** — Active workflows stop executing
2. **Queued actions wait** — Pending actions remain queued until credits renew
3. **Triggers still fire** — Events are captured, but actions don't run
4. **Credits renew monthly** — Full allocation is restored on your billing date
If you need credits before your renewal date, contact support to upgrade your credit package.
***
### Credit limits by plan
| Plan | Monthly credits |
| ----------------- | ------------------ |
| **Starter & Pro** | 100 credits |
| **Team** | 10,000 credits |
| **Enterprise** | Custom / on-demand |
Learn more about [available plans and features](/plans-billing/plans-pricing-overview) to find the right fit.
***
### Tips to reduce credit usage
### Filter your triggers
Configure triggers to only run for relevant objects. Use conditions to prevent unnecessary workflow runs.
### Use break actions
Add conditional break actions to stop workflows early when criteria aren't met, preventing downstream actions from consuming credits.
### Consolidate actions
Combine multiple small workflows into efficient larger ones where possible.
### Review workflow analytics
Monitor which workflows consume the most credits and optimise high-usage ones.
### Book a workshop
Schedule a session with our team to optimise your workflows and reduce credit consumption.
***
# Billing, Upgrade & Downgrade
Source: https://docs.flowla.com/plans-billing/plans-pricing-overview
Understand Flowla pricing, plans, and what counts toward billing.
## TL;DR
Room Creators count as paid seats — Viewer-Only users and external customers (buyers, prospects) are always free, no matter how many access your rooms.
***
### View plans
View plans, pricing and features
### How to upgrade
Navigate to **Settings → Plans & Billing**.
Review the available plans and click **Upgrade** under the one you want.
Add your payment information and confirm your subscription.
***
### Who counts toward billing
| Role | Billed? | Description |
| ---------------- | ------- | --------------------------------------------------- |
| **Room Creator** | Yes | Can create and manage rooms. Counts as a paid seat. |
| **Viewer-Only** | No | Can view rooms and analytics only. Free to add. |
### What about customers and prospects?
The people you share rooms with — your customers, buyers, or prospects — never count toward billing. You can share rooms with as many external participants as you like, on any plan.
There's no limit on:
* How many people access a room
* How often they return
* How many stakeholders join the conversation
***
### How to downgrade your plan
Navigate to **Settings → Plans & Billing**.
Click **Downgrade** under the plan you want to move to.
Confirm your choice — you'll receive an email notification with the details.
### How to cancel your plan
Navigate to **Settings → Plans & Billing**.
Click **Downgrade** to the Free Starter plan.
Share your reasons for cancelling — this helps us improve.
Confirm your choice — you'll receive an email notification.
Downgrading disables all active workflows and limits your workspace to 5 rooms — plan the change carefully to avoid disrupting live deals or active onboarding sequences.
### What happens when you downgrade
### From Team to Pro
* All workflows created with Flowla Autopilot will be deactivated (including custom reminders and email templates)
* Advanced reporting will be removed, including:
* Team productivity reports
* Advanced engagement reports
* Weekly pipeline summaries
* Content performance reports
### From Pro or Team to Free Plan
* Workflows will stop running (if applicable)
* No new rooms can be created if your workspace already has more than 5
***
## Troubleshooting
**Likely cause:** No self-serve toggle for billing frequency in all account types.
**Fix:** Go to **Settings > Billing** to switch. Yearly plans typically offer a discount. Contact support if you don't see the option.
**Likely cause:** Team plan has a minimum seat requirement.
**Fix:** The Starter or Pro plan is designed for individual or small-team use. The Team plan is priced per seat with a minimum. Contact support if you need team features as a solo user — there may be flexibility.
**Likely cause:** No self-serve billing address editor in the main UI.
**Fix:** Contact support with your new billing address and they'll update it for you.
***
# Custom roles
Source: https://docs.flowla.com/platform/custom-roles
Create and manage custom roles to control exactly what each team member can do in Flowla.
Only Admin users can create and manage custom roles — Members can invite teammates but cannot modify role settings.
Custom roles let you control exactly what each team member can see and do in Flowla — beyond the default Member and Admin options. This is useful when you want, for example, a role that can create rooms but can't touch templates or billing.
In the top right, navigate to **Settings**.
Click **Invite teammates** in the settings menu.
Select **Manage Roles** to see all existing roles.
Give your role a **title** and an optional **description** to help teammates understand its purpose.
Use the toggles to configure what this role can do across Rooms, Templates, Workflows, Roles, Users, and Billing. Toggle on only the permissions this role needs, then save.
# Email templates
Source: https://docs.flowla.com/platform/email-templates
Create reusable email templates so your team sends consistent, personalised outreach every time.
Email templates save time and keep your team's messaging consistent. Write a template once, and anyone on your team can use it — with variables automatically filling in the right contact and room details for each send.
Create and manage templates in **Settings → Email Templates**.
***
### Creating an email template
Go to **Settings → Email Templates**.
Click the **Create Template** or **+ New** button.
* **Template Name** — Internal name for easy identification
* **Subject Line** — Email subject (supports variables)
* **Body** — Email content with formatting and variables
Click **Save** to make it available for use.
***
### Variables
Personalise your templates with dynamic variables that fill in automatically when you send.
| Variable | Description | Example output |
| -------------------------------- | -------------------- | ----------------------------------------------------------- |
| `{{primary_contact_first_name}}` | Contact's first name | "Sarah" |
| `{{primary_contact_last_name}}` | Contact's last name | "Johnson" |
| `{{primary_contact_email}}` | Contact's email | "[sarah@acme.com](mailto:sarah@acme.com)" |
| `{{target_company_name}}` | Company name | "Acme Corp" |
| `{{room_name}}` | Name of the room | "Acme Corp - Proposal" |
| `{{room_link}}` | URL to the room | "[https://app.flowla.com/r/](https://app.flowla.com/r/)..." |
| `{{room_creator_first_name}}` | Your first name | "John" |
| `{{room_creator_meeting_link}}` | Your calendar link | "[https://calendly.com/john](https://calendly.com/john)" |
***
### Template examples
#### Room sharing template
**Subject:** `{{primary_contact_first_name}}, your personalised resource hub`
**Body:**
```
Hi {{primary_contact_first_name}},
Great speaking with you! I've put together a personalised space with everything we discussed:
{{room_link}}
Inside you'll find:
- Our proposal tailored to {{target_company_name}}
- Product overview and case studies
- Next steps we agreed on
Let me know if you have any questions!
Best,
{{room_creator_first_name}}
```
#### Follow-up template
**Subject:** `Following up on {{target_company_name}} proposal`
**Body:**
```
Hi {{primary_contact_first_name}},
I wanted to check in on the materials I shared last week. Have you had a chance to review them?
Here's the link again: {{room_link}}
Happy to jump on a quick call if you'd like to discuss. You can book time here: {{room_creator_meeting_link}}
Best,
{{room_creator_first_name}}
```
***
### Using templates when sharing rooms
1. Click **Share** or **Send Email** on a room
2. Select a template from the dropdown
3. Variables are automatically populated
4. Review and customise if needed
5. Send the email
Learn more about [available room variables](/rooms/room-variables) for email personalisation.
Send a test email to yourself before using a template with customers — this confirms all variables fill correctly and your formatting looks right.
***
### Best practices
* **Keep it concise** — Shorter emails get more engagement
* **Lead with value** — Mention what's in it for them
* **Clear call-to-action** — One obvious next step
* **Test variables** — Send a test email to yourself first
* **Update regularly** — Refresh templates based on what works
# Microsoft Entra ID SSO setup
Source: https://docs.flowla.com/platform/entra-id-sso-setup
Connect Flowla to Entra ID using OpenID Connect (OIDC) to enable Single Sign-On for your organization.
SSO lets your team log in to Flowla using their existing Microsoft credentials — no separate passwords, no extra accounts to manage. This guide is a simplified, Flowla-focused walkthrough derived from the [official Microsoft guide](https://learn.microsoft.com/en-us/entra/identity/enterprise-apps/add-application-portal-setup-oidc-sso#configure-oidc-sso-for-custom-non-gallery-applications), which you can refer to for full platform details.
### Prerequisites
* Microsoft Entra user account with one of the following roles: Cloud Application Administrator, Application Administrator, Owner of the service principal
* Admin access to your Flowla workspace
User emails in Flowla must match user emails in Entra ID; otherwise authentication will fail.
***
Sign in to the Microsoft Entra admin center as at least a Cloud Application Administrator. Browse to **Entra ID → App registrations → New registration**.
Fill in the following:
* **Name**: e.g. "Flowla SSO"
* **Supported account types**: select the appropriate option for your organization
* **Platform type**: Web
* **Redirect URI**: `https://app.flowla.com/sso`
Click **Register**.
In your app registration, navigate to **Authentication**. Verify your redirect URIs are correctly configured under the **Web** platform — this enables the standard Authorization Code flow.
Navigate to **Certificates & secrets** and select **New client secret**. Add a description, select an expiration period, then click **Add**.
Copy the secret value immediately — it cannot be shown again.
Protect your Client Secret Value by keeping it confidential. Avoid sharing it in public repositories, forums, or unencrypted channels.
Navigate to **API permissions → Add a permission → Microsoft Graph → Delegated permissions**. Search for and add:
* `openid` — required for OIDC authentication
* `profile` — access to the user's basic profile information
* `email` — access to the user's email address
Click **Add permissions**.
From the **Overview** page, note the following — you'll need these in the next step:
* **Application (client) ID**: your app's unique identifier
* **Directory (tenant) ID**: used to build your Identity Provider URL: `https://login.microsoftonline.com/{tenant}/v2.0/`
* **Client Secret Value**: the value you copied in Step 3
In Flowla, go to **Settings → Security & Permissions** and click **Enable SSO**. Fill in the form with the values from Entra ID:
Paste `https://login.microsoftonline.com/{tenant}/v2.0/` (replace `{tenant}` with your Directory tenant ID)
Paste the Application (client) ID
Paste the Client Secret Value (not the secret ID)
Enter the email domain your organization uses (e.g. `yourcompany.com`). Users with this domain will be required to sign in via SSO.
Click **Save** to activate SSO. Open a new browser session and verify you can sign in via Entra ID.
Official guide for configuring OIDC SSO for a custom non-gallery application.
# Invite your team
Source: https://docs.flowla.com/platform/invite
Add teammates to your Flowla workspace and manage their roles and permissions.
Getting your team into Flowla is quick. Go to **Settings → Team → Invite User** to add teammates. Admins can assign any role; Members can invite other Members only.
***
### Team permissions
Team permissions control what administrative actions a user can perform:
| Permission | Capabilities |
| ---------- | -------------------------------------------------------------------------------------- |
| **Member** | Can create rooms and invite other Members. Cannot manage billing or deactivate users. |
| **Admin** | Full access — manage billing, deactivate users, invite admins, and change permissions. |
***
### User roles
User roles determine what a teammate can do within rooms:
| Role | Capabilities |
| ---------------- | ------------------------------------------------------------ |
| **Room Creator** | Can create, edit, and manage rooms. Full room functionality. |
| **Viewer-Only** | Can view rooms and analytics but cannot create or edit. |
***
### How to invite a teammate
In the top right, navigate to **Settings**.
Click **Invite teammates** in the settings menu.
Click the **Invite User** button.
Enter your teammate's email address.
Choose their **User Role** (Admin, Member, or Viewer Only). Each role's permissions can be customised.
Click **Send Invitation**.
They'll receive an email with a link to join the workspace.
***
### What you can invite based on your permission level
### If you're a Member
You'll see a simple form to enter the email address. The new user is added with **Member** permissions and **Room Creator** role by default.
### If you're an Admin
You have full control over the new teammate's access:
* Choose between Member or Admin permissions
* Assign Room Creator or Viewer-Only role
* The invitation email includes your workspace name
***
### How to deactivate a teammate
If you need to revoke access (requires Admin permission):
1. Go to **Settings → Team**
2. Find the teammate in the list
3. Click on **Status**
4. Select **Deactivate**
Deactivated users cannot log in or access Flowla, but their rooms and activity history remain intact. You can reactivate them later if needed.
***
### Managing existing team members
From the Team settings page, you can:
* **View all team members** — See everyone in your workspace
* **Change permissions** — Update Member/Admin status (Admin only)
* **Change roles** — Switch between Room Creator and Viewer-Only
* **Resend invitations** — For pending invites that weren't accepted
* **Deactivate/Reactivate** — Control account access
***
## Troubleshooting
**Likely cause:** Seat limit reached, or the invite wasn't sent correctly.
**Fix:** Check **Settings > Team** to see remaining seats. If at capacity, upgrade your plan. Otherwise, use the **Invite** button and ensure you're entering the correct email address.
**Likely cause:** You signed up independently with the same email before receiving the invite.
**Fix:** Contact support. They can merge or migrate your existing account into the team workspace.
**Likely cause:** No domain-based restriction is enforced by default.
**Fix:** Flowla doesn't currently auto-assign users to a workspace based on email domain. Manage invites manually and contact support about SSO domain locking options.
**Likely cause:** Your account is tied to your old email address.
**Fix:** Contact support with your old and new email addresses. They can update it manually.
# MFA setup
Source: https://docs.flowla.com/platform/mfa-setup
Add an extra layer of security to your account with multi-factor authentication.
Multi-factor authentication (MFA) keeps your account secure even if your password is ever compromised. Once enabled, logging in requires both your password and a one-time code from your authenticator app.
***
### What is MFA?
MFA — also called Two-Factor Authentication (2FA) — requires two forms of verification to log in:
1. **Something you know** — Your password
2. **Something you have** — A code from your authenticator app
This means that even if someone gets hold of your password, they still can't access your account without the second factor.
***
### How to enable MFA
Navigate to **Settings → Security** from the left sidebar.
Click **Enable 2FA** or **Set up MFA**.
Open your authenticator app (Google Authenticator, Authy, 1Password, etc.) and scan the QR code displayed.
Enter the 6-digit code from your authenticator app to confirm setup.
If you lose access to your authenticator app, you can regenerate backup codes from **Settings → Security** to regain entry to your account.
# Okta SSO setup
Source: https://docs.flowla.com/platform/okta-sso-setup
Connect Flowla to Okta using OpenID Connect (OIDC) to enable Single Sign-On for your organization.
SSO lets your team sign in to Flowla using their existing Okta credentials — no separate passwords, no extra accounts to manage.
### Prerequisites
* Admin access to your Okta account
* Admin access to your Flowla workspace
***
### Step 1 — Create an App Integration in Okta
Sign in to your Okta Admin Console, then navigate to **Applications → Applications** and click **Create App Integration**.
***
### Step 2 — Select sign-in method and app type
Choose **OIDC - OpenID Connect** as the sign-in method and **Web Application** as the application type, then click **Next**.
***
### Step 3 — Configure the app integration
Fill in the following fields on the configuration page:
| Field | Value |
| ------------------------- | ------------------------------------------------------------- |
| **App integration name** | Any name you wish (e.g. `Flowla`) |
| **Client credentials** | Enabled |
| **Sign-in redirect URI** | `https://app.flowla.com/sso` |
| **Sign-out redirect URI** | `https://app.flowla.com/signin` |
| **Access** | Allow everyone in your organization to access *(recommended)* |
| **Immediate access** | Enable immediate access *(recommended)* |
Enabling **Allow everyone in your organization to access** ensures all users can log in via SSO without needing individual app assignments in Okta.
Click **Save** to create the integration.
***
### Step 4 — Copy your Client ID and Client Secret
After saving, open the **General** tab of your newly created app integration. Copy both the **Client ID** and **Client Secret** — you'll need these when configuring Flowla.
The Client Secret is only shown once — copy it before navigating away. If you lose it, you'll need to generate a new one from the General tab.
Protect your Client Secret by keeping it confidential. Avoid sharing it in public repositories, forums, or unencrypted channels.
***
### Step 5 — Find your Identity Provider URL
Your **Identity Provider URL** is the base URL of your Okta account — the part of the address bar that appears **before** `/admin`.
For example, if your Okta Admin Console URL is:
```
https://yourcompany.okta.com/admin/dashboard
```
Your Identity Provider URL is:
```
https://yourcompany.okta.com
```
***
### Step 6 — Enable SSO in Flowla
In Flowla, go to **Settings → Security & Permissions** and click **Enable SSO**. Fill in the form with the values you copied from Okta:
Paste the base URL of your Okta account (e.g. `https://yourcompany.okta.com`)
Paste the Client ID from the Okta app's General tab
Paste the Client Secret from the Okta app's General tab
Enter the email domain your organization uses (e.g. `yourcompany.com`). Users with this domain will be required to sign in via SSO.
Click **Save** to activate SSO. Open a new browser session and verify you can sign in via Okta.
Once set up, users with your organization's email domain will be automatically redirected to Okta when signing in to Flowla.
***
### Troubleshooting
**Likely cause:** The email domain entered in Flowla does not exactly match the domain of your users' email addresses.
**Fix:** Check the domain setting in Flowla for typos or extra spaces, ensuring it exactly matches your users' email domain (e.g. `yourcompany.com`).
**Likely cause:** The Sign-in redirect URI in the Okta app is incorrect or has a trailing slash.
**Fix:** Verify the **Sign-in redirect URI** in your Okta app is set to exactly `https://app.flowla.com/sso` with no trailing slash.
**Likely cause:** The Client Secret was not copied at creation time and is no longer visible in Okta.
**Fix:** Generate a new Client Secret from the **General** tab of your Okta app integration, then update it in Flowla.
**Likely cause:** Individual users or groups are not assigned to the Okta app integration.
**Fix:** Check the **Assignments** tab of your Okta app. If access is not set to **Everyone**, explicitly assign the required users or groups.
# Organisation settings
Source: https://docs.flowla.com/platform/org-settings
Set your company name, logo, brand colours, and default styles for all rooms.
Your rooms are often the first impression buyers get of your company and process. Setting up your organisation branding ensures every room looks consistent and professional — without your reps having to style each one from scratch.
Go to **Settings → Organisation** to update your company name, logo, brand colours, and font styles. These settings apply organisation-wide and become the default for all newly created rooms.
***
### How to update your branding
From the left sidebar, go to **Settings → Organisation**.
* **Organisation Name** — Your company name displayed in rooms
* **Company Logo** — Upload your logo (PNG format recommended)
* **Primary Color** — Your brand's main colour for buttons and accents
* **Font Color** — Text colour for headings and content
* **Font Family** — Choose a font that matches your brand
Click **Save** to apply. Changes take effect immediately for all new rooms created after the update.
***
### Branding settings reference
| Setting | Description | Recommendation |
| --------------------- | ------------------------------------ | ------------------------------------------- |
| **Organisation Name** | Displayed in room headers and emails | Use your official company name |
| **Logo** | Shown in room headers | Use a square or horizontal logo, PNG format |
| **Primary Color** | Buttons, links, accents | Match your brand guidelines |
| **Font Color** | Heading and body text | Ensure good contrast for readability |
| **Font Family** | Typography across rooms | Choose a professional, readable font |
***
### Room-level overrides
Org settings provide your default look and feel, but individual rooms can be customised further:
* **Font and font colour** can be adjusted per room
* Room-specific branding overrides org defaults
* Useful for co-branded rooms with partners
Room-specific branding overrides are great for co-branded portals — customise the look for a specific customer without changing your org defaults.
Learn more about [room-level personalisation](/rooms/personalising-rooms) for custom overrides.
***
### Custom subdomain
Enterprise plans can configure a custom subdomain for your Flowla workspace:
* Default: `yourcompany.flowla.com`
* Custom: `deals.yourcompany.com`
Contact your account manager to set up a custom subdomain.
# Notifications
Source: https://docs.flowla.com/platform/profile-notifications
Control what alerts you receive and how, so you always know when buyers are engaging.
Staying on top of buyer activity doesn't mean constantly refreshing Flowla. Set up notifications and you'll know the moment someone views your room, submits a form, or completes an action — without having to check.
***
### Configure notifications
In the **Notifications** tab, control what alerts you receive for the rooms you own:
| Notification type | Description |
| ------------------------------ | ------------------------------------------- |
| **Room viewed** | Get notified when someone views your room |
| **New stakeholder identified** | Alerts when a new contact accesses the room |
| **Comment added** | Alerts for new messages in your rooms |
| **Task completed** | Notifications when tasks are completed |
| **Form submitted** | Notifications when forms are submitted |
| **Action overdue** | Alerts when a task passes its due date |
**Notification channels:**
* **In-app** — See notifications within Flowla
* **Email** — Receive notifications in your inbox
* **Slack** — Get alerts in Slack (if connected)
* **CRM activity logging** — Log activity to HubSpot or Salesforce
Connect Slack in **Settings → Integrations** to start receiving room activity alerts directly in your channels — no need to check Flowla manually.
***
### Room-specific notifications
You can override your default notification settings for individual rooms — useful when you want more (or fewer) alerts for high-priority deals. Configure this from [Room management & settings](/rooms/room-management-&-settings).
The menu is in the top right corner of the room.
Toggle specific notification types on or off for this room.
### Configure notifications for all rooms you own
Go to your account settings.
Toggle specific notification types on or off — this applies to all rooms you own.
***
### Notification emails sent from the room owner *(Enterprise)*
On Enterprise plans, system notification emails are sent from the room owner's email address rather than a generic Flowla address. This significantly reduces the chance of landing in spam.
* Applies to e-sign notifications, email verification, comment notifications, overdue reminders, assignee notifications, room sharing, and collaborator invite emails
* If the room owner's email integration is unavailable, emails fall back to the default Flowla address
* Can be enabled or disabled per organisation
***
## Troubleshooting
**Likely cause:** Your notification settings may be off, or notifications were temporarily paused.
**Fix:** Go to **Settings > Notifications** and confirm email alerts are enabled. If they appear on but still aren't arriving, contact support.
**Likely cause:** The message may have been sent to a room you're not the assigned owner of, or there's a display issue.
**Fix:** Check the **Messages** tab within the specific room. If it's still not visible, contact support with the room link.
**Likely cause:** Prospects are not automatically notified of content changes.
**Fix:** Manually notify your prospect by sending them a message in the room chat or via email. There is no automatic re-notification on edits.
**Likely cause:** Comments default to notifying all room participants.
**Fix:** You can't currently restrict comment notifications to a specific person. Use the room chat and @mention them directly for a more targeted update.
**Likely cause:** Native Slack notifications for specific actions aren't available by default.
**Fix:** Use Zapier or the Flowla API to set up a trigger-based Slack alert when a specific action (e.g. contract signed) is completed.
# Set up your profile
Source: https://docs.flowla.com/platform/user-profile
Configure your profile to enable automatic personalisation across rooms and templates.
Your Flowla profile powers personalisation across every room you create. Fill it in once and Flowla automatically uses your name, title, phone number, and calendar link inside templates and workflows — no manual edits needed.
Head to **Settings → Profile** to update your details.
***
### How to set it up
Go to **Settings → Profile** and complete the following fields:
* **First and last name**
* **Title** (e.g. Account Executive, CSM)
* **Headline** (optional)
* **Phone number**
* **LinkedIn URL**
* **Meeting link** (for calendar booking)
* **Profile picture**
This information is used across rooms where you're listed as the creator.
***
### How your info gets used — variables
Once your profile is filled in, it powers dynamic variables in your templates. When someone on your team creates a room, Flowla automatically fills those variables using the creator's profile — keeping every touchpoint consistent.
| Variable | What it inserts |
| ------------------------------- | -------------------------- |
| `{{room_creator.full_name}}` | Your full name |
| `{{room_creator.title}}` | Your job title |
| `{{room_creator.phone_number}}` | Your phone number |
| `{{room_creator.meeting_link}}` | Your calendar booking link |
### Variable colour coding in the editor
* **Blue** — variable is filled correctly
* **Orange** — variable is missing data (go to your profile and fill in the missing field)
* In **presentation mode**, variables appear as normal text with no highlighting
If you see orange-highlighted variables in a room, head to **Settings → Profile** to fill in the missing field and unlock automatic personalisation across all your rooms.
**Want to customise your templates further?**
Check out the full guide: [Using Variables in Flowla](https://academy.flowla.app/en/articles/11490091-use-variables-to-personalize-content)
***
## Troubleshooting
**Likely cause:** Cached data from an old LinkedIn connection.
**Fix:** Go to **Settings > Profile** and disconnect/reconnect your LinkedIn account. Allow a few minutes for the update to propagate.
**Likely cause:** Not obvious from the UI, especially for SSO users.
**Fix:** Go to **Settings > Profile** and look for the password change option. If you signed up via Google SSO, password management is handled by Google — change it there.
# Account analytics
Source: https://docs.flowla.com/reports-analytics/account-analytics
View engagement data aggregated by company and account.
Account analytics show you engagement at the company level — how contacts interact with your rooms, which companies are most active, and where to focus your outreach. When you're selling to multiple stakeholders at one company, this view gives you a complete picture of how the whole account is engaging.
***
## How to access
Open the Reports section from the main navigation.
Choose from preset periods or set a custom range.
Narrow by company, contact, or other criteria.
***
## Totals
**Average unique contacts per room** — The average number of unique contacts engaging per room in the selected date range. A higher number suggests broader stakeholder involvement.
**Contacts grouped by title** — A breakdown of contacts by job title across all rooms. Useful for understanding whether you're reaching decision-makers or only practitioners.
**Number of contacts in target companies** — How many contacts from your target accounts have engaged with your rooms.
**Total engagement of contacts** — The sum of all engagement activity from individual contacts.
**Total engagement of companies** — The sum of all engagement activity aggregated at the company level.
***
## Over time
**Number of engagements per prospect** — Engagement per prospect charted over time for the selected date range.
***
## Filter by time period
* Last 7 days
* Last 30 days
* Last 90 days
* Custom date range
# Content analytics
Source: https://docs.flowla.com/reports-analytics/content-analytics
Understand which content resonates with your customers across all rooms.
Content analytics show you how your assets perform across all rooms — what gets viewed, downloaded, and engaged with most. This helps you double down on what works and stop including content that nobody opens.
***
## How to access
Open the Reports section from the main navigation.
Choose from preset periods or set a custom range.
Narrow by asset type or other criteria.
***
## Metrics
Each asset is listed with the following metrics:
| Metric | What it tells you |
| ---------------- | ------------------------------------------------ |
| **Engagements** | Total number of interactions with the asset |
| **Unique views** | Number of distinct visitors who opened the asset |
| **Downloads** | Number of times the asset was downloaded |
Click any asset to view its detailed analytics.
***
## Sorting and filtering
**Sort by:** Engagements, unique views, or downloads — to surface your best or worst performing content.
**Filter by asset type:** Narrow results to specific content types (e.g. PDFs, videos, links).
***
## Filter by time period
* Last 7 days
* Last 30 days
* Last 90 days
* Custom date range
***
To manage the assets themselves — upload, organise, and update files — visit the [Asset Library](/library/asset-library-overview).
# Engagement trends
Source: https://docs.flowla.com/reports-analytics/engagement-trends
Analyse engagement patterns across your rooms over time.
Engagement trends show you the big picture — how engagement is changing across all your rooms, which periods see the most activity, and where to focus your attention. Instead of checking rooms one by one, this view surfaces patterns across your entire pipeline at a glance.
***
## How to access
Open the Reports section from the main navigation.
Choose from preset periods or set a custom range.
Narrow results by team member, room, or other criteria.
***
## Totals
**Total engagement** — Total engagement across your team for the selected date range, compared against the equivalent prior period.
**Average engagement** — Average engagement for the selected date range, compared against the equivalent prior period.
**Most engaged room** — The room with the highest engagement in the selected date range.
**Engagement breakdown** — An aggregated breakdown sorted by last engagement, showing the sum of all individual activity for the selected time period.
**Sticky rooms** — Rooms that get revisited frequently. Frequency is calculated as total views divided by unique views in the selected time window — a high score means people keep coming back.
**Trending rooms** — Rooms with rising engagement over the selected time period.
***
## Over time
**Room engagement over time** — Cumulative engagement charted over time. Each line represents a room with engagement during the selected interval. Hover over the chart to see which rooms are included at each point.
***
## Filter by time period
* Last 7 days
* Last 30 days
* Last 90 days
* Custom date range
# Room analytics
Source: https://docs.flowla.com/reports-analytics/room-analytics
Track engagement and activity for individual rooms in real-time.
## TL;DR
Room analytics show you exactly how prospects engage with your rooms, who's viewing, what they're looking at, and when they're active. Without this visibility, you're guessing when to follow up and who the real decision-makers are. With Flowla analytics, you know.
***
## Why room analytics matter
Use this data to prioritise follow-ups, identify stuck deals, and understand what content actually resonates.
* **Which deals are hot** — and which have gone cold
* **Who the key stakeholders are** in each deal
* **What content gets the most attention**
* **When to follow up** for maximum impact
***
## Key metrics to watch
### Engagement signals
| Metric | What it tells you |
| ------------------- | ---------------------------------------------------- |
| **Room views** | Who viewed the room and how often |
| **Time spent** | How long visitors engaged with each piece of content |
| **Last activity** | When the room was most recently opened |
| **Tasks completed** | Progress on mutual action plan items |
| **Forms submitted** | Whether customers have submitted their information |
This same engagement data is a first-class input to the [Knowledge Graph](/rex/knowledge-graph) behind REX. It's why REX can raise a [signal](/rex/signals) between meetings, such as a stakeholder making repeat visits to your pricing section or a room that's gone dark for two weeks, rather than only reacting to what was said on a call.
### Content performance
| Metric | What it tells you |
| ---------------------- | ----------------------------------------------- |
| **Asset views** | Which files and materials get opened |
| **Downloads** | What content prospects save locally |
| **Section engagement** | Which parts of your room get the most attention |
***
## Tracking contacts
Flowla gives you a per-contact breakdown for every room, so you can see exactly where each stakeholder stands. This makes it easy to spot your champions, identify silent stakeholders, and time your outreach with confidence.
For each contact you can track:
| Metric | Description |
| --------------- | ------------------------------------------ |
| **Last active** | The last time they opened the room |
| **Engagements** | Total number of interactions with the room |
| **Steps seen** | Which sections they've visited |
| **Time spent** | How long they've been engaged |
| **Sessions** | How many separate visits they've made |
***
## Using analytics to prioritise
**Hot deals** — Rooms with recent activity and multiple stakeholders viewing indicate active evaluation. These are your priority follow-ups.
**Cold deals** — Rooms with no activity for 7+ days may need a nudge. Use this signal to re-engage before interest fades entirely.
**Champion identification** — The contacts who view most frequently are likely your internal champions — the people advocating for you on the inside.
**Content optimisation** — If certain assets are consistently ignored, consider replacing or repositioning them in the room. See [Content analytics](/reports-analytics/content-analytics) to identify underperforming assets across all rooms.
**Account-level view** — To see engagement aggregated across all rooms for a single company, visit [Account analytics](/reports-analytics/account-analytics).
***
## Troubleshooting
**Likely cause:** The prospect accessed the room from different browsers or devices, each creating a separate session.
**Fix:** This is expected behaviour. Each device or browser session is tracked separately. Enable the email gate to tie sessions to a named person for cleaner data.
**Likely cause:** The visitor chose not to enter their email, or accessed the room before the gate was enabled.
**Fix:** The email gate only captures details going forward after it's enabled. Past sessions remain anonymous. Make sure the gate is set to **Required**, not Optional.
**Likely cause:** There's no native CSV export in the analytics UI.
**Fix:** Use the Flowla API to pull engagement data programmatically. Contact support if you need a manual data export.
**Likely cause:** This view isn't immediately obvious in the UI.
**Fix:** Open the room and go to the **Progress** or **Overview** tab. Each action step shows completion status per participant.
# Room progress
Source: https://docs.flowla.com/reports-analytics/room-progress
Track task completion and milestone progress across your rooms.
Room progress shows you how deals and processes are moving forward based on action completion. It answers the question your CRM can't: are customers actually doing the things they need to do to get to close? See which rooms are on track, which are stuck, and where to focus your energy.
***
## How to access
Open the Reports section from the main navigation.
Choose from preset periods or set a custom range.
***
## Totals
**Number of completed rooms** — Rooms where all actions have been completed in the selected time frame.
**Average completion rate of rooms** — The average percentage of actions completed across all rooms. A low number across the board may indicate that action items need to be simplified or re-scoped.
**Progress overview of rooms** — A table showing each room with its last completed action and overall progress percentage.
***
## Over time
**Number of completed rooms over time** — Completed rooms charted over the selected time period.
**Average completion rate of rooms over time** — Average room completion rate charted over the selected time period.
***
## Filter by time period
* Last 7 days
* Last 30 days
* Last 90 days
* Custom date range
# Team activity
Source: https://docs.flowla.com/reports-analytics/team-activity
Monitor team performance and room creation across your organisation.
Team activity shows you how your team is using Flowla — who's creating rooms, how much engagement those rooms are generating, and where adoption is strong or lagging. This is the view managers and RevOps teams use to understand what's working across the team, not just individual deals.
***
## How to access
Open the Reports section from the main navigation.
Choose from preset periods or set a custom range.
***
## Totals
**MVP** — The team member with the most engagement generated in the selected time frame.
**Most engaged room** — The room with the highest engagement across the whole team.
**Rooms created** — Number of rooms created in the period, broken down per team member.
**Engagements created** — Number of engagements generated in the period, broken down per team member.
***
## Over time
**Number of rooms created** — Rooms created over time, broken down per team member. Useful for spotting who is adopting Flowla consistently and who may need support.
**Number of engagements generated** — Engagements generated over time, broken down per team member. A proxy for how effectively each rep is driving prospect activity.
***
## Filter by time period
* Last 7 days
* Last 30 days
* Last 90 days
* Custom date range
# Asset intelligence
Source: https://docs.flowla.com/rex/asset-intelligence
REX's structured understanding of every asset in your library, covering persona, sales stage, competitors, and freshness, so it can recommend the right content rather than a keyword match.
**Asset intelligence** is REX's structured understanding of every piece of content in your [library](/library/asset-library-overview): decks, one-pagers, case studies, battlecards, YouTube and Loom videos, web links and embeds, essentially anything you've uploaded.
Instead of a generic AI summary, each asset gets a typed, structured breakdown: what it's about, who it's for, what stage of the sales cycle it fits, which competitors it counters, and how fresh it still is.
This is what turns your library from a folder of files into something REX can search by meaning and recommend from, both in [REX Chat](/rex/chat) and in [signals](/rex/signals).
***
## Generating intelligence
An asset gets analysed one of two ways:
| Method | When it runs |
| ----------------- | ----------------------------------------------------------------------------------------------------------------------------- |
| **Automatically** | When an asset is uploaded to the library, if your org has turned on **Auto-generate asset intelligence** in Library settings. |
| **On demand** | Any time. Open an asset's details and click **Generate asset intelligence**, or **Regenerate** if it's already been analysed. |
On-demand generation works regardless of whether the org-wide toggle is on, so you can always analyse a specific asset you need REX to know about right now.
***
## What gets extracted
The result is a structured profile of the asset, not free text:
* **Overview**: purpose, description, asset type, the product it's about, category, region, industries, and segments it applies to, plus a **freshness score**.
* **Personas**: who it speaks to (role, seniority), their pain points, and how well the asset fits them.
* **Sales stages**: which stage or stages of the sales cycle it's suited for, only flagged when the content clearly supports it.
* **Features & integrations**: capabilities and third-party tools it showcases.
* **Competitors**: who it positions against.
* **Solutions**: the business outcomes or value pillars it argues for.
Every one of these comes with **evidence**, the specific passage or reasoning behind that label, so you can see why REX described an asset the way it did. It's the same traceability you get on a [Deal Score](/rex/deal-score) or [MEDDPICC](/rex/meddpicc) score.
***
## Freshness score
Freshness isn't an AI judgment. It's calculated directly from the asset's last-updated date, with full marks for anything updated in the last 3 months tapering to zero past 3 years old. It's shown as a score, an age label ("3 mo ago"), and a status: **fresh**, **stale**, or **outdated**.
A great case study from two years ago might be quietly out of date. Freshness surfaces that before you send it to a prospect, which matters most for anything with pricing, product screenshots, or competitive claims.
***
## How search is built on top of this
When you or REX search the library by meaning rather than by filename or folder, that search runs over the *content of the intelligence graph*, meaning the personas, features, and use cases that were extracted, rather than a raw keyword match against the file itself.
That's what makes a query like "find a case study for a fintech buyer" work even if the word "fintech" never literally appears in the file.
### How REX Chat uses it
REX Chat can search your library by keyword, by meaning, by type, by tag, by folder, by who uploaded it or when. It pulls the structured intelligence for a specific asset when it needs the detail (who it's for, what stage it fits, how fresh it is) before recommending or attaching it.
### How signals use it
REX has access to your library while it's generating [signals](/rex/signals), so a recommended action can be genuinely concrete rather than generic advice. It can surface a specific case study or security one-pager that fits the persona and stage a signal is about, and prepare a share link for it, rather than just telling you to "share relevant content."
The asset a signal points to isn't a hardcoded link. REX finds it at the moment the signal is generated, the same way it would if you'd asked directly in chat.
***
## Credit cost
Generating asset intelligence spends [credits](/plans-billing/credits). The Library settings toggle says so explicitly: *"Spends credits based on the asset type and size."*
| Step | Cost |
| ----------------------------------- | ---------------------------------------------------------------------------------- |
| **Parsing** | 1 credit per page for documents, or 1 credit per minute for audio and video assets |
| **Building the intelligence graph** | A flat cost on top of parsing, regardless of asset size |
In short, bigger or longer assets cost more to analyse, mainly because of the parsing step, while the graph-building step itself is a fixed add-on.
If your org doesn't have enough credit balance to cover generation, it's skipped rather than run partway.
This is different from [REX Chat](/rex/chat) and from signal generation, which don't currently spend org credits. Asset intelligence generation is the one place in this trio where usage is metered, since it involves parsing and analysing a whole file rather than reasoning over data REX already has.
***
## How different roles use this
* Turn on **Auto-generate asset intelligence** in Library settings so new uploads are searchable and recommendable right away, without a manual step per file.
* If you upload something you need REX to use immediately, click **Generate asset intelligence** on that asset directly. This is useful before the auto-generation queue gets to it, or if the org toggle is off.
* Check an asset's **freshness** before sending it to a prospect. An "outdated" or "stale" label is worth a second look, especially for anything with pricing, product screenshots, or competitive claims.
* Ask REX by meaning, not just by filename. "Find something for a healthcare buyer at the security-review stage" will work if the right asset has been analysed.
Your library isn't just sales collateral. Onboarding guides, how-to docs, training decks, and support material benefit from the same intelligence.
* Generate (or auto-generate) intelligence on onboarding and training content so REX can recommend the right how-to doc or walkthrough by persona and use case, not just by filename.
* Check freshness before pointing a customer to a setup guide or training deck. Product changes fast enough that an "outdated" label on an onboarding asset is worth acting on quickly.
* If REX isn't surfacing a training asset you know exists, check whether intelligence has actually been generated for it. An asset with no intelligence is invisible to search and to signal recommendations, even in an onboarding room.
* A pattern of signals recommending the same stale or outdated asset is worth flagging to whoever owns the library. It usually means a refresh is overdue, not that REX picked wrong.
* If reps report REX "can't find" an asset they know exists, the likely cause is that intelligence was never generated for it. Check whether auto-generation is on for the org, or whether it needs a manual **Generate asset intelligence** click.
* Freshness scoring gives you a deterministic way to audit content hygiene across a library that's grown over years, without relying on someone remembering which decks are outdated.
***
## FAQ
Yes. Parsing costs 1 credit per page (or per minute for audio and video), plus a flat additional cost to build the intelligence graph itself. Bigger or longer assets cost more, mainly due to parsing.
The previous analysis is fully replaced, not merged. Every regeneration starts from scratch.
No. It's calculated directly from the asset's last-updated date, not generated by the model. The model is explicitly not allowed to override it.
Most likely, intelligence hasn't been generated for it yet. Check that auto-generate is on, or generate it manually from the asset's details.
Generation triggers automatically on new uploads. If you've replaced or edited an existing asset's file, use **Regenerate asset intelligence** on it directly to be sure it reflects the update.
Yes. Every extracted field, including personas, stages, and competitors, carries evidence tying it back to the specific content that produced it.
# REX Chat
Source: https://docs.flowla.com/rex/chat
The conversational agent that can actually do the work: pulling deal data, updating your CRM, drafting emails, finding assets, and searching the web, always with your approval.
REX is Flowla's built-in Revenue Execution Agent, and it can take multi-step action on your behalf: pulling up deal data, updating your CRM, drafting and sending emails, searching the web, and more.
Think of REX as a teammate who has read every deal room, every signal, and your CRM, and who will go do the legwork instead of just answering questions about it.
***
## Two ways to reach REX
Both are the same underlying assistant:
* The **Ask REX** button opens it as a side-sheet drawer over whatever you're currently looking at.
* The **REX** item at the top of the left-hand navigation opens it as a full, dedicated page.
Neither is a different or lesser version. The drawer is the fast, in-context way to reach it, and the dedicated page is for when you want the conversation to be the whole screen.
***
## How it works
When you ask REX something, it decides which tools it needs, calls them in sequence, and reports back in the chat. You'll see a live "REX is looking up…" style status as it works.
REX is context-aware. If you open it while looking at a specific room, it already knows what you're looking at and will use that as its starting point.
REX runs on a bounded number of steps per turn, so it won't spiral into an endless loop. It will either finish the task and report back, or ask you a clarifying question if it's genuinely unsure. It only bases its answers and actions on data it actually retrieved through a tool, so it doesn't make up facts, contacts, or figures.
***
## Capabilities
Create a brand-new deal room from scratch, or update an existing one.
Create new sections and pages within a room, add, remove, or reorganise them, and create or edit content blocks inside them.
Create a [mutual action plan](/mutual-action-plans/actions-overview) from scratch, or add, update, and reassign items on an existing one.
Pull who viewed what, action-plan progress, and per-section engagement for a room.
Look up contacts associated with a deal, along with company enrichment data and view history.
Read available CRM fields and update deal, contact, or company records directly in [HubSpot](/integrations/HubSpot), [Salesforce](/integrations/SalesForce), or [Attio](/integrations/Attio). For example, "move this deal to Negotiation stage."
Query and filter deal [signals](/rex/signals) covering risks, opportunities, momentum shifts, and unanswered questions. REX can pull the full detail behind a specific signal and mark signals resolved.
Search your content library by keyword or meaning ("find a case study for a fintech buyer"), browse folders, generate shareable links, pull structured [asset intelligence](/rex/asset-intelligence), and pull an asset straight from the library into a room as a new block.
Draft and send emails, to explicit addresses, resolved contacts, or an existing email thread, and send [Slack](/integrations/Slack) messages. Both require your approval before sending.
Browse your organisation's or Flowla's [template library](/rooms/room-templates), trigger [Autopilot](/automations/automations-overview) workflows, and create [forms](/forms/forms-overview).
Look up public information about a company, person, or market via live web search. Approval is required before REX searches.
Search and recall REX's own past conversations with you, so you can pick up a thread from a previous chat.
### Updating your CRM
### Drafting and sending email
***
## What REX knows
* Everything inside your deal rooms: content, structure, and engagement or viewer activity
* Your connected CRM data (HubSpot, Salesforce, or Attio)
* [Signals](/rex/signals) automatically generated from meetings, CRM syncs, and room activity
* Your content library, including structured summaries of what each asset covers. See [Asset intelligence](/rex/asset-intelligence)
* Your org's users, templates, statuses, and labels
* Its own conversation history with you
* Live public web results, when it searches
* What room you're currently viewing, so it can ground its answer in context
***
## What REX can't or won't do
REX will not send an email, post to Slack, or search the web without your explicit approval first.
* It won't act on data it hasn't actually retrieved, so it won't invent contacts, numbers, or sources.
* It won't work without an available usage [credit](/plans-billing/credits) balance for your organisation.
***
## How different roles use this
Open REX from anywhere in the app. It's fastest when you open it from inside the deal room you're asking about, since it will already have that context loaded.
Good everyday uses:
* "Summarise where this deal stands and what's blocking it"
* "Draft a follow-up email to the champion after yesterday's call"
* "What CRM fields are out of date on this deal?"
* "Find me a one-pager about our security posture for a healthcare buyer, and add it to this room"
* "Set up a mutual action plan for this deal with the standard onboarding steps"
* "Update the HubSpot stage to Negotiation"
* "What can I do to unblock \[deal name]?" REX will connect a stakeholder's stated blocker to a specific asset, such as a roadmap doc showing a requested feature is already planned, and offer to add it to the room or send it directly.
* "How do I improve my chances of closing \[deal name]?" REX will point to the specific stakeholder holding things up, say an economic buyer who's still defensive, and can offer to build a new asset tailored to what that person needs to see.
REX will show its work as it goes ("Looking up contacts for Acme Corp") and will always ask before sending anything on your behalf.
REX works the same way in an onboarding or account room. It already has that room's context loaded the moment you open it there.
* "Summarise where this onboarding stands and what's blocking go-live" pulls together room activity, CRM, and signals the same way it would for a sales deal.
* "Draft a check-in email to \[admin] about the stalled integration step" gets drafted grounded in what's actually happened in the room, and still asks for your approval before sending.
* "What's the engagement been like on this account this month?" is a fast way to check adoption without digging through analytics yourself.
* If REX seems to be missing context on an account, check the same things you would for a sales deal: is the CRM connected, and is a note-taker integration wired up for check-in calls?
REX is useful in 1:1s and pipeline reviews as a fast way to get an unbiased read on a deal before or during a conversation with a rep.
* Ask REX directly: "What's blocking \[deal name]?" or "Summarise the last two weeks of activity on \[deal name]" to prep for a review without digging through the room yourself.
* Use REX to spot CRM hygiene gaps across a rep's pipeline, such as missing fields or stale stages, and flag them before your next 1:1.
* REX's [recommended actions](/rex/signals) on a deal double as a coaching prompt. You can ask a rep why a recommended action wasn't taken.
### Finding the right stakeholder and the right asset
***
## FAQ
No. Sending email, sending Slack messages, and searching the public web all require you to explicitly approve the action first.
Not directly. Transcripts and other raw data are processed first, and REX reads the result. See the [Knowledge Graph](/rex/knowledge-graph).
HubSpot, Salesforce, and Attio are supported for reading and updating deal, contact, and company records.
Each REX turn has a bounded number of steps. If a request needs more work than that, REX will report what it's done so far and you can ask it to continue.
No. REX only answers using data it actually retrieved via a tool call. If it doesn't have the information, it will say so or ask you a clarifying question instead.
REX searches assets by their generated asset intelligence, not raw filenames. If that hasn't been generated for a given asset yet, it won't surface in search. See [Asset intelligence](/rex/asset-intelligence).
# Deal Score
Source: https://docs.flowla.com/rex/deal-score
One number that answers how healthy a deal is overall: the Dealmeter gauge on every room's Overview tab.
Deal Score is a single number that answers "how healthy is this deal, overall?" It's shown as a gauge, nicknamed the **Dealmeter**, on the deal room's Overview tab, coloured on a gradient from red (at risk) through amber to green (healthy).
***
## How it works
Deal Score is scored on a **0 to 5 scale** and is calculated the same way [MEDDPICC](/rex/meddpicc) is. REX continuously reads meeting notes, CRM data, and deal room activity, and rolls all of that evidence up into one calibrated health score with a plain-language explanation.
If a deal doesn't have enough activity yet, the gauge shows **Not scored yet** instead of a number.
Click **Details** on the gauge to open the score's detail drawer. It shows the overall analysis, plus the specific pieces of evidence ("score factors") that pushed the score up or down, each with its own justification and source, sortable by date, impact, or urgency.
Each score factor traces back to its source: a specific meeting and person, or a rollup of room activity. See the [Knowledge Graph](/rex/knowledge-graph) for what REX draws on.
***
## How it relates to MEDDPICC
Deal Score is the aggregate, single-number view of deal health. [MEDDPICC](/rex/meddpicc) is the breakdown of that same underlying evidence across eight specific sales-qualification dimensions.
Use Deal Score for a quick gut-check on a deal. Use MEDDPICC when you need to know *which part* of the deal is weak.
***
## Improving accuracy
Accuracy improves the same way MEDDPICC's does. Connecting your CRM, connecting a call-recording or note-taker integration, and sharing the room with more stakeholders all give REX more evidence to work from. See [where REX's data comes from](/rex/knowledge-graph#where-the-data-comes-from) for how those connections work.
***
## How different roles use this
Glance at the Dealmeter as your first checkpoint whenever you open a deal.
* Green means the deal has strong supporting evidence across the board. Red or amber is a cue to open the detail view and see specifically what's dragging the score down.
* Use the **Connect your CRM**, **Connect a note taker**, or **Share your room** prompts on the card if you see them. They exist because REX doesn't yet have enough signal to score confidently.
* Don't treat the number as a verdict. Read the justification behind it before deciding how to act.
If you're running onboarding, renewal, or expansion work through Flowla, the same Dealmeter applies to that room.
* Use it as a fast health check the same way a rep uses it pre-sale. Green means the evidence is solid, red or amber means something's off and worth investigating before it becomes a churn risk.
* "Not scored yet" is expected for a brand-new onboarding room. There isn't enough activity yet to score confidently.
* Connecting a CRM and a note-taker integration improves scoring here too, so make that part of how you set up any new onboarding or account room.
Deal Score is built for fast pipeline triage.
* Scan a rep's pipeline by Deal Score to prioritise which deals need attention in a review, rather than opening each room individually.
* A deal that's red or amber despite the rep reporting it as "on track" is worth a direct conversation. The score is grounded in actual meeting and CRM evidence, not the rep's own summary.
* Pair Deal Score with MEDDPICC in reviews: Deal Score tells you *which* deals to look at, MEDDPICC tells you *why*.
***
## FAQ
REX doesn't yet have enough meeting, CRM, or room activity to calculate a confident score. Connecting a CRM or note-taker, or getting more activity in the room, will resolve this.
No. Deal Score is one aggregate health number, while [MEDDPICC](/rex/meddpicc) breaks that same underlying evidence down into eight specific qualification dimensions.
No, it's fully calculated by REX from deal activity. If it seems wrong, check whether the underlying meeting and CRM data is current.
Open the detail view to see the specific evidence driving it down, then address the underlying issue, such as an unresolved objection or a missing economic buyer. Connecting a CRM or note-taker also improves REX's overall confidence.
# Insight cards
Source: https://docs.flowla.com/rex/insight-cards
A four-part narrative summary of every deal: Motivation, Stance, Obstacle, and Trajectory, written from the same evidence that drives every other REX score.
On every deal room's Overview tab, under **REX's analysis**, REX surfaces two complementary views that summarise the deal at a glance and tell you what to do about it:
1. **Insight cards**, a grid of AI-written summaries covering the deal from four angles.
2. **REX's signals and next steps**, a running feed of specific, evidence-backed observations, each with a suggested next step.
Together these turn everything happening in a deal (calls, CRM changes, room engagement) into a short, actionable summary instead of something you have to piece together yourself.
This page covers insight cards. For the full detail on the feed, see [Signals & next best actions](/rex/signals).
***
## The four categories
Insight cards are generated from the room's [Knowledge Graph](/rex/knowledge-graph), the same picture that drives MEDDPICC and Deal Score, and organised into four fixed categories:
| Category | On the card | What it covers |
| -------------- | --------------------------------- | -------------------------------------------------------------- |
| **Motivation** | "What's driving the deal" | The buyer's problem, pain, or time pressure |
| **Stance** | "Where we stand" | Competitive comparison, and how the buyer perceives your value |
| **Obstacle** | "What's putting the deal at risk" | Concerns, blockers, unmet requirements |
| **Trajectory** | "Who decides and what's next" | The buying path and committed next steps |
Each card carries a status at a glance (**On track**, **Needs attention**, or **Neutral**) plus a short written analysis backed by the specific evidence that informed it.
***
## Opening a card
Clicking a card opens the **Deal insights** drawer, where you can move between all four categories. Each one shows:
* **Summary**, the written analysis with its status badge.
* **Signals**, the individual pieces of evidence behind it. Each is typed (pain point, urgency signal, commitment, and so on) and linked to the meeting it came from and the person who said it.
This is the same evidence-backed approach used throughout REX. Nothing in a card is asserted without a traceable source. See [where REX's data comes from](/rex/knowledge-graph#where-the-data-comes-from) for how that activity gets in.
***
## Insight cards versus signals
**REX's signals and next steps** is a separate, more granular feed of individual observations: a new risk, a buying signal, an unanswered question, a missing stakeholder. Each has a title, an urgency level, a justification, and one or more recommended actions.
See [Signals & next best actions](/rex/signals) for the full breakdown.
Read the cards for the narrative, work the feed for the to-do list. Motivation and Obstacle together are usually enough to prep talking points, and the feed tells you what to actually do next.
***
## How different roles use this
Start on the Overview tab before a call or a status update. The four insight cards give you a 30-second read on where the deal stands, and the signals feed tells you what to do next.
* Read Motivation and Obstacle together to prep talking points that address the buyer's real pain and objections.
* For working the feed itself, including prioritising signals, acting on recommendations, and dismissing what's not relevant, see [Signals & next best actions](/rex/signals).
The same Overview tab exists on any room you own, including an onboarding or account room.
* Motivation and Obstacle tell you why the customer bought and what's currently getting in the way of a smooth rollout, which is useful before a check-in call.
* Trajectory surfaces what's actually agreed to next for the rollout, so you're not relying on memory for what was promised on the last call.
* The signals feed is your onboarding to-do list the same way it's a rep's deal to-do list. A stalled setup step or a quiet admin shows up there without you having to notice it yourself.
* Use the Obstacle and Trajectory cards as a fast way to prep for a deal review without reading the whole room.
* For scanning signals across a portfolio of deals, see [Viewing signals across all rooms](/rex/signals#viewing-signals-across-all-rooms).
***
## FAQ
Insight cards are a four-part narrative summary of the deal. The signals feed is a list of specific, individually actionable observations with urgency levels and suggested next steps. See [Signals & next best actions](/rex/signals) for the full detail.
The same [Knowledge Graph](/rex/knowledge-graph) that powers MEDDPICC and Deal Score, built from meeting notes, CRM data, and deal room engagement.
No. The four categories are fixed and generated automatically from the Knowledge Graph.
# Knowledge Graph
Source: https://docs.flowla.com/rex/knowledge-graph
The living picture behind every deal room: what REX learns from your calls, your CRM, and room activity, and how that data gets in.
The Knowledge Graph is REX's living understanding of a deal. It holds what REX has learned about the contacts, the company, the competition, and the twists and turns of the sales process, built continuously from your calls, your CRM, and activity inside the room.
It isn't really a feature you use on its own. It's the picture underneath the room that every other REX feature reads from. [Deal Score](/rex/deal-score), [MEDDPICC](/rex/meddpicc), [insight cards](/rex/insight-cards), and [signals](/rex/signals) are all different views onto this same picture, which is why they never contradict each other.
To see it directly rather than through a processed view, click **View graph** below the MEDDPICC card in the room sidebar.
***
## A transcript versus a memory
Think of it as the difference between a transcript and a memory. A transcript is a wall of text from one call. The Knowledge Graph is what's left after REX has read every call, every CRM update, and every bit of room activity for a deal, and organised it into a structured picture: who's who, what they care about, what's worrying them, what they've promised, and how all of that is trending.
That picture doesn't go dark between calls. Deals move (or stall) in the days in between, while a buyer is quietly rereading the pricing section, forwarding a page to a colleague who's never joined a call, or opening the room every morning for a week without saying a word to you. Room engagement is as much a part of the graph as anything said out loud, and it's often the only signal you get during the silence between meetings.
***
## What it knows about a deal
REX keeps track of who's involved on the buying side, which company each person belongs to, and how they relate to each other and to the deal. That's what lets it reason about things like "the champion doesn't have a direct line to the economic buyer" instead of just listing people in isolation.
Around those people, it holds what they've told you: the problems they're trying to solve, the worries they have about you, the questions nobody answered, what they've promised and whether it happened, and which competitors are in play. Everything REX concludes stays connected to the moment it came from, which is why you can click into any score or signal and see the actual words, from the actual person, in the actual meeting.
### Room engagement
Alongside what's said in meetings, REX tracks what happens inside the deal room itself: who's visited, what they opened, how recently, and how often they've been coming back.
This isn't a side metric. It's the only window you get into what a buyer is doing when you're not on a call with them:
* A contact rereading the pricing section three times in a week
* A stakeholder who's never joined a meeting but has quietly opened the room five times
* A room that's gone completely unopened for two weeks despite a "we're aligned, let's move forward" on the last call
All of that is real signal, and often the earliest warning of either momentum or risk. It's also what lets REX distinguish a person who's genuinely engaged from one who was added as a contact but has never looked at anything.
The same engagement data is available as a dashboard in [Room analytics](/reports-analytics/room-analytics). The difference is that REX reasons about it alongside your meeting and CRM data rather than only reporting it.
### Mutual action plans
A deal room's [action plan](/mutual-action-plans/actions-overview) is part of the picture too, not a separate to-do list REX ignores. REX knows what's on the plan, who owns each item, and what's overdue right now.
That turns the action plan into something REX actively reasons about. An item assigned to the buyer that's now a week overdue is a real, negative signal, not a passive checklist entry nobody's watching.
***
## Where the data comes from
The graph only knows what it's been given. There are three inputs: your meetings, your CRM, and activity inside the room.
### Meeting sync
Flowla connects to your call-recording tools at two different levels.
| Level | Tools | How calls arrive |
| -------------- | ----------------------- | ------------------------------------------------------------------------------------------------------------ |
| **Auto-sync** | Fireflies, Gong, Fathom | Every new call syncs automatically the moment it ends. Once connected, there's nothing to do per meeting. |
| **Manual add** | Avoma, Granola | Connected the same way, but calls come in one at a time. You add a specific call when you want it processed. |
An auto-synced call is matched to the right room and processed on its own, usually within minutes of the recording finishing. There's no manual step once the note-taker is connected, and everything downstream (Deal Score, MEDDPICC, insight cards, and signals) updates with it.
### CRM sync
Once you connect a CRM and choose which fields matter, Flowla keeps those fields in sync automatically. REX always reflects current CRM state without anyone re-pulling it.
### Room activity
Engagement inside the room feeds in continuously, so REX's read on a deal keeps moving even when there hasn't been a call.
***
## Built on evidence
Not everything REX knows is a judgment call:
* **Hard facts** like deal amount, close date, CRM field values, and a meeting's date and time are captured as-is.
* **Everything else**, including how severe a concern is, how urgent a blocker feels, and a person's current sentiment, is an AI assessment graded from the evidence rather than asserted as fact.
Every assessment comes with its own plain-language justification, which is why clicking into a score never just shows you a number. It shows you the specific evidence, attributable to a specific person and moment, that produced it. That's also what lets REX be confident about a close date and appropriately hedged about how a person feels.
***
## What it feeds
| Feature | What it reads from the Knowledge Graph |
| ----------------------------------------------------------- | ------------------------------------------------------------------------------------------- |
| [Deal Score](/rex/deal-score) | The aggregate health number |
| [MEDDPICC](/rex/meddpicc) | The eight-dimension qualification breakdown |
| [Mutual action plan](/mutual-action-plans/actions-overview) | REX can propose new items, update existing ones, or flag overdue ones from what's discussed |
| [Insight cards](/rex/insight-cards) | The four-part Motivation, Stance, Obstacle, Trajectory narrative |
| [Signals](/rex/signals) | The individual, actionable observations feed |
***
## Making it richer
The biggest levers for a more accurate picture:
[HubSpot](/integrations/HubSpot), [Salesforce](/integrations/SalesForce), or [Attio](/integrations/Attio).
The fastest way to keep the graph current, since it removes the manual step per meeting.
A single-threaded deal will always look thinner than a well multi-threaded one.
So there's engagement to observe in the first place.
A deal with one contact, no connected CRM, and a room nobody's opened will have a thin graph and, correspondingly, thin scores and signals. That's expected, not a bug.
***
## How different roles use this
You'll rarely think about "the graph" directly. You'll experience it as Deal Score, MEDDPICC, and signals all agreeing with each other, because they're reading the same picture.
* Every observation is clickable back to its source. Use that to sanity-check REX's read before a call, or to get the receipts for a forecast conversation.
* Check room engagement before a call, not just your notes. Knowing that the economic buyer opened the room for the first time yesterday, or that nobody's looked at it in two weeks, tells you something a transcript never will.
* The action plan is a live part of this picture, not paperwork. An overdue item assigned to the buyer is a real warning sign.
The same picture builds itself around an onboarding or account room just as much as a sales one.
* A brand-new onboarding room will look sparse at first for the same reason a new sales room does. There isn't enough history yet, so it isn't a data problem to troubleshoot.
* Room engagement is often your best signal during a rollout. An admin who hasn't opened the room in two weeks tells you more about real adoption than a check-in call will.
* Commitments carry over post-sale too. If you promised an integration or training session by a date, an overdue one is a real risk signal for the account.
* When a rep says "trust me, it's fine," you can ask to see the evidence. Every score and signal traces back to an actual quote, from an actual person, in an actual meeting.
* A thin graph usually means the account isn't multi-threaded yet, independent of what the rep is telling you.
* What people promised and whether they followed through is tracked over time, so "did they actually do what they said" is a fact you can check rather than something you have to remember.
* A deal reported as healthy with a room nobody's opened in weeks is worth a direct question before it hits the forecast.
***
## FAQ
Mostly you experience it through Deal Score, MEDDPICC, insight cards, and signals, all of which let you click through to the underlying evidence. You can also open the graph itself by clicking **View graph** below the MEDDPICC card in the room sidebar.
No. Hard data like deal amount, dates, and CRM field values is captured as-is. Everything else (severity, urgency, sentiment) is an AI judgment, graded from the evidence and always shown with its justification.
There isn't yet enough meeting, CRM, or room activity to build a picture from. This resolves naturally as calls happen and the CRM syncs. Connecting a note-taker is the fastest way to accelerate it.
Fireflies, Gong, and Fathom sync automatically. Avoma and Granola are supported via manual add, where you pull in a specific call when you want it processed.
No, but it's the fastest way to keep the graph rich and current. Without one you can still add transcripts manually, but that requires a manual step per meeting.
Connected CRM fields sync automatically in the background on an ongoing basis. You shouldn't need to manually re-sync.
# MEDDPICC scoring
Source: https://docs.flowla.com/rex/meddpicc
REX scores every deal against all eight MEDDPICC dimensions automatically, with no forms to fill out.
MEDDPICC is a well-known sales qualification framework, and REX automatically scores every deal against it. There's nothing to fill in.
| Letter | What it asks |
| --------------------- | ---------------------------------------------------------------------- |
| **M**etrics | What quantifiable impact does the buyer expect? |
| **E**conomic Buyer | Who has final budget authority? |
| **D**ecision Criteria | What requirements will the buyer judge solutions against? |
| **D**ecision Process | What steps and approvals does the buyer need to go through to sign? |
| **P**aper Process | What's the legal, security, and procurement path to a signed contract? |
| **I**dentify Pain | What problem is driving the buyer to act? |
| **C**hampion | Who internally is advocating for you? |
| **C**ompetition | Who else is the buyer considering? |
REX surfaces all eight as a single card on the deal room's Overview tab, each with its own score.
***
## How it works
REX continuously reads meeting notes, CRM data, and deal room activity, and assesses each of the eight letters on a **0 to 5 scale**. This happens automatically in the background, with no manual form to complete.
Each letter's score comes with a plain-language justification. Clicking into a letter opens a detail view showing the specific pieces of evidence, called **score factors**, that pushed the score up or down. You can sort them by date, impact, or urgency.
***
## Improving accuracy
Because it's AI-derived from real activity, the score is only as accurate as the data feeding it. Connecting your CRM and a call-recording or note-taker integration meaningfully improves accuracy, since those are the two biggest sources of evidence. See [where REX's data comes from](/rex/knowledge-graph#where-the-data-comes-from).
***
## How different roles use this
Use the MEDDPICC card as a running qualification checklist without having to fill anything out yourself.
* A low score on a letter is a prompt to go get that information. A low Economic Buyer score means you likely haven't confirmed who holds the budget.
* Click into any letter to see exactly why it's scored the way it is, and use the justification text to sanity-check REX's read before a call.
* If a score looks wrong, it's usually a sign the underlying meeting or CRM data doesn't reflect reality yet. An update after your next call should correct it.
MEDDPICC isn't only a pre-sale framework. It applies to any deal you're running through Flowla, including renewal and expansion opportunities you own.
* If you're working a renewal or expansion as its own deal, use the MEDDPICC card the same way a rep would. It flags whether you've actually confirmed an Economic Buyer or Champion on the account, rather than just inheriting the original sales-cycle ones.
* A Champion or Economic Buyer who scored well during the original sale can quietly go stale by renewal time as people change roles, so check these scores fresh instead of assuming last year's answer still holds.
* Because scores update automatically from calls and CRM activity, a MEDDPICC card on an account you're stewarding stays current without you re-qualifying it from scratch every quarter.
MEDDPICC scores give you a consistent, bias-free way to qualify deals across an entire pipeline without relying on reps to self-report.
* Scan for weak letters across a rep's deals to spot coaching patterns. A rep who consistently scores low on Champion may need help identifying and developing internal advocates.
* Use the score-factor drawer in a deal review to ground the conversation in specific evidence rather than a rep's subjective read of the deal.
* Because scoring doesn't depend on the rep remembering to update a field, it's a more reliable pipeline-quality signal than manually-maintained CRM stages.
***
## FAQ
No, every letter is scored automatically from meeting, CRM, and deal room activity.
It reflects how well-established that MEDDPICC element is for the deal, from 0 (no evidence yet) to 5 (strongly confirmed). Each score comes with a written justification.
Usually because there isn't enough underlying evidence yet. Connecting your CRM and a call-recording or note-taker integration is the fastest way to improve coverage.
Yes. Click into any letter to open a detail view listing the specific evidence behind the score, sortable by date, impact, or urgency.
Deal Score is a single aggregate health number for the deal, while MEDDPICC is the breakdown by sales methodology dimension. See [Deal Score](/rex/deal-score).
# What is REX
Source: https://docs.flowla.com/rex/overview
REX is Flowla's AI Revenue Execution Agent. It reads every meeting, CRM update, and room interaction, and turns it into scores, signals, and an assistant that can act on your behalf.
REX reads every meeting, CRM update, and deal room interaction, turns that into a continuously-updated picture of each deal, and surfaces that picture as scores, signals, and a chat assistant that can take action for you.
Everything below is one system: different views onto the same underlying evidence, which is why they never contradict each other.
***
## Start with the Knowledge Graph
The [**Knowledge Graph**](/rex/knowledge-graph) is the living picture behind every deal room, built from calls, CRM data, and room engagement.
It isn't a feature you use directly. It's the foundation every other REX feature reads from, and it's also where you'll find how meetings, CRM records, and room activity actually get in. Start there if you want to understand *how* REX knows what it knows.
***
## What REX shows you
The most actionable surface is the signals feed, which is where REX tells you what to actually do next.
A worklist of specific, dated observations, each with a concrete next step REX can start executing for you. Available per room, or as one queue across your whole pipeline.
Alongside it, three views score and summarise the deal at different altitudes.
"How healthy is this deal, overall?" One number from 0 to 5, shown as the Dealmeter gauge.
"Which part of the deal is weak?" The same evidence, broken into eight qualification dimensions.
A four-part narrative: Motivation, Stance, Obstacle, Trajectory. The 30-second read on a deal.
***
## The assistant
The conversational agent, in a drawer or as a full page. Creates and edits rooms, manages action plans, updates your CRM, drafts emails, and searches the web, always asking approval before anything external-facing goes out.
How your content library gets analysed into structured, searchable profiles covering persona, stage, competitors, and freshness, so REX recommends the right asset rather than a keyword match.
***
## Get the most out of REX
REX is only as sharp as the data it has. A "Not scored yet" gauge or a thin MEDDPICC card almost always means the same thing: no note-taker connected and no CRM synced, so REX has nothing to build from yet. The fix is to connect one, not to assume something's broken.
[HubSpot](/integrations/HubSpot), [Salesforce](/integrations/SalesForce), or [Attio](/integrations/Attio). Connected fields sync in the background, so REX always reflects current CRM state.
Fireflies, Gong, and Fathom sync every call automatically. Avoma and Granola work via manual add. See [where REX's data comes from](/rex/knowledge-graph#where-the-data-comes-from).
Room engagement, meaning who's visiting and what they're reading, is one of REX's richest signal sources and often the only one available between calls.
In Library settings, so your content is searchable and recommendable by REX from day one. See [Asset intelligence](/rex/asset-intelligence).
***
## Suggested reading order
[The foundation](/rex/knowledge-graph): what REX knows about a deal, and where the data comes from.
[The worklist](/rex/signals): what REX noticed, and what it suggests you do about it.
[Deal Score](/rex/deal-score), then [MEDDPICC](/rex/meddpicc) and [insight cards](/rex/insight-cards).
[REX Chat](/rex/chat) and [Asset intelligence](/rex/asset-intelligence): what REX can do and what it can pull from.
***
## Built on evidence, not black-box AI
Every score, signal, and contact detail traces back to a specific quote from a specific meeting, a CRM field, or a room visit, so you can always see the *why* behind a number rather than just the number.
Hard facts like deal amount, close date, and CRM values are captured as-is. Soft judgments like severity, urgency, and sentiment are AI-graded and always shown with their justification, never asserted as bare fact.
# Signals & next best actions
Source: https://docs.flowla.com/rex/signals
Your worklist for a deal: specific, dated observations REX has made, each paired with a concrete next step it can help you execute.
**REX's signals and next steps** is your worklist for a deal. It surfaces specific things REX has noticed (a new risk, a stakeholder who's gone quiet, a question nobody answered, a sign the deal is moving) each paired with what it thinks you should do about it.
It lives on every deal room's Overview tab, under **REX's analysis**, alongside the [insight cards](/rex/insight-cards). Where the cards summarise where things stand overall, the feed breaks that same picture into individual, dated items you can act on one at a time, so nothing worth acting on gets buried in a narrative.
Every item in the feed is called a **signal**. Every signal comes with one or more **recommended actions**: specific, concrete next steps, phrased the way a sharp colleague would say them to you, that you can have REX help with directly.
The same signals are also available outside any individual room, in one combined list across your whole pipeline. See [Viewing signals across all rooms](#viewing-signals-across-all-rooms).
***
## How a signal is built
Every signal is generated from the room's [Knowledge Graph](/rex/knowledge-graph), the same picture that drives Deal Score, MEDDPICC, and insight cards.
A signal isn't a raw alert on a single data point. It's REX connecting evidence across a meeting, a person, and the deal's history into one specific, worth-your-attention observation.
That evidence isn't only what happened on calls. Room engagement (who's visited, what they looked at, how recently, how often) is just as much a source for signals as a transcript is. In practice, this is what makes the feed useful in the long stretches between meetings, when a transcript-only system would have nothing to say at all.
Each signal has:
* **A title and description**: what happened, in plain language.
* **An urgency level**: High, Medium, or Low, reflecting how time-sensitive REX judged it to be. The feed groups signals by urgency, most urgent first.
* **A justification**: *what* was actually said or done that triggered this, often down to the specific meeting and moment, and *why it matters* for this specific deal, grounded in its stakes, stakeholders, and history.
* **One or more recommended actions**: concrete next steps, each with a short label and a fuller description of what doing it would involve.
Because everything traces back to the same evidence, a signal is never a black-box nudge. You can always see the specific evidence behind it, the same way you can with a MEDDPICC score.
***
## What shows up as a signal
The feed isn't one type of alert. It spans everything that matters about a deal's momentum.
| Category | Examples |
| ----------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Risk & blockers** | An unresolved objection, a stalled legal, security, or procurement step, an unaddressed concern, competitive pressure building |
| **Stakeholder shifts** | A champion who's gone quiet, a newly identified but not-yet-engaged decision-maker, a key person who hasn't joined the room |
| **Timing & urgency** | An approaching deadline or compelling event, a deal that's gone quiet for longer than it should have, a postponement that changes your plan |
| **Buying signals & momentum** | A genuine aha moment worth building on, a commitment that was actually fulfilled, growing engagement in the room |
| **Open loops** | A substantive question the buyer asked that never got answered, a next step that was discussed but never scheduled |
| **Room activity, between meetings** | A stakeholder making repeat visits to pricing or security documentation, a contact who's never joined a call but is quietly reading everything, a previously active room that's suddenly gone dark, a new person opening the room for the first time |
| **Action plan health** | An item that's now overdue, one assigned to the buyer with no movement, a new next step that came up on a call but was never added to the plan |
The room-activity category exists specifically because deals move in the silence between calls, not just during them. A signal can be based on visit patterns alone, with no meeting involved.
***
## Recommended actions
A recommended action is never vague advice. It's something specific enough that REX can start doing the legwork the moment you click it, the same way it would if you'd asked directly in [chat](/rex/chat).
In practice, that spans:
* **Drafting a follow-up**: a specific email to a specific stakeholder, already framed around the exact concern or opening the signal identified.
* **Prepping talking points or materials**: an ROI framing, a competitive comparison, an answer to a question that's still open.
* **Surfacing the right content**: pulling a relevant case study, one-pager, or proof point from your library for the specific buyer persona in play, using the same [asset intelligence](/rex/asset-intelligence) REX Chat searches by.
* **Keeping the CRM current**: flagging a stage, field, or stakeholder record that's out of sync with what's actually happening in the deal.
* **Keeping the action plan current**: adding a next step that was agreed on a call but never got added, adjusting a due date, or nudging on an item that's now overdue.
* **Proposing a next step**: suggesting who else should be looped in, or what the next meeting should focus on.
Clicking a recommended action opens REX with the work already prepared (a drafted email, an updated field, a pulled asset) and hands it back to you for approval.
Nothing is sent or changed without your say-so. Clicking a recommended action has REX prepare the work and hand it back for approval before anything goes out or changes.
***
## Working the feed
A walk-through of what the feed looks like in practice, based on a mid-market deal for a fictional buyer, "Northwind Retail," evaluating a fictional seller's product against a competitor called "RoutePath." Names and details are illustrative, not real deal data.
***
**🔴 High: Security review hasn't started, and close date is three weeks out**
*What triggered it:* On last week's call, the buyer's IT contact mentioned "we'll need our security team to sign off before anything gets provisioned" but no one has followed up to actually start that process, and the target close date is three weeks away.
*Why it matters:* Paperwork and security review are consistently where deals with a firm close date quietly slip. This is the kind of blocker that doesn't show up as a "no" until it's already too late to fix.
**Recommended actions:**
* *Kick off the security review proactively*, reaching out to the IT contact with your standard security documentation before they have to ask for it.
* *Confirm the close date is still realistic* given the review hasn't started, and flag it internally if it's now at risk.
***
**🟠 Medium: Champion hesitant to loop in Customer Success leadership**
*What triggered it:* The buyer's champion said they're "not sure how CS leadership will react" to another new tool, given a recent rollout of a different platform on their side.
*Why it matters:* CS is one of the strongest use cases in this deal. Without CS leadership's buy-in, that part of the value case can't be realised, and the champion's hesitation is a sign of real internal friction rather than just a scheduling gap.
**Recommended actions:**
* *Offer to help the champion frame the conversation*, positioning the product as reducing CS's workload rather than adding a tool they have to learn.
* *Offer a short, CS-specific walkthrough* if leadership is open to a conversation, focused narrowly on the handoff and onboarding use cases.
***
**🟡 Medium: Competitor comparison came up unprompted**
*What triggered it:* The buyer mentioned they're "also taking a look at RoutePath" for the same use case, without being asked.
*Why it matters:* An unprompted competitor mention this late in the process is worth addressing directly rather than letting it sit unanswered.
**Recommended actions:**
* *Prepare a direct, specific comparison* against RoutePath, focused on where this buyer's stated priorities actually diverge from what RoutePath offers.
* *Ask the champion directly* what's driving the comparison, so the response addresses the real concern rather than a generic feature list.
***
**🟢 Low: Buyer had a clear aha moment on the automation demo**
*What triggered it:* During the product walkthrough, the buyer's ops lead reacted strongly to seeing the manual reconciliation step disappear, saying something to the effect of "wait, that's automatic?"
*Why it matters:* Genuine, specific reactions like this are worth capturing and reusing. They're more persuasive internally, in the buyer's own words, than anything you'd write yourself.
**Recommended actions:**
* *Turn the moment into a short, reusable value story* the champion can use when selling this internally.
* *Lead with this reaction* in the next conversation with any other stakeholder who hasn't seen the demo yet.
***
**🟠 Medium: A finance contact who's never joined a call keeps revisiting the pricing section**
*What triggered it:* A contact who hasn't attended any meeting has opened the room four times in the past week, each time spending most of the visit on the pricing and contract-terms sections.
*Why it matters:* Someone this engaged with commercial terms, without ever having been on a call, is very likely involved in the budget decision even if they haven't been introduced yet. That's exactly the kind of stakeholder who can quietly stall a deal in procurement if they're never actually looped in.
**Recommended actions:**
* *Ask the champion directly who on the finance side is reviewing pricing.* This pattern strongly suggests someone is, whether or not they've been mentioned yet.
* *Prepare a short, finance-facing summary* covering pricing logic, contract terms, and ROI framing, in case this person surfaces or asks to be looped in formally.
***
**🔴 High: Action item assigned to the buyer is six days overdue**
*What triggered it:* On the mutual action plan, "Share internal security questionnaire" was assigned to the buyer's IT contact with a due date six days ago, and it's still marked incomplete with no update.
*Why it matters:* This is the same IT sign-off the security-review signal above depends on. An overdue item here isn't just a scheduling slip, it's the paper-process blocker actively getting worse in real time.
**Recommended actions:**
* *Send a friendly nudge on the specific overdue item*, rather than a generic check-in, referencing what's actually blocking progress on the buyer's side.
* *Propose a fallback next step*, such as a short call to walk through the questionnaire together, in case the delay is about bandwidth rather than priority.
***
Read together, this is a worklist: one urgent process risk to get ahead of, one relationship to help along, one competitive question to answer head-on, one genuine win worth reinforcing, one quiet stakeholder worth surfacing before they become a surprise, and one overdue commitment to chase down. It's exactly the kind of thing you'd otherwise have to reconstruct by rereading your own notes, guessing at who's been in the room, and manually checking a task list.
***
## Dismissing a signal
If a signal isn't relevant, whether the risk doesn't apply, the recommended action has already happened, or REX simply read the situation wrong, you can dismiss it and optionally give a reason.
That reason isn't just for the record. REX looks for patterns across what your team dismisses and uses them to make future feeds more relevant.
Take the extra second to give a real dismissal reason. It's the input that makes your own future feed more relevant, without anyone having to configure anything by hand.
***
## Lifecycle of a signal
A signal starts as an open observation on your worklist. From there it moves in one of a few directions:
* **Resolved**: you, or REX once you've approved a recommended action, address the underlying issue and it's marked done.
* **Dismissed**: with or without a reason.
* **Still open**: which is itself informative. An open, high-urgency signal that's sat untouched for a while is exactly what a manager should be asking about in a pipeline review.
The feed shows a running resolved count for whatever's currently in view, and resolved signals can be brought back with **Show resolved**.
***
## Viewing signals across all rooms
Signals aren't only visible one deal room at a time. **REX's signals**, under the **Intelligence** section of the left-hand navigation, rolls up every signal from every room you have access to into a single list. Same signals, urgency levels, justifications, and recommended actions you'd see on an individual room's Overview tab, just not scoped to one deal.
This is the view to use when you want to work signals as a queue instead of hunting for them room by room:
* **Filter by room**: narrow the list to one or more specific deal rooms using the Rooms filter, or leave it unfiltered to see everything across your whole book.
* **Search, sort, and track resolution** the same way you would inside a single room. Search by keyword, sort by newest, and see a running resolved count for whatever's in view.
* Each signal is still tagged with the room it came from, so you can act on a recommended action without first navigating into that deal room.
In practice, this is the fastest way to triage a whole pipeline first thing in the morning: scan for urgent signals across every deal at once, rather than opening each room to check.
***
## How different roles use this
Treat the feed as your worklist for the deal, not just something to skim.
* Start with anything flagged High. Those are the things most likely to bite you if they sit for another week.
* Click into a recommended action rather than doing the legwork cold. REX has already grounded it in the specific evidence, so the draft or prep work starts from the right context.
* When you dismiss something, take the extra second to give a real reason. It's not busywork, it's the input that makes your own future feed better.
* Read the "why it matters" line, not just the title. It's what turns "there's an unanswered question" into "here's specifically what it threatens."
* Pay attention to room-activity signals specifically. They're often your only warning between calls, telling you a deal is quietly heating up or quietly going cold before you'd otherwise notice either.
* Don't maintain the mutual action plan by memory. REX proposes new items and flags overdue ones based on what was actually discussed, so an outdated plan is usually a sign to approve a pending update rather than go build it by hand.
The feed works the same way on an onboarding or account room. Still your worklist, just about rollout and adoption instead of pipeline.
* Expect the categories to shift in flavour. Instead of a champion going quiet pre-sale, you'll see an admin who's stopped logging in, a training step that never got scheduled, or a promised integration that's now overdue.
* Room-activity signals are especially useful here. A customer contact quietly revisiting a specific how-to page, or a whole account going dark after a strong kickoff, are exactly the kind of early adoption-risk signals you'd otherwise only catch at renewal time.
* Overdue action-plan items matter just as much post-sale. A setup task assigned to the customer that's now a week overdue is a real risk to flag, not paperwork.
* Use the org-wide **REX's signals** view to triage adoption risk across your whole book of onboarding accounts, the same way a rep triages pipeline.
The feed is built to be scanned across a whole portfolio of deals, not read one room at a time.
* Scan for high-urgency signals across your team's pipeline to catch at-risk deals before they surface in a forecast call. The org-wide [REX's signals](#viewing-signals-across-all-rooms) view is built for exactly this.
* A recommended action that was surfaced but visibly not acted on is a coaching moment, not a black mark. Ask why, since sometimes the rep knows something the signal doesn't.
* Cross-reference the feed with the insight cards' Obstacle and Trajectory categories when prepping for a deal review. The feed tells you what's actionable right now, the cards give you the fuller narrative around it.
* A pattern of the same kind of signal getting dismissed across multiple reps is worth looking into. It's a sign the default behaviour doesn't fit how your team actually sells.
* A room-engagement signal, such as a deal gone quiet or a stakeholder suddenly active, is one of the fastest ways to catch a deal that's about to slip before it shows up as a stage change or a missed close date.
* Overdue mutual-action-plan items, surfaced as signals, are a concrete, dated way to see whether a rep's deal is actually progressing or just being talked about as if it is.
***
## FAQ
[Insight cards](/rex/insight-cards) are a four-part narrative summary of the whole deal, covering Motivation, Stance, Obstacle, and Trajectory. The signals feed is a list of individual, dated, actionable observations, each with its own urgency and recommended next steps.
No. Clicking a recommended action has REX prepare the work, such as a draft, an update, or a pulled asset, but nothing is sent or changed until you approve it.
High, Medium, or Low, reflecting how time-sensitive REX judged the observation to be based on the evidence behind it and what's at stake in the deal.
It's removed from your feed. If you give a reason, that feedback is used to look for patterns that reduce similar low-value signals in future.
The same [Knowledge Graph](/rex/knowledge-graph) that powers Deal Score and MEDDPICC, built from meeting notes, CRM data, and deal room activity. It's always traceable back to a specific quote from a specific meeting or a specific room visit.
The same way it would if you asked in chat: by searching your library's generated [asset intelligence](/rex/asset-intelligence) for what fits the persona, stage, or concern the signal is about, then preparing a share link for it.
It isn't a hardcoded link. It's found fresh each time a signal is generated, so an asset needs intelligence generated on it to be eligible.
Yes. A stakeholder's visit pattern, whether a section they keep revisiting, a new contact opening the room for the first time, or a room that's gone quiet, is enough on its own to generate a signal.
This is deliberate. It's what keeps the feed useful in the stretches between calls, when nothing new has been said out loud but something is still happening.
It happens, especially early on with limited data. Dismiss it with a reason, and that feedback directly improves what gets surfaced going forward for your team.
REX can propose a new action item, a due-date change, or flag an overdue one, based on what was actually discussed in a meeting or what the action plan's dates show. As with every recommended action, nothing is added or changed on the plan until you approve it.
No. **REX's signals**, in the Intelligence section of the left-hand navigation, lists signals from every room you have access to in one place, filterable by room. See [Viewing signals across all rooms](#viewing-signals-across-all-rooms).
# AI Blocks
Source: https://docs.flowla.com/rooms/ai-blocks
Build rich room layouts with the freeform editor, meeting blocks, and AI-generated content.
The Flowla editor gives you full control over how your rooms look and feel — with flexible layouts, a wide range of content blocks, and AI blocks that generate text and images directly from your call transcripts. This means you can turn a call recording into a polished, personalised room in minutes rather than hours.
***
## Freeform editor
### Groups and columns
Content inside a room is organised into **groups** — the top-level containers that act as the building blocks of your layout.
* Each group can have an optional header and supports up to **3 columns**
* Build side-by-side layouts with flexible column arrangements
* Style groups individually or apply a style to the whole room
### Select from library
Pull any previously saved asset into the editor using **Select from library**. Reuse approved content across rooms without re-uploading — any updates to the asset in the library reflect everywhere it's used.
You can also ask [REX](/rex/chat) to do this for you. It can create sections and pages, add or reorganise content blocks, and pull the right asset straight from the library into a room based on what a specific stakeholder actually needs to see.
### See all blocks & integrations
Clicking **See all blocks** opens the full integrations panel, where you can connect and embed content from over 50 third-party tools directly into your room — including Notion, Figma, YouTube, Zoom, Canva, Google Docs, Google Sheets, PowerPoint, Pitch, and more.
### Drag, reorder, and save
* Groups and blocks are freely draggable — reorder your layout at any time
* Pull assets from your library directly into the editor
* Save any block back to your library in one click from the block options
***
## Meeting blocks
Meetings that sync into your rooms can be surfaced directly as content blocks inside the editor — connecting meeting intelligence with your buyer-facing room. This closes the loop between what was discussed on a call and what the prospect sees next, without any manual copy-pasting.
### Meeting list block
Add a **meeting list block** to display all meetings linked to a room, automatically populated as new calls are matched and synced.
* The list stays in sync automatically — as new calls are matched to the room, they appear in the block without any manual action
* Meetings are **linked** from the room, not duplicated — updates to meeting data reflect everywhere it's used
### Single meeting block
Add a **single meeting block** to highlight a specific call, with the title, description, date, and attendees displayed cleanly inline.
* A picker opens to let you select from the room's matched meetings
* Makes it easy to pull in the right call without manual searching
***
## AI blocks
AI blocks let you generate text and images directly inside a room, using your call transcripts as the source. Instead of manually writing a follow-up summary or business case after every call, the AI does it for you — grounded in what was actually said.
### Output formats
* Set the output to **Text** to generate summaries, follow-ups, or other written content
* Set the output to **Image** to produce visuals — infographics, diagrams, or visual summaries — embedded directly in the room
### Automated generation
Set an AI block to generate automatically using the latest meeting transcript synced to the room — no manual trigger needed.
Re-generation feeds the previous AI block output as additional context, improving results over time as more meetings are added.
### Async generation
Triggering an AI block no longer locks you in place. Navigate freely across steps or rooms while content generates in the background.
A notification lets you know when generation completes — no waiting, no watching the screen.
***
## Credit usage
| Output type | Credits consumed |
| ---------------- | ---------------- |
| Text generation | 4 credits |
| Image generation | 8 credits |
Credits are deducted each time an AI block generates output. See [Plans & billing](/plans-billing/credits) for details on your credit balance.
# Collaborating in rooms
Source: https://docs.flowla.com/rooms/collaborating-in-rooms
Work together with team members and customers using messaging, annotations, and shared access.
Rooms are a shared space — built for back-and-forth between your team and your customers. When everyone can work from the same room, handoffs are smoother and nothing gets lost between teams.
***
## Messaging
Every room has a built-in chat so you can have contextual conversations without leaving the room. This keeps all deal-related communication in one place, so nothing gets buried in email threads or lost in Slack.
Messages appear in the social bar on the side of the room. All room viewers can read and reply, and your team gets notified based on their settings.
### To send a message:
Navigate to the room you want to message in.
This opens the messaging panel.
Use **@mentions** to tag specific people and send them a direct notification.
You can [disable conversations](/rooms/room-sharing#disable-conversations) in the room's share settings if you want a one-way, no-chat experience.
***
## Annotations
Add notes, comments, or video messages directly on content inside a room — great for leaving feedback in context. This is especially useful for flagging key sections for your champion to share internally, or for leaving async feedback on a proposal without scheduling another call.
Click on any piece of content in the room.
This opens the annotation editor.
The annotation is saved and immediately visible to other room viewers.
Each annotation shows the date it was added, so it's easy to track when notes were left.
***
## Add contributors
Bring team members into a room to collaborate on content, track tasks, or manage the deal together. This is particularly useful during handoffs — your CS team can be added before a deal closes, so they have full context from day one.
### Add contributors to a room you own
Navigate to the room you want to add people to.
This opens the contributors list.
Search by name or email to find and add team members.
Learn more about [Room elements](/rooms/room-elements/overview).
### Add contributors to an action
Navigate to the room with the action.
This opens the assignee search.
They'll be notified and added as contributors automatically.
Learn more about [Action assignments](/rooms/room-elements/actions#action-assignments).
When team members are assigned to actions, they're automatically added as contributors to the room.
***
## How to use the room with customers
Don't wait until everything is perfect. Share the room as soon as it has value — you can always add more content later.
When you share, point customers to the most relevant section. Use the share message to set context and expectations.
Add actions with clear owners and due dates. This creates accountability and keeps the deal moving forward.
Use analytics to see who's viewing the room, what they're engaging with, and where they might be stuck. Follow up based on real data, not guesswork.
# How contacts are added to rooms
Source: https://docs.flowla.com/rooms/contact-sources
Contacts can appear in a room through several routes — manual, CRM sync, Autopilot, and more.
When you open a room's sidebar you may see contacts that were added automatically — not just ones you personally invited. This page explains every way a contact can end up in a room.
***
## CRM sync
If you have HubSpot, Salesforce, or Attio connected and contact sync enabled, Flowla automatically pulls the contacts associated with a deal or opportunity into the corresponding room. No manual invite needed — the right stakeholders appear as soon as the sync runs.
* **HubSpot** — deal contacts are synced when contact sync is enabled in your [HubSpot integration settings](/integrations/HubSpot).
* **Salesforce** — opportunity contacts are synced via the [Salesforce integration](/integrations/SalesForce).
* **Attio** — deal contacts are pulled in via the [Attio integration](/integrations/Attio).
CRM-synced contacts show a **Not Invited** status until you explicitly send them an invitation.
***
## Autopilot workflows
[Autopilot](/automations/automations-overview) can add contacts to a room as part of an automated workflow. Common scenarios:
* An **Add contact to room** action is triggered when a deal reaches a certain stage.
* A **Send room** action emails the room to a contact, adding them automatically.
***
## Action item assignment
When you assign an [action item](/mutual-action-plans/actions-overview) to an external contact, that person is automatically added to the room so they can see and complete the task.
***
## Manual addition
Team members can always add contacts directly:
1. Open the room sidebar.
2. Click **Add contact** and enter an email address.
3. Optionally send an invitation immediately.
***
## Invited vs. Not Invited
Being added to a room is separate from being invited. A contact with **Not Invited** status has been added (e.g. via CRM sync) but has not yet received an invitation email. Use the **Invite** button next to their name to send one.
| Status | Meaning |
| ----------- | ------------------------------------------- |
| Not Invited | Added to the room, no invitation sent yet |
| Invited | Invitation email sent, room not yet viewed |
| Pending | Contact requested access, awaiting approval |
| Viewed | Contact has opened the room |
# Personalising rooms
Source: https://docs.flowla.com/rooms/personalising-rooms
Customise rooms with company branding, variables, and visual styling to create personalised experiences.
Every room in Flowla can be automatically tailored to the company you're selling to - pulling in their logo, filling in their name across all your content, and keeping your dashboard organised by account.
***
## Target company
Each room is usually dedicated to one company. Setting a target company personalises the room automatically: it pulls in the company's branding, fills in company-related variables, and keeps your dashboard organised. Prospects notice when content speaks directly to them — a room that shows their logo and uses their company name feels intentional, not generic.
Learn more about [room variables](/rooms/room-variables) for dynamic personalisation.
### Select a target company when creating a room
During room creation, on the **Choose company** step:
**Option A: Create or select a company in Flowla**
Search by domain or name to quickly create and link a target company.
**Option B: Select a [HubSpot](/integrations/HubSpot) deal**
When you select the relevant deal:
* Flowla automatically pulls the deal's company information, including branding and logo
* Deal information syncs to your room
* Room engagement data syncs back to your CRM
### Change the target company on an existing room
Navigate to the room you want to update.
This opens the company settings panel.
Search for or create a new target company.
### Edit company details inside a room
Navigate to the room with the company details you want to update.
This opens the company settings panel.
Update the company name, logo, or other details.
Changes apply immediately to the room.
### Manage companies centrally
Go to **More → Accounts** to manage all your companies in one place:
* Update company information across all associated rooms
* Merge duplicate companies
* Add or update company logos
Merging duplicate companies updates all associated rooms at once — a quick cleanup here keeps your dashboard tidy and your CRM data accurate.
### Target company and CRMs
Target companies are automatically pulled from the deal's associated company in HubSpot, Salesforce, and Attio.
When a room is linked to a CRM deal:
* The target company syncs from the deal's company record
* Company logo and details are pulled in automatically
* Changes in the CRM update the room's target company
***
## Room style
Everything about how a room looks — backgrounds, navigation colours, fonts, blocks, groups, and typography — is now controlled by **[Themes](/rooms/themes)**. A well-styled room reinforces your brand and helps your prospect feel like they're in a professional, curated space, not just another shared Google Doc.
Open the theme panel from the palette icon in the room editor header to apply a theme, or customise one for a single room.
Apply your brand, mirror your buyer's, or fine-tune every colour and font in the room.
# Room building best practices
Source: https://docs.flowla.com/rooms/room-building-best-practices
Learn how to build rooms that guide customers, drive action, and scale with your team.
A great room does three things: it aligns with a clear customer journey, delivers just enough content, and drives action on both sides. The best rooms feel like a guided journey — they lead your prospect from first impression to signed contract without them ever having to ask "what's next?" Here's how to build one.
***
## Best practices video series
***
## How to create a great room
### 1. Design for the full journey, not a single moment
Rooms rarely cover just one interaction. They often stretch across multiple phases:
* **Sales** — post-demo → internal buy-in → legal
* **Onboarding** — kickoff → documentation → activation
* **Ongoing collaboration** — updates, quarterly reviews, and more
Before you start building, ask yourself: *"What phases does this room need to support?"*
For example, a sales room might open with a welcome message and key materials (a deck, demo recording, proposal), but also include locked sections like "Kickoff" or "Onboarding" — placeholders ready for the CS team when the deal closes.
### 2. Structure with clear, purposeful sections
Use sections to break the room into logical steps. Each section should have one clear theme.
For example:
* **Welcome** → intro message, testimonial, your contact details
* **Solution Overview** → product deck, value summary, demo video
* **Decision Support** → proposal, pricing, business case
* **Kickoff** (locked until post-sale) → onboarding form, training materials
This structure makes it easy for customers to navigate — and for champions who need to forward the room to colleagues.
### 3. Avoid overcrowding
Be selective with what you include. Nobody enjoys scrolling through 20 sections or a 50-slide deck to find the key point.
Prioritise quality over quantity. Highlight what matters, and link out to larger files or supporting resources if needed. The goal is to reduce friction and make the room easy to skim — especially in early stages.
### 4. Use variables to personalise at scale
Variables let you personalise rooms automatically, every time you reuse a template. Add variables like `{{first_name}}`, `{{company_name}}`, or `{{your_name}}` directly into text blocks or section titles. When someone creates a room from that template, Flowla fills them in automatically.
Use variables in your welcome message to make every room feel tailor-made from the start.
### 5. Always save it as a template
Once you've built a room that works, save it as a template. This lets you:
* Reuse the same structure for future deals
* Ensure consistency across your team
* Iterate and improve over time
Learn more about [templates](/rooms/room-templates).
# Room elements overview
Source: https://docs.flowla.com/rooms/room-elements/overview
Understand the building blocks of Flowla rooms: sections and pages.
## TL;DR
Every Flowla room is built from two core elements: **Sections** and **Pages**. Together, they create a clear, guided experience for your customer. Think of a room like a website you build for each customer — sections are the chapters, and pages are where everything happens.
***
## Sections
Sections are the structural backbone of a room. They group related pages into logical steps or themes.
**Use sections to:**
* Organise the room into clear phases (e.g. Overview, Review, Next Steps)
* Guide customers through a process in the right order
* Keep the room easy to scan and understand
Each section can contain multiple pages.
Learn how to configure visibility, locking, and automation rules in [Sections](/rooms/room-elements/sections).
***
## Pages
Pages are where everything lives inside a section. When you click **Add Block** on a page, you choose what to put there — either content to inform your customer, or an action to drive them forward.
**Content blocks** provide information and context:
* Files and documents (PDFs, slides, proposals)
* Videos and embedded links
* Text blocks with explanations or instructions
* Calendars for scheduling meetings
* Forms for collecting information
**Action blocks** drive progress and engagement:
* Scheduling a meeting
* Filling out a form
* Completing a task or confirming a step
* Signing a document
* Downloading a file
Content answers questions and explains value — customers consume it passively. Actions tell the customer what to do next and help move the process forward — they're interactive and outcome-focused. Both live on the same page, so you can pair context with a clear next step in one place.
Learn how to add content and actions to pages in [Pages](/rooms/room-elements/pages).
***
## How they work together
| Element | Purpose |
| ------------ | ---------------------------------------------- |
| **Sections** | Define structure and organise the journey |
| **Pages** | Deliver content and prompt action in one place |
By combining sections and pages, rooms replace scattered emails and links with a single, clear, actionable space for your customer.
Start with 2–3 core sections per room to keep customers focused — you can always add more complexity as your process matures.
***
## Troubleshooting
**Likely cause:** No separate responsive layout editor is currently available.
**Fix:** Flowla rooms are responsive by default but don't currently support element-level breakpoints. Vote for this in the feature request board or contact support.
# Pages
Source: https://docs.flowla.com/rooms/room-elements/pages
Add files, videos, text, calendars, and interactive elements to your rooms.
## TL;DR
Pages are where you add content and actions to your room. Use them to share materials, media, and resources that inform your customer, alongside actions that drive them toward clear next steps — all in one place.
***
## How to add content
Navigate to the section where you want to add content.
This opens the content type selector.
Select from the available options:
| Block | Description |
| --------------------------------------------------------- | ----------------------------------------------------------- |
| **Text** | Rich text editor for notes, instructions, or descriptions |
| **PDF** | Upload a PDF file from your computer |
| **Link** | Paste a URL to embed external content |
| **Video** | Embed a video from YouTube, Loom, or other platforms |
| **Image** | Upload an image file |
| [**AI**](/rooms/ai-blocks) | AI-generated content block |
| **Meeting** | Add a call recording or meeting note |
| **Recording** | Record a video directly in Flowla |
| **Embed** | Embed any external tool or page via URL |
| **FAQ** | Display Q\&As in an expandable accordion layout |
| [**Action plans**](/mutual-action-plans/actions-overview) | Add a mutual action plan to track next steps |
| **Document** | Embed a document from Google Drive or similar |
| [**Form**](/forms/forms-overview) | Add an interactive form to collect information from viewers |
You can also click **Select from library** to reuse existing assets, or **See all blocks** to browse integrations.
Add a title, description, and optional thumbnail to make it clear and recognisable.
Drag and drop to reorder content within the section.
***
## Reuse content from your Library
The Content Library lets you manage reusable assets across all your rooms.
**Why use the library:**
* **Central updates** — Change a file once and it updates everywhere it's used
* **Fast reuse** — Pull frequently used materials into new rooms quickly
* **Performance data** — See how often content is viewed across rooms
* **Consistency** — Make sure everyone is using the latest approved materials
**To add content from the library:**
1. Click **Add content** in your room
2. Select **Add page from library**
3. Browse or search for the asset
4. Add it to your section
Learn more about managing your [Asset Library](/library/asset-library-overview).
***
## Moving a page to a different section
To move a page from one section to another, use the drag handle on the left side of the page in the sidebar.
The drag handle (⠿) appears to the left of the page title.
Keep holding — don't click the page title itself, just the handle.
Move it up or down in the sidebar until it's positioned under the section you want.
The page is now part of the new section.
You cannot add pages to the Welcome section — it acts as a cover page for the room and does not support additional content pages.
***
## Best practices
1. **Keep it structured** — Break content into clear, logical sections
2. **Guide action** — Pair materials with clear instructions on what to do next
3. **Use embedded scheduling** — Reduce back-and-forth with inline calendars
4. **Monitor engagement** — Check analytics to see what resonates with viewers
5. **Keep it current** — Use the library so content stays up to date automatically
***
## Actions
Actions are the shared to-do list inside a page, visible to both your team and your customer. Unlike content (which informs), actions require completion — they're how you move the process forward together.
**Actions help you:**
* Guide users through a process step by step
* Collect input or confirmations from the customer
* Track progress and completion rates
* Trigger automated workflows
* Create accountability with clear owners and due dates
### How to add an action
Open your room and go to the right section and page.
Click **Add block** on the page.
Choose **Add Action Plan** from the block options.
Click on the action and fill in the title, description, action type, assignee, and due date.
### Types of actions
| Action type | What it does |
| ----------------------------- | ------------------------------------------------- |
| **Go to URL** | Direct the prospect to an external link |
| **Watch video** | Ask them to watch a specific video |
| **View document** | Have them review a document in the room |
| **Download a file** | Prompt them to download a file |
| **Fill a form** | Collect information via a form |
| **Book a meeting** | Let them schedule time directly |
| **Sign a document** | Request a signature on a contract or agreement |
| **Invite contacts** | Ask them to add other stakeholders to the room |
| **Sub-actions** | Break a larger action into smaller steps |
| **Collaborate with contacts** | Assign a shared task to multiple people |
| **Custom** | Create a freeform task with your own instructions |
You can also mark any action as **internal** — hidden from your customer but visible to your team, for behind-the-scenes coordination without cluttering the prospect's view.
For full details on action types, assignments, due dates, and automation, see the [Actions overview](/mutual-action-plans/actions-overview).
***
## Troubleshooting
### Videos & media
**Likely cause:** File exceeds the 100MB size limit, or the format is unsupported.
**Fix:** Compress the video below 100MB and ensure it's in MP4 or MOV format. Alternatively, host it externally (YouTube, Loom, Vimeo) and embed the link instead.
**Likely cause:** Some hosting platforms (e.g. HubSpot-stored MP4s) don't generate embeddable previews.
**Fix:** Use a dedicated video hosting platform like Loom, Vimeo, or YouTube — these generate reliable previews and embed thumbnails automatically.
**Likely cause:** Not all video platforms are natively supported as embed types.
**Fix:** Use the **Link** asset type and paste the video URL. For Gong specifically, only full recordings can be embedded — snippets are not yet supported.
### File uploads & documents
**Likely cause:** File format or size issue, or the upload area wasn't correctly targeted.
**Fix:** Ensure the image is JPG, PNG, or GIF and under the size limit. Click directly on the image upload zone and try again.
**Likely cause:** The file may have been removed, or downloads are disabled for that step.
**Fix:** Check the step settings to confirm the file is still attached and that the **Allow download** option is enabled.
**Likely cause:** Uploaded PDFs are downloadable by default.
**Fix:** Toggle off the download option within the content step settings for that file.
**Likely cause:** Standard image blocks don't have a URL field.
**Fix:** Use a **Button** or **Link** asset instead of a plain image. Alternatively, add the image inside a custom asset and wrap it with a link.
### Embedding & custom assets
**Likely cause:** A browser extension (like an ad blocker) may be interfering, or the site being embedded blocks iframes.
**Fix:** Disable browser extensions and try again. If the issue persists, the external site may block embedding (e.g. Airtable, Google Drive). Use a direct link instead.
**Likely cause:** Sites like Airtable, some Google products, and certain SaaS tools restrict iframe embedding via their own security policies.
**Fix:** These cannot be embedded. Use a direct link button instead, which opens the content in a new tab.
**Likely cause:** Flowla's editor uses a link-based embed model, not raw HTML injection.
**Fix:** Use the **Custom Asset** type and paste your embed URL. For raw HTML embeds, contact support — this may be available as an advanced option on certain plans.
**Likely cause:** The default iframe height may not match your content.
**Fix:** In the custom asset settings, find the height adjustment option and set it to match your content dimensions.
**Likely cause:** These aren't listed as native integrations.
**Fix:** Publish your Google Slides as a web page and paste the embed link. For PowerPoint, upload to Google Slides first then embed — or upload the file directly as a document.
### E-signatures
**Likely cause:** You've hit the signature limit on your current plan.
**Fix:** Upgrade your plan or contact support to increase your signature allowance. Check **Settings > Billing** to see your current limits.
Yes — when you add someone as a signer and send the document, they receive an email with a link to sign. If they didn't receive it, ask them to check their spam folder or contact support.
Yes — you receive an email notification when the other party signs. If you're not receiving these, check your notification settings and spam folder.
**Likely cause:** The email may have landed in spam, or the email address was entered incorrectly.
**Fix:** Verify the prospect's email address in the room. Ask them to check spam. You can also re-send the signature request from the room.
**Likely cause:** Plan confusion or a trial limitation.
**Fix:** E-signatures are included on Pro and above. If you're on Starter in trial mode, some features may appear listed but are only unlocked on upgrade.
# Sections
Source: https://docs.flowla.com/rooms/room-elements/sections
Organise your rooms into logical phases using sections with visibility controls and automation.
## TL;DR
Sections are the stages of your room. They group content and actions into logical phases that guide your prospect through their journey — in the right order, at the right time. By controlling what buyers see and when, you can guide them through a complex process without overwhelming them all at once.
***
## Section visibility
Control how and when sections appear to room visitors. Every section can be set to one of four states.
### Visible
The default state. The section and all its content are visible to anyone viewing the room.
### Locked
The section title is visible, but the content and actions inside are hidden. Visitors can see that a phase exists — they just can't access it yet. This is a powerful way to show buyers there's a structured plan in place, which builds confidence even before they've reached those stages.
**Use locked sections to:**
* Show buyers there's a plan without overwhelming them upfront
* Keep later phases ready but hidden during early stages
* Build anticipation for what's coming next
**To lock a section:**
This opens the visibility options.
Visitors will see the section title but not its content.
Set it to auto-unlock when a previous section is completed.
### Hidden
The section is completely invisible to visitors. They won't know it exists until you make it visible.
**Use hidden sections for:**
* Content that isn't ready yet
* Phases that only apply to certain prospects
* Internal preparation sections
**To hide a section:**
This opens the visibility options.
Visitors won't see the section at all.
Set it to appear automatically based on progress or an external event.
### Restricted visibility
The section is only visible to specific users — useful for sensitive content that shouldn't be seen by all stakeholders.
**To restrict a section:**
This opens the visibility options.
This opens the access control field.
Everyone else won't see the section.
***
## Auto-unlock when the previous section is completed
Set a section to appear automatically once the buyer finishes the section before it.
**To enable:**
This opens the visibility options.
The section will unlock automatically when your prospect completes the previous section.
***
## Automate sections with workflows
Use workflows to control section visibility based on external events — not just in-room progress.
**Examples:**
* Deal moves from "Proposal" → "Closed Won" → Unlock "Onboarding" section
* CRM property updates to "Contract Signed" → Unlock "Implementation" section
* A form is submitted → Reveal personalised next steps
**Common CRM triggers:**
* **Deal stage changes** — Unlock the "Proposal" section when a deal moves to proposal stage
* **Property updates** — Show the "Legal" section when contract status changes
* **Form submissions** — Reveal next steps when a qualification form is completed
Learn more about workflow [triggers](/automations/triggers) and [actions](/automations/actions).
***
## Best practices for sections
1. **Keep each section focused** — One clear purpose per section (e.g. "Introduction", "Scheduling", "Contract")
2. **Lead with context** — Start each section with brief instructions so prospects know what to expect
3. **Use progressive unlocks** — Reveal sections as prospects move through the journey
4. **Leverage engagement data** — Track which sections get attention to improve sequencing
5. **Name sections clearly** — Use action-oriented names that guide the prospect
***
## Troubleshooting
**Likely cause:** A UI bug, or steps are locked due to a room setting.
**Fix:** Try refreshing the page. If steps are still stuck, contact support — this may be a platform bug.
# Room management & settings
Source: https://docs.flowla.com/rooms/room-management-&-settings
Configure room ownership, notifications, access controls, and behaviour settings.
Room settings give you control over who owns a room, how your team stays informed, and when reminders go out — so nothing falls through the cracks.
***
## Room owner
Every room has an owner — the person responsible for the room and the first to receive activity notifications. In larger teams, clear ownership means that when a prospect reaches out, there's never any ambiguity about who's responsible.
By default, the person who creates the room is the owner. Rooms created automatically via [workflows](/automations/automations-overview) set the owner based on the workflow configuration (for example, the opportunity owner in Salesforce).
### To change the room owner:
The menu is in the top right corner of the room.
This opens the owner selection panel.
Changes save automatically.
***
## Reminder settings
Set up automated reminders so assignees don't miss their deadlines.
### Available reminder type:
* **Overdue task reminders** — Notifies assignees when a task passes its due date
### To configure reminders:
The menu is in the top right corner of the room.
Toggle specific reminder types on or off.
Overdue task reminders notify only the action's assignee. If you need the wider team alerted, set up a Slack workflow triggered by an overdue action instead.
***
## Room notification settings
Control which events trigger notifications and where those notifications are delivered. Timely notifications mean you can respond to buying signals in the moment — not hours later when the prospect has already moved on. See the full [Notifications guide](/platform/profile-notifications) for channel options and org-wide settings.
### Events that can trigger notifications:
* Room viewed
* New stakeholder identified
* Comment added
* Task completed
* Form submitted
* Action overdue
### Where notifications can be delivered:
* In-app notifications
* Email
* Slack (if connected)
* CRM activity logging (HubSpot / Salesforce)
### To configure notifications for a specific room:
The menu is in the top right corner of the room.
Toggle specific notification types on or off for this room.
### To configure notifications for all rooms you own:
Go to your account settings.
Toggle specific notification types on or off — this applies to all rooms you own.
To manage notification channels (email, Slack, CRM) and see all available notification types, visit the [Notifications settings](/platform/profile-notifications) page.
# What is a room
Source: https://docs.flowla.com/rooms/room-overview
Learn about rooms; branded hubs where your customer-facing processes come to life.
## TL;DR
A **Room** is a shareable link you send to your customers. It holds your content, tasks, and next steps all in one branded place — and gives you real-time visibility into how they're engaging with it.
***
***
### Learning Objective
By the end of this article, you'll know what a Room is, what it's used for, and how it follows your relationship with a prospect — from the first demo call all the way through to onboarding.
***
### Why This Matters
Without a Room, your customer's journey is scattered — files in emails, links in chat, tasks lost in follow-up threads. Important things get missed, and you have no way to know what your customer has actually seen.
A Room fixes that. Everything lives in one easy to navigate place, your customer always knows what are the next steps, and you stay in the loop automatically.
***
### Prerequisites
No setup needed to read this overview. To create your first Room, you'll need an active Flowla account.
***
### What goes inside a Room
A Room is built from a variety of building blocks — mix and match them to fit your process:
* **Sections** — Group your room into stages (for example: "Discovery", "Proposal", "Implementation") so customers always know where they are.
* **Pages** — These sit inside each section. This is where your content lives. Add different content [blocks](/rooms/room-elements/pages): files, videos, links, embedded calendars, [forms](/forms/forms-overview), [actions](/rooms/room-elements/actions) and much more.
Alongside the customer-facing room, the **Overview** tab is your internal read on the deal. Under **REX's analysis** you'll find [insight cards](/rex/insight-cards), a [signals feed](/rex/signals) with recommended next steps, the [Deal Score](/rex/deal-score) gauge, and [MEDDPICC](/rex/meddpicc) scores, all generated automatically from your calls, CRM, and how the customer is engaging with the room. See [What is REX](/rex/overview).
***
### One Room, multiple use cases
The same Room can evolve throughout your entire customer relationship, simplifying the buying journey and giving prospects all the information they need in one structured place:
1. **Deal Room** — Share proposals, case studies, and pricing during the sales cycle
2. **Onboarding Hub** — Switch it to implementation guides and training materials after the deal is closed
3. **Customer Portal** — Keep it going as an ongoing resource for renewals and expansion
Want to hide your onboarding content until after a deal is closed? You can **lock sections** and set them to unlock automatically at the right moment. [Learn how →](/rooms/room-elements/sections)
***
### How Rooms with with automations
Rooms get even more powerful when you connect them to workflows (automated sequences of actions that run in the background). Here's what you can do:
* **Auto-create Rooms** when a deal reaches a certain stage in your CRM (your customer relationship tool, like Salesforce or HubSpot)
* **Unlock sections** automatically when a customer completes a form or finishes a task
* **Get notified** when customers view key content
* **Sync your CRM** with engagement data in real-time
See [Automations](/automations/automations-overview) to learn how to set up triggers and actions.
***
You now know what a Room is and what it can do — you're ready to build your first one.
# Sharing and share settings
Source: https://docs.flowla.com/rooms/room-sharing
Control how visitors access and interact with your rooms.
Rooms are designed to be shared — here's how to get them in front of the right people and configure exactly how they'll experience them. The right access settings protect your content while making it as frictionless as possible for the right people to get in.
***
## Invite prospects
Share rooms with external stakeholders like prospects and customers.
Click **Share** → **Copy link, thumbnail or QR code** and send it via email, Slack, or any channel. Anyone with the link can access the room based on your access settings.
Click **Share** → **Invite by email**, enter recipient email addresses, and customise the invitation message. Flowla sends branded email invitations on your behalf.
Use [workflows](/automations/automations-overview) to automatically send room invitations when deals reach specific stages. Include personalised messaging using variables.
Learn more about [Share settings](#share-settings) to control exactly how recipients access the room.
***
## Share settings
To open the **Share settings** menu, click **Share** in the top right corner of the room, then select **Share settings**.
### Require viewer's email
This is the toggle you'll use most often. Knowing who's in your room is one of the most valuable signals in sales — it tells you which stakeholders are actively engaged so you can prioritise your follow-ups.
**Enabled:** Visitors must enter their email address before viewing the room for the first time. This lets you:
* Identify who viewed your room
* Track individual stakeholder engagement
* Spot potential stakeholders via [Room Analytics](/reports-analytics/room-analytics)
**Disabled:** Anyone with the link can view the room anonymously. Use this for public content or when identification isn't needed.
#### Require email verification
Available when **Require viewer's email** is enabled.
When turned on, Flowla sends a one-time verification code to the visitor's email. They must enter the code before gaining access — confirming the email they submitted is valid.
Turn on email verification for rooms containing NDAs or pricing — it creates a verified audit trail of exactly who accessed the content and when.
#### Blocked domains
Available when **Require viewer's email** is enabled.
Block specific email domains from accessing the room. For example, adding `gmail.com` prevents anyone with a Gmail address from viewing the room — useful for keeping out competitors or anyone you don't want accessing your content.
### Restrict access to specific viewers
Use this when you need tight control — for example, with sensitive proposals, pricing documents, or NDAs where the wrong person seeing the content could be a problem.
**Enabled:** Only viewers you've explicitly invited by email can access the room. Anyone else who tries to open the link will be denied, even if they have the URL.
**Disabled:** Anyone with the link can access the room (subject to your other access settings).
### Require password
When turned on, visitors are prompted to enter a password before accessing the room. Set the password directly in the field that appears below the toggle.
### Disable conversations & contacts
**Enabled:** Viewers can leave comments in the social bar and see other people who have accessed the room. Comments and previous viewers are visible to everyone.
**Disabled:** The social bar is hidden. Viewers can't write comments or see who else has accessed the room.
Disable this toggle when sharing a room with multiple target companies to keep each party's experience separate.
### Disable downloads
When turned on, room viewers can't download file-based content such as PDFs or videos.
### Disable direct links
When turned on, the **Open Link** button for embedded links is hidden. Viewers can't leave Flowla and view the embedded content on an external platform (e.g. YouTube).
### Disable searches in room
When turned on, the search button inside the room is hidden — viewers can't search through steps, sections, or editor text.
***
## Troubleshooting
**Likely cause:** A room access setting may have been updated, or the link type changed.
**Fix:** Check the room's share settings. Make sure **Public access** is enabled if you want anyone with the link to view without logging in.
**Likely cause:** Could be a browser-side rendering error or a permissions issue.
**Fix:** Ask the prospect to try in a different browser or incognito mode. If the issue persists, share the room URL and error message with Flowla support.
**Likely cause:** Session token issue or account-level access problem.
**Fix:** Log out and log back in. Clear your browser cache. If the issue continues, contact support — it may be a platform-level incident.
# Statuses & labels
Source: https://docs.flowla.com/rooms/room-statuses-&-labels
Organise and categorise your rooms with custom labels and deal statuses.
Use **Labels** to categorise rooms by product, region, or team — and **Statuses** to track where each deal or customer is in your process. Together they give your whole team a shared language for where things stand, so anyone can pick up a room and immediately understand the context. Configure both in **Settings → Labels & Statuses**.
***
## Labels
Labels are tags you apply to rooms for organisation and filtering. They can represent anything meaningful to your team.
**Common uses:**
* **Product line** — "Enterprise", "SMB", "Starter"
* **Region** — "EMEA", "North America", "APAC"
* **Team** — "Sales", "Customer Success", "Onboarding"
* **Use case** — "New Business", "Renewal", "Expansion"
### Create a label
Open your account settings and navigate to **Labels & Statuses**.
This opens the label creation form.
* **Name** — The label text (e.g. "Enterprise")
* **Color** — Choose a colour for visual distinction
The label is now available to apply to rooms.
***
## Statuses
Statuses represent where a room sits in your sales or customer process. Unlike labels, each room has exactly one status at a time. Statuses also power your [analytics](/reports-analytics/room-analytics) — you can see at a glance how many rooms are at each stage and spot where deals are getting stuck.
**Example sales statuses:**
* Discovery
* Proposal Sent
* Negotiation
* Closed Won
* Closed Lost
**Example CS statuses:**
* Onboarding
* Active
* At Risk
* Churned
### Create a status
Open your account settings and navigate to **Labels & Statuses**.
This opens the status creation form.
* **Name** — The status text (e.g. "Proposal Sent")
* **Color** — Choose a colour for visual distinction
* **Order** — Set the position in your workflow sequence
The status is now available to apply to rooms.
***
## Apply labels to rooms
Labels can be applied when creating or editing a room:
1. Open the room or room settings
2. Find the **Labels** field
3. Select one or more labels
4. Save your changes
***
## Set room status
**From inside the room:**
Navigate to the room you want to update.
This opens the status selector.
The change saves automatically.
**From the rooms dashboard:**
Find the room you want to update.
This opens the status selector inline.
The change saves automatically.
***
## Filter by labels and status
On the rooms dashboard, use labels and statuses to narrow down your room list.
**Filter by label:**
1. Click **Filter**
2. Select **Labels**
3. Choose one or more labels
**Filter by status:**
1. Click **Filter**
2. Select **Status**
3. Choose one or more statuses
Combine filters to narrow results further — for example, "Enterprise" label + "Negotiation" status.
***
## Best practices
* **Keep it simple** — Start with 5–7 statuses maximum
* **Use clear names** — Anyone on the team should immediately understand the meaning
* **Consistent colours** — Use green for positive outcomes, red for negative
* **Review regularly** — Remove unused labels and statuses to keep things clean
* **Match your CRM** — Align statuses with your CRM stages for easier syncing
Aligning room statuses with your CRM pipeline stages makes two-way syncing seamless and gives your whole team a consistent language for where every deal stands.
# Templates
Source: https://docs.flowla.com/rooms/room-templates
Save rooms as reusable templates to standardise your playbook and scale personalised experiences.
Once you've built a room you're happy with, save it as a template — so every new room you create starts from the same winning setup.
***
## Why use templates
Without templates, every rep builds rooms differently — which means inconsistent experiences for your customers and wasted time rebuilding from scratch. Templates fix both.
Templates are the foundation of a scalable sales and onboarding motion:
* **Consistency** — Every rep uses the same proven structure and content
* **Speed** — Create new rooms in seconds instead of starting from scratch
* **Best practices** — Capture what works and make it easy to replicate
* **Easy updates** — Change the template once, and future rooms inherit improvements
* **Team alignment** — Sales, CS, and RevOps all work from the same playbook
***
## Save a room as a template
Create a room with all the sections, content, actions, and styling you want to standardise.
This opens the room options dropdown.
Choose this option from the dropdown menu.
Give it a clear, descriptive name — for example, "Enterprise Deal Room", "SMB Onboarding", or "Renewal Template".
Once saved, your template appears in the template gallery. Select it when creating a new room to start with that structure. Any [variables](/rooms/room-variables) in the template will populate automatically based on the new room's company and creator.
***
## Create a room from a template
In the main navigation, click **Templates** to open the template gallery.
Find the template you want to use and click **Use template**.
Enter or select the company the room is for. This populates company variables like `{{target_company_name}}` and pulls in the company logo and branding.
If the template includes custom variables (such as a pricing tier, go-live date, or project name), you'll be prompted to fill them in here.
Click **Create room**. Your room is ready — follow the edit link to review and personalise before sharing.
If you're connected to HubSpot, Salesforce, or Attio, you can also create rooms directly from a deal or opportunity record — the CRM data fills in automatically. Learn more about [HubSpot](/integrations/HubSpot), [Salesforce](/integrations/SalesForce), and [Attio](/integrations/Attio) integrations.
***
## Manage templates
**View all templates:**
Go to **Templates** in the main navigation to see all available templates.
**Edit a template:**
Open the template and make changes. Save to update it for future rooms — existing rooms already created from the template are not affected. This means you can improve your playbook over time without breaking anything already live with a customer.
Editing a template never touches rooms already created from it — you can safely refine your playbook at any time without disrupting live customer rooms.
**Delete a template:**
Remove templates that are no longer needed. This won't affect rooms already created from that template.
**Duplicate a template:**
Create a copy to make variations — for example, "Enterprise Deal Room - EMEA" based on "Enterprise Deal Room".
***
## Template best practices
1. **Use variables** — Include `{{target_company_name}}`, `{{primary_contact_first_name}}`, and `{{room_creator_meeting_link}}` for automatic personalisation
2. **Structure with sections** — Organise templates into clear stages that match your process
3. **Include placeholder content** — Add sample content that guides users on what to customise
4. **Keep it focused** — Don't try to cover every scenario; create multiple templates for different use cases
5. **Review regularly** — Update templates based on what's working in your actual rooms
6. **Set the [theme](/rooms/themes)** — Rooms created from a template inherit the template's theme, so styling a template once keeps every room built from it on-brand
***
## Troubleshooting
No — rooms and templates are independent after creation. Changes to a room don't affect the template or other rooms. To update all future rooms, edit the template directly. Existing rooms are unaffected.
**Likely cause:** The duplicate option only shows "duplicate to another room."
**Fix:** Currently you can duplicate sections to other rooms but not directly into a template. Workaround: duplicate to a blank room, then save that room as a new template.
**Likely cause:** Only pre-defined variables (e.g. prospect name, company) are available by default.
**Fix:** Custom variables may not be supported depending on your plan. Contact support to confirm available variable options.
Go to **Library > Templates**, find your template, and click **Edit**. Changes there will apply to all new rooms created from that template.
Yes — when editing a template, use the **Add from Library** option when adding a content block. This pulls in any saved asset from your library.
**Likely cause:** Templates use static links by default.
**Fix:** This isn't natively supported yet. As a workaround, each rep should create their own room from the shared template and update their booking link manually — or use a dynamic scheduling tool (e.g. Calendly with round-robin).
# Variables in rooms & templates
Source: https://docs.flowla.com/rooms/room-variables
Use dynamic variables to automatically personalise rooms with company, contact, and creator information.
Variables are placeholders that fill in automatically — so you can build one template and have every room feel personally written. The result is that a template built for one prospect feels just as personal when sent to the next one, without any manual editing.
***
## What are variables?
A variable is a piece of text like `{{target_company_name}}` that Flowla replaces with real information when a room is created or viewed.
For example:
* `{{room_creator_first_name}}` becomes the first name of the person who created the room
* `{{target_company_name}}` becomes the prospect's company name
Instead of manually editing names, titles, and links every time, you insert variables once and Flowla fills them in based on the room creator, the target company, or your CRM.
***
## Where variables pull data from
1. **Your Flowla profile** — name, job title, phone number, calendar link, and more. Go to **Settings → Profile** to fill out your information.
2. **CRM integrations** — when connected, Flowla pulls company, contact, and deal data from HubSpot, Salesforce, or Attio.
3. **Manual inputs during room creation** — you can fill in variables at the point of creating a room.
***
## Types of variables
### Pre-built variables
Flowla includes a set of pre-built variables covering the room creator, the target company, and room context.
**How to add a variable:**
1. Hit `/` in any text block, or click the variable icon in the toolbar
2. Select **Variables** from the menu
3. Choose the one you need — variables are grouped by category. Mapped CRM fields (from HubSpot, Salesforce, or Attio) appear under their own category (e.g. **HubSpot variables**)
To map a HubSpot deal, contact, or company property as a variable, go to **Integrations → CRM settings → HubSpot → Settings → Sync from HubSpot**. See [Mapping HubSpot properties to variables](/integrations/HubSpot#mapping-hubspot-properties-to-variables) for the full steps.
**Target company & contact variables**
Automatically populated when you assign a company or when Flowla identifies the primary contact.
* `{{primary_contact_first_name}}`
* `{{primary_contact_full_name}}`
* `{{target_company_name}}`
* `{{target_company_logo}}`
If your **CRM integration** is active, these values are pulled from the associated deal or company record.
If you're **not integrated**, the `{{primary_contact}}` variable can be:
* **Assigned manually** inside the room, or
* **Set automatically** as the first person you share the room with
**Room context variables**
These relate to the person who created the room and the room itself. They're essential for reusable templates across your team.
* `{{room_link}}`
* `{{room_creator_meeting_link}}`
* `{{room_creator_linkedin_url}}`
* `{{room_creator_avatar}}`
* `{{room_creator_phone_number}}`
* `{{room_thumbnail}}`
**Organisation variables**
Auto-filled based on the Flowla profile of the person creating the room.
* `{{room_creator_title}}`
* `{{organization_name}}`
* `{{org_logo}}`
These are especially powerful for shared templates — each creator's details populate automatically without any manual editing.
***
### Custom variables
You can create your own variables for anything not covered by the pre-built set. These are ideal when you have deal-specific details — like a pricing tier, a project name, or a go-live date — that you want to reference consistently throughout the room.
In the variable menu, select **Create a custom variable** and give it a name.
Custom variables appear in the **final step of the room creation wizard**, prompting whoever creates the room to fill them in.
***
### Autopilot variables
Autopilot variables are a special type that get **automatically populated by Flowla's AI** — based on your room's context, CRM data, and activity. No manual input required.
Autopilot variables are especially powerful in onboarding templates — they keep rooms up to date automatically as the customer progresses through each phase.
***
## How variables appear when editing
* **Blue** — the variable has been filled in
* **Orange** — the variable is empty or missing. Fill it in before sharing.
* **Gradient blue** — an Autopilot or custom variable
In preview mode (presentation view), variables display as regular text with no highlight.
# Using the rooms dashboard
Source: https://docs.flowla.com/rooms/rooms-dashboard
Navigate, filter, sort, and manage all your rooms from the central dashboard.
The rooms dashboard is your central view for managing every room across your organisation — find rooms fast, track engagement, and act on what you see. As your team scales and rooms multiply, the dashboard becomes your way to stay on top of what's active, what's stalled, and where to focus your energy.
***
## Filter rooms
Narrow down your room list to find exactly what you're looking for.
**Available filters:**
| Filter | Description |
| ------------- | ------------------------------------------------------ |
| **Owner** | Show rooms owned by specific team members |
| **Joined by** | Show rooms joined or owned by team members |
| **Status** | Filter by room status (Active, Won, Lost, Draft, etc.) |
| **Labels** | Filter by custom labels you've applied |
| **Company** | Filter by target company |
### To apply filters:
This opens the filter panel.
Choose one or more filters to apply.
For example, filter by a specific owner and status at the same time.
This removes all active filters and returns to the full room list.
Learn more about [organising rooms with labels and statuses](/rooms/room-statuses-&-labels).
***
## Sort rooms
Order your room list to surface what matters most.
| Sort by | Description |
| ------------------------ | -------------------------------- |
| **Engagements** | Most or least active rooms first |
| **Last engagement date** | Sort by most recent activity |
| **Created date** | Newest or oldest rooms first |
Click **Add filter** then on the right handside menu that appears, select your preferred order. Sorting by **Last engagement date** is particularly useful for identifying rooms that have gone quiet and may need a follow-up nudge.
For a scored read on deal health rather than raw activity, open a room's **Overview** tab to see its [Deal Score](/rex/deal-score) and [MEDDPICC](/rex/meddpicc) scores, or use [REX's signals](/rex/signals#viewing-signals-across-all-rooms) in the Intelligence section of the left-hand navigation to triage urgent signals across every room at once.
***
## Dashboard views
Switch between views to see your rooms the way you prefer.
### List view
The default view — rooms displayed in a table with key details at a glance:
* Room name and company
* Status and labels
* Last activity
* Engagement count
* Owner
### Card view
See all rooms as cards:
* Room name and company
* Status and labels
* Engagement count
* Owner
### Board view
Rooms organised as cards grouped by status — great for managers and RevOps teams who want a quick snapshot of how deals are distributed across pipeline stages:
* Drag and drop rooms between status columns
* Quickly see how your pipeline is distributed
Click the view icons in the top right of the dashboard to switch between List, Board, and Card views.
***
## Notifications
Stay informed about activity across all your rooms without opening each one individually. From the dashboard, you can configure notification preferences that apply across your entire room list.
***
## Export room data
Export your room data for reporting, analysis, or sharing with stakeholders.
**What's included in an export:**
* Room list with metadata (name, company, status, dates)
* Engagement data (views, downloads, completions)
* Stakeholder information
* Action / task completion status
**To export:**
Only rooms matching your active filters will be included.
The file downloads immediately.
**Common uses:**
* Create executive reports on pipeline activity
* Analyse engagement patterns in a spreadsheet
* Share room lists with team leads
* Import data into business intelligence tools
# Themes
Source: https://docs.flowla.com/rooms/themes
Control how every deal room looks: apply an organization theme, borrow your buyer's brand, or fine-tune colors, fonts, and spacing down to the individual heading.
Your deal rooms don't have to look like a template anymore. With Themes, every room can look and feel like it belongs to your brand — or, even better, like it was built specifically for the buyer you're sending it to. A room that looks polished and intentional builds trust faster, feels less generic, and shows the buyer you put real thought into their deal. That first impression matters, and now it's just a click away.
## How themes are organized
There are two kinds of themes, and knowing which one you're editing is the whole trick:
* **Organization themes** live in your workspace settings and can be applied to any room. Editing one changes every room that uses it.
* **Room themes** belong to a single room. They're created the moment you customize a theme *for this room*, and nothing you do to them affects anyone else.
Every organization starts with three themes already in place:
| Theme | What it does |
| ------------------ | ---------------------------------------------------------------------------------------- |
| **Flowla Theme** | The clean default look. Nothing to set up. |
| **Brand** | Generated from your own organization's brand colors, so rooms look unmistakably *you*. |
| **Target company** | A dynamic theme that changes its colors to match whichever company the room is aimed at. |
The **Brand** theme is built from the colors and font in your [organisation settings](/platform/org-settings), and **Target company** follows the [target company](/rooms/personalising-rooms#target-company) set on the room — so both stay correct without you touching them.
## Apply a theme to a room
In the room editor, click the theme (palette) icon in the header. The panel lists your organization's themes, with the currently selected one at the top.
Click any theme card. It applies to the room immediately — no save step, no confirmation.
From here you have two ways to change how things look, and they have very different reach:
* **Customize for this room** — creates a room theme. Changes stay in this room.
* **Customize theme** — opens the theme in workspace settings. Changes hit every room using that theme.
**Customize theme** edits an organization theme. If three rooms use it, all three change. When you only want to restyle the room in front of you, use **Customize for this room**.
## Customize a theme for one room
Click **Customize for this room** and Flowla asks you to name the copy. Accept the suggested name or type your own, then click **Continue**.
You now have a room theme — a private copy that only exists in this room. The customize panel opens with two buttons at the top:
* **Save changes** — keeps your edits on this room theme.
* **Save as new theme** — promotes the room theme into an organization theme so other rooms can use it.
Room theme edits aren't saved automatically. Click **Save changes** before you leave the customize view. If you try to navigate away with unsaved changes, Flowla warns you first — so your work is never lost by accident.
A room theme isn't a dead end — it travels with the room when you duplicate it, and it can be promoted into a template. See [how new rooms get their theme](#how-new-rooms-get-their-theme).
## The three values that drive everything
Themes expose a *lot* of variables. To keep that manageable, three top-level values sit at the top of the customize panel and generate everything below them:
| Value | What it controls |
| ----------- | ----------------------------------------------------------- |
| **Brand** | The accent color — buttons, links, highlights. |
| **Surface** | The base color everything sits on — canvas, blocks, groups. |
| **Font** | The typeface used across the room. |
Brand and Surface can each pull from three sources:
* **Use \[your organization] color** — your own brand color.
* **Use target company color** — the buyer's brand color, resolved per room.
* **Use custom color** — any color you pick.
Set those three, and every untouched value below — header and footer, navigation, background, block, group, typography — regenerates to match.
### Overrides and resetting
The moment you change a value in one of the detailed sections, it becomes an **override**: it stops following Brand, Surface, and Font, and keeps the value you set even if you change the three main values afterwards.
Every overridden value has a **Reset** button next to it. Click it to hand control back to auto-generation. Values that are still auto-generated are labelled **Auto generated**, so you can always tell at a glance which parts of the theme you've taken manual control of.
## Fine-tuning: every section explained
Below Brand, Surface, and Font sit six collapsible sections. Open any of them to override individual values.
### Header & footer
Background color, border color, primary background, and primary foreground for the bars at the top and bottom of the room.
### Navigation
Every color and font family used by the room's navigation — the section and page list your buyer clicks through.
### Background
The color of the canvas behind everything else.
### Block
The individual content cards inside a group: background color, border color, inner border, title and body font colors, secondary font color, primary button background and foreground, and font family.
### Group
The container that holds blocks: background color, border color, font and title colors, title and secondary font families, plus sliders for border radius, border weight, background opacity, and vertical spacing.
### Typography
Fonts and colors for the text in your blocks. Headings get a shared font and color, and **Advanced headings** breaks that down per level — H1, H2, and H3 each with their own font, weight, and color.
The color picker keeps a **Recently used** row, which makes it quick to reuse the same handful of colors across sections instead of pasting hex codes over and over.
## Promote a room theme to the whole organization
Happy with what you built in one room? Click **Save as new theme**, give it a name, and click **Save**. It becomes an organization theme, available in every room's theme panel.
Once a room has its own themes, the theme panel groups them separately: **Room themes** at the top, your organization's themes below. Selecting a room theme swaps the buttons to **Edit** and **Duplicate theme**.
## Manage themes for the whole organization
Go to **Settings → Themes** to see every organization theme in one list. From here you can **Edit** any theme, or **Set as default** so new rooms start with it.
Click **New theme** to build one from scratch. Name it, choose where Brand and Surface get their colors, pick a font, then click **Create theme** — and fine-tune it from there.
Editing a theme here applies to every room using it. Rooms that have been customized with their own room theme are unaffected.
## How new rooms get their theme
A new room never starts unstyled. Where its look comes from depends on how you created it:
| Created by... | Theme it gets |
| ---------------------------- | ----------------------------------------------------------------------- |
| Starting from scratch | The organization's **default** theme |
| **Duplicating a room** | Whatever theme the original room had — organization theme or room theme |
| **Creating from a template** | The template's theme |
Duplication and templates behave the same way, and they carry room themes as faithfully as organization themes. Duplicate a room that's on a room theme and the copy arrives on that same room theme, still private to it — nothing needs promoting first.
That makes [templates](/rooms/room-templates) the lever for governing how new rooms look. Style a template once, and every room built from it inherits that theme — so the whole team ships on-brand rooms without anyone opening the customize panel.
Two ways to standardize, depending on how tightly you want to hold the reins:
* **Set as default** in **Settings → Themes** covers rooms started from scratch.
* **Themed templates** govern the rooms your team actually creates day to day, and let different templates carry different looks — one for new business, another for onboarding.
## Which one should I use?
| You want to... | Do this |
| -------------------------------------------------- | ---------------------------------------------------------------------- |
| Make a room look good in seconds | Apply **Flowla Theme** or **Brand** from the theme panel |
| Make the room feel built for the buyer | Apply **Target company**, or set Brand to **Use target company color** |
| Restyle one room without touching others | **Customize for this room** |
| Restyle every room on a theme at once | **Customize theme**, or **Settings → Themes** |
| Reuse a look you built in one room | **Save as new theme**, or just duplicate the room |
| Set the starting look for rooms built from scratch | **Settings → Themes → Set as default** |
| Govern how the team's new rooms look | Apply a theme to a **[template](/rooms/room-templates)** |