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.

Related document For a detailed, field-by-field explanation of how the quantity column is calculated for every Revit category, see Quantity Calculation Reference. This page focuses on the user interface and day-to-day workflow.

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

  1. 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 /resync fallback. A dialog only appears if both checks fail.
  2. Privacy Policy A window titled Privacy Policy displays 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.
  3. Disclaimer and Terms of Use (EULA) A window titled Disclaimer and Terms of Use presents 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.
  4. 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.
  5. 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.
  6. Unit-of-measure migration (legacy projects only) If the project still contains the older Dimension_Keynote_1 / Dimension_Keynote_2 parameters from a previous BimIndex version, a window titled UoM migration offers 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.
  7. Export settings - reuse or reconfigure If a settings file from a previous export exists for this project, a window titled Export settings summarizes 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.
  8. 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.
  9. 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.
  10. 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). Use Next / Back to move between tips and Skip / Finish (or Esc) to close it. Untick "Show this quick lesson next time" to stop it appearing automatically; replay it any time from Help ▾ → 🎓 Quick Lesson.

Dialog reference

Use this table to identify which step you're on if a dialog appears unexpectedly.

Dialog titleWhen it appearsAction
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

ControlLabel / tooltipWhat 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:

BannerTextShown 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 actionEffect
Copy naming convention (ArticleNo)Copies the generated naming-convention string for this article to the clipboard.
Find in DefinedJumps 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 actionEffect
Set Article No. 1 & UoMOpens the keynote picker to assign the type's primary article number and unit of measure.
Set Article No. 2 & UoMOpens the keynote picker to assign a secondary article number and unit of measure.
Set Doorsetnumber Doors onlyOpens the Door Set instance dialog to assign a door-set number per instance - see Type Management Workflow.
Set Material Articles & UoMOpens the Measure Materials dialog to assign article numbers to the type's material layers.
Mark As Excluded / Mark [N] selected As ExcludedMoves 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 actionEffect
Change Article No. 1 & UoM non-pipeRe-opens the keynote picker for the primary article number / unit.
Change Article No. 2 & UoM non-pipeRe-opens the keynote picker for the secondary article number / unit.
Change Doorsetnumber Doors onlyRe-opens the Door Set instance dialog.
Change Material Articles & UoMRe-opens the Measure Materials dialog.
Set Naming Convention for this typeAvailable 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 PendingMoves the type(s) back to the Pending tab and clears their assigned keynotes.
Mark As Excluded / Mark [N] selected As ExcludedMoves 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 actionEffect
Set Article No. 1 & UoM non-pipeAssigns a primary article number, effectively re-including the type.
Set Article No. 2 & UoM non-pipeAssigns a secondary article number.
Set Material Articles & UoM non-pipeOpens the Measure Materials dialog and moves the type to Defined.
Send to Pending / Send [N] selected to PendingMoves 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, Custom1Custom5, Revit unique id, Dimension

Right-click actionEffect
Find in Detailed ITOJumps to the matching article in the Detailed ITO tab.
Change Article No. 1 & UoM / Change Article No. 2 & UoMRe-opens the keynote picker for the corresponding article number.
Change Doorsetnumber Doors onlyRe-opens the Door Set instance dialog.
Change Material Articles & UoMRe-opens the Measure Materials dialog.
Change keynote piping system Pipes onlyRe-assigns the piping-system keynote for the selected pipe(s).
Change Material Article Pipes onlyRe-assigns the material article for the selected pipe(s).
Change UoM… multi-rowChanges 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 actionEffect
Mark As Excluded / Mark [N] selected pipes As ExcludedSets 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 boxTooltipScope
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 Selection toolbar button, or Space) - 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 ON toggle) - 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

