snapshot of https://github.com/twentyhq/twenty.git (main, 2026-09-17; blobs > 131072B omitted)
Some checks failed
App Prod-Parity E2E Dispatch / dispatch (push) Failing after 10s
CD Storybook UI / build (push) Failing after 3m25s
CD Storybook UI / dispatch (push) Has been skipped
CD deploy main / website-changed-files (push) Successful in 18m8s
CI Agent Skills / changed-files-check (push) Successful in 18m9s
CI Create App E2E minimal / changed-files-check (push) Successful in 24s
CI Create App / changed-files-check (push) Successful in 26s
CI Docs / changed-files-check (push) Successful in 26s
CI Emails / changed-files-check (push) Successful in 28s
CI Example App Hello World / changed-files-check (push) Successful in 23s
CI Front / changed-files-check (push) Has been skipped
CI Example App Postcard / changed-files-check (push) Successful in 27s
CI UI / changed-files-check (push) Has been skipped
CI Utils Test / changed-files-check (push) Successful in 45s
CI Twenty Apps / discover (push) Successful in 1m3s
CD deploy main / deploy-main (push) Failing after 3s
CI Agent Skills / agent-skills-validate (push) Has been skipped
CI Create App / create-app-test (lint) (push) Has been skipped
CI Emails / emails-test (push) Has been skipped
CI Front / front-task (lingui:compile) (push) Has been skipped
CI Front / front-task (lint) (push) Has been skipped
CI Example App Postcard / example-app-postcard (push) Has been skipped
CI UI / ui-task (lint) (push) Has been skipped
CI UI / ui-task (pack-size) (push) Has been skipped
CI UI / ui-task (size) (push) Has been skipped
CI UI / ui-task (test) (push) Has been skipped
CI UI / ui-task (typecheck) (push) Has been skipped
CI Utils Test / utils-test (push) Has been skipped
CI Twenty Apps / ${{ matrix.app.name }} (push) Has been skipped
CI Emails / ci-emails-status-check (push) Successful in 2s
CI Example App Hello World / ci-example-app-hello-world-status-check (push) Successful in 2s
CI Example App Postcard / ci-example-app-postcard-status-check (push) Successful in 3s
CI UI / ui-sb-test (push) Has been skipped
CI Utils Test / ci-utils-test-status-check (push) Successful in 2s
CI Twenty Apps / ci-twenty-apps-status-check (push) Successful in 2s
CI UI / ci-ui-status-check (push) Successful in 2s
CI Desktop / desktop (push) Failing after 1m8s
Push docs to Crowdin / Push documentation to Crowdin (push) Failing after 55s
Push translations to Crowdin / Extract and upload translations (push) Failing after 5s
Push website translations to Crowdin / Extract and upload website translations (push) Failing after 5s
CI Create App / create-app-test (test) (push) Has been skipped
CI Create App / create-app-test (typecheck) (push) Has been skipped
CI Docs / docs-lint (push) Has been skipped
CI Example App Hello World / example-app-hello-world (push) Has been skipped
CI Front / front-task (lingui:extract) (push) Has been skipped
CI Front / front-task (test) (push) Has been skipped
CI Front / front-task (typecheck) (push) Has been skipped
CI UI / ui-sb-build (push) Failing after 1m32s
CI Twenty Apps / ${{ matrix.app.name }} (${{ matrix.server-source }}) (push) Has been skipped
CI Agent Skills / agent-skills-publish (push) Has been skipped
CI Create App / ci-create-app-status-check (push) Successful in 2s
CI Agent Skills / agent-skills-remote-source (push) Has been skipped
CI Create App E2E minimal / create-app-e2e-minimal (push) Has been cancelled
CI E2E Main / e2e-test (push) Has been cancelled
CI Front / front-sb-build (push) Has been cancelled
CI Front / front-build (push) Has been cancelled
CI Create App E2E minimal / ci-create-app-e2e-minimal-status-check (push) Has been cancelled
CI E2E Main / ci-e2e-main-status-check (push) Has been cancelled
CI E2E Main / notify-main-ci-failure (push) Has been cancelled
CI E2E Main / qa-scout-comment (push) Has been cancelled
CI Front / front-sb-test (push) Has been cancelled
CI Front / front-sb-screenshots (push) Has been cancelled
CI Front / ci-front-status-check (push) Has been cancelled
DPA Sub-Processor Sync / sync-subprocessors (push) Failing after 3s
AI Catalog Sync / sync-catalog (push) Failing after 2s

This commit is contained in:
upstream-mirror
2026-09-17 23:28:13 +05:00
commit e7da97194a
32688 changed files with 4208681 additions and 0 deletions

View File

