category.name vs category.label
The category field on a FamilySymbol contains two subfields:
"category": {
"name": "Doors",
"label": "OST_Doors"
}
They look interchangeable. They are not.
What each field is
| Field | Example | Source |
|---|---|---|
category.name |
"Doors" |
Display name — shown in the Revit UI |
category.label |
"OST_Doors" |
Internal Revit identifier — the BuiltInCategory enum value |
category.name is the string Revit shows the user in the category dropdown. It is a translated, human-readable label.
category.label is the technical identifier Revit uses internally. It starts with OST_ and corresponds directly to a value in Revit's BuiltInCategory enum.
The problem with category.name
category.name is localised.
A Revit installation in English shows "Doors". The same model opened in a Dutch installation may show "Deuren". In German: "Türen".
A rule that filters on category.name = "Doors" will:
- pass on English installations
- return zero results on Dutch installations — silently, with no error
This is a hard-to-diagnose bug because the rule runs without error, it just finds nothing.
Always use category.label
category.label is the same value in every language, on every installation:
/* Correct — works regardless of Revit language */
$[type = "FamilySymbol" and values.category.label = "OST_Doors"]
/* Fragile — breaks on non-English Revit */
$[type = "FamilySymbol" and values.category.name = "Doors"]
OST_Doors is always OST_Doors. It does not change with locale.
How to find the label for a category
In the DAQS Playground, run this filter to see the category data for any object type:
$[type = "FamilySymbol"].{
"name": name,
"categoryName": values.category.name,
"categoryLabel": values.category.label
}
This shows both fields side by side. The label value is what you copy into your rule.
Common labels:
| Category | Label |
|---|---|
| Doors | OST_Doors |
| Windows | OST_Windows |
| Walls | OST_Walls |
| Floors | OST_Floors |
| Structural Columns | OST_StructuralColumns |
| Mechanical Equipment | OST_MechanicalEquipment |
Summary
Use category.label in all rules. Use category.name only for display purposes — for example, when you want to include a human-readable category name in the filter output for error messages.
$[type = "FamilySymbol" and values.category.label = "OST_Doors"].{
"id": id,
"name": name,
"category": values.category.name /* display only — not used for filtering */
}