Headless Revit PDF batch export

Export your entire Revit drawing set to correctly-named PDFs from a terminal — no GUI, no plugin, no per-seat subscription. One command. Works while Revit is running.

Why batch export from Revit is painful

Revit's native Print/Export dialog crashes mid-run on large sheet sets, produces inconsistent file naming, and requires someone to sit at the workstation and click through it. Third-party plugins fill the gap — but they still require Revit's UI to be active and a human in the loop.

bim-cli talks to a lightweight add-in running inside Revit. You call it from a terminal, a script, or an AI agent. No GUI required.

Export a single sheet

export sheet A-101 to PDF
bim revit export --sheet "A-101" --output ./output
{"ok":true,"data":{"path":"output/A-101.pdf","sheet_number":"A-101","sheet_name":"First Floor Plan"}}

Export the full drawing set

export every sheet in the model
bim revit export --all-sheets --output ./output

Each sheet writes to <sheet_number>-<sheet_name>.pdf. A 200-sheet model exports in one command.

Export multiple sheets by number

export a discipline package
bim revit export --sheet "A-101,A-102,A-201,A-202" --output ./output/architecture

Add structured BIM data alongside the PDF

The --bim flag writes 6 JSON sidecars next to each exported PDF. An AI agent can read these files directly to answer questions about the drawing — no Revit session required after export.

export with BIM sidecars
bim revit export --sheet "A-101" --bim --output ./output
output/
  A-101.pdf               standard PDF -- opens in any viewer
  A-101.elements.json     every element: id, category, mark, level, family, type
  A-101.marks.json        element positions in PDF coordinate space
  A-101.rooms.json        room boundaries, names, numbers, areas
  A-101.levels.json       level names and elevations
  A-101.properties.json   all parameters for every element on the sheet
  A-101.views.json        viewport geometry and crop regions
query elements after export -- no Revit required
cat output/A-101.elements.json | jq '[.[] | select(.category=="Doors")]'
[
  {"id": 1234567, "category": "Doors", "mark": "D-01", "level": "Level 1", "family": "Single-Flush"},
  {"id": 1234891, "category": "Doors", "mark": "D-02", "level": "Level 1", "family": "Single-Flush"}
]

Control orientation

force landscape orientation
bim revit export --all-sheets --orientation landscape --output ./output

--orientation auto (default) uses each sheet's own orientation setting.

Use from an AI agent

Because bim revit export is a CLI command, any AI tool with terminal access can call it directly. The agent doesn't need to control the Revit UI, click print dialogs, or understand Revit's export settings.

bim revit export --all-sheets --bim --output ./output/permit

After that command, the agent reads output/permit/*.elements.json to verify element counts, check parameters, or generate a submittal log — all without Revit staying open.

Install

iwr -useb https://bimcli.com/install.ps1 | iex

After install, bim revit install registers the add-in with your Revit version. Restart Revit once. Then export runs from any terminal.