@@ -0,0 +1,42 @@
---
title: Calendar View
description: Display records with date fields on a calendar.
---
## About Calendar View
Calendar view displays your records on a calendar based on a date field. Each record appears as an event on the corresponding date.
<img src="/images/user-guide/views/calendar-view-zoom.png" style={{width:'100%'}}/>
## Creating a Calendar View
1. Navigate to an object with date fields
2. Click the view dropdown → **+ Add view**
3. Name your view and click **Create**
4. Open the **Options** on the right
5. Select **Calendar** as the layout
6. Choose the **date field** to use for positioning records
7. Click **Update view**
## Configuring the Calendar
### Choose the Date Field
Under **Options**, select which date field determines where records appear on the calendar.
### Display Fields
Configure which fields show on each calendar event:
1. Click **Options → Fields**
2. Toggle fields on/off
3. Drag to reorder
## Use Cases
- **Meetings and calls**: View upcoming appointments
- **Deadlines**: Track due dates and close dates
- **Events**: Plan and visualize scheduled activities
- **Follow-ups**: See when tasks are due
## Related
- [Views Overview](/user-guide/views-pipelines/overview) — creating and managing views
- [Filters and Sorting](/user-guide/views-pipelines/capabilities/filters-and-sorting) — filtering calendar data

View File

@@ -0,0 +1,49 @@
---
title: Fields & Columns
description: Choose which fields to display and how to organize them.
---
## Selecting Fields to Display
Each view can show a different set of fields. Customize what's visible to focus on the information that matters.
### Show or Hide Fields
1. Click **Options** in the top right
2. Click **Fields**
3. Click the **eye icon** next to each field to show/hide it
### Reorder Fields
Change the order fields appear in your view:
1. Click **Options → Fields**
2. Drag fields up or down
3. Changes save automatically
## Field Display by View Type
### Table Views
- Fields appear as columns
- Resize columns by dragging borders
### Kanban Views
- Fields appear on cards
- Reorder via Options → Fields
- Use Compact view to hide all fields
### Calendar Views
- Selected fields show on calendar events
- Configure via Options → Fields
## Best Practices
- **Show only what's needed** — too many fields clutter the view
- **Put important fields first** — most-used columns on the left
- **Create multiple views** — different field sets for different purposes
- **Use field visibility per view** — same object, different focus
## Related
- [Table Views](/user-guide/views-pipelines/capabilities/table-views) — list view features
- [Kanban Views](/user-guide/views-pipelines/capabilities/kanban-views) — card-based views

View File

@@ -0,0 +1,75 @@
---
title: Filters & Sorting
description: Filter and sort records to find exactly what you need.
---
## Filtering Data
Filters help you focus on specific records by showing only those that match your criteria.
### Adding a Filter
1. Click the **Filter** button in the toolbar
2. Select the field to filter by
3. Choose the operator (equals, contains, etc.)
4. Enter the filter value
5. Click **Apply**
### Filter Operators
| Field Type | Available Operators |
|------------|---------------------|
| Text | Equals, Contains, Starts with, Ends with, Is empty |
| Number | Equals, Greater than, Less than, Is empty |
| Date | Equals, Before, After, Is empty |
| Select | Equals, Is any of, Is empty |
| Checkbox | Is true, Is false |
| Relation | Equals, Is empty |
### Multiple Filters
Combine multiple filters to narrow down results:
- All filters are applied with AND logic
- Each additional filter further restricts results
### Removing Filters
- Click the **X** on individual filter chips
- Click **Clear all** to remove all filters
## Sorting Data
Sorting determines the order records appear.
### Adding a Sort
1. Click the **Sort** button in the toolbar
2. Select the field to sort by
3. Choose ascending (A-Z, 0-9) or descending (Z-A, 9-0)
4. Click **Apply**
### Multiple Sorts
Add multiple sort levels:
- First sort is primary
- Subsequent sorts apply within groups of equal values
### Quick Column Sorting
Click any column header to sort:
- First click: Ascending
- Second click: Descending
- Third click: Remove sort
## Saving Filter and Sort Settings
Filters and sorts are saved with the view:
1. Configure your filters and sorts
2. Click **Save** to update the current view
3. Or click **Save as new view** to create a variant
## Related
- [Table Views](/user-guide/views-pipelines/capabilities/table-views) — group by feature
- [Views Overview](/user-guide/views-pipelines/overview) — building and managing views

View File

