Goal
Export structured model data from a Speckle version to a CSV file you can open in Excel — door schedules, room lists, or custom property reports.What you will build
A script that loads a model, finds doors (or rooms), extracts name, level, type, and fire rating fromDataObject.properties, and writes door-schedule.csv.
When to use this
Use this when a BIM manager, architect, or engineer needs a spreadsheet report from published model data — schedules, QA lists, or quantity exports. This extends the pattern from Build your first model analysis tool.Recommended approach
- Load the latest version with
Receive2(see Automate with scripts) Flatten()the object graph once- Filter
DataObjectinstances byproperties["category"]or similar - Read BIM fields from
properties— not from typed C# classes - Write CSV with
StreamWriter, escaping commas in cell values
Complete example
Room schedule variant
Filter oncategory containing Room and export name, area, and level:
Property names vary by connector and host app. Inspect a sample object in the Speckle viewer or use Find objects by property to discover the keys your model uses.
How it works
Connector-published BIM data is stored asDataObject with semantics in properties. There are no typed Door or Room classes in Speckle Object Model v3 — you filter and read dictionaries.
Flatten() gives you every object in one pass. Build your CSV from that list rather than walking the hierarchy manually unless you need parent context.
Common mistakes
| Mistake | Fix |
|---|---|
| Assuming property names match Revit UI labels exactly | Log properties.Keys from one sample object first |
Checking speckle_type for “Wall” or “Door” | Filter on properties["category"] instead |
| Not escaping commas in CSV cells | Wrap values in quotes when they contain commas |
Calling Flatten() per row | Flatten once, then filter |
Next steps
Find objects by property
Filter, index, and QA checks
BIM data patterns
How connector data is structured
Send analysis results back
Publish QA results to Speckle