Goal
Send derived analysis results — QA flags, health checks, computed metadata — back to Speckle Server as a new published version.What you will build
A script that loads a model, runs property checks on each element, builds aCollection of DataObject results with qaStatus and missingProperties, and publishes a new version with Send2.
When to use this
Use this when you want analysis output visible in Speckle for the team — model health dashboards, QA pass/fail flags, or computed fields from Grasshopper or a console tool. Avoid this when a local CSV is enough — see Export model data to CSV.Recommended approach
- Load source model with
Receive2 - Analyse with
Flatten()and your rules - Build results as
DataObject/Collectiongraphs (not custom typed classes) Send2the result graph, thenclient.Version.Create- Use
Send2/Receive2— notSendPipelineunless you are building a connector
Complete example
How it works
Analysis stays local until you send.Flatten() and your rules produce in-memory DataObject instances. Send2 uploads the graph; Version.Create attaches it to the model’s history.
Results use the same DataObject / Collection shapes connectors expect, so the viewer and other tools can consume them.
Common mistakes
| Mistake | Fix |
|---|---|
Calling Send2 without Version.Create | Always create a version after send |
Using SendPipeline for a small report | Send2 is the recommended path for scripts |
Custom Wall/Door C# types | Use DataObject.properties for interoperability |
| Sending the entire source model back unchanged | Send only the analysis payload |
Next steps
Export model data to CSV
Local reports without publishing
Compare two model versions
Diff between publishes
Load and publish model data
Send2 vs SendPipeline