@@ -0,0 +1,93 @@
---
title: Kanban Board Views
description: Learn how to use Kanban views to visualize and manage your workflows.
---
import { VimeoEmbed } from '/snippets/vimeo-embed.mdx';
## About Kanban Views
Kanban views visually map out process flows, where each column stands for a distinct stage and each card represents a record.
## Move Cards between Stages
You can move each card between stages as it goes through your workflow by clicking and holding a card, then dragging it to the next stage.
<VimeoEmbed videoId="927888627" title="Video demonstration" />
## Add and Delete Stages
You can tailor your workflow to suit your needs using stages, each of which represents a value in a Select field:
### Add Stages
To add a stage, access the Select field settings by navigating to Settings > Data Model, selecting your object, and then selecting the field your Kanban board depends on.
<VimeoEmbed videoId="927890428" title="Video demonstration" />
### Remove Stages
To remove a stage, hover over the stage name or the `⋮` icon, click `Edit from settings` in the Select field settings, and then click **Delete** next to the relevant stage.
## Display Fields
You can configure your Kanban board to display some fields and hide others. To show or hide a field, click on **Options** on the top right, then on **Fields** to bring up the list of options, and click the eye icon next to the field to show or hide it.
You can also rearrange the order of fields by holding down the field name and dragging it to where you want it.
<img src="/images/user-guide/kanban-views/filter.png" style={{width:'100%'}}/>
## Compact view
You can hide all the fields and get an overview of all records at a glance. To enable:
1. Click **Options** on the top right
2. Turn on the toggle for **Compact view**
<img src="/images/user-guide/kanban-views/compact-view.png" style={{width:'100%'}}/>
## Column Aggregations
Each column in a Kanban view can display aggregated values at the top, helping you understand your data at a glance.
### Available Aggregations
| Aggregation | Description |
|-------------|-------------|
| **Count** | Number of records in the column |
| **Sum** | Total of a numeric field (e.g., deal amounts) |
| **Average** | Average value of a numeric field |
| **Min** | Lowest value |
| **Max** | Highest value |
### Configuring Aggregations
1. Click on the number displayed next to the Stage value, at the top of a column
2. Select the aggregation type
3. Choose the field to aggregate
**Example:** Show total deal value per stage by aggregating the Amount field with Sum.
## When to Use Kanban Views
Kanban views are ideal for:
- **Sales pipelines**: Track deals through stages from lead to close
- **Project management**: Monitor tasks through workflow states
- **Recruitment**: Track candidates through hiring stages
- **Any staged process**: Visualize any workflow with defined stages
## Best Practices
### Organize Your Stages
- **Limit stages**: 5-7 stages is ideal for visibility
- **Clear naming**: Use descriptive stage names
- **Logical order**: Arrange stages in process order
### Optimize Card Display
- **Show key fields**: Display only the most important information
- **Use Compact view**: For high-level overviews
- **Color coding**: Use stage colors to quickly identify status
### Maintain Data Quality
- **Update regularly**: Keep cards moving through stages
- **Archive completed**: Move closed items out of active view
- **Review stale cards**: Follow up on cards stuck in stages

View File

@@ -0,0 +1,59 @@
---
title: Table Views
description: Display your data in a spreadsheet-like list format.
---
## About Table Views
Table views display records in rows with customizable columns—like a spreadsheet. This is the default view type for most objects.
<img src="/images/user-guide/table-views/table-view.png" style={{width:'100%'}}/>
## Features
### Column Configuration
- Show or hide columns (fields)
- Resize column widths
- Reorder columns by dragging
### Group By a Select Field
Organize records into collapsible groups based on a field of select type.
<img src="/images/user-guide/table-views/table-group-by.png" style={{width:'100%'}}/>
1. Click **Options**
2. Select **Group**
3. Choose a Select field
4. Configure group order under **Options → Group → Sort**:
- **Alphabetical** or **Reverse alphabetical**
- **Manual order**: Drag groups under "Visible groups" to reorder
- Click the **eye icon** next to a group to hide it
**Use cases:**
- Group Companies by Type
- Group Opportunities by Stage
- Group Tasks by Status
<Note>
**For best performance, limit to 10-15 visible groups per view.** If you need more groups, consider using a Dashboard instead.
</Note>
### Column Widths
Resize columns to show more or less content:
1. Hover between two column headers
2. Click and drag the column border
3. Release to set the new width
## When to Use Table Views
Table views work best for:
- **Browsing large datasets** — scan many records quickly
- **Data entry** — edit multiple records efficiently
- **Detailed analysis** — see many fields at once
- **Sorting and filtering** — find specific records
## Related
- [Fields and Columns](/user-guide/views-pipelines/capabilities/fields-and-columns) — configuring which fields to display
- [Filters and Sorting](/user-guide/views-pipelines/capabilities/filters-and-sorting) — narrowing down records

View File

@@ -0,0 +1,73 @@
---
title: View Settings
description: Manage view visibility, naming, icons, and organization.
---
## View Visibility
Control who can see your custom views.
### Visibility Options
| Setting | Who Can See |
|---------|-------------|
| **Workspace** | All workspace members |
| **Unlisted** | Only you |
### Changing Visibility
1. Open the view
2. Click **Options → Visibility**
3. Select **Workspace** or **Unlisted**
<Note>
The default "All [Object Name]" views cannot have their visibility changed.
</Note>
## Rename a View
1. Open the view dropdown
2. Click the **⋮** menu next to the view
3. Select **Edit**
4. Enter the new name
## Change View Icon
1. Open the view dropdown
2. Click the **⋮** menu next to the view
3. Select **Edit**
4. Click the icon to change it
## Reorder Views
Change the order views appear in the dropdown:
1. Open the view dropdown
2. Drag views by their handle
3. Drop in the desired position
4. Order saves automatically
## Favorite a View
Pin frequently used views for quick access:
1. Open the view dropdown
2. Click the **⋮** menu next to a view
3. Select **Add to favorites**
Favorited views appear in a dedicated section for easy access.
## Delete a View
1. Open the view dropdown
2. Click the **⋮** menu next to the view
3. Select **Delete**
4. Confirm deletion
<Warning>
Deleted views cannot be recovered.
</Warning>
## Related
- [Views Overview](/user-guide/views-pipelines/overview) — creating views
- [How to Restrict Access](/user-guide/views-pipelines/how-tos/restrict-access-to-your-view) — step-by-step guide

