Creating a new Group Type
This feature is currently in Alpha. Be one of the first customers to try it! Please share any feedback with the ChartHop team.
How to setup a Alpha Feature
- Contact ChartHop support or your CSM if you have one. They can activate the feature for you.
- Read below for setup instructions and context on how the feature will work.
Overview
Your organization is organized by more than just departments and location, and you can now reflect that in ChartHop! Once "Custom group types" are enabled in Labs, you will be able to create custom groups under Data model --> Groups --> Group types. Group types can have "Groups" within them with a hierarchy. This page will walk you through creating Group types.
Group types within ChartHop allow you to fully customize many different ways of seeing your organization. Each Group Type you enable can have its own org chart view. And every org is different, so how you set up your org to reflect how you really operate is up to you.
Here are some examples:
- A software company may have a few different group types:
- Reflecting how their Research & Development teams are organized around different product scopes
- Continuously updating Project Groups their R&D teams are working on
- Showing all of their Employee Resource Groups and who is a member of each of them
- A national brick & mortar chain may want:
- All of their store locations in a regional hierarchy
- Those stores rolling up to different corporate regional offices on the org chart
- A fast growing finance company may have acquired a number of companies in their growth:
- Group types can easily organize those companies without disrupting current organizational hierarchies
- HR admin can leverage group types to easily assign calendars and permissions

Group Type: Assignment Type
When creating a group type, you choose how membership in that type's groups is determined. There are three options:
- Group (default): Members are added and removed manually by an admin.
- Smart Group: Members are determined automatically by a CQL filter expression set on each individual group. Anyone matching the filter is a member of that group.
- Expression Group: Members are determined automatically by a single CQL expression set on the group type itself. That expression evaluates each person and returns which group (or groups) within the type they belong to.
The assignment type is selected when the group type is first created and cannot be changed once groups have been created under it.
Not sure which to use? Use Smart Group when each group has its own distinct membership criteria (e.g. "everyone in Engineering" vs. "everyone in Sales"). Use Expression Group when a single rule determines which group a person belongs to across the whole type — for example, mapping a cost center code to a department using a lookup table.
Creating a group type
Clicking "Create group type" opens a sidebar where you can customize your group.

Description: This is visible just in the sidebar and the list table.
Parent types allowed: A group type can have a hierarchy within it, or not, which reflects how the groups are seen on the Groups Org Chart. This setting allows you to set which other group types can be a part of that hierarchy.
- Same: Groups of this group type can only have a parent group of the same type
- ex: Research & Development groups get broader in scope as you move up the hierarchy, so these groups are parents of other R&D groups.
- Both: Groups of this group type can have a parent group of the same type or one other (must specify which)
- ex. Setting up Teams in your org with Department as an option as well so that Teams can roll up to each other and ultimately to a Department.
- Other: Groups of this group type can only have a parent group that is not the same type (must specify which)
- ex. Regional Stores must roll up to corporate Regional Offices, which are two different group types you've set up.
- None: Cannot have a hierarchy or any parent groups
- ex. Employee Resource Groups at your organization are independent with no traditional org chart hierarchy
Positions: You can create positions within your group types and your groups. For example, a "Product" group type can have the positions of "Senior Product Manager", "Product Manager" and "Junior Product Manager". These will be the positions that are available in any and all groups of that type.
These are fully customizable for your needs.
Positions are not available for Smart Group or Expression Group types.
Code: You are able to customize a code to reference this group in other systems if needed.
Membership Type
The Membership Type setting controls whether a person can belong to more than one group of this type at the same time.
- Multiple (default): A person can belong to more than one group within this group type simultaneously. When a new group is assigned, it is added on top of any existing memberships — values append rather than replace.
- Single: A person can only belong to one group within this group type at a time. Assigning a new group will automatically remove their previous membership.
If you're seeing group values stack instead of replace, switching Membership Type to Single is the fix.
Changing Membership Type on an existing group type
If you change an existing group type from Multiple to Single, ChartHop will automatically migrate all existing group memberships for that group type — ensuring that historical data follows the "one group per person" rule. No manual cleanup is needed.
Changing from Single to Multiple requires no migration, since allowing more memberships is always additive.
Setting up Smart Groups
A Smart Group type automatically manages membership using a CQL filter expression. Each group within the type has its own filter, and ChartHop evaluates that filter against every person in the org to determine who belongs to that group.
How it works
- When you create or edit a group, you write a CQL expression in the Membership filter field (for example, department="Engineering").
- ChartHop evaluates the filter and assigns everyone who matches as a member of that group.
- Membership is recomputed automatically when org data changes, and can also be refreshed manually at any time.
- Members cannot be added or removed by hand — membership is always driven by the filter.
Important: only publicly visible fields are supported
Smart Group filters run as a system-level operation, not as a specific user. To prevent unintended access to sensitive data, the filter can only reference fields that are visible to everyone in the org (Org Public access). Fields with restricted visibility — such as compensation data — are not supported in Smart Group filters.
Previewing membership
When you enter a CQL expression in the Membership filter field, ChartHop shows a live preview of who would be included. The preview displays:
- A count of matched members
- A scrollable list of matched names and job titles
- A link to view all results in the data sheet
The preview updates as you type (with a short delay), so you can refine your filter before saving.
Manually refreshing membership
The group detail page shows a filter banner with the active CQL expression and the last time membership was computed. To trigger a refresh manually, click the Refresh button in the banner. This is useful after bulk data changes or imports.
Positions on Smart Groups
Positions (such as "Lead" or "Admin") can still be assigned manually on Smart Groups. Position holders do not need to match the group's membership filter.
Setting up Expression Groups
An Expression Group type uses a single CQL expression on the group type itself to determine membership across all groups of that type. Instead of each group having its own filter, one expression evaluates a person and returns the name or ID of the group they belong to.
How it works
- You define one Membership expression on the group type (for example, an expression that looks up a person's cost center in a reference table and returns the corresponding department group).
- ChartHop evaluates that expression for each person and assigns them to the group the expression returns.
- If the expression returns multiple groups and the group type's Membership Type is set to Single, ChartHop uses the Order field on each group to determine which one takes priority — the group with the lowest order value wins.
- Like Smart Groups, membership is calculated automatically and is read-only.
When to use Expression Groups vs. Smart Groups
Use Expression Groups when a single lookup rule can determine every person's group — for example, mapping a field value to a group via a reference table. This is more efficient than writing a separate filter per group and is especially useful for large group types where the membership logic is consistent across all groups.
Use Smart Groups when each group has meaningfully different membership criteria that need to be expressed individually.
Setting group order (for Single membership)
If your Expression Group type uses Single membership and the expression could return more than one group for a person, set the Order field on each group to control priority. Lower numbers take precedence. Groups without an order value are treated as lowest priority.
