Overview
BimIndex – Live Takeoff is a Revit add-in for live quantity takeoffs and measurement visualization. It scans the active model, calculates quantities per element type according to a set of type-level parameters, and presents the results in an interactive Live Takeoff window. From there you can review, correct, and re-export the data to Excel.
Supported Revit versions
Revit 2023, 2024, 2025 and 2026 are supported.
License model
BimIndex is distributed under three license types: Trial (time-limited evaluation), Standard, and Enterprise (full license with the platinum interface theme). The license type is shown throughout the interface - see Licensing & Activation for the full activation and renewal process.
Getting Started - First Run
The first time BimIndex is run on a workstation, it walks through a series of one-time setup steps before the Live Takeoff window opens. On subsequent runs, most of these steps are skipped automatically - only the license check, phase selection, and splash screen still run every time.
Startup sequence
-
Time synchronization check
Performed silently. BimIndex verifies the system clock against an
NTP time server to prevent license expiry dates from being bypassed
by changing the local clock. If NTP is unreachable, it attempts a
w32tm /resyncfallback. A dialog only appears if both checks fail. -
Privacy Policy
A window titled
Privacy Policydisplays the full privacy statement in a scrollable panel. The"I agree to the terms above"button only becomes active once you scroll to the bottom of the text. Choosing"I do not agree to the terms above"cancels the command. This dialog is shown once per privacy-policy version - it will reappear only if the policy is updated. -
Disclaimer and Terms of Use (EULA)
A window titled
Disclaimer and Terms of Usepresents the license terms (introduction, intellectual property and distribution, usage terms, liability/disclaimer, license validity, and bug reporting). As with the privacy policy, the"I agree to the terms above"button unlocks after scrolling to the end, and the dialog reappears only when the terms are updated. - License check BimIndex reads the local license file and validates it. Depending on the result, one of four outcomes occurs - see the dialog reference table below and Licensing & Activation for the full activation walkthrough.
-
Shared parameters check
Performed silently. If any BimIndex shared parameters are missing
from the current project, they are loaded automatically. If a
parameter fails to load, a warning is shown in the Pending tab of
the Live Takeoff window (see
Tabs Reference).
To load the BimIndex parameters into your own families, use
Help ▾ → ⚙ BimIndex Settings → Shared parameter file…to locate the shared-parameter file (Copy path / Open folder), then point Revit's Manage → Shared Parameters → Browse… at it. -
Unit-of-measure migration (legacy projects only)
If the project still contains the older
Dimension_Keynote_1/Dimension_Keynote_2parameters from a previous BimIndex version, a window titledUoM migrationoffers to migrate them automatically to the current parameter set. Choose"Yes, run migration"to convert the project, or"No, skip"to leave it unchanged. A summary listing the updated types is shown on completion. -
Export settings - reuse or reconfigure
If a settings file from a previous export exists for this project,
a window titled
Export settingssummarizes it (privacy and EULA versions, selected phases, whether pipes are included, the source documents for grids/rooms, and whether Revit parameters are updated on export) and offers"Use saved settings"or"Set up again". Choosing Set up again proceeds to the phase picker below. -
Phase selection
A window titled
Select Phase Combination(s)lists every "Phase Created / Phase Demolished" combination found in the model as a checkbox. Use"Select All"to include everything, or tick individual combinations."OK"stays disabled until at least one combination is selected; leaving everything unselected and clicking"Select All"is the usual choice for a full takeoff."Cancel"aborts the command. -
Splash screen
A branded progress window (
BimIndex - Live Takeoff - "Elevating Measurement Precision") is shown while the model is scanned. A progress bar advances through stages - Initializing BIM Modules…, Model Data: Extracting and Visualizing…, Synchronizing Model Data…, Calculating Quantities… - until it reaches 100% and the Live Takeoff window opens. -
Quick Lesson (guided tour)
The very first time the Live Takeoff window opens, BimIndex maximizes
the window, opens the ITO Configuration panel to half
width, and runs a short
Quick Lesson- a stepped overlay that highlights each key area in turn (ITO Configuration → Detailed ITO → the External Export → the specialized tabs — Materials, Pipes, Door Sets, Empty Elements, Infills and Model Changes (any that aren't currently present are shown as a dimmed preview for the lesson) → loading a keynote → Auto-watch → Sync Selection → Isolate Selection → baseline & Δ tracking → Update). UseNext/Backto move between tips andSkip/Finish(orEsc) to close it. Untick"Show this quick lesson next time"to stop it appearing automatically; replay it any time fromHelp ▾ → 🎓 Quick Lesson.
Dialog reference
Use this table to identify which step you're on if a dialog appears unexpectedly.
| Dialog title | When it appears | Action |
|---|---|---|
Privacy Policy |
First run, or after a privacy policy update | Scroll to the end, then "I agree to the terms above" |
Disclaimer and Terms of Use |
First run, or after an EULA update | Scroll to the end, then "I agree to the terms above" |
BimIndex v - No license |
No license file found on this workstation | Request a trial or license, then drag the received license.bimindex file into the drop zone - see Licensing |
BimIndex v - Invalid license |
License file is for a different machine/user, or tampered | Contact the developer for a new license - see Contact |
BimIndex v - License expired |
License expiry date has passed | "Send mail" to request renewal, then drag in the renewed file |
License expiring soon |
0–21 days remain on the license, shown once per day | "Send mail" to request renewal, or "Close" to continue |
UoM migration |
Project contains legacy Dimension_Keynote_1/2 parameters |
"Yes, run migration" (recommended) or "No, skip" |
Export settings |
A saved preset exists for this project | "Use saved settings", "Set up again", or "Cancel" |
Select Phase Combination(s) |
Setting up (or re-setting up) an export | Select phase combinations, then "OK" |
Window Layout & Toolbar
The Live Takeoff window is organized into three areas: a toolbar across the top, a tab strip with the data grids below it, and a status bar along the bottom edge. The name of the project the take-off is for is shown in the window title bar.
Bound to its project: a Live Takeoff window belongs to the
project it was opened from. Update always re-reads that
project - if you have switched Revit to a family or a different document,
Update shows a message naming the project to switch back to and
does not scan the other document. (Running the ribbon command on a family
is likewise refused, since Live Takeoff is a project tool.)
Toolbar reference
| Control | Label / tooltip | What it does |
|---|---|---|
| Global search box | Search everywhere… |
Filters every tab (Detailed ITO, Pending, Defined, Excluded, External Export, Materials, Pipes, Door Sets, Empty Elements, Infills…) - the active tab live, the rest the moment you open them. Focus with Ctrl+F, clear with Esc. |
| Update (main button) | ⟳ Update - "Re-run export with saved settings" |
Re-runs the takeoff using the current saved settings and refreshes every tab without closing the window. |
| Update (dropdown arrow) | ▾ - "Reconfigure" → ⚙ Reconfigure |
Re-opens the setup dialogs (export settings and phase picker) before re-running the export. |
| Isolate Selection | ⊟ Isolate Selection - "Isolate selected elements in the active view" |
Temporarily isolates the elements behind the selected row(s) in the active Revit view. Equivalent to the Space shortcut. |
| Sync Selection | 🔄 Sync Selection OFF / 🔄 Sync Selection ON |
When ON, selecting an element in Revit automatically jumps to and highlights the corresponding row in the Live Takeoff window. |
| Auto-watch | ⚡ Auto-watch / ⚡ Auto-watch: ON (hover previews the action) |
When ON (amber), BimIndex watches the model and warns you as soon as it is edited so the take-off isn't silently out of date - it raises the Model changed banner and reveals the Model Changes tab. It only watches while ON; running Update re-syncs and clears the tracked changes. Watching adds no overhead while OFF. |
| Help menu | ? ▾ - "Help (F1)" |
Opens a menu with:
Help (F1),
What's New,
🎓 Quick Lesson (replays the first-run guided tour),
⌨ Shortcuts,
✉ Send Feedback,
⚙ BimIndex Settings,
🔑 License…, and
About …
|
Status banners
Depending on the state of the project, one or more banners appear above the data grids:
| Banner | Text | Shown when |
|---|---|---|
| No keynote file | ⚠ No keynote file loaded - click here to load a keynote file to assign articles to element types. |
No keynote file has been loaded for this session |
| Keynote file loaded | ✓ Keynote file loaded - click Update again to refresh the article list |
A keynote file was just loaded and the article list has not yet been refreshed |
| Keynote changes | 📝 Keynote file changed: N articles added, M modified, K removed - Click 'Last keynote changes' to see what was added or modified. |
The loaded keynote file differs from the previous one (see Keynote File Management) |
| Missing shared parameters | ⚠ N element type(s) not shown - BimIndex shared parameters are not loaded in this project. with Load parameters now and Which types? buttons |
One or more BimIndex shared parameters could not be found in the project (Pending tab). Which types? lists the exact element types that are hidden - these belong to categories the BimIndex parameters are not bound to. |
| Model changed (Auto-watch) | ⚡ Model changed since last update - Quantities may be off. Click update to refresh your data! |
Auto-watch is ON and the model has been edited since the last Update. Click the banner to re-run Update, or dismiss it with ✕ (it returns on the next change). See the Model Changes tab for exactly what changed. |
Status bar
The bottom edge of the window shows
© {Company}. All rights reserved. | Version {PluginVersion}
on the left, and the current selection count (for example
3 rows selected) on the right.
Tabs Reference
Up to eleven tabs can appear along the top of the data area. Some tabs only appear when the model contains relevant elements (for example, the Pipes tab only appears if the model contains piping, and Model Changes only appears once Auto-watch has detected a change).
Detailed ITO
The main quantity summary. Articles are grouped by article/keynote number; expand a row to reveal every element contributing to that article's total.
Columns: Article, Description, Total, Unit, Price, Grid, Room, Level, Element ID, Δ Qty, Δ Price (Price / Δ Price appear when unit rates are defined). Use the ⚙ Columns… button to remap what each data column shows and to show or hide the Price, Grid, Room, Level, Element ID, Δ Qty and Δ Price columns.
| Right-click action | Effect |
|---|---|
Copy naming convention (ArticleNo) | Copies the generated naming-convention string for this article to the clipboard. |
Find in Defined | Jumps to the matching type row in the Defined tab. |
Δ (quantity baseline): the last column shows how each article's
total has changed since you last pinned a baseline. Click
📌 Commit baseline in the toolbar at a milestone (e.g. tender issue) to
save the current totals; every later Update then shows the cumulative
change per article - ▲ +n if it grew, ▼ -n if it shrank,
NEW for an article that did not exist at baseline, and blank when
unchanged. Expand an article and the Δ column also marks the individual element
rows that drove the change - ▲ for elements that were added or grew,
▼ for elements whose quantity dropped - so you can see exactly what moved.
The baseline is stored alongside the keynote snapshots and is shared with
the team when a shared folder is configured. Committing again replaces the baseline.
Once a baseline exists, the Δ Changes only filter appears, narrowing the
list to just the articles whose totals moved (or are NEW). When an
Update finds that totals have drifted from the baseline, an amber banner
appears at the top of the window - e.g. "12 article totals have changed since the
baseline of 21/06/2026 14:30 - 8 ↑, 3 ↓, 1 new". Click the banner to jump straight
to Detailed ITO with Δ Changes only switched on, or dismiss it with ✕.
Manual quantities & margins: not everything is modeled, and estimates often
need a waste/safety factor. Use the ➕ Manual article toolbar button to add a brand-new
(non-modeled) article number, or right-click an existing article row to ➕ Add manual quantity…
or % Set margin…. The manual-quantity dialog's unit is a
dropdown that defaults to the article's Project Specification UoM (locked to the Master when "Lock UoM
to Master Specification" is on; otherwise an edit writes the unit back to the project keynote). A margin adds an Extra x%
line equal to base × x/100 (the extra only), so the article total becomes
base × (1 + x/100). To change an entry, right-click the manual row
itself: ✎ Edit manual line… lets you set all the Detailed-ITO fields
(Description, Quantity, UoM, Grid, Room and Level) and 🗑 Remove manual line deletes it; a
margin row offers ✎ Edit margin %… / 🗑 Remove margin. Manual rows are
sorted into article order in Detailed ITO, External Export and the auto-exported Excel, leave
the Room column blank (they're user-entered, never tagged "No intersecting rooms"), and are shown in
violet to set them apart from the green/blue Revit-derived rows. Manual entries are
saved per project (a .manual.tsv file next to the keynote) and flow into the Price column,
GRAND TOTAL, Δ columns and Excel/External Export exports. Adding or editing a manual entry does not
re-run the takeoff automatically - the ⟳ Update button is flagged (⟳ Update *)
to show a change is waiting; click it when you're ready to refresh.
Unmatched keynotes: if an element's keynote is not found in the
loaded keynote file, it can't be grouped under a real article. Rather than hide it,
BimIndex lists it under a flagged ⚠ Not in keynote list group - one per
unknown keynote value (the group's Article is that raw keynote). These
groups carry the red ⚠ badge and are revealed by the
⚠ Errors only filter, so the tab's error count always corresponds to rows
you can actually see and fix (for example pipes carrying a Keynote_Pipes
value, or a Defined type whose keynote isn't in the list). Correct the keynote (or add
it to the keynote file) and run Update to move them under their article.
Mixed units of measure: an article must use a single unit. If the types
grouped under one article number carry different units (for example m² and m³),
the article total would sum incompatible quantities, so BimIndex flags it: the article shows
the red ⚠, its Total reads ⚠ mixed (no unit),
and it is included in the ⚠ Errors only filter. The per-element rows still
show their individual units. Fix it by giving the contributing types the same unit of measure
(UoM) for that article. In the External Export tab the same elements are highlighted
red and are included in its ⚠ Errors only filter, so you can isolate every
row affected by a mixed article there too.
This tab also has its own search box, an
⚠ Errors only filter, a
🔄 Last keynote changes filter, a
Δ Changes only filter (after a baseline is committed), a
phase dropdown, and an
⊟ Collapse all button - see
Search, Filter & Sort.
Phase filter: on phased (renovation) models a dropdown lists the
Phase Created / Phase Demolished combinations found in the take-off - the same
combinations used by the phase picker when you run an Update. Entries read as
New Construction / none (created, not demolished) or
Existing / New Construction (existing, demolished in New Construction), so you
can isolate the new-build set or the demolition set. It's a visibility filter - hidden when
the model has no phase distinction, and the article Total is not recalculated
(use the element-level External Export tab for exact per-phase quantities).
Pending
Element types that have not yet been configured for export.
Columns: TypeName, UoM_Keynote_1, UoM_Keynote_2, Keynote, Keynote_2
| Right-click action | Effect |
|---|---|
Set Article No. 1 & UoM | Opens the keynote picker to assign the type's primary article number and unit of measure. |
Set Article No. 2 & UoM | Opens the keynote picker to assign a secondary article number and unit of measure. |
Set Doorsetnumber Doors only | Opens the Door Set instance dialog to assign a door-set number per instance - see Type Management Workflow. |
Set Material Articles & UoM | Opens the Measure Materials dialog to assign article numbers to the type's material layers. |
Mark As Excluded / Mark [N] selected As Excluded | Moves the type(s) to the Excluded tab. |
Defined
Types that have been configured in this session and are included in
the export. The tab label shows the number of defined types and, if
any have errors, an error count - for example
Defined (5) ⚠ 2.
Columns: Category, TypeName, UoM_Keynote_1, UoM_Keynote_2, Keynote, Keynote_2
| Right-click action | Effect |
|---|---|
Change Article No. 1 & UoM non-pipe | Re-opens the keynote picker for the primary article number / unit. |
Change Article No. 2 & UoM non-pipe | Re-opens the keynote picker for the secondary article number / unit. |
Change Doorsetnumber Doors only | Re-opens the Door Set instance dialog. |
Change Material Articles & UoM | Re-opens the Measure Materials dialog. |
Set Naming Convention for this type | Available once Article No. 1 is set; opens the Naming Convention Generator for this type - see Type Management Workflow. |
Set Naming Convention for all types (N) | Batch version of the above, applied to every selected type that has a keynote assigned. |
Send to Pending / Send [N] selected to Pending | Moves the type(s) back to the Pending tab and clears their assigned keynotes. |
Mark As Excluded / Mark [N] selected As Excluded | Moves the type(s) to the Excluded tab. |
Excluded
Types that have been explicitly excluded from the export.
Columns: Category, TypeName, UoM_Keynote_1, UoM_Keynote_2, Keynote, Keynote_2
| Right-click action | Effect |
|---|---|
Set Article No. 1 & UoM non-pipe | Assigns a primary article number, effectively re-including the type. |
Set Article No. 2 & UoM non-pipe | Assigns a secondary article number. |
Set Material Articles & UoM non-pipe | Opens the Measure Materials dialog and moves the type to Defined. |
Send to Pending / Send [N] selected to Pending | Moves the type(s) back to the Pending tab. |
External Export conditional
Geometry-based dimension data for elements whose quantities are derived from geometric properties rather than simple parameters.
Columns:
Article no., Description 1, Description 2,
Description 3, Length, Width,
Height, #, coeff,
Custom1–Custom5, Revit unique id, Dimension
| Right-click action | Effect |
|---|---|
Find in Detailed ITO | Jumps to the matching article in the Detailed ITO tab. |
Change Article No. 1 & UoM / Change Article No. 2 & UoM | Re-opens the keynote picker for the corresponding article number. |
Change Doorsetnumber Doors only | Re-opens the Door Set instance dialog. |
Change Material Articles & UoM | Re-opens the Measure Materials dialog. |
Change keynote piping system Pipes only | Re-assigns the piping-system keynote for the selected pipe(s). |
Change Material Article Pipes only | Re-assigns the material article for the selected pipe(s). |
Change UoM… multi-row | Changes the unit of measure for all selected rows at once. |
On phased models this tab also offers the same phase dropdown as Detailed
ITO (the Created / Demolished combinations, e.g. New Construction / none
or Existing / New Construction). Because External Export is element-level, the phase filter
here is exact - the visible rows and their quantities are precisely the chosen combination's
set (e.g. the demolition package).
Materials conditional
Lists every element that has at least one material layer flagged for
material takeoff (Export_Materials = Yes), with one row
per material layer and its calculated quantity. Populated and
configured via the Measure Materials dialog - see
Type Management Workflow.
Excluded Materials conditional
Material layers that were considered for takeoff but explicitly excluded, either for a specific type or globally. Kept separate so excluded layers remain visible and can be re-included later.
Pipes conditional
MEP pipe system elements, grouped and quantified by piping system and diameter.
| Right-click action | Effect |
|---|---|
Mark As Excluded / Mark [N] selected pipes As Excluded | Sets Keynote_Pipes to ! on the selected pipe instance(s), removing them from the takeoff without deleting them. |
Door Sets conditional
Door-type elements grouped for door-set numbering. Each door instance
can carry its own Keynote_Door_Setnumber, assigned via
the Door Set instance dialog - see
Type Management Workflow.
Empty Elements conditional
Elements that were scanned but produced no quantity and do not match any other tab - typically elements in categories BimIndex does not process. Listed here so they are not silently dropped from the review.
Model Changes conditional
Appears only while Auto-watch is ON and the
model has been edited since the last Update. It lists exactly what
changed - one row per element - so you can review the drift before re-running
the take-off:
- Added - a new model element (e.g. a copy).
- Modified - an element you already counted (or a newly added one) that was then edited.
- Deleted - an element that is now gone.
Columns: Change, Category, Description 1,
Level, Element ID, and Last edited by
(the worksharing "last changed by" - populated only in workshared models; blank
otherwise and for deleted rows). Noise such as sketch/model lines, legend
components, view-specific elements and family types is filtered out, so only real
model instances are shown. Double-click a row to isolate that
element in the active view (deleted rows have no element to show). Running
Update re-syncs the take-off and clears the list (the tab disappears
until the next change).
Search, Filter & Sort
Search
| Search box | Tooltip | Scope |
|---|---|---|
| Global toolbar search | Search everywhere - filters every tab (Esc = clear) |
Filters whichever tab you're on as you type (250 ms debounce); the term is applied to the other tabs the moment you switch to them, so it covers all tabs. |
| Detailed ITO search | Search by article number or description (Ctrl+F | Esc = clear) |
Filters the article list in this tab only. |
| Pending / Defined / Excluded search | Search by category, description or article (Esc = clear) |
Filters the type list in the corresponding tab (250 ms debounce). |
| Other tabs (External Export, Materials, Pipes, Door Sets, …) | Search in this tab (Esc = clear) |
Filters that tab's rows only. |
Filters
-
⚠ Errors only- shown on the Detailed ITO tab and on the Defined tab (when it contains errors). Restricts the list to rows whose quantity is one of the error values described in Error Messages. -
🔄 Last keynote changes- shown on the Detailed ITO tab. Restricts the list to articles that were added, modified, or removed by the most recently loaded keynote file (see Keynote File Management). -
⊟ Collapse all- shown on the Detailed ITO tab. Collapses every expanded article row back to its summary line.
Sorting
On tabs that present a flat list (such as Detailed ITO), click a
column header - Total, Article No.,
Description, or Unit - to sort by that
column. Click the same header again to reverse the sort direction
between ascending and descending.
Selection & Isolation
- Shift + Click - selects a contiguous range of rows.
- Ctrl + Click - adds or removes individual rows from the current selection.
-
Isolate Selection (
⊟ Isolate Selectiontoolbar button, orSpace) - temporarily isolates the Revit elements behind the selected row(s) in the active view. Pressing the shortcut again restores the previous view. -
Sync Selection (
🔄 Sync Selection ONtoggle) - when enabled, selecting element(s) directly in Revit highlights and scrolls to the matching row(s) in the Live Takeoff window. Useful when cross-checking specific elements against the takeoff. - Find in Detailed ITO / Find in Defined - context menu actions (see Tabs Reference) that jump from a row in one tab to its corresponding article or type in another tab.
- Copy naming convention (ArticleNo) - context menu action on Detailed ITO rows that copies the generated naming-convention string for that article to the clipboard, for pasting elsewhere.
Keyboard Shortcuts
| Shortcut | Action | Context |
|---|---|---|
F1 | Opens Help | Anywhere in the window |
Esc | Clears the current row selection and the focused search box | Anywhere in the window |
Ctrl+F | Moves focus to the search box of the active tab | Anywhere in the window |
Ctrl+C | Copies the selected row(s) to the clipboard | Any data grid |
Space configurable | Isolate / restore the selected elements in the active Revit view | Any grid with a row selection |
P configurable | Sends the selected type(s) back to Pending | Defined or Excluded tab, with a row selected |
X configurable | Marks the selected type(s) as Excluded | Pending or Defined tab, with a row selected |
The three shortcuts marked configurable
can be reassigned from Help ▾ → ⚙ BimIndex Settings.
Type Management Workflow
Every element type in the model ends up in one of three tabs: Pending (not yet configured), Defined (configured and included in the export), or Excluded (explicitly skipped). The sections below describe how a type moves between these states and how its export configuration is set up.
Assigning article numbers
From the Pending tab, right-click a type and choose
Set Article No. 1 & UoM (and optionally
Set Article No. 2 & UoM). This opens a keynote
picker where you select the article/keynote code and confirm its unit of
measure. The picker has a Source switch -
Project (the loaded project keynote, the default),
Master (the selected Master Specification), or
Both (merged, each row tagged [P]/[M],
project winning on duplicate keys) - so you can pull an article straight from the
master. Once Article No. 1 is
set, the type moves to the Defined tab. The same
actions are available as Change Article No. 1/2 & UoM
from the Defined and External Export tabs to revise the assignment later.
Smart UoM (single source of truth)
When you pick an article number, BimIndex looks up its unit in the
specifications and pre-fills the UoM picker for you. The picker
shows a small hint telling you where the pre-filled unit came from. Which
specification is authoritative depends on the
Lock UoM to Master Specification toggle:
- Lock on - the Master Specification is authoritative. For any article that exists in the master, the unit is forced to the master value and the picker is skipped (read-only).
- Lock off - your Project Specification is the working source of truth. The unit is pre-filled from the project (falling back to the master, then to your last/default unit). If you change the unit for an article that is already in the project keynote, the Project Specification is updated automatically to match - so it stays in sync and the same suggestion is used next time.
- New article - if the article is in neither specification, the picker opens at your last/default unit. After you confirm, BimIndex offers to save the new article (with a description and the chosen unit) to the Project Specifications. (Skipped automatically when no project keynote is assigned yet.)
- Master article not yet in the project - if you pick an article from the Master that the project doesn't have, BimIndex offers to add it to the Project Specifications with its description prefilled from the master.
If you override a unit that differs from the authoritative specification,
the confirmation dialog shows a warning so the change is deliberate. The
same pre-fill applies to the Set Material Articles & UoM dialog (for the
m²/m³ units it supports).
Naming Convention Generator
Available from the Defined tab via Set Naming Convention for
this type (single type, requires Article No. 1 to be set) or
Set Naming Convention for all types (N) (batch, applied
to every selected type that has a keynote assigned). This dialog
controls how BimIndex generates a standardized type name:
- Prefix - a short project prefix (defaults to
AA) placed at the start of generated names. - Auto-rename types - toggle controlling whether the Revit type is renamed automatically whenever its article number changes.
-
Article number length - optionally shorten the
ArticleNotoken to its first N dot-separated parts (e.g. First 2 parts turns21.3.2into21.3); Full number keeps it as-is. Applies everywhere the article number is used (renamed type names, the NCG column and the export). -
Shortname codes (
Config…) - theShortnametoken resolves each Revit category to a short code (e.g. Curtain Panels → CP). ClickConfig…on the Shortname row to open a searchable editor and override any code to your firm's standard; only the codes you change are stored (per project, in the shared folder), and Reset to default restores the built-in codes. -
Template builder - assemble the generated name from
tokens such as
ArticleNo,Shortname, andArticle_description, plus project-information parameters. Tokens can be reordered with up/down arrows, shown or hidden with checkboxes, and separated by custom characters you define per token. - Live preview - shows the resulting type name as you edit the template.
Buttons: Reset to default, Cancel, Save.
Copy naming convention (ArticleNo) on a Detailed ITO
row (see Tabs Reference) to copy the
generated name for a single article without opening this dialog.
Door Sets
For door types, Set Doorsetnumber (Pending) /
Change Doorsetnumber (Defined, External Export) opens the Door
Set instance dialog. It lists every door instance of the type in a
grid with columns Level, Element ID, and
Keynote_Door_Setnumber. Each instance's door-set number
can be typed directly or selected via the
… picker; clicking a row highlights that door instance
in the active Revit view. Confirm with Confirm, or
discard changes with Cancel.
Material takeoff
Set Material Articles & UoM (Pending, Excluded) /
Change Material Articles & UoM (Defined, External Export)
opens the Measure Materials dialog. It reads the material layers
making up the selected type and lets you:
- Select which material layers should be quantified independently.
- Assign an article/keynote number to each selected material.
- Choose the unit for each material -
m²(area) orm³(volume).
Confirming the dialog flags the selected materials for export
(Export_Materials) and adds a row per material layer to
the Materials tab. Materials you choose not to
quantify for this type are tracked in the
Excluded Materials tab, so the exclusion is visible
without affecting other types that use the same material.
Pipes
-
Assigning a piping-system keynote - on the External Export
tab,
Change keynote piping systemassigns the article number used for a pipe's piping system (stored inKeynote_Piping_Systemon the Piping System type), andChange Material Articleassigns the material article for the pipe. -
Excluding pipes - on the Pipes tab,
Mark As Excluded/Mark [N] selected pipes As ExcludedsetsKeynote_Pipesto!on the selected pipe instance(s), removing them from the takeoff totals without deleting them from the model.
Moving types between tabs
| Action | From | To | Effect |
|---|---|---|---|
Mark As Excluded | Pending, Defined | Excluded | Type is skipped by the export. |
Send to Pending | Defined, Excluded | Pending | Any assigned article numbers/keynotes are cleared; the type needs to be configured again. |
Set Article No. 1 & UoM | Pending, Excluded | Defined | Type becomes part of the export. |
Keynote File Management
Loading a keynote file
If no keynote file is loaded for the session, the
⚠ No keynote file loaded banner is shown at the top of
the Live Takeoff window (see
Window Layout & Toolbar).
Click the click here to load a keynote file link in the
banner, select the project's keynote .txt file, then
click ⟳ Update to refresh the article list using the
loaded codes.
Tracking keynote changes
Each time a keynote file is loaded, BimIndex compares it against the
previously loaded version and reports the differences in the
📝 Keynote file changed banner: how many articles were
added, modified, and
removed. Enable the
🔄 Last keynote changes filter on the Detailed ITO tab to
show only the affected articles - added and modified articles are
highlighted, and articles referencing removed codes are flagged so
they can be reassigned.
Merging keynote files
To consolidate multiple keynote .txt files into one - useful when keynote
lists have diverged across disciplines or templates - open the
Keynote Configurator panel (its rail on the right edge of Live Takeoff) and use the Project pane's
Open ▾ → Merge keynote files…. Select two or more keynote
.txt files; entries are combined and de-duplicated by key
(first occurrence wins) and shown in natural hierarchical order. The merged
list is loaded straight into the Project specification pane so you can
review and edit it. As soon as you edit it, it auto-saves (you're asked once where to keep
the merged keynote); use Save ▾ → Set as project keynote to apply it to the model.
Creating & editing keynotes (Keynote Configurator)
The Keynote Configurator is a collapsible side panel in the
Live Takeoff window: click its Keynote Configurator rail on the right edge to
open or close it (it sits next to the ITO Configuration rail; either or both can be
open, and each panel is resizable). It is also reachable from Settings →
Keynote Configurator…, which opens the panel. It is a three-pane editor:
Article configuration (a shared add/edit form) on the left, the
Project specification in the middle, and the
Master specification on the right. Each list pane shows a
live preview exactly as Revit's keynote browser renders it (an
indented hierarchy) with its own search and collapse/expand. The Article-configuration
form edits whichever pane the Editing → Project / Master selector
points at (clicking a row in a pane also switches the selector to it). Drag the
splitters to resize, or untick Show master to reclaim width.
-
Start from existing, new, or Excel
On the Project pane:
Load project keynoteopens the file assigned to the project,Search keynote…opens any keynote.txtor Excel.xlsxnot in the project. On the Master pane: a dropdown at the top lists every master workbook in the company Master specifications folder - pick one to load it; the last one you used re-opens automatically.Import…builds the master from any other spreadsheet. See Importing from Excel below. -
Add a keynote
Choose a parent key (type to filter, or click a row
in the preview to use it as the parent). BimIndex auto-suggests the
next free key in the parent's own numbering style
(e.g.
00.11.13→00.11.14, or.A,.B→.C) - the suggestion is always editable. Type the keynote text, pick a unit of measure (pc / m¹ / m² / m³ - see Units of measure below), and clickAdd.New child of selectedstarts another entry under the selected row. -
Edit or remove
Click a row in the preview to load it into the form - the primary button then reads
Save changes(renames cascade to nested keynotes); typing a brand-new key turns it back intoAdd.Delete selectedremoves the row (a branch with nested keynotes asks for confirmation). You can also right-click any article forEdit,New child,DeleteandSend to {Project/Master} specification(copies the article together with its parent headers to the other pane). Duplicate keys, missing parents and cyclic nesting are flagged before they can be saved.Ctrl+Z/Ctrl+Y(or the↶/↷buttons) undo and redo your edits. -
Find & validate
Each pane has its own search box (
Ctrl+Ffocuses the active pane's) that filters the tree to matching keys/text - matches stay shown in context and are highlighted;Escclears. The⊞/⊟buttons expand-all / collapse-all that pane. Each pane shows a live validation chip (✓ Validatedor⚠ N issue(s)) that re-checks the whole list as you edit - for duplicate keys, missing parents, cycles, illegal characters and empty text; click the chip to open the report and double-click an issue to jump to that row. -
Project specification auto-saves (.txt + .xlsx)
The Project pane is a live document: every add, delete or edit is saved
automatically (debounced) to the Revit keynote
.txt- the standard three columns (UTF-8, no BOM) that Revit reads - plus a companion.uom.tsvfor units/extra columns and a same-name.xlsxmirror, all kept in sync. The project keynote also loads automatically when you open the configurator, so there is no manual save or reload step. TheOpen ▾dropdown holds onlyNew keynote (blank)(choose where to save it, then it's created and loaded into the project),Load existing…(open a different keynote.txtor Excel.xlsx), andMerge keynote files…. A smallSave ▾holds the occasional actions:Set as project keynoteandExport a copy to Excel…. -
Save to Excel (.xlsx)
Either pane's
Save to Excel…writes the full editable workbook - lossless: the whole hierarchy, units and every extra column in one file. Keep this as your master to re-open / re-import. -
Set as project keynote (optional)
On the Project pane,
Set as project keynotewrites the keynote.txtand points the project's keynote table straight at it in one click - no manual trip to Keynoting Settings. It applies in the Revit model; run⟳ Updateafterwards. If your Revit version doesn't allow setting it programmatically, point the keynote table at the auto-saved.txtvia Annotate ▸ Keynote ▸ Settings instead.
Units of measure
Each article can carry an advisory unit of measure
(pc / m¹ / m² / m³),
shown as an inline dropdown next to measurable (leaf) rows in the preview -
click it to change the unit straight from the list (or use the
Unit of measure field on the left). New articles default to
pc; the unit is always editable. Because Revit's keynote
.txt format has only three columns (key, text, parent), the
unit is never written into the .txt - it is
stored in a small companion file next to it
(<name>.uom.tsv) and reloaded automatically. Saving to
Excel keeps the unit inside the workbook instead. The unit here is
documentation only; the quantities in the take-off are still driven by
each type's UoM_Keynote_1/2 parameters.
Importing from Excel
Import Excel… builds a keynote list from a spreadsheet such
as a company master price book. Columns are matched by their header name,
falling back to A = key, B = description,
E = unit code (0=pc, 1=m¹,
2=m², 3=m³). The first row is treated as a header
and skipped. If the sheet has no parent column, the hierarchy is
derived from the key (each article nests under the
longest existing key that is a prefix of it - e.g. 01.2.a
under 01.2, 01 under 0); review the
result in the preview and adjust as needed. Import replaces the current
list, so use Save Keynotefile or Save to Excel… afterwards.
Every column is preserved and editable. Any columns
beyond key / description / unit (for example a classification or
article-type column, or columns the master spreadsheet gains later) appear
as editable inputs in the Additional fields panel when you
select a row - you can read, fill in, or change each value, and the edit
commits with Add / Save changes. Saving back
to .xlsx writes all columns in their original
order - the managed fields (key, description, parent, unit) and the extra
fields all reflect your edits - so nothing is lost. When Save Keynotefile
(or Set as project keynote) generates the Revit .txt,
that file keeps the three columns Revit reads while the units and extra fields
are written to a small companion file next to it (<name>.uom.tsv)
and restored automatically - so re-opening that .txt
with Load project keynote brings the Additional fields back ready to
edit. The set of extra columns is also remembered, so the
same Additional fields appear (empty, ready to fill) on any other keynote
you load or create - not only ones already saved with them.
Unit rates & pricing
If the master or project keynote has a unit-rate column - any column whose
header is one of Unit Price, Unit Rate, Price,
Rate or EHP (case-insensitive) - BimIndex treats it as the price per unit and prices the
take-off automatically: each Detailed ITO article gets a Price = quantity ×
rate, shown in a Price column on the Detailed ITO grid. The rate rides
the same Additional-fields path as any other extra column, so you
can read or edit it per article in the Configurator and it persists in the project sidecar.
Rates are read project-first, then master, so a project can override a master rate. Values are
parsed tolerantly (€ 1.234,56, 1234.56 and 12,50 all
work). Articles with mixed units get a blank Price (a single price is
meaningless when the rows are measured in different units). With no rate column present, nothing
changes - Price stays blank everywhere.
Adding the price column to the master specification. In the master Excel,
add one extra column and give it a header that
BimIndex recognises as the unit rate. The recommended header is Unit Price; any of
the names listed above also work, and a currency or unit suffix is fine
(Unit Price (EUR), Rate (€) are both
detected). Put the price for each article on its own row (a plain number such as
170 or 170,50; a currency symbol is optional).
Which column (position)? It doesn't matter - BimIndex matches the price column by its header name, not by its position, so you can place it in any column (A, B, Z…). Just keep it separate from the columns BimIndex already manages (key / description / parent / unit) and give it its own header. The only time position matters is if you have more than one price-like column: the left-most matching one is used. After adding or editing prices in the master, re-import it (or re-select it as the project keynote) so the new prices flow into the take-off.
No price column yet? You don't need to edit Excel to start pricing. In the
Configurator, click + Add price field above the Additional fields
panel - it creates a unit-price column (Unit Price) on the spot. Select an
article, type its price, and Add / Save changes: the price is stored
in the project keynote and immediately feeds the Detailed ITO Price column and
the BoQ export. The column is remembered, so it stays available on every keynote you open or
create.
Currency. Pick the currency from the dropdown next to + Add price field
(EUR, USD, GBP, CHF, SEK, NOK, DKK, PLN, CAD, AUD). The setting is per project, so
different projects can use different currencies. Prices then read with the symbol on the Detailed
ITO grid (e.g. 1.200,00 €) and the currency appears in the Excel Price and
Rate column headers (the cells stay numeric so Excel can still total them).
Grand total. When any article is priced, a total bar is pinned at
the bottom of the Detailed ITO list showing GRAND TOTAL = the sum of every article's
price across the whole takeoff (not just the filtered rows). It updates as you change the currency
or re-run the takeoff. Unpriced articles count as zero and mixed-unit articles are excluded (hover
the total for the exact breakdown). When a baseline is committed, the bar also shows the
total cost change vs that baseline, e.g. GRAND TOTAL 6.000,00 € (Δ +210,00 €).
Δ Price (cost change). Alongside the quantity Δ Qty column (which now
shows its unit, e.g. ▲ +12 m²), a Δ Price column reports each article's
cost change since the last committed baseline (▲ +360,00 € / ▼ -150,00 €),
and the same change appears on each expanded element row (that element's quantity change × the unit
rate). It captures both quantity and unit-rate changes, because the committed baseline stores each
article's price. An article that had no price at the baseline counts as 0 there, so the
first time you price it the full amount shows as an increase. A baseline committed before this
feature shows no price delta until you re-commit.
Master specification & "Lock UoM to Master Specification"
The right-hand Master specification pane is the company master
list - the standard articles and their units. Masters live in a central
company-wide folder (set once per workstation in Settings → Master
specifications, typically a network share) that is separate from each project's
shared folder, so every project reads the same masters. The folder can hold
more than one master workbook (e.g. per sector); the dropdown at the
top of the pane selects which to load, and your last choice is remembered. It is
read-only by default; click Edit master (you'll be warned that
it's company-wide) to unlock it, then Save settings writes your changes back to
the selected master and stores the company-wide lock default. Save ▾ → Save as new
master… creates an additional workbook in the folder. Project keynotes are governed
against the selected master with the Lock UoM to Master Specification toggle on the
Project pane:
-
On - any project article that also exists in the master
adopts the master's unit and its UOM becomes read-only (shown with a
🔒 and greyed-out). Articles that are only in the project stay freely editable.
Turning the lock on (or re-opening a project while it's on) shows a preview
of every UOM that will change (
article: was → now); on Apply the project UOMs are set to match the master. - Off - every UOM is freely editable, independent of the master.
The toggle has a company-wide default (stored in the shared folder so the whole team inherits it) that an individual project can override. This keeps the same article measured in the same unit across every project and complements the mixed-unit error checks on the Detailed ITO / External Export tabs.
Keynote Coverage Report
Settings → Keynote Coverage Report… opens a read-only report that
compares the articles actually used in the take-off against the master and project
specifications, so you can see at a glance what's missing or out of place:
- Unused master articles - articles in the selected master specification that no element in the model uses yet. Useful for spotting work that hasn't been modelled or keynoted.
- Orphans - articles assigned to elements that exist in neither the master nor the project specification (typos, ad-hoc numbers, or articles from an older master). These are the rows to clean up or add to a spec.
The Export to Excel button writes the report to a workbook (List, Article,
Description, Used-by count). The report is purely diagnostic - it never changes the model or the
keynote.
Export & Updating Results
Update vs. Reconfigure
| Button | What it does | Use when… |
|---|---|---|
⟳ Update |
Re-runs the export immediately, reusing the current saved settings (phases, included pipes, grid/room source documents, etc.), and refreshes every tab. | You've edited element parameters or loaded a new keynote file and want the takeoff to reflect the changes. |
▾ → ⚙ Reconfigure |
Re-opens the export-settings and phase-picker dialogs (see Getting Started - First Run) before re-running the export. | You need to change the phase selection, included pipes, or source documents for grids/rooms. |
Export settings file
Each project's export settings are saved to:
%APPDATA%\BimIndex\{ProjectNumber}_{ProjectName}_preset.ini
It stores:
IncludePipes- whether pipe elements are part of the export.GridDocumentName- the document grids are read from.RoomDocumentName- the document rooms are read from.SelectedCombos- the phase combinations included.UpdateRevitParameters- whether calculated values are written back to Revit parameters on export.
This file is what the Export settings dialog
("Use saved settings" / "Set up again")
reads from on the next run.
Output files
Export produces an Excel workbook (.xlsx)
containing one worksheet per relevant tab - typically
Meetstaat (the Detailed ITO summary), Errors,
Pending, Defined, Excluded,
Pipes, Materials, External Export, and
Door Sets - matching the tabs described in
Tabs Reference. By default the workbook is written to
%APPDATA%\BimIndex\; set a different location under
Settings → Export (the Open Excel button opens the last one).
When a unit-rate column is present, the Meetstaat
sheet gains a Price column (quantity × rate per article) and the workbook
gets an extra BoQ sheet: the project keynote rendered as a bill of quantities -
the DEEL/HOOFDSTUK hierarchy with each article's
Quantity | Unit | Rate | Price, indented section subtotals, and a grand
TOTAL row at the bottom.
Generate Category Filters & Views
This tool creates a set of QC views and filters directly in the Revit project, so the export status of every element can be visualized without leaving the model:
-
Five 3D views:
BimIndex - Defined,BimIndex - Pending,BimIndex - Excluded,BimIndex - Warnings, andBimIndex - Total. -
Four status filters applying color overrides -
each of the first four views highlights its own status in color
(green for Defined, amber for Pending, red for Excluded, orange for
Warnings) while dimming everything else; the
Totalview shows all four colors at once.
These filters can also be applied to any other project view via Visibility/Graphics Overrides for custom QC dashboards.
Licensing & Activation
License types
| Type | Description | Visual indicator |
|---|---|---|
| Trial | Time-limited evaluation license. | Trial countdown banner showing days remaining. |
| Standard | Full, non-expiring (until renewal) license. | No special badge. |
| Enterprise | Full license with the platinum interface theme. | "Enterprise Edition" badge + platinum splash screen. |
License file
The license file is stored at:
%APPDATA%\BimIndex\Revit {version}\license.bimindex
It is bound to a single workstation and user via a fingerprint derived from the Windows machine ID, the user's account SID, and the Revit version - a license issued for one combination will not activate on another.
Activating a license
If no valid license is found, the
BimIndex v - No license dialog appears:
-
Copy your activation code
The dialog shows a read-only fingerprint/license code with a
Copybutton. -
Request a license
Click
Request free trial periodorRequest license. Each pre-fills an email (via Outlook) to the developer with your activation code and system details - see Contact / Support. -
Activate the received file
Once you receive a
license.bimindexfile by reply, drag it onto the drop zone in the dialog. On success it shows✓ License valid until YYYY-MM-DDand the dialog's button changes toStart BimIndex. If the file doesn't match this workstation, it shows✗ This license is for a different computerin a red highlight - in that case, contact the developer for a corrected license.
Renewal and expiry
-
0–21 days before expiry - a
License expiring soondialog appears once per day, showing the expiry date and aSend mailbutton to request renewal. -
After expiry - the
BimIndex v - License expireddialog appears on launch. ClickSend mailto request a renewed license, then drag the receivedlicense.bimindexfile onto the drop zone as during initial activation. -
Invalid license - if the license file is for a
different workstation or has been tampered with, the
BimIndex v - Invalid licensedialog appears. Contact the developer for a replacement license.
Parameter Reference
These are the type-, material-, and instance-level parameters that control how an element is processed. Most are set automatically by the dialogs described in Type Management Workflow - this table is useful for auditing a project directly in Revit's parameter editor or with a parameter-management tool.
| Parameter | Applies to | Values | Description |
|---|---|---|---|
Export_Keynote_1 |
Type | Yes / No | Marks the type for export and carries its primary article/keynote number, set via Set/Change Article No. 1 & UoM. |
Export_Keynote_2 |
Type | Yes / No | As above, for the secondary article/keynote number set via Set/Change Article No. 2 & UoM. |
UoM_Keynote_1 |
Type | Integer, 0 – 3 | Quantity source for Article No. 1: 0 = Count, 1 = Length, 2 = Area, 3 = Volume. |
UoM_Keynote_2 |
Type | Integer, 0 – 3 | Same scale as UoM_Keynote_1, applied to Article No. 2. |
Export_Length |
Type | Number | Custom length override, used when the corresponding UoM_Keynote_* is 1. |
Export_Area |
Type | Number | Custom area override, used when the corresponding UoM_Keynote_* is 2. |
Export_Volume |
Type | Number | Custom volume override, used when the corresponding UoM_Keynote_* is 3. |
Export_Height |
Type | Length, > 0 | Custom height used when deriving area or volume from geometry. Make it a Length-type parameter (entered in your project units); a plain Number-type value is read in your Project Units Length unit (e.g. mm). |
Export_Width |
Type | Length, > 0 | Custom width used when deriving area or volume from geometry. Make it a Length-type parameter; a Number-type value is read in your Project Units Length unit. |
Export_Materials |
Type | Yes / No | Set by the Measure Materials dialog when one or more material layers are flagged for separate material takeoff. |
Dimension_Material |
Material | 2 (area) / 3 (volume) | Quantity basis for a material layer's takeoff row in the Materials tab. |
Keynote_Piping_System |
Piping System type | Text | Article number used for pipes belonging to this piping system, set via Change keynote piping system. |
Keynote_Pipes |
Pipe instance | Text, or ! |
Article number for an individual pipe. Set to ! to exclude the pipe from the takeoff. |
Keynote_Door_Setnumber |
Door instance | Text | Door-set reference number, assigned per instance via the Door Set instance dialog. |
Error Messages
When BimIndex cannot resolve a quantity for an element, the
Total column shows one of the following error strings
instead of a number. All error strings begin with
Error, which is what the
⚠ Errors only filter (see
Search, Filter & Sort) matches
on.
Dimension / unit of measure
| Message | Meaning / fix |
|---|---|
Error dimension | The UoM_Keynote_1 / UoM_Keynote_2 parameter is not present on the type, or its value is outside the 0–3 range. Add the Integer parameter and set it to 0 (Count), 1 (Length), 2 (Area), or 3 (Volume). |
Error Quantity not found | No quantity could be derived for the selected dimension. Check that the corresponding Export_* or built-in parameter is filled in. |
Length (UoM = 1)
| Message | Meaning / fix |
|---|---|
Error Export_Length not found | Export_Length is missing on the type. Add the parameter or switch to using the built-in Length value. |
Error Export_Length has unsupported storage type | Export_Length exists but is not a numeric parameter - recreate it as a Number/Length parameter. |
Error Length parameter not found or invalid | Neither Export_Length nor a usable built-in Length parameter could be read from the element. |
Area (UoM = 2)
| Message | Meaning / fix |
|---|---|
Error Export_Area not found | Export_Area is missing on the type. Add the parameter or rely on the built-in Area value. |
Error Area not found | No usable built-in Area parameter could be read from the element. |
Error sloped glazing area not computed | The element is sloped glazing whose area Revit has not computed - open the element in a 3D view to force Revit to compute its geometry, then re-run Update. |
Volume (UoM = 3)
| Message | Meaning / fix |
|---|---|
Error Export_Volume not found | Export_Volume is missing on the type. Add the parameter or rely on the built-in Volume value. |
Error Volume not found | No usable built-in Volume parameter (e.g. HOST_VOLUME_COMPUTED) could be read from the element. |
Height & width overrides
| Message | Meaning / fix |
|---|---|
Error Export_Height not found or invalid | Export_Height is missing or not numeric on the type. |
Error Export_Height must be greater than 0 | Export_Height is zero or negative - enter a positive value. |
Error Export_Width (or Export_Height fallback) not found or invalid | Neither Export_Width nor its Export_Height fallback is present/numeric on the type (Edge Slab / Fascia / Gutter / Cornice at UoM 2). |
Error Export_Width must be greater than 0 | Export_Width is zero or negative - enter a positive value. |
For the full calculation chain behind each category (which built-in parameters are tried, in what order, and how External Export dimensions are derived), see Quantity Calculation Reference.
Quantity Calculation Reference
This section is the complete, category-by-category reference for how
the # quantity column (Qty_Keynote_1 /
Qty_Keynote_2) is calculated for every Revit category. It
is also provided as a standalone document -
BimIndex_Quantity_Reference.html /
BimIndex_Quantity_Reference.md, shipped alongside this
file - for convenient offline reference.
Dimension_Keynote_1 / Dimension_Keynote_2
(String, "0"–"3") and Exported_#_Keynote_1 /
Exported_#_Keynote_2 parameters have been replaced by
UoM_Keynote_1 / UoM_Keynote_2 (Integer, 0–3)
and Qty_Keynote_1 / Qty_Keynote_2. BimIndex
offers a one-time automatic migration on first run after upgrading -
see Getting Started - First Run.
How it works
The type parameter UoM_Keynote_1 (or
UoM_Keynote_2) is set on the Revit element
type (not the instance). It tells BimIndex which
physical quantity to read for the # column. The
value is an Integer: 0, 1,
2, or 3.
All Revit internal values are stored in decimal feet. BimIndex converts to SI before writing to the export:
| Quantity | Conversion factor | Result unit |
|---|---|---|
| Length | × 0.3048 | m¹ |
| Area | × 0.092903 | m² |
| Volume | × 0.028317 | m³ |
Overview
| UoM_Keynote value | Meaning | Output unit |
|---|---|---|
| not present on type | Not configured | "Error dimension" |
0 | Count | always "1" |
1 | Length | m¹ |
2 | Area | m² |
3 | Volume | m³ |
UoM_Keynote_1 to 0, 1,
2, or 3 (Integer). If the parameter is not
present on the type at all, BimIndex reports
"Error dimension".
UoM value 0 - Count
Always returns "1". No category distinction, no
parameter lookup.
UoM value 1 - Length
BimIndex walks the following lookup chain and stops at the first success:
| Step | Parameter | Where | Storage type | Action |
|---|---|---|---|---|
| 1 | Length | Instance | Double | × MetersPerFoot → m¹ |
| 2 | Export_Length | Instance | Double | × MetersPerFoot → m¹ |
| 3 | Export_Length | Type | Double | × MetersPerFoot → m¹ |
| 4 | Export_Length | Instance or Type | String | Used as-is (no conversion) |
| - | Nothing found | "Error Export_Length not found" | ||
Length parameter (step 1) is present on
Walls, Structural Framing, Curtain Wall Panels, etc. For family
instances without a built-in length, add a shared
Export_Length parameter to the type.
UoM value 2 - Area
Export_Keynote_1 = Yes must be set on the type
(exportEnabled = true). If No, the result is
"Error Quantity not found" - no area is
calculated at all.
BimIndex checks the element's category and routes to the correct source in this order:
2a - Railings
Category: OST_Railings
| Source | Formula |
|---|---|
Built-in CURVE_ELEM_LENGTH (instance) | × MetersPerFoot = length in m |
Type Export_Height (Double) | × MetersPerFoot = height in m |
| Result | length × height → m² |
Possible errors:
- "Error Length parameter not found or invalid" -
CURVE_ELEM_LENGTHmissing - "Error Export_Height not found or invalid" -
Export_Heightnot on type - "Error Export_Height must be greater than 0" -
Export_Height = 0
2b - Edge Slab, Fascia, Gutter, Roof Soffit, Cornices
| Source | Formula |
|---|---|
Built-in CURVE_ELEM_LENGTH (instance) | × MetersPerFoot = length in m |
Type Export_Width (Double) | × MetersPerFoot = width in m |
Fallback: type Export_Height (Double) | used when Export_Width is empty or ≤ 0 |
| Result | length × (width, or height fallback) → m² |
Width → Height fallback: if Export_Width is missing or ≤ 0, the plugin
falls back to Export_Height. It's bound to Edge Slabs, Fascias, Gutters and Cornices so
the fallback is available (added automatically on existing projects on the next Update with
parameter-update confirmed).
Possible errors:
- "Error Length parameter not found or invalid" -
CURVE_ELEM_LENGTHmissing - "Error Export_Width (or Export_Height fallback) not found or invalid" - neither
Export_WidthnorExport_Heightpresent/numeric on the type - "Error Export_Width must be greater than 0" - both width and the height fallback are
0
2c - Loadable / FamilyLike categories
The following categories all use the Export_Area shared parameter:
| Step | Parameter | Where | Storage type | Action |
|---|---|---|---|---|
| 1 | Export_Area | Instance | Double | × SqMetersPerSqFoot → m² |
| 2 | Export_Area | Type | Double | × SqMetersPerSqFoot → m² |
| 3 | Export_Area | Instance or Type | String | Used as-is |
| - | Nothing found | "Error Export_Area not found" | ||
Export_Area carries a value (a positive number or non-blank text) it wins -
letting you override the measured area. Otherwise (when Export_Area is missing,
0 or empty) the panel's built-in Area is used directly (sq ft → m²).
If neither is available it falls back to
"Error Export_Area not found".
Note: to exclude a panel use the keynote
!, not Export_Area = 0.
2d - System families (Walls, Floors, Ceilings and others)
| Step | Parameter | Where | Storage type | Action |
|---|---|---|---|---|
| 1 | Area (LookupParameter) | Instance | Double | × SqMetersPerSqFoot → m² |
| 2 | Export_Area | Instance or Type | String only | Used as-is (no conversion) |
| - | Nothing found | "Error Export_Area not found" | ||
Area parameter visible in
Revit's properties panel accounts for openings and deductions - this
is what step 1 reads.
2e - Roofs
| Condition | Source | Action |
|---|---|---|
| Family or type name contains "Sloped Glazing" | Pre-computed sloped-glazing area map (see below) | × SqMetersPerSqFoot → m² |
| Family or type name contains "Sloped Glazing" - not in map | - | "Error sloped glazing area not computed" |
| Standard roof | LookupParameter("Area") on instance (Double) |
× SqMetersPerSqFoot → m² |
Standard roof - Area missing |
- | "Error Area not found" |
Export_Area parameter.
Instead, once per export it temporarily duplicates a project "Basic
Roof" type, copies every sloped-glazing roof instance, swaps the copy
to that temporary type, and reads the resulting
HOST_AREA_COMPUTED (the flat/projected roof area) - all
inside a transaction that is rolled back immediately afterwards, so
the model is left unchanged. The result is cached in an in-memory map
keyed by element ID for the rest of the run. If no "Basic Roof" type
exists in the project, or the roof could not be copied, the element is
left out of the map and the # column shows
"Error sloped glazing area not computed".
UoM value 3 - Volume
BimIndex uses two different sources depending on the element category:
3a - Select loadable categories (uses Export_Volume)
Applies to: Columns Structural Columns Doors Generic Models Railings Detail Components
| Step | Parameter | Where | Storage type | Action |
|---|---|---|---|---|
| 1 | Export_Volume | Instance | Double | × CubMetersPerCubFoot → m³ |
| 2 | Export_Volume | Type | Double | × CubMetersPerCubFoot → m³ |
| 3 | Export_Volume | Instance or Type | String | Used as-is |
| - | Nothing found | "Error Export_Volume not found" | ||
3b - All other categories (uses built-in volume)
Applies to: Walls Floors Roofs Ceilings Structural Framing and all others not in 3a
| Source | Action |
|---|---|
Built-in HOST_VOLUME_COMPUTED (instance) | × CubMetersPerCubFoot → m³ |
| Missing | "Error Volume not found" |
Special case - Pipes
Pipes bypass ComputeExportedQuantity entirely.
The # column is set directly to the built-in pipe length:
| Column | Value |
|---|---|
| # (col L) | CURVE_ELEM_LENGTH × MetersPerFoot (m¹) |
| Dimension (col U) | "1" (hardcoded) |
| Row_Type (col V) | "Keynote_1" |
| Export_Keynote_1 (col X) | "Yes for pipes" |
Article number assembly
The article number for pipes is built automatically:
Keynote_Piping_System- type parameter on the Piping System type (e.g."52.01")- Pipe diameter - first integer parsed from the
Diameterparameter (e.g."32"from"Ø 32 mm") - Result:
"52.01.32"
Keynote_Piping_System is empty, the article number becomes:
"Keynote_Piping_System not found for example xx.xx.xx.32"
Keynote_Pipes.
Special case - Materials
When a type has Export_Materials = 1, BimIndex generates
additional rows - one per qualifying material layer -
alongside the keynote rows. These rows also bypass
ComputeExportedQuantity.
The quantity source is controlled by Dimension_Material,
a parameter on the material itself (not the element type):
| Dimension_Material | Source | Formula | Row written? |
|---|---|---|---|
"2" | element.GetMaterialArea(matId, false) | × SqMetersPerSqFoot → m² | Yes, if > 0 |
"3" | element.GetMaterialVolume(matId) | × CubMetersPerCubFoot → m³ | Yes, if > 0 |
| other | - | - | Row skipped |
- The material has
Export_Material = 1 - The material has a non-empty
Keynoteparameter - The computed quantity is > 0
Row_Type (col V) = "Materials".
The keynote in column B is taken from the material's own
Keynote parameter.
Export_Material = 1 globally (Exclude_Materials,
a type-bound, ;-separated list of material element IDs).
Instances of that type then write an "ExcludedMaterials"
row (Row_Type = "ExcludedMaterials") instead
of a "Materials" row for those materials - with the
quantity column (#) left empty - so they appear on the
Excluded Materials tab rather than being counted.
Special case - Doorsets
When a door instance has Export_Doorsetnumber = 1,
BimIndex generates an additional doorsetnumber row
alongside the normal keynote row. This row uses the same
UoM_Keynote_1 value for its quantity.
Type parameters (cached once per door type)
| Parameter | Type | Purpose |
|---|---|---|
UoM_Keynote_1 | Integer (0–3) | Governs the # quantity of both the keynote row and the doorsetnumber row |
Instance parameters (read per element)
| Parameter | Type | Purpose |
|---|---|---|
Export_Doorsetnumber | Integer (0 or 1) | Enables the doorsetnumber row for this door instance |
Keynote_Door_Setnumber | Text | Article number written to column B of the doorsetnumber row |
Scope_Door_Setnumber | Text | Scope value for the doorsetnumber row |
Row generation logic
| Condition | Row_Type written | Article nr (col B) | # quantity |
|---|---|---|---|
Export_Keynote_1 = No AND Export_Doorsetnumber = 1 |
"Doorsetnumber" |
Keynote_Door_Setnumber |
ComputeExportedQuantity using UoM_Keynote_1 |
Export_Keynote_1 = Yes AND Export_Doorsetnumber = 1 |
"Keynote_1+Doorsetnumber" |
Keynote_Door_Setnumber |
Same value as the keynote1 row (exportedKeynote1) |
exportedKeynote1, which is the result of
ComputeExportedQuantity with UoM_Keynote_1.
There is no separate UoM setting for doorsets - the quantity type
follows the keynote1 row.
Parameter writeback
When the user chooses to update Revit parameters after export, BimIndex
writes Qty_Door_Setnumber = "1" (hardcoded
count, regardless of UoM) for every door where
Export_Doorsetnumber = 1.
"1" - it is not the
calculated area or length. It simply marks that the doorsetnumber row
was exported.
All possible error values in column #
Any row where column L contains "error",
"quantity not found", or "volume not found"
(case-insensitive) is counted as an error row and
appears in the Excel Errors tab - see also
Error Messages. Every error value below
already starts with "Error".
| Value in column # | Cause |
|---|---|
| "Error dimension" | UoM_Keynote_1 / UoM_Keynote_2 is not present on the type |
| "Error Quantity not found" | UoM is set but no matching parameter was found (default fallback) |
| "Error Export_Length not found" | UoM=1 - neither Length nor Export_Length found on instance or type |
| "Error Export_Length has unsupported storage type" | UoM=1 - Export_Length exists but is not Double or String |
| "Error Length parameter not found or invalid" | UoM=2 - Railing or Edge Slab/Fascia/Gutter/Cornice, CURVE_ELEM_LENGTH missing or wrong type |
| "Error Export_Height not found or invalid" | UoM=2 - Railing, Export_Height not on type or wrong storage type |
| "Error Export_Height must be greater than 0" | UoM=2 - Railing, Export_Height = 0 |
| "Error Export_Width (or Export_Height fallback) not found or invalid" | UoM=2 - Edge Slab / Fascia / Gutter / Cornice, neither Export_Width nor the Export_Height fallback present on type |
| "Error Export_Width must be greater than 0" | UoM=2 - Edge Slab / Fascia / Gutter / Cornice, Export_Width = 0 |
| "Error Export_Area not found" | UoM=2 - FamilyLike category or Curtain Wall Panel, no Export_Area on instance or type |
| "Error Area not found" | UoM=2 - standard Roof, Area parameter missing on instance |
| "Error sloped glazing area not computed" | UoM=2 - Sloped Glazing roof, element missing from the temporary area map (no "Basic Roof" type in project, or copy failed) |
| "Error Export_Volume not found" | UoM=3 - Columns / Doors / Generic Models / etc., no Export_Volume on instance or type |
| "Error Volume not found" | UoM=3 - system family, HOST_VOLUME_COMPUTED not available |
Quick setup guide per category
| Category | Recommended UoM_Keynote value | Required type parameters |
|---|---|---|
| Door (count) | 0 | - |
| Door (area, e.g. fire door leaf) | 2 | Export_Area (Double, value in sq ft) |
| Door - doorsetnumber row | follows keynote1 | Export_Doorsetnumber = 1, Keynote_Door_Setnumber + Scope_Door_Setnumber on instance |
| Window | 0 or 2 | Export_Area if UoM=2 |
| Wall (linear run) | 1 | - (uses built-in Length) |
| Wall (face area) | 2 | - (uses built-in Area) |
| Floor | 2 | - (uses built-in Area) |
| Ceiling | 2 | - (uses built-in Area) |
| Roof (standard) | 2 | - (uses built-in Area) |
| Roof (Sloped Glazing) | 2 | - (type or family name must contain "Sloped Glazing"; a "Basic Roof" type must exist in the project for the area map) |
| Structural Framing (length) | 1 | - (uses built-in Length) |
| Structural Framing (volume) | 3 | - (uses built-in HOST_VOLUME_COMPUTED) |
| Railing | 2 | Export_Height (Double) on type |
| Fascia / Gutter / Roof Soffit / Cornice | 2 | Export_Width (Double) on type - or Export_Height as fallback |
| Generic Model (count) | 0 | - |
| Generic Model (area) | 2 | Export_Area on type |
| Generic Model (volume) | 3 | Export_Volume on type |
| Column (structural) | 0 or 3 | Export_Volume on type if UoM=3 |
| Mechanical / Electrical Equipment | 0 | - |
| Furniture | 0 | - |
| Pipe | automatic | Keynote_Piping_System on the Piping System type |
| Material layer (area) | set on material | Dimension_Material = 2, Export_Material = 1, Keynote |
| Material layer (volume) | set on material | Dimension_Material = 3, Export_Material = 1, Keynote |
Troubleshooting / FAQ
The Total column shows "Error …" instead of a number
This means BimIndex could not resolve a quantity for the source
configured in UoM_Keynote_1 /
UoM_Keynote_2. Look up the exact message in
Error Messages for the specific
parameter to check, fix it on the type (or the element, for
sloped-glazing geometry issues), and click ⟳ Update
to recalculate. The ⚠ Errors only filter on the
Detailed ITO and Defined tabs isolates every affected row.
The "No keynote file loaded" banner won't go away
Click the click here to load a keynote file link in
the banner and select the project's keynote .txt file,
then click ⟳ Update. The banner switches to
✓ Keynote file loaded - click Update again to refresh the
article list - click ⟳ Update a second time to
populate the article list. See
Keynote File Management.
A type is stuck in the Pending tab
A type stays in Pending until it has at least
Export_Keynote_1 = Yes with a valid article number.
Right-click the type and choose Set Article No. 1 &
UoM, then click ⟳ Update - it moves to the
Defined tab. See
Type Management Workflow.
I see a trial countdown banner, or a "License expired" dialog
Trial licenses display a countdown banner with the number of days
remaining. Once a license expires, the
BimIndex v - License expired dialog appears on
launch - click Send mail to request a renewal, then
activate the renewed license.bimindex file by
dragging it onto the drop zone. Full details in
Licensing & Activation.
The privacy policy or terms dialog appeared again, even though I already accepted it
These dialogs are shown once per version of the policy or
terms. If the developer publishes an updated privacy policy or
EULA, it will be presented again on the next run - scrolling to the
bottom and clicking "I agree to the terms above"
records acceptance of the new version.
Export feels slow on large models
The export pass scans every element in the selected phases once.
Click the ▾ dropdown next to Update and
choose ⚙ Reconfigure to open the phase picker, then
limit the export to only the phases you need. See
Export & Updating Results.
An element doesn't show up in any tab
Check the Empty Elements tab (see Tabs Reference) - elements that were scanned but produced no quantity and don't match any other tab are listed there rather than being silently dropped.
Sync Selection doesn't seem to highlight anything
Confirm the toolbar button reads 🔄 Sync Selection ON
- it is a toggle, and starts in the OFF state. Also note it only
jumps to rows that are part of the currently filtered/visible list,
so clear any active search or "Errors only" / "Last keynote
changes" filters first.
How do I combine multiple keynote files into one?
In the Keynote Configurator panel (Live Takeoff), use the Project pane's
Open ▾ → Merge keynote files…: pick the source .txt files (the
first occurrence of any duplicate keynote key is kept). The merged list loads into the
Project pane, where you can review it and then save / set it as the project keynote.
See Keynote File Management.
Which Revit versions are supported, and where are exports saved?
Revit 2023–2026 are supported. Exported Excel
files are written to %APPDATA%\BimIndex\ by default, or to a
folder you set under Settings → Export - see
Export & Updating Results.
Legal Documents
The full text of the Privacy Policy and the Disclaimer and Terms of Use (EULA) shown during first-run setup (see Getting Started - First Run). Both documents are also available in Dutch via the language toggle in their respective dialogs - only the English version is reproduced here.
Privacy Policy
Software: Bim Support · Last updated: 13 June 2026
Data controller: Bim Support (Steven Eysackers)
Location: Brasschaat, Belgium
Contact email: info@bimindex.eu
Bim Support (Steven Eysackers) is the data controller for the personal data described in this privacy policy.
1. What data do we collect, and why?
Our software is designed with data minimisation in mind. We collect only the data that is strictly necessary for the technical operation and license security of the software:
-
Computer name, domain name & license code:
The computer name and domain name are used to identify you in
license correspondence. For the license key itself, the software
generates a unique, non-reversible license code (hash) based on a
Windows system ID (
MachineGuid) and the security identifier (SID) of your Windows user account, combined with the Revit version. This code identifies your specific combination of computer and user account, so that a valid license only works on that device/account. - Revit version: This is recorded to check that the software is compatible and that the correct license terms are applied for your specific Revit environment.
-
Internet time check:
The software checks whether the local computer clock is
synchronised with internet time (UTC). Note: this time check is
performed/compared locally only, to prevent license fraud (such as
setting back the clock). This time data is not stored by us. To
perform this check, the software sends a time request to a public
NTP time server (
pool.ntp.org). As with any internet request, this makes your IP address visible to that external party. We do not receive or store this data ourselves. -
Email address, username and computer details (optional):
When you use a button in the software such as
"Request trial","Request license","Renew license"or"Send feedback", an email message is prepared and sent via your locally configured Outlook or default email program. This message contains: your email address (as sender), your Windows username, the computer name, the domain name, the Revit and plugin version, and your license code (see above). This data is used solely to respond to your request or feedback (for example, to deliver a license file). The software does not read or collect this data automatically in the background - this only happens when you send such a message yourself. -
Project export file (optional):
If you check the
"Attach Excel file"option in the feedback window, the exported Excel file is added to the feedback email. This file is based on the Revit project in which Live Takeoff was used, and therefore contains data from that project (quantities, descriptions, room and level names, article numbers, grid references, ...). By attaching this file, you give Bim Support access to this element data. This only happens if you check this option yourself - it is off by default. Only send this file if Bim Support may have full access to this project information; if the project contains sensitive, confidential or secret information, do not attach it.
2. Legal basis for processing
We process this data on the basis of the performance of a contract (Article 6(1)(b) GDPR). Without this technical data, we cannot generate the license and the software cannot function.
For the email address, username, computer and domain details, and - if you choose to attach it - the project export file that you voluntarily share with us via a trial, license, or feedback message, the legal basis is likewise the performance of a contract (for a license or trial request) or our legitimate interest in being able to respond to your feedback (Article 6(1)(f) GDPR).
3. Sharing data with third parties
We do not sell your data to third parties. The data is used solely to
activate your license. License creation and management is handled
internally by BimIndex. For the internal time check, a time request
is sent to the public time server pool.ntp.org; as with
normal internet use, only your IP address is visible to this external
party.
4. Retention period
We retain the computer name, domain name and Revit version for as long as the license is active. After the license expires or is terminated, this data is permanently deleted from our systems within 90 days.
Email messages (and the email address, username and - if attached - project export file they contain) that you send us via the software are retained for as long as necessary to handle your request or feedback, and thereafter in accordance with our normal retention period for email correspondence.
5. Your rights
As a user, you have the right to access, correct or delete the data we have recorded about your computer. Because this data is linked to your license, deleting it will result in the software no longer working. You can send your request to info@bimindex.eu.
6. Belgian Supervisory Authority
If you have complaints about the processing of your personal data,
you can contact the Belgian Data Protection Authority (DPA):
Drukpersstraat 35, 1000 Brussels, Belgium ·
contact@apd-gba.be
Generated in accordance with the General Data Protection Regulation (GDPR) for the Belgian market.
Disclaimer and Terms of Use (EULA)
{licensee} and
{expiry date} in section 5 below are filled in
automatically with your license details when this dialog is shown.
1. Introduction and purpose
This software routine generates a detailed quantity take-off based on building elements. The generated data is intended for import into the external estimating system.
Important notice: This document constitutes a binding License
Agreement (End-User License Agreement, or EULA) between the developer
and the user. By clicking "I agree to the terms above",
you accept all the provisions below.
2. Intellectual property and distribution
2.1. Ownership - This program, including the source code, architecture and all related documentation, is the exclusive intellectual property of the developer Steven Eysackers.
2.2. Autonomous development - The developer Steven Eysackers guarantees that this software is an original work created independently. The underlying logic and architecture are specifically designed to overcome the limitations of common automation solutions on the market. The unique functional scope of this software underlines its status as an independently and newly developed product.
2.3. Usage restrictions - It is strictly prohibited to distribute, duplicate, reverse-engineer, decompile, or use the tool to create derivative products without the express written consent of the developer Steven Eysackers.
2.4. Limited disclosure in case of disputes - The developer Steven Eysackers declares its willingness to disclose the source code exclusively to legal authorities or to an independent expert appointed by the court for a technical examination. This is intended to conclusively demonstrate that the code bears no resemblance whatsoever to third-party code, while the confidentiality of the source code towards the opposing party remains guaranteed.
2.5. System compatibility and technical conformity - The user acknowledges that the software is designed to technically comply with the standards of the external estimating system. The structure of the generated data is therefore a direct consequence of the necessary conformity to these external system requirements. Such technical interoperability is inherent to the intended operation and is entirely unrelated to the underlying source code.
3. Terms of use and user responsibility
The user must carefully observe the following guidelines:
3.1. Care - The application must be used with the utmost care.
3.2. Checking and validation - The user is at all times solely responsible for verifying and validating the generated measurement results against the original source data (including in Revit). The developer accepts NO liability for damage resulting from the use of unvalidated or incorrect data.
3.3. Quality assurance - Performing a clash control on the models is recommended to ensure the accuracy of the underlying data.
3.4. License validation and communication - The user acknowledges and accepts that the software periodically and automatically establishes an internet connection. This connection is used solely to validate the license and synchronise the time, in order to prevent misuse. No personal or usage-related data is collected or stored during this process. The user is responsible for ensuring that this communication is permitted by firewalls or network security.
4. Limitation of liability and warranty (Disclaimer)
4.1. Software 'AS IS' - The software is provided 'AS IS', without any warranty of any kind, express or implied. The developer hereby disclaims all implied warranties, including but not limited to warranties of merchantability or fitness for a particular purpose.
Your feedback on bugs, errors or requests for new features is very welcome and contributes to the improvement of the tool. However, the developer reserves the right to determine the priority, scheduling and implementation of maintenance and updates. This is a unilateral best-efforts commitment and does not create any contractual right to direct support or prompt fixes.
4.2. Exclusion of damages - The developer shall in no event be liable for any direct, indirect, incidental, special, consequential, or punitive damages. This includes, but is not limited to: loss of data, loss of profit, business interruption, or damage caused by errors in the software (bugs).
Maximum liability (cap): If the developer is nevertheless found liable for any direct damage, liability shall in all cases be limited to the amount the user has paid for the software license in the twelve (12) months preceding the event giving rise to the damage.
5. License and validity
The license is a non-transferable, single-user license granted to
{licensee} and is valid solely for installation and use
on one specific workstation. This license is valid through
{expiry date}.
6. Reporting defects and contact
If the user identifies bugs, errors or irregularities in the software, they are kindly requested to report this to the developer immediately:
Contact: Steven Eysackers
Email: info@bimindex.eu
Phone: +32 487 40 90 75
Contact / Support
For trial requests, license activation, or renewals, use the
Request free trial period, Request license,
or Send mail buttons described in
Licensing & Activation - these pre-fill
an email with the information needed to issue or renew a license.
For bug reports or feature requests, use
Help ▾ → ✉ Send Feedback in the Live Takeoff window.