BIM Terrain Automation: Dynamo, CSV and Toposolids

Share
BIM Terrain Automation: Dynamo, CSV and Toposolids

"Terrain automation" usually gets sold as one button that turns an address into a finished site model. No such button exists, in Revit or anywhere else. What can be automated is narrower and more useful: getting clean elevation points, turning them into a Toposolid without hand-placing anything, and getting points back out of a Toposolid when another tool needs them.

This post covers the three places automation actually helps in a Revit terrain workflow, the Autodesk tools behind each one, and the parts that still need a person.

What BIM terrain automation actually automates

Terrain automation is often confused with automatic grading. It is not. No tool can decide where a building should sit, what retaining strategy is right, or whether proposed levels meet drainage and access requirements. Those stay design and engineering decisions.

What can be automated is the repetitive work around them:

  • Getting the data: finding elevation coverage for a site, clipping it to a boundary, choosing a spacing and exporting a file in a format Revit reads.
  • Building the Toposolid: creating the element from that file in one step, or from code when you do it often.
  • Getting data out: exporting Toposolid points or volumes to CSV for a consultant, a spreadsheet or another model.

The first is a data problem, the second is mostly solved by Revit itself, and the third is where Dynamo and the API earn their keep.

Step 1: automating the input file

Before any script, the slow part of most site models is still the input. Someone traces contours from a PDF, or waits for a survey, or exports a DTM tile from a GIS package and fights with the format.

For early design this step can be fully automated from public data. National LiDAR terrain models now cover much of Europe, North America and populated Australia at 0.4 to 5 m, with a 30 m bare-earth model elsewhere (coverage by country). Topo-grapher does the clip, sampling and export in the browser: draw the site, pick a spacing, download a CSV of X, Y, Z in metres with no header row and the UTM origin in the file name.

That file is shaped for Revit's importer, which leads to the next step.

Generate a Toposolid-ready CSV free →

Step 2: creating a Toposolid from a CSV without code

For one site, you do not need Dynamo. Revit's own import is already the automated path. Autodesk's steps, from the Revit 2026 help (Create a Toposolid from Imported Data):

  1. Open a 3D view.
  2. Massing & Site tab > Model Site panel > Toposolid > Create from Import.
  3. Click Create from CSV.
  4. Pick the points file, then set the units in the Format dialog and click OK.

Revit "generates points and a toposolid" from the file. The one limit to plan around is point count: the import page says files over 10,000 points are down sampled, and from Revit 2026 the ceiling is set by NativeToposolidMaxPointThreshold in Revit.ini, between 10,000 and 50,000 with a default of 20,000 (Autodesk, Revit 2026 Toposolid Enhancements).

If you do this for one or two sites a month, stop here. A script adds maintenance without saving time.

Can Dynamo create a Toposolid from a CSV?

Yes, but not with an out-of-the-box node in most Dynamo for Revit versions. Users on the Autodesk and Dynamo forums have reported since Revit 2024 that there was no native Toposolid node, so the usual route is a Python node that calls the Revit API.

The API method is Toposolid.Create. The point-based overload takes the document, a list of XYZ points, a Toposolid type id and a level id; the points "construct the top face of the toposolid". From the 2025 API there is also an overload that takes a list of curve loops as well as points, so you can control the boundary (Revit API Developer's Guide: Site).

A typical graph:

  1. File Path > Data.ImportCSV to read the rows.
  2. Convert each row to a point. Revit's API works in internal units (feet), so convert metres if your file is in metres.
  3. A Python Script node that opens a transaction and calls Toposolid.Create(doc, points, typeId, levelId).

One trap is worth knowing before you build it. An Autodesk forum thread reports that the points-only overload builds the Toposolid over the convex hull of the points, which fills in notches and L-shaped sites. The fix suggested there is the overload with curve loops, so you pass the real boundary. Revit's own CSV import has the mirror-image problem: Autodesk notes a concave boundary without data "will generate with a notch".

When is this worth it? When the same steps run many times: a practice that tests dozens of sites a year, a feasibility tool, or a template that builds terrain plus site context on every new project.

Can pyRevit do it?

pyRevit runs Python against the same Revit API, so the Toposolid.Create approach works there too, as a toolbar button rather than a Dynamo graph. That suits offices where people will press a button but will not open Dynamo.

We are not aware of a maintained, built-in pyRevit command that makes Toposolids from a spreadsheet. If you find one, check which Revit versions it supports, because the Toposolid API changed between 2024 and 2026.

How do you export Toposolid points to CSV?

This is the reverse direction, and Revit has no built-in command for it. Schedules list Toposolid parameters such as volume and area, not the points of the surface. Autodesk's excavation volume parameters give "the exact amount of soil to be removed", which is useful, but that is quantities, not coordinates.

For coordinates there are two routes:

  • Dynamo: select the Toposolid, get its geometry (Element.Geometry), take the vertices (Topology.Vertices, then Vertex.PointGeometry), keep the top-surface points by filtering on Z, then write X, Y, Z with Data.ExportCSV. Check units: values come out in the project's internal frame, so add the survey point offset if the receiver expects real-world coordinates.
  • API: read the shape-editing points of the Toposolid's top face and transform them with the project's shared coordinates before writing the file.

Either way, export the shared-coordinate values, not internal ones, or the receiver gets a correct shape in the wrong place.

Where automated terrain adds real project value

The time saved is not the main benefit. Consistency is. When every project's terrain comes from a known source, at a stated spacing, in the same coordinate setup, people stop arguing about whose site model is right.

It also moves the terrain earlier. A site that takes ten minutes to model gets modelled at the feasibility stage, where a 1.5 m level difference across a plot can still change the scheme cheaply.

What automation will not do

  • It will not decide finished floor levels, retaining wall heights or drainage falls.
  • It will not replace a measured topographic survey where tolerances, legal boundaries or construction setting-out need one.
  • It will not fix coordinates. A script places points exactly where the numbers say. If the numbers are in the wrong system, it places them exactly wrong, faster.
  • It will not hide data limits. Public terrain is bare-earth data at a known resolution and date; a site regraded last year will not show it.

Common automation mistakes

The first is scripting before the manual process is right. If the CSV, units and coordinates are not correct when done by hand, a script only repeats the error.

The second is ignoring the point threshold. A graph that worked on a small site silently loses detail on a large one when Revit downsamples. Log the point count in the graph and warn when it exceeds the threshold.

The third is treating automated terrain as survey. Label it with its source and date in the model so nobody mistakes a feasibility surface for measured data.

FAQ

Is there a Dynamo node for Toposolids?
In most Dynamo for Revit versions you will not find a native Toposolid creation node. The common approach is a Python node calling Toposolid.Create from the Revit API.

Can Revit create a Toposolid from Excel?
Not directly from .xlsx. Save the sheet as CSV with X, Y, Z columns and no header, then use Create from Import > Create from CSV.

How do I export Toposolid points to CSV?
There is no built-in command. Use Dynamo to read the element's vertices and write them with Data.ExportCSV, or read the shape-editing points through the API.

Why does my scripted Toposolid fill in the notch of an L-shaped site?
The points-only Toposolid.Create overload is reported to use the convex hull of the points. Use the overload that also takes curve loops to define the real boundary.

How many points can an automated Toposolid have?
The same limit as manual import: 10,000 on the import page, or the NativeToposolidMaxPointThreshold value (10,000 to 50,000) from Revit 2026.

Does Topo-grapher run inside Revit?
No. It runs in the browser and automates the input file. The Toposolid is then created in Revit with Create from CSV or your own script.

Further reading

Read more