Optimize BIM models in Grasshopper for faster dashboards and cleaner data
This workflow takes a published Revit or IFC model, loads it into Grasshopper through Speckle, strips out unnecessary data, optionally adds useful new properties, rebuilds a cleaner collection structure, and republishes the result for dashboards or other downstream use.
Why this matters
In the standup, this workflow was presented as the answer to a common problem:
Large BIM models often contain far more data than you need for dashboards, presentations, analytics, or web viewing.
That extra weight can:
- Slow down dashboards
- Make models harder to share
- Clutter downstream workflows
- Expose data that some stakeholders should not see
A leaner published model is easier to analyze and easier to trust.
Before you start
You need:
- A Speckle account. If you’re new, the free Speckle Explore plan is enough to test this out.
- Rhino + Grasshopper with the Speckle connector installed
- A Speckle model already published from Revit, IFC, ACC, or another supported source
- Intermediate Grasshopper knowledge
Build a lighter, dashboard-ready model.
Follow along with our team in the video below:
Step 1: Load the model into Grasshopper
In Grasshopper:
- Add the Speckle Model URL node
- Select the workspace, project, model, and version
- Connect it to a Load node
- Click Load
Step 2: Query the collections
Once the model is loaded, inspect its collection structure.
In our example, the Revit model came in roughly as:
- Model root
- Levels
- Categories
- Types
- Objects
Here are the two useful approaches:
Expand collections manually
Useful for learning the tree structure.
Use a collection selector
Better for production workflows.
The collection selector lets you target:
- All items
- Only walls
- Only roofs
- Any other collection path or regex-matched subset
This is especially useful when you only want to process one discipline or one object class.
Step 3: Deconstruct the Speckle objects
The key move in this workflow is to expose the properties you want to keep and drop the rest.
The goal is to remove:
- Type parameters
- Some extra identifiers such as workset ID
While keeping:
- Instance parameters
- Material quantities
- Useful root-level properties
Step 4: Rebuild a lighter property set
After expanding the properties:
- Keep the fields that matter for your dashboard or use case
- Omit the heavy or redundant ones
A very practical example is removing type parameters from a Revit model. This alone can significantly reduce model weight, especially when preparing data for Power BI or dashboard-style analysis.
Step 5: Reconstruct the cleaned Speckle objects
Once you have the lighter property object:
- Create a new Speckle object
- Pass the original geometry back in
- Attach only the cleaned property set
At this stage, you now have a lighter version of each object without changing the visible model geometry.
Step 6: Rebuild collections in a useful way
The next step is to regroup objects by level.
That is useful because dashboards and viewers often work better when the incoming structure is more intentional. Grouping by level, category, discipline, or any other planning logic makes downstream filtering cleaner.
We used Grasshopper’s native list and tree tools to:
- Extract the level property from each object
- Create grouped branches by level
- Rebuild named collections from those grouped objects
This is a strong example of what we describe as mixing Speckle components with native Grasshopper data-tree logic.
Step 7: Publish the optimized model back to Speckle
Create a new model in your Speckle project and publish the cleaned collection tree back to it.
Now you have:
- The original source model
- A lighter analytics-ready derivative model
That separation is useful because it keeps your source intact while giving dashboards a cleaner input.
Step 8: Use it in Speckle Intelligence or another dashboard workflow
Once published, open the cleaned model in Speckle Intelligence or another analytics workflow.
Speckle Intelligence is the place where you can turn model data into dashboards, validation rules, and measurable project insight.
Variations
A. Color-code a model by material logic
Example:
- Isolate elements whose material names contain “concrete”
- Assign one display material to those
- Assign another display material to everything else
- Publish a color-coded analysis model
This is useful for:
- QA checks
- Presentation
- Rapid visual verification
- Material or discipline-specific filtering
B. Add external data from Excel
Example:
- Import an external table with embodied carbon values by IFC type
- Match those values to objects in Grasshopper
- Create a new property set such as “sustainability data”
- Publish the enriched model back to Speckle
- Use the new fields in Speckle Intelligence
That turns a geometry model into something decision-ready, not just viewable.
Best practices
- Start with one clear downstream goal: dashboarding, QA, visualization, or sharing
- Remove only the fields you know you do not need
- Keep source and optimized models separate
- Rebuild collections intentionally for anyone using the data
- Add external data only when the key used for matching is reliable
- Use filtered derivative models when stakeholders should not see everything
Conclusion
This workflow turns a BIM model from a heavy authoring file into something much more useful: structured, reusable data prepared for the next step.
With Speckle and Grasshopper, you can remove unnecessary weight, retain the properties that matter, reorganize the model for clearer analysis, and publish a version better suited to dashboards, reporting, and decision-making.
For teams working across computation, BIM, and analytics, it is one of the clearest ways to make model data easier to use and more valuable downstream.
Build a lighter, dashboard-ready model.