Keep your Spekit teams accurate on their own by defining rules that add and remove members based on your identity provider attributes. Instead of wiring each team to a single IdP group or managing members by hand, you set rules once and Spekit populates the team from your directory and keeps it current as people's details change. This guide covers how to build rules, how they combine, how membership stays in sync, and how to tell a dynamic team apart from a manual one.
ℹ️ Who this is for: Account Admins managing teams. Dynamic Teams uses attributes synced from your connected identity provider (IdP). To build rules on a field that is not in the default attribute list, see Using Custom Attributes in Dynamic Teams.
⚠️ Requires a SCIM connection. Dynamic Teams is available to SCIM-connected customers only. If you use SAML only, with no SCIM connection, this functionality is not available and the option to set up dynamic teams will not appear in your experience.
1. What Dynamic Teams does
Today, a Spekit team is either tied one-to-one to an IdP group, or managed by hand. Dynamic Teams adds a third way: you define attribute-based rules, and Spekit places the matching users on the team automatically. Because rule-driven membership becomes standard team membership, everything downstream, content permissions, Learning Paths, and reporting, works exactly as it does today.
The payoff is membership that maintains itself. New hires land on the right team as soon as they appear in your directory, and you stop re-mapping teams every time IT restructures a group.
2. Build rules on a team
Rules are defined on the team itself, on the create or edit team screen.
- Open the Spekit Hub (Web App) and navigate to the Setting page (gear icon).
- Create team or edit a team.
- Scroll to the section for defining rules to automatically add users to the team.
- Choose an attribute from the dropdown. This list holds the attributes Spekit can pull from your identity provider, both default attributes and any custom attributes you have set up.
-
Choose an operator:
- Equals matches the attribute value exactly.
- Contains matches on a full word within the attribute value.
- Enter the value to match, for example
Sales. - Save the team. The rule runs and pulls in every synced user who matches.
Example: Department contains Sales automatically adds every user whose department includes the word Sales to the team.
ℹ️ Values are not case-sensitive. SALES, Sales, and sales all match the same rule.
ℹ️ How "contains" works. Contains looks for full-word matches. Department contains Sales picks up users with department values like "Enterprise Sales," "Sales," and "EMEA Sales Team," but does not pick up a department value of "SALESTEAM," because Sales is not a separate word there.
💡 Pro tip: Prefer Contains over Equals when your directory has messy or varied values. Departments like "Enterprise Sales" and "EMEA Sales Team" will all land on one Sales team with a single Contains rule, where Equals would miss them.
3. How rules combine
You can control how conditions and rules stack.
| Combination | Behavior | Use it when |
|---|---|---|
| Match ALL (AND) | A user must meet every condition in the rule. | You want a precise group, for example department contains Sales AND a specific management level. |
| Match ANY (OR) | A user matching any condition is added. | You want to gather several groups into one team. |
| Multiple rules | Rules combine so a user matching any rule is added. | You are building a broad team from distinct groups. |
Example: To build a broad revenue team, add one rule for a specific job title, and another rule for Department equals Marketing. A user who matches either rule is placed on the team. One set of rules can populate the team from several different attribute values.
💡 Pro tip: Build the narrowest rule first, save, and check who came in before adding ANY or additional rules to widen it. Adding one condition at a time makes it easy to see the effect of each.
4. How membership stays in sync
Rules are not a one-time import. Membership evaluates on every directory sync event, so as information syncs from your identity provider through SCIM, changes in your system flow into Spekit automatically.
- A user newly matches a rule: they are added on the next sync.
- A user's attributes change so they no longer match: the rule's claim on that membership is dropped, and the user is removed from the team, unless another rule still holds them there.
⚠️ Rules only remove what rules added. Memberships you manage manually, or that come from IdP group sync, are never removed by the rule engine.
5. Dynamic rules alongside manual members
Dynamic rules and manual membership coexist on the same team. Admins and Team Admins can still manually add users who do not fit the defined rules, and those manual memberships stay put regardless of the rules. This lets you cover the exceptions, the one person who should be on a team even though their attributes do not match, without giving up automatic membership for everyone else.
6. Reading the indicators
Spekit shows where a team's membership comes from, so you always know what you can manage by hand.
| Indicator | Where | What it means |
|---|---|---|
| Lock icon | Teams list | The team is managed through your IdP groups. You cannot manage its membership in Spekit. |
| Rules badge | Teams list | The team has dynamic rules. Hover to see the rules defined for it. |
| Placed-by-rule label | User management view | Shows a user is on the team because they matched a rule. These memberships cannot be removed manually. |
| Manual label | User management view | Shows a user was added by hand. |
💡 Pro tip: When someone appears on a team you did not expect, check their user management view before removing them. If a rule placed them, you cannot remove them by hand, and the fix is to adjust the rule, not the user.
7. Best practices
| Best practice | Why it matters |
|---|---|
| Use Contains for varied values | One Contains rule captures "Enterprise Sales," "EMEA Sales Team," and "Sales" together, where Equals would need a rule for each. |
| Build and verify one rule at a time | Save after each rule and check the resulting membership, so you can see exactly what each condition does before stacking more. |
| Use manual membership for exceptions | Keep rules simple for the 95% case, and add the occasional exception by hand rather than contorting a rule to fit one person. |
| Fix membership at the rule, not the user | A rule-placed member cannot be removed manually. If someone should not be on a team, adjust the rule that is placing them. |
| Confirm the attribute exists before relying on it | If the field you want is not in the dropdown, set it up as a custom attribute first. See Using Custom Attributes in Dynamic Teams. |
ℹ️ Good to know: In this release, rules assign team membership only. They do not assign a role such as Expert or Viewer within a team, and there is no audit log of rule-driven membership changes.