View File

@@ -0,0 +1,59 @@
---
title: Create a Calendar View for Tasks Due
description: Visualize your tasks and deadlines on a calendar.
---
<img src="/images/user-guide/views/calendar-view-zoom.png" style={{width:'100%'}}/>
## Prerequisites
Your Tasks object needs a **Due Date** field (Date or Date & Time type).
## Steps
1. Navigate to **Tasks**
2. Click the view dropdown → **+ Add view**
3. Name your view (e.g., "Tasks Calendar")
4. Click **Create**
5. Click **Options** and select **Calendar** as the layout
6. Choose **Due Date** as the date field
7. Click **Save**
## Configure Your Calendar
### Display Fields on Events
1. Click **Options → Fields**
2. Click the **eye icon** to show/hide fields
3. Drag to reorder
Recommended fields to display:
- **Title** — task name
- **Assignee** — who's responsible
- **Status** — current progress
### Filter Your Calendar
Create focused views:
- **My Tasks**: Filter by Assignee = Me
- **This Week**: Filter by Due Date = This week
- **Overdue**: Filter by Due Date < Today, Status ≠ Done
## Other Calendar Use Cases
| Object | Date Field | Purpose |
|--------|------------|---------|
| Opportunities | Close Date | Track expected closes |
| Custom Events | Event Date | Plan activities |
| Projects | Deadline | Monitor project timelines |
## Tips
- **Review weekly**: Start each week by checking your calendar view
- **Combine with table view**: Use calendar for overview, table for details
- **Set visibility**: Keep personal task calendars as Unlisted
## Related
- [Calendar View](/user-guide/views-pipelines/capabilities/calendar-view) — all calendar features
- [Filters and Sorting](/user-guide/views-pipelines/capabilities/filters-and-sorting) — filter your calendar

View File

@@ -0,0 +1,71 @@
---
title: Create a Kanban View for Projects
description: Track projects through stages using a visual board.
---
import { VimeoEmbed } from '/snippets/vimeo-embed.mdx';
Use a Kanban view to visualize your projects (or any object with stages) as cards moving through columns.
<VimeoEmbed videoId="927888627" title="Video demonstration" />
## Prerequisites
Your object needs a **Select field** to use as columns (e.g., Status, Stage, Phase).
If you don't have one:
1. Go to **Settings → Data Model**
2. Select your object
3. Add a Select field with your stage options
## Steps
1. Navigate to your object (e.g., Projects, Tasks)
2. Click the view dropdown → **+ Add view**
3. Name your view (e.g., "Project Board")
4. Click **Create**
5. Click **Options** and select **Kanban** as the layout
6. The view uses your Select field for columns automatically
7. Click **Save**
## Configure Your Board
### Show Key Fields on Cards
1. Click **Options → Fields**
2. Find fields in the "Hidden Fields" section
3. Click the **eye icon** to display them on cards
4. Drag to reorder
<img src="/images/user-guide/kanban-views/filter.png" style={{width:'100%'}}/>
### Enable compact view
For a high-level overview:
1. Click **Options**
2. Turn on **Compact view**
Cards show only the record name.
<img src="/images/user-guide/kanban-views/compact-view.png" style={{width:'100%'}}/>
### Add Aggregations
Show counts or totals at the top of each column:
1. Click the number next to a column name
2. Select an aggregation (Count, Sum, etc.)
3. Choose a field if needed
## Moving Cards
Drag and drop cards between columns to update their status.
<VimeoEmbed videoId="927888627" title="Video demonstration" />
## Example: Task Board
| Column (Status) | Cards |
|-----------------|-------|
| **To Do** | New tasks |
| **In Progress** | Active work |
| **Review** | Awaiting approval |
| **Done** | Completed |
## Related
- [Kanban Views](/user-guide/views-pipelines/capabilities/kanban-views) — aggregations, compact view, stages
- [How to Set Up a Sales Pipeline](/user-guide/views-pipelines/how-tos/set-up-a-sales-pipeline) — Kanban for Opportunities

View File

