Skip to content

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 */
}