rvt-to-excelConvert RVT/RFA files to Excel databases. Extract BIM element data, properties, and quantities.
Install via ClawdBot CLI:
clawdbot install datadrivenconstruction/rvt-to-excelBIM data inside RVT files needs to be extracted for:
Convert RVT files to structured Excel databases for analysis and reporting.
```bash
RvtExporter.exe
```
| Mode | Categories | Description |
|------|-----------|-------------|
| basic | 309 | Essential structural elements |
| standard | 724 | Standard BIM categories |
| complete | 1209 | All Revit categories |
| custom | User-defined | Specific categories only |
| Option | Description |
|--------|-------------|
| bbox | Include bounding box coordinates |
| rooms | Include room associations |
| schedules | Export all schedules to sheets |
| sheets | Export sheets to PDF |
```bash
RvtExporter.exe "C:\Projects\Building.rvt" basic
RvtExporter.exe "C:\Projects\Building.rvt" complete bbox
RvtExporter.exe "C:\Projects\Building.rvt" complete bbox rooms schedules sheets
for /R "C:\Projects" %f in (*.rvt) do RvtExporter.exe "%f" standard bbox
```
```python
import subprocess
import pandas as pd
from pathlib import Path
from typing import List, Optional
class RevitExporter:
def init(self, exporter_path: str = "RvtExporter.exe"):
self.exporter = Path(exporter_path)
if not self.exporter.exists():
raise FileNotFoundError(f"RvtExporter not found: {exporter_path}")
def convert(self, rvt_file: str, mode: str = "complete",
options: List[str] = None) -> Path:
"""Convert Revit file to Excel."""
rvt_path = Path(rvt_file)
if not rvt_path.exists():
raise FileNotFoundError(f"Revit file not found: {rvt_file}")
cmd = [str(self.exporter), str(rvt_path), mode]
if options:
cmd.extend(options)
result = subprocess.run(cmd, capture_output=True, text=True)
if result.returncode != 0:
raise RuntimeError(f"Export failed: {result.stderr}")
# Output file is same name with .xlsx extension
output_file = rvt_path.with_suffix('.xlsx')
return output_file
def batch_convert(self, folder: str, mode: str = "standard",
pattern: str = "*.rvt") -> List[Path]:
"""Convert all Revit files in folder."""
folder_path = Path(folder)
converted = []
for rvt_file in folder_path.glob(pattern):
try:
output = self.convert(str(rvt_file), mode)
converted.append(output)
print(f"Converted: {rvt_file.name}")
except Exception as e:
print(f"Failed: {rvt_file.name} - {e}")
return converted
def read_elements(self, xlsx_file: str) -> pd.DataFrame:
"""Read converted Excel as DataFrame."""
return pd.read_excel(xlsx_file, sheet_name="Elements")
def get_quantities(self, xlsx_file: str,
group_by: str = "Category") -> pd.DataFrame:
"""Get quantity summary grouped by category."""
df = self.read_elements(xlsx_file)
# Group and count
summary = df.groupby(group_by).agg({
'ElementId': 'count',
'Area': 'sum',
'Volume': 'sum'
}).reset_index()
summary.columns = [group_by, 'Count', 'Total_Area', 'Total_Volume']
return summary
```
| Sheet | Content |
|-------|---------|
| Elements | All BIM elements with properties |
| Categories | Element categories summary |
| Levels | Building levels |
| Materials | Material definitions |
| Parameters | Shared parameters |
| Column | Type | Description |
|--------|------|-------------|
| ElementId | int | Unique Revit ID |
| Category | string | Element category |
| Family | string | Family name |
| Type | string | Type name |
| Level | string | Associated level |
| Area | float | Surface area (m²) |
| Volume | float | Volume (m³) |
| BBox_MinX/Y/Z | float | Bounding box min |
| BBox_MaxX/Y/Z | float | Bounding box max |
```python
exporter = RevitExporter("C:/Tools/RvtExporter.exe")
xlsx = exporter.convert("C:/Projects/Office.rvt", "complete", ["bbox", "rooms"])
df = exporter.read_elements(str(xlsx))
print(f"Total elements: {len(df)}")
quantities = exporter.get_quantities(str(xlsx))
print(quantities)
df.to_csv("elements.csv", index=False)
```
```python
from semantic_search import CWICRSemanticSearch
exporter = RevitExporter()
xlsx = exporter.convert("project.rvt", "complete", ["bbox"])
df = exporter.read_elements(str(xlsx))
quantities = df.groupby('Category')['Volume'].sum().to_dict()
search = CWICRSemanticSearch()
costs = {}
for category, volume in quantities.items():
results = search.search_work_items(category, limit=5)
if not results.empty:
avg_price = results['unit_price'].mean()
costs[category] = volume * avg_price
print(f"Total estimate: ${sum(costs.values()):,.2f}")
```
basic for quick analysis, complete for full dataGenerated Mar 1, 2026
Extract element quantities like volume and area from RVT files to generate material takeoffs for cost estimation. This streamlines manual counting, reducing errors and saving time for estimators.
Convert RVT files to Excel to integrate BIM data with facility management systems. Enables tracking asset properties and maintenance schedules, improving operational efficiency.
Process multiple RVT projects in batch to compare design elements and properties across different buildings. Supports standardization and quality control in architectural workflows.
Extract BIM element data to calculate material volumes and areas for environmental impact assessments. Feeds into analytics tools for LEED or BREEAM certification.
Offer the RVT to Excel converter as a cloud-based service with subscription tiers based on export modes and batch processing limits. Targets firms needing regular BIM data extraction without local installation.
Provide consulting services to customize the tool for specific client needs, such as adding custom export categories or integrating with existing BI pipelines. Generates revenue from project-based fees.
Sell perpetual licenses of the RvtExporter tool to large construction or engineering firms, including support and updates. Ideal for organizations with high-volume, in-house BIM processing requirements.
💬 Integration Tip
Use the Python class RevitExporter to automate conversions in scripts, and integrate output Excel files with pandas for data analysis or BI tools like Power BI.
Use the @steipete/oracle CLI to bundle a prompt plus the right files and get a second-model review (API or browser) for debugging, refactors, design checks, or cross-validation.
Manage Things 3 via the `things` CLI on macOS (add/update projects+todos via URL scheme; read/search/list from the local Things database). Use when a user asks Clawdbot to add a task to Things, list inbox/today/upcoming, search tasks, or inspect projects/areas/tags.
Local search/indexing CLI (BM25 + vectors + rerank) with MCP mode.
Use when designing database schemas, writing migrations, optimizing SQL queries, fixing N+1 problems, creating indexes, setting up PostgreSQL, configuring EF Core, implementing caching, partitioning tables, or any database performance question.
Connect to Supabase for database operations, vector search, and storage. Use for storing data, running SQL queries, similarity search with pgvector, and managing tables. Triggers on requests involving databases, vector stores, embeddings, or Supabase specifically.
Query, design, migrate, and optimize SQL databases. Use when working with SQLite, PostgreSQL, or MySQL — schema design, writing queries, creating migrations, indexing, backup/restore, and debugging slow queries. No ORMs required.