@@ -0,0 +1,51 @@
---
title: Create a Table View with Grouping
description: Organize your records into collapsible groups by field value.
---
import { VimeoEmbed } from '/snippets/vimeo-embed.mdx';
Group your table view by a Select field to organize records into collapsible sections.
<img src="/images/user-guide/table-views/table-group-by.png" style={{width:'100%'}}/>
## Steps
1. Navigate to the object (People, Companies, etc.)
2. Click the view dropdown → **+ Add view**
3. Name your view (e.g., "Companies by Type")
4. Click **Create**
5. Click **Options → Group**
6. Choose a Select field to group by
7. Click **Save**
## Configure Group Order
Under **Options → Group → Sort**, choose how groups are ordered:
| Option | Description |
|--------|-------------|
| **Alphabetical** | A to Z |
| **Reverse alphabetical** | Z to A |
| **Manual order** | Drag groups to reorder under "Visible groups" |
Click the **eye icon** next to a group to hide it from the view.
<Note>
**For best performance, limit to 10-15 visible groups.** If you need more, consider using a Dashboard instead.
</Note>
## Example: Companies by Industry
1. Go to **Companies**
2. Create a new view named "By Industry"
3. Click **Options → Group**
4. Select the **Industry** field
5. Save
Now your companies are organized by industry, making it easy to focus on one segment at a time.
## Related
- [Table Views](/user-guide/views-pipelines/capabilities/table-views) — all table view features
- [Filters and Sorting](/user-guide/views-pipelines/capabilities/filters-and-sorting) — combine grouping with filters

View File

@@ -0,0 +1,32 @@
---
title: Restrict Access to Your View
description: Control who can see your custom views.
---
Each view (except the default "All [Object Name]" views) has its own visibility setting.
## Steps
1. Open the view you want to restrict
2. Click **Options** in the top right
3. Click **Visibility**
4. Select **Unlisted**
Your view is now visible only to you.
## Visibility Options
| Setting | Who Can See |
|---------|-------------|
| **Workspace** | All workspace members |
| **Unlisted** | Only you |
## Notes
- The default "All [Object Name]" views cannot be made unlisted
- Unlisted views don't appear in other users' view dropdowns
- You can change visibility back to Workspace at any time
## Related
- [View Settings](/user-guide/views-pipelines/capabilities/view-settings) — all view configuration options

View File

@@ -0,0 +1,108 @@
---
title: Set Up a Sales Pipeline
description: Configure your sales pipeline to track opportunities through stages.
---
import { VimeoEmbed } from '/snippets/vimeo-embed.mdx';
A sales pipeline in Twenty is a Kanban view of your Opportunities object, where each column represents a stage in your sales process.
## Step 1: Configure Your Stages
Stages are defined in the Opportunities object's **Stage** field.
1. Go to **Settings → Data Model**
2. Select **Opportunities**
3. Find and click the **Stage** field
4. Add, remove, or rename stages to match your process
<VimeoEmbed videoId="927890428" title="Video demonstration" />
### Recommended Stages
| Stage | Purpose |
|-------|---------|
| **New** | Fresh opportunities just identified |
| **Qualified** | Confirmed as a good fit |
| **Meeting** | Engaged in discussions |
| **Proposal** | Proposal sent |
| **Negotiation** | Working on terms |
| **Closed Won** | Deal successful |
| **Closed Lost** | Deal unsuccessful |
<Note>
**5-7 stages is optimal.** Too many stages make the pipeline hard to scan; too few lose visibility into deal progress.
</Note>
## Step 2: Create a Pipeline View
1. Go to **Opportunities**
2. Click the view dropdown → **+ Add view**
3. Name it "Sales Pipeline"
4. Click **Create**
5. Open **Options** and select **Kanban** as the layout
The view automatically uses the Stage field for columns.
## Step 3: Configure Your View
### Show Key Fields
1. Click **Options → Fields**
2. Look for fields in the "Hidden Fields" section
3. Click the **eye icon** to display: Company, Amount, Close Date, Owner
### Enable Aggregations
Show totals at the top of each column:
1. Click the number displayed next to a Stage name at the top of a column
2. Select the aggregation type (Count, Sum, Average, etc.)
3. Choose the field to aggregate (e.g., Amount)
**Example:** Show total deal value per stage by aggregating the Amount field with Sum.
### Use compact view (optional)
For a high-level overview with minimal card content:
1. Click **Options**
2. Turn on the toggle for **Compact view**
## Step 4: Create Personal and Team Views
### "My Pipeline"
- **Filter**: Owner = Me
- **Visibility**: Unlisted (personal view)
### "Team Pipeline"
- **Filter**: None (show all)
- **Visibility**: Workspace (shared view)
### "Closing This Month"
- **Type**: Table
- **Filter**: Close Date = This month, Stage ≠ Closed Won, Stage ≠ Closed Lost
- **Sort**: Close Date ascending
## Working with Opportunities
### Creating Opportunities
- Click **+ New** in the Opportunities view
- Or click **+** in a specific stage column
### Moving Through Stages
Drag and drop opportunity cards between columns to update their stage.
<VimeoEmbed videoId="927888627" title="Video demonstration" />
## Best Practices
### Pipeline Hygiene
- Update deals daily as they progress
- Move or close stale deals promptly
- Keep close dates realistic
### Stage Discipline
- Define clear criteria for each stage
- Move deals promptly when criteria are met
- Don't let deals sit in stages too long
## Related
- [Kanban Views](/user-guide/views-pipelines/capabilities/kanban-views) — aggregations and compact view
- [Filters and Sorting](/user-guide/views-pipelines/capabilities/filters-and-sorting) — creating filtered views

