Automation for Archicad

Archicad, on autopilot.

Number every door along a line. Colour the model by any property. Check a project before it goes out. Tapir adds hundreds of commands to Archicad and a palette that runs scripts in one click.

100% freeOpen source (MIT)Watch the tutorialsAll downloads

A floor plan of six rooms on which a script numbers the doors, colours the rooms by area or marks problems Studio · 24 m²Office · 18 m²Meeting · 32 m² WC · 9 m²Store · 14 m²Kitchen · 28 m² Corridor D01 D02 D03 D04 D05 D06
Automatic Numbering Based on Polyline · 6 doors numbered D01–D06

Start where you already work.

Two of the three need no programming. All of them use the same commands.

For architects

Scripts in the palette

Open the Tapir palette, pick a script and press Run Script. The built-in scripts are there from the start, and more are shared by the community.

Browse scripts
For computational designers

Grasshopper

The tapir package in Rhino's Package Manager. Walls, doors, windows and more as components that read and change the model, with the names of Archicad's settings dialogs.

Grasshopper guide
For developers

Python and the JSON API

Every command answers on port 19723, each with a schema and an example. Python's standard library is enough.

Command reference

Six jobs it already does.

Five built-in scripts of the Tapir palette and one workflow script, each a short Python file you can read and change.

  • Built-in script

    Number elements along a line

    Select a polyline and the doors, zones or objects to number. Each one gets its Element ID in the order the polyline passes it.

    Changes the model SetPropertyValuesOfElements

    Automatic Numbering Based on Polyline
  • Built-in script

    Colour the model by a property

    Pick a property; every element gets a colour for its value, with a legend of the values and how many elements have each. Number values can be grouped into ranges.

    Read only HighlightElements

    Property Highlighter
  • Built-in script

    Check a project before it goes out

    Lists elements without an ID, zones with the same number, unclassified and duplicate elements, empty stories and unused layers. Export the list to Excel or turn it into Issues.

    Read only GetClassificationsOfElements

    Project Health Check
  • Built-in script

    Publish on a schedule

    Publishes the chosen Publisher Sets now or on a schedule, every few hours or daily at a set time. It can receive the Teamwork changes and update the drawings first, and logs every run.

    Writes files PublishPublisherSet

    Batch Publisher
  • Built-in script

    Tidy up the View Map

    Finds the views that are neither placed on a layout nor published, and moves the ones you choose into a separate folder that keeps their folder structure.

    Changes the model API.MoveNavigatorItem

    Unused View Cleaner
  • Workflow

    Export the model to OBJ

    Writes the 3D model, or only the selected elements, to a Wavefront OBJ file, one object per element, for Blender and other tools.

    Writes files Get3DGeometryOfElements

    export_obj.py

What you can do today.

Twelve kinds of work offices automate with Tapir, from a palette script to a Grasshopper definition.

  • Property management

    Read and update the properties of hundreds of elements in seconds.

  • Geometry generation

    Create walls, slabs and beams from Python, with the settings you choose.

  • Quantity take-offs

    Material and element quantities for reports, straight from the model.

  • AI assistants (MCP)

    Let an AI assistant read and change your model through a Tapir MCP server.

  • BCF issue tracking

    Create and track issues and exchange them as BCF files from Python.

  • Classification mapping

    Classify elements by naming conventions or by rules on their geometry.

  • Views and layouts

    Script views, sections and the Layout Book.

  • Model checking

    Find missing values and elements that break the office's standards.

  • Office workflows

    Python scripts made for your office's standards, run from the palette.

  • Grasshopper links

    Connect Rhino and Grasshopper definitions to native Archicad elements.

  • Element filtering

    Select elements by type, layer, classification or nested properties.

  • Bulk renaming

    Rename views, layouts and Publisher Sets to match the project's standards.

One file, no packages.

With a project open, Archicad answers JSON commands on http://127.0.0.1:19723. Tapir's commands go through Archicad's API.ExecuteAddOnCommand. Save this as walls.py and run it with any Python 3.

With several Archicads open, the next ones answer on 19724, 19725 and so on.

Your first Python script, step by step →

walls.pyport 19723
import json
import urllib.request

def run_tapir_command(command, parameters=None):
    body = json.dumps({
        'command': 'API.ExecuteAddOnCommand',
        'parameters': {
            'addOnCommandId': {'commandNamespace': 'TapirCommand', 'commandName': command},
            'addOnCommandParameters': parameters or {}
        }
    }).encode('utf-8')
    request = urllib.request.Request('http://127.0.0.1:19723', body, {'Content-Type': 'application/json'})
    with urllib.request.urlopen(request) as response:
        result = json.loads(response.read())
    if not result['succeeded']:
        raise RuntimeError(result['error'])
    return result['result']['addOnCommandResponse']

print(run_tapir_command('GetAddOnVersion'))
walls = run_tapir_command('GetElementsByType', {'elementType': 'Wall'})['elements']
print(len(walls), 'walls')

Where to go next.

The reference, sharing your own scripts, and the people who build Tapir.