ShortcutActionContext
F1Opens HelpAnywhere in the window
EscClears the current row selection and the focused search boxAnywhere in the window
Ctrl+FMoves focus to the search box of the active tabAnywhere in the window
Ctrl+CCopies the selected row(s) to the clipboardAny data grid
Space configurableIsolate / restore the selected elements in the active Revit viewAny grid with a row selection
P configurableSends the selected type(s) back to PendingDefined or Excluded tab, with a row selected
X configurableMarks the selected type(s) as ExcludedPending 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 ArticleNo token to its first N dot-separated parts (e.g. First 2 parts turns 21.3.2 into 21.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…) - the Shortname token resolves each Revit category to a short code (e.g. Curtain Panels → CP). Click Config… 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, and Article_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.

Tip Use 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 - (area) or (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 system assigns the article number used for a pipe's piping system (stored in Keynote_Piping_System on the Piping System type), and Change Material Article assigns the material article for the pipe.
  • Excluding pipes - on the Pipes tab, Mark As Excluded / Mark [N] selected pipes As Excluded sets Keynote_Pipes to ! on the selected pipe instance(s), removing them from the takeoff totals without deleting them from the model.

Moving types between tabs

ActionFromToEffect
Mark As ExcludedPending, DefinedExcludedType is skipped by the export.
Send to PendingDefined, ExcludedPendingAny assigned article numbers/keynotes are cleared; the type needs to be configured again.
Set Article No. 1 & UoMPending, ExcludedDefinedType 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.

  1. Start from existing, new, or Excel On the Project pane: Load project keynote opens the file assigned to the project, Search keynote… opens any keynote .txt or Excel .xlsx not 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.
  2. 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.1300.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 click Add. New child of selected starts another entry under the selected row.
  3. 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 into Add. Delete selected removes the row (a branch with nested keynotes asks for confirmation). You can also right-click any article for Edit, New child, Delete and Send 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.
  4. Find & validate Each pane has its own search box (Ctrl+F focuses the active pane's) that filters the tree to matching keys/text - matches stay shown in context and are highlighted; Esc clears. The / buttons expand-all / collapse-all that pane. Each pane shows a live validation chip (✓ Validated or ⚠ 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.
  5. 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.tsv for units/extra columns and a same-name .xlsx mirror, all kept in sync. The project keynote also loads automatically when you open the configurator, so there is no manual save or reload step. The Open ▾ dropdown holds only New keynote (blank) (choose where to save it, then it's created and loaded into the project), Load existing… (open a different keynote .txt or Excel .xlsx), and Merge keynote files…. A small Save ▾ holds the occasional actions: Set as project keynote and Export a copy to Excel….
  6. 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.
  7. Set as project keynote (optional) On the Project pane, Set as project keynote writes the keynote .txt and 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 ⟳ Update afterwards. If your Revit version doesn't allow setting it programmatically, point the keynote table at the auto-saved .txt via Annotate ▸ Keynote ▸ Settings instead.

Units of measure

Each article can carry an advisory unit of measure (pc / / / ), 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

ButtonWhat it doesUse 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, and BimIndex - 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 Total view 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

TypeDescriptionVisual indicator
TrialTime-limited evaluation license.Trial countdown banner showing days remaining.
StandardFull, non-expiring (until renewal) license.No special badge.
EnterpriseFull 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:

  1. Copy your activation code The dialog shows a read-only fingerprint/license code with a Copy button.
  2. Request a license Click Request free trial period or Request license. Each pre-fills an email (via Outlook) to the developer with your activation code and system details - see Contact / Support.
  3. Activate the received file Once you receive a license.bimindex file by reply, drag it onto the drop zone in the dialog. On success it shows ✓ License valid until YYYY-MM-DD and the dialog's button changes to Start BimIndex. If the file doesn't match this workstation, it shows ✗ This license is for a different computer in a red highlight - in that case, contact the developer for a corrected license.

Renewal and expiry

  • 0–21 days before expiry - a License expiring soon dialog appears once per day, showing the expiry date and a Send mail button to request renewal.
  • After expiry - the BimIndex v - License expired dialog appears on launch. Click Send mail to request a renewed license, then drag the received license.bimindex file 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 license dialog 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.

ParameterApplies toValuesDescription
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

MessageMeaning / fix
Error dimensionThe 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 foundNo quantity could be derived for the selected dimension. Check that the corresponding Export_* or built-in parameter is filled in.

Length (UoM = 1)

MessageMeaning / fix
Error Export_Length not foundExport_Length is missing on the type. Add the parameter or switch to using the built-in Length value.
Error Export_Length has unsupported storage typeExport_Length exists but is not a numeric parameter - recreate it as a Number/Length parameter.
Error Length parameter not found or invalidNeither Export_Length nor a usable built-in Length parameter could be read from the element.

Area (UoM = 2)

MessageMeaning / fix
Error Export_Area not foundExport_Area is missing on the type. Add the parameter or rely on the built-in Area value.
Error Area not foundNo usable built-in Area parameter could be read from the element.
Error sloped glazing area not computedThe 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)

MessageMeaning / fix
Error Export_Volume not foundExport_Volume is missing on the type. Add the parameter or rely on the built-in Volume value.
Error Volume not foundNo usable built-in Volume parameter (e.g. HOST_VOLUME_COMPUTED) could be read from the element.

Height & width overrides

MessageMeaning / fix
Error Export_Height not found or invalidExport_Height is missing or not numeric on the type.
Error Export_Height must be greater than 0Export_Height is zero or negative - enter a positive value.
Error Export_Width (or Export_Height fallback) not found or invalidNeither 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 0Export_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.

Renamed parameters The old 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:

QuantityConversion factorResult unit
Length× 0.3048
Area× 0.092903
Volume× 0.028317

Overview

UoM_Keynote valueMeaningOutput unit
not present on typeNot configured"Error dimension"
0Countalways "1"
1Length
2Area
3Volume
Where to set it Open the element type in Revit → Type Properties → set 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.

Use for Doors, windows, fittings, equipment - anything counted as individual pieces. The Detail Meetstaat sums these to give total quantities per article number.

UoM value 1 - Length

BimIndex walks the following lookup chain and stops at the first success:

StepParameterWhereStorage typeAction
1LengthInstanceDouble× MetersPerFoot → m¹
2Export_LengthInstanceDouble× MetersPerFoot → m¹
3Export_LengthTypeDouble× MetersPerFoot → m¹
4Export_LengthInstance or TypeStringUsed as-is (no conversion)
-Nothing found"Error Export_Length not found"
Note The built-in 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.
Pipes Pipes are handled differently and bypass this method - see Special case - Pipes below.

UoM value 2 - Area

Prerequisite 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

SourceFormula
Built-in CURVE_ELEM_LENGTH (instance)× MetersPerFoot = length in m
Type Export_Height (Double)× MetersPerFoot = height in m
Resultlength × height → m²

Possible errors:

  • "Error Length parameter not found or invalid" - CURVE_ELEM_LENGTH missing
  • "Error Export_Height not found or invalid" - Export_Height not on type
  • "Error Export_Height must be greater than 0" - Export_Height = 0

2b - Edge Slab, Fascia, Gutter, Roof Soffit, Cornices

SourceFormula
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
Resultlength × (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_LENGTH missing
  • "Error Export_Width (or Export_Height fallback) not found or invalid" - neither Export_Width nor Export_Height present/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:

Columns Structural Columns Doors Generic Models Plumbing Fixtures Windows Duct Terminals Assemblies Casework Curtain Wall Panels * Detail Components Electrical Equipment Furniture Furniture Systems Lighting Devices Lighting Fixtures Mechanical Equipment Parking Pipe Accessory Pipe Fitting Planting Plumbing Equipment Audio Visual Devices Communication Devices Data Devices Electrical Fixtures Entourage Fire Alarm Devices Fire Protection Food Service Equipment Mechanical Control Devices Medical Equipment Nurse Call Devices Security Devices Signage Speciality Equipment Sprinklers Structural Foundation Structural Framing Telephone Devices Vertical Circulation
StepParameterWhereStorage typeAction
1Export_AreaInstanceDouble× SqMetersPerSqFoot → m²
2Export_AreaTypeDouble× SqMetersPerSqFoot → m²
3Export_AreaInstance or TypeStringUsed as-is
-Nothing found"Error Export_Area not found"
* Curtain Wall Panels exception If 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)

StepParameterWhereStorage typeAction
1Area (LookupParameter)InstanceDouble× SqMetersPerSqFoot → m²
2Export_AreaInstance or TypeString onlyUsed as-is (no conversion)
-Nothing found"Error Export_Area not found"
Note For Walls and Floors, the Area parameter visible in Revit's properties panel accounts for openings and deductions - this is what step 1 reads.

2e - Roofs

ConditionSourceAction
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"
Sloped Glazing area map For roof types whose family or type name contains "Sloped Glazing", BimIndex no longer reads an 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

StepParameterWhereStorage typeAction
1Export_VolumeInstanceDouble× CubMetersPerCubFoot → m³
2Export_VolumeTypeDouble× CubMetersPerCubFoot → m³
3Export_VolumeInstance or TypeStringUsed 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

SourceAction
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:

ColumnValue
# (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:

  1. Keynote_Piping_System - type parameter on the Piping System type (e.g. "52.01")
  2. Pipe diameter - first integer parsed from the Diameter parameter (e.g. "32" from "Ø 32 mm")
  3. Result: "52.01.32"
If empty If Keynote_Piping_System is empty, the article number becomes: "Keynote_Piping_System not found for example xx.xx.xx.32"
Writeback After export, if the user chooses to update Revit parameters, BimIndex writes the assembled article number back to the instance parameter 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_MaterialSourceFormulaRow written?
"2"element.GetMaterialArea(matId, false)× SqMetersPerSqFoot → m²Yes, if > 0
"3"element.GetMaterialVolume(matId)× CubMetersPerCubFoot → m³Yes, if > 0
other--Row skipped
Conditions A material row is only written if:
  • The material has Export_Material = 1
  • The material has a non-empty Keynote parameter
  • The computed quantity is > 0
The material row Row_Type (col V) = "Materials". The keynote in column B is taken from the material's own Keynote parameter.
Per-type exclusion From the "Configure Material Measurement" dialog, a type can opt out of measuring specific materials even though those materials have 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)

ParameterTypePurpose
UoM_Keynote_1Integer (0–3)Governs the # quantity of both the keynote row and the doorsetnumber row

Instance parameters (read per element)

ParameterTypePurpose
Export_DoorsetnumberInteger (0 or 1)Enables the doorsetnumber row for this door instance
Keynote_Door_SetnumberTextArticle number written to column B of the doorsetnumber row
Scope_Door_SetnumberTextScope value for the doorsetnumber row

Row generation logic

ConditionRow_Type writtenArticle 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)
Note The doorsetnumber row's # always uses 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.