View File

@@ -0,0 +1,147 @@
---
title: Show Expected Amount in Your Pipeline
description: Calculate and display weighted deal values based on stage probability.
---
The Expected Amount is a calculated value: **Amount × Probability**. This helps you forecast revenue by weighting deals based on how likely they are to close.
<Tip>
This is an example of creating [Formula Fields](/user-guide/workflows/how-tos/crm-automations/formula-fields) using workflows.
</Tip>
This guide walks you through setting up the custom fields and workflows needed to calculate and display expected amounts in your pipeline.
## Step 1: Create Custom Fields
You need two custom fields on the Opportunities object.
### Create the Probability Field
1. Go to **Settings → Data Model → Opportunities**
2. Click **+ Add Field**
3. Configure:
- **Name**: Probability
- **Type**: Number
- **Description**: Stage-based probability (0-100%)
4. Click **Save**
### Create the Expected Amount Field
1. Click **+ Add Field**
2. Configure:
- **Name**: Expected Amount
- **Type**: Currency
- **Description**: Calculated: Amount × Probability
3. Click **Save**
### Optional: Make Fields Read-Only for Users
If you don't want users manually editing these calculated fields:
1. Go to **Settings → Members → Roles**
2. Select the role to configure
3. Find the Opportunities object
4. Set **Probability** and **Expected Amount** fields to read-only
This ensures only the workflows can update these values.
## Step 2: Create Workflow #1 — Update Probability on Stage Change
This workflow automatically sets the Probability when an opportunity moves to a new stage.
### Create the Workflow
1. Go to **Workflows**
2. Click **+ New Workflow**
3. Name it "Update Probability on Stage Change"
### Configure the Trigger
1. Add a **Record Created or Updated** trigger
2. Select **Opportunities** as the object
3. Filter on: **Stage** field is updated
### Add Branches for Each Stage
Create a branch for each stage with its probability:
| Stage | Probability |
|-------|-------------|
| New | 10% |
| Qualified | 25% |
| Meeting | 40% |
| Proposal | 60% |
| Negotiation | 80% |
| Closed Won | 100% |
| Closed Lost | 0% |
<Note>
To create a new branch, right click on the workflow canvas and click **New action**. Then, link this action to the previous node by dragging the arrow from the previous node to this new action.
</Note>
For each stage:
1. Add a **Filter** node: Stage = [stage name]
2. Add an **Update Record** action:
- Record: The triggering Opportunity
- Field: Probability
- Value: [probability for that stage]
### Calculate Expected Amount
After the branches rejoin:
1. Add a **Filter** node: Amount is not empty
2. Add an **Update Record** action:
- Record: The triggering Opportunity
- Field: Expected Amount
- Value: Amount × Probability
## Step 3: Create Workflow #2 — Recalculate on Amount Change
This workflow updates the Expected Amount when the deal Amount changes.
### Create the Workflow
1. Go to **Workflows**
2. Click **+ New Workflow**
3. Name it "Recalculate Expected Amount on Amount Change"
### Configure the Trigger
1. Add a **Record Created or Updated** trigger
2. Select **Opportunities** as the object
3. Filter on: **Amount** field is updated
### Add the Logic
1. Add a **Filter** node: Amount is not empty
2. Add an **Update Record** action:
- Record: The triggering Opportunity
- Field: Expected Amount
- Value: Amount × Probability
## Step 4: Display in Your Pipeline
Now show the Expected Amount totals in your Kanban view:
1. Open your **Sales Pipeline** Kanban view
2. Click the **number** next to any Stage name at the top of a column
3. Select **Sum**
4. Choose **Expected Amount**
Each column now shows the total weighted pipeline value for that stage.
## Summary
| Component | Purpose |
|-----------|---------|
| **Probability field** | Stores the stage-based win probability |
| **Expected Amount field** | Stores Amount × Probability |
| **Workflow #1** | Updates Probability when Stage changes, then recalculates Expected Amount |
| **Workflow #2** | Recalculates Expected Amount when Amount changes |
| **Aggregation** | Displays Sum of Expected Amount per stage |
## Related
- [Formula Fields](/user-guide/workflows/how-tos/crm-automations/formula-fields) — create calculated fields using workflows
- [Kanban Views](/user-guide/views-pipelines/capabilities/kanban-views) — column aggregations
- [How to Create Custom Fields](/user-guide/data-model/how-tos/create-custom-fields) — field configuration

View File

