Skip to main content

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 a Collection 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.
  1. Load source model with Receive2
  2. Analyse with Flatten() and your rules
  3. Build results as DataObject / Collection graphs (not custom typed classes)
  4. Send2 the result graph, then client.Version.Create
  5. Use Send2/Receive2 — not SendPipeline unless you are building a connector

Complete example

Complete example
You must call client.Version.Create after Send2 — otherwise the sent graph is orphaned and will not appear in the Speckle UI. See Core concepts: orphaned objects.

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

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
Last modified on July 18, 2026