Writeback value The writeback value is always "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

CategoryRecommended UoM_Keynote valueRequired type parameters
Door (count)0-
Door (area, e.g. fire door leaf)2Export_Area (Double, value in sq ft)
Door - doorsetnumber rowfollows keynote1Export_Doorsetnumber = 1, Keynote_Door_Setnumber + Scope_Door_Setnumber on instance
Window0 or 2Export_Area if UoM=2
Wall (linear run)1- (uses built-in Length)
Wall (face area)2- (uses built-in Area)
Floor2- (uses built-in Area)
Ceiling2- (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)
Railing2Export_Height (Double) on type
Fascia / Gutter / Roof Soffit / Cornice2Export_Width (Double) on type - or Export_Height as fallback
Generic Model (count)0-
Generic Model (area)2Export_Area on type
Generic Model (volume)3Export_Volume on type
Column (structural)0 or 3Export_Volume on type if UoM=3
Mechanical / Electrical Equipment0-
Furniture0-
PipeautomaticKeynote_Piping_System on the Piping System type
Material layer (area)set on materialDimension_Material = 2, Export_Material = 1, Keynote
Material layer (volume)set on materialDimension_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.

Contact / Support

Developer: Steven Eysackers

Email: info@bimindex.eu

Phone: +32 487 40 90 75

Version:

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.