@@ -0,0 +1,226 @@
---
title: Track How Long Opportunities Stay in Each Stage
description: Monitor deal velocity by tracking when opportunities enter each stage.
---
<Tip>
This is an example of creating [Formula Fields](/user-guide/workflows/how-tos/crm-automations/formula-fields) using workflows — specifically date calculations.
</Tip>
Tracking when opportunities enter each stage helps you identify bottlenecks and measure deal velocity.
This guide walks you through setting up custom fields and a workflow to automatically record when an opportunity moves to each stage, and calculate how many days it spent in the previous stage.
## Step 1: Create Custom Fields
You need two types of fields for each stage:
- **Date & Time fields**: Record when the opportunity entered each stage
- **Number fields**: Store how many days the opportunity spent in each stage
### Create the "Last Entered" Fields
1. Go to **Settings → Data Model → Opportunities**
2. For each stage, click **+ Add Field** and configure:
- **Name**: Last Entered [Stage Name] (e.g., "Last Entered New", "Last Entered Qualified")
- **Type**: Date & Time
- **Description**: Timestamp when opportunity entered this stage
3. Click **Save**
Create these fields:
- Last Entered New
- Last Entered Qualified
- Last Entered Meeting
- Last Entered Proposal
- Last Entered Negotiation
- Last Entered Closed Won
- Last Entered Closed Lost
### Create the "Days in Stage" Fields
1. For each stage, click **+ Add Field** and configure:
- **Name**: Days in [Stage Name] (e.g., "Days in New", "Days in Qualified")
- **Type**: Number
- **Description**: Number of days spent in this stage
2. Click **Save**
Create these fields:
- Days in New
- Days in Qualified
- Days in Meeting
- Days in Proposal
- Days in Negotiation
<Note>
You don't need "Days in" fields for Closed Won and Closed Lost since those are final stages.
</Note>
### Optional: Make Fields Read-Only
If you don't want users manually editing these calculated fields:
1. Go to **Settings → Members → Roles**
2. Select the role to configure
3. Find the Opportunities object
4. Set the "Last Entered" and "Days in" fields to read-only
## Step 2: Create the Workflow
This single workflow handles both tasks:
- Records the timestamp when entering a new stage
- Calculates days spent in the previous stage
### Create the Workflow
1. Go to **Workflows**
2. Click **+ New Workflow**
3. Name it "Track Stage Time"
### Configure the Trigger
1. Add a **Record Updated** trigger
2. Select **Opportunities** as the object
3. Filter on: **Stage** field is updated
### Add Branches for Each Stage
<Note>
To create a new branch, right click on the workflow canvas and click **New action**. Then, link this action to the previous node by dragging the arrow from the previous node to this new action.
</Note>
---
**Branch 1: Stage = New (first stage)**
Since this is the first stage, only the entry timestamp is recorded — there's no previous stage to calculate from.
1. Add a **Filter** node: Stage = New
2. Add a **Code** action:
```javascript
export const main = async (): Promise<object> => {
return { now: new Date().toISOString() };
};
```
3. Add an **Update Record** action:
- Record: The triggering Opportunity
- Field: Last Entered New
- Value: `now` from Code node
---
**Branch 2: Stage = Qualified**
When moving to Qualified, record entry time AND calculate days spent in New.
1. Add a **Filter** node: Stage = Qualified
2. Add a **Code** action:
```javascript
export const main = async (params: {
lastEnteredPreviousStage: Date;
}): Promise<object> => {
const { lastEnteredPreviousStage } = params;
const now = new Date();
const entryDate = new Date(lastEnteredPreviousStage);
const diffTime = Math.abs(now.getTime() - entryDate.getTime());
const daysInPreviousStage = Math.ceil(diffTime / (1000 * 60 * 60 * 24));
return {
now: now.toISOString(),
daysInPreviousStage: daysInPreviousStage
};
};
```
3. Configure the Code node input: map `lastEnteredPreviousStage` to the **Last Entered New** field
4. Add an **Update Record** action:
- Record: The triggering Opportunity
- Fields to update:
- Last Entered Qualified = `now`
- Days in New = `daysInPreviousStage`
---
**Branch 3: Stage = Meeting**
When moving to Meeting, record entry time AND calculate days spent in Qualified.
1. Add a **Filter** node: Stage = Meeting
2. Add a **Code** action:
```javascript
export const main = async (params: {
lastEnteredPreviousStage: Date;
}): Promise<object> => {
const { lastEnteredPreviousStage } = params;
const now = new Date();
const entryDate = new Date(lastEnteredPreviousStage);
const diffTime = Math.abs(now.getTime() - entryDate.getTime());
const daysInPreviousStage = Math.ceil(diffTime / (1000 * 60 * 60 * 24));
return {
now: now.toISOString(),
daysInPreviousStage: daysInPreviousStage
};
};
```
3. Configure the Code node input: map `lastEnteredPreviousStage` to the **Last Entered Qualified** field
4. Add an **Update Record** action:
- Record: The triggering Opportunity
- Fields to update:
- Last Entered Meeting = `now`
- Days in Qualified = `daysInPreviousStage`
---
**Continue for remaining stages:**
| Stage | Records | Calculates |
|-------|---------|------------|
| Proposal | Last Entered Proposal | Days in Meeting |
| Negotiation | Last Entered Negotiation | Days in Proposal |
| Closed Won | Last Entered Closed Won | Days in Negotiation |
| Closed Lost | Last Entered Closed Lost | Days in Negotiation |
The branches do not need to rejoin—each runs independently when its stage condition is met.
## Step 3: Analyze Time in Stage
With timestamps and day counts recorded, you can now analyze deal velocity.
### Create a "Slow Deals" View
1. Create a Table view of Opportunities
2. Add columns: Name, Stage, Days in [previous stage], Amount
3. Sort by "Days in" field (descending)
4. Filter by Stage to focus on one stage at a time
Deals at the top spent the most time in the previous stage.
### Use Aggregations
In your pipeline Kanban view:
1. Click the number next to a Stage name
2. Select **Average**
3. Choose a "Days in" field
This shows the average time deals spend in each stage.
## Summary
| Component | Purpose |
|-----------|---------|
| **Last Entered fields** | Store when opportunity entered each stage |
| **Days in fields** | Store how many days spent in each stage |
| **Workflow** | Records timestamp AND calculates days in one pass |
| **Views & Aggregations** | Analyze deal velocity and identify bottlenecks |
## Related
- [Workflows](/user-guide/workflows/overview) — automation basics
- [How to Create Custom Fields](/user-guide/data-model/how-tos/create-custom-fields) — field configuration
- [Kanban Views](/user-guide/views-pipelines/capabilities/kanban-views) — aggregations

View File

@@ -0,0 +1,115 @@
---
title: Views & Pipelines
description: Learn how to create and manage views in Twenty.
---
import { VimeoEmbed } from '/snippets/vimeo-embed.mdx';
## Understanding Views
Views are saved configurations that determine how your data is displayed. Each view can have its own:
- **Layout**: Table, Kanban, or Calendar
- **Filters**: Which records to show
- **Sorting**: How records are ordered
- **Fields**: Which columns are visible
## View Types
### Table View
The default spreadsheet-like view showing records in rows with customizable columns.
### Kanban View
A visual board view where records appear as cards organized by stages. Ideal for:
- Sales pipelines
- Project tracking
- Any workflow with defined stages
### Calendar View
A calendar view that displays records with date fields. Perfect for:
- Meetings and events
- Deadlines and due dates
- Time-based planning
## Creating a View
There are two ways to create a new view.
### Use the View Dropdown Menu
1. Navigate to any object (People, Companies, etc.)
2. Click the view name at the top left (shows current view with a dropdown arrow)
3. Click **+ Add view**
4. Name your view and click **Create**
5. Choose a layout (Table, Kanban, or Calendar) under **Options**
6. Add filters and sorting as needed
7. Select which fields to display and reorder them
8. Click **Save**
<VimeoEmbed videoId="1145648745" title="Video demonstration" />
### Start by Editing an Existing View
1. Navigate to any object (People, Companies, etc.)
2. Choose a layout (Table, Kanban, or Calendar) under **Options**, and add filters and sorting as needed
3. Click on **Save as new view**
4. Name your view and click **Create**
5. Keep editing your new view
6. Click on **Update view** to save your additional configurations
<VimeoEmbed videoId="1145654005" title="Video demonstration" />
## Managing Views
### Edit a View
1. Select the view from the dropdown
2. Make your changes (filters, sorting, columns)
3. Click **Save** to update the view
### Rename a View or Change Its Icon
1. Open the view dropdown
2. Click the **⋮** menu next to the view name
3. Select **Edit**
4. Change the name or icon
5. Click **Save**
### Reorder Views
1. Open the view dropdown
2. Click and drag a view by its handle
3. Drop it in the desired position
4. The new order is saved automatically
### Add to Favorites
Pin frequently used views for quick access:
1. Open the view dropdown
2. Click the **⋮** menu next to a view
3. Select **Add to favorites**
4. The view appears in your favorites section
### Delete a View
1. Select the view to delete
2. Click the view dropdown
3. Click the **⋮** menu next to the view
4. Select **Delete**
5. Confirm deletion
<Warning>
Deleted views cannot be recovered. Make sure you want to remove it before confirming.
</Warning>
## View Visibility
Each view (except the default "All [Object Name]" views) has its own visibility setting.
To change visibility:
1. Open the view
2. Click **Options → Visibility**
3. Choose:
- **Workspace**: Visible to all workspace members
- **Unlisted**: Visible only to you
<Note>
The default "All [Object Name]" views cannot have their visibility changed.
</Note>
## Next Steps
- [Table Views](/user-guide/views-pipelines/capabilities/table-views)
- [Kanban Views](/user-guide/views-pipelines/capabilities/kanban-views)
- [Filters and Sorting](/user-guide/views-pipelines/capabilities/filters-and-sorting)
- [View Settings](/user-guide/views-pipelines/capabilities/view-settings)