Revit has no "import from Excel". So the schedule gets retyped, the graph gets babysat, and nobody can say which side is right.

The retype

The client's room programme changed. Again.

Someone pastes 340 rows into a schedule cell by cell, and the one typo lands on the signage package.

Link: the programme is the source - Refresh shows the 108 cells that moved, Push writes them, one undo
The mystery column

"FR_RATING_FINAL2" - which parameter is that?

Consultant spreadsheets never match your parameter names, and every manual mapping is redone from scratch next issue.

Link: columns match by name first, the rest is one click on the header - saved as a template for next time
The both-sides edit

The file changed. So did the model. Who wins?

A blind import overwrites whichever side was right, and you find out in the door schedule three weeks later.

Link: remembers the last agreed value - both-sides cells go amber, Resolve picks a winner row by row

1 · Two ways in

Start from the model, or start from the file someone sent you. Either way the dialog shows a dry run of the whole plan before the link exists - rows, key, mapped columns, how many rows reach an element - and nothing is written.

The Parapet Link start screen: a ribbon with From Revit, From file, Google Sheet and Workbook; a panel titled Two ways in; and an empty grid reading Revit on one side, your file on the other.
The empty state tells the whole story: From Revit exports a scope and keeps it in sync; From a file opens what you were sent and rows appear at once.
The From Revit dialog: scope Category - every placed element, category Doors 142, a parameter list with Comments and Family and Type ticked, the file Doors.xlsx, key parameter Mark, and a dry run naming the Parapet ID column, the key and the 14 parameters it will write.
From Revit: pick a scope - a category, its types, the current selection or a schedule - tick the parameters, and Link writes the file with a Parapet ID column so rows find their elements even when the keys change. The dry run says it plainly: "Then a link 'Doors · 142 ↔ Doors.xlsx' with every cell in sync. Nothing in Revit changes."
The From file dialog for a CSV: scope Rooms read from the file's Category column, key column Id matching element ids, and a dry run counting 54 rows, 54 of 54 reaching an element, 7 columns mapped by name, 2 not mapped and 108 cells already differing.
From a file: Link reads it and shows the plan - "54 rows · 10 columns · 54 of 54 rows reach an element · 7 mapped by name · 2 not mapped - map them on the grid headers · 108 cells already differ - nothing is written now." You answer one question: is that the link you meant?
The Google Sheet dialog: paste the spreadsheet id or URL; you sign in to Google the first time.
Google Sheets too: paste the URL, sign in once, and the consultant's live sheet is a side of the grid - push to it, pull from it.
The Link workbook dialog: one link per sheet of a workbook, each sheet name matched to a category, columns mapped by name.
Or link a whole workbook at once - one link per sheet, each sheet matched to a category by its name, every mapping adjustable afterwards on the grid headers.

2 · Send a link, not a file

New: From Revit can host the export on parapet.app instead of writing a file. A Parapet Sheet opens in any browser - your consultant edits rows on a page that already knows Revit's rules, and Link pulls the changes back through the same grid.

A Parapet Sheet in the browser: the door schedule Doors - Tower A with 15 rows, a badge reading anyone with the link can edit, the Mark key column highlighted, a Fire Rating column validated in minutes, Self Closing as yes/no and Finish as a pick-one list.
The same door schedule, in the browser. No Excel, no account, no install - whoever gets the link gives a name, edits, and every change is validated and attributed.

The sheet knows Revit

Every column carries its parameter's kind from the export: number columns refuse text ("not a number - min expected"), yes/no is a pick, choices are a list, and the key and Parapet ID columns are protected. What Revit would refuse, the browser refuses first.

Everyone in one place

Several people can edit at once - changes merge cell by cell, appear live for everyone, and each keeps its author's name. Lock the columns a consultant must not touch, require an edit key, or make the sheet read-only with one switch.

Back through the grid

In Revit the sheet is just another source: Refresh shows what moved and who is ahead, cell by cell; Push and Pull work exactly as with a file - dry run first, one undo. Every cell keeps its change history on the sheet.

Approve before push

Flip one switch and edits by others arrive as amber proposals instead of changing the sheet. Approve or reject per cell, row, column or all - in the browser, or with Link's Approve tool - and only approved values can ever reach Revit. Every approval keeps the proposer's name in the history.

It edits like Excel

Select a range and drag the corner square to fill it - A101 becomes A102, 010 becomes 020, and the tag under the cursor says what it is about to do. Ctrl+D fills down, Ctrl+C and Ctrl+V move whole blocks to and from Excel, Delete clears, and Ctrl+Z undoes the whole action - not one cell of it. Set, trim, re-case or renumber a column in one go, find and replace across the sheet, filter each column by its own values, freeze the Mark column while you scroll right.

It tells you what it will do

Every bulk action counts the cells it will change and the ones it cannot before you press Apply - locked columns, the key column, values a pick-one column refuses. Rows can be inserted, duplicated and removed, and a removed row takes nothing with it: the Revit model is untouched, and the owner can put the row back from History with its values and its history intact.

A real editor

Multi-key sort, per-cell history on right-click, comments on rows, CSV import that matches rows by your key, remembered column widths and hidden columns - and "2 others viewing" so nobody edits blind. The status bar counts and sums whatever you select. Works on a phone, too.

Your sheets, one page

The sheets dashboard shows every sheet you host - activity, viewers, proposals waiting - plus the sync timeline of every link after each Refresh, Push or Pull, with a badge for the project wiki. Turn on email notices per sheet, or restore a sheet to how it stood before any day's edits.

Free hosts 1 sheet of 500 rows. Parapet Sheets - included with Link: 100 sheets, 5,000 rows each, full per-cell history. Every sheet also has a CSV address for Dynamo and scripts.

3 · One grid, both truths

Every row is an element, every column a parameter, every cell shows both values. The colour says who is ahead - and the two cards above the grid say what to do about it.

The two-sided grid: room rows keyed by element id, each in the 2-to-pull state; the Category column marked read-only, Family and Type columns marked not mapped, and the Number column mapped - with filter chips for All, Differs, Push, Pull, Conflicts, Invalid, No element and No row.
Filter chips slice the link by state - Differs, Push, Pull, Conflicts, Invalid, No element, No row - and the column headers say which parameter they write, which are read-only, and which are not mapped yet.
terracotta · source newer → push teal · Revit newer → pull amber · both changed → resolve red · cannot write grey · differs, no sync yet
Two insight cards: 108 cells to pull - Revit holds values the source does not, only differing cells are written, rows are never added, with a Pull button; and 2 columns not mapped - Family and Type stay in the source only, with an Auto-match button.
The window reads itself and offers the next move: "108 cells to pull" carries the Pull button, "2 columns not mapped" carries Auto-match. Only differing cells are written; rows are never added.
The Link status bar: Linked Snowdon Towers Sample Architectural CSV to Rooms, 54 of 54 rows matched, then the model name, 1 link, 0 to push, 108 to pull, 0 conflicts, 0 unmatched.
And the status bar keeps score: 54 of 54 rows matched · 7 of 9 columns mapped - click a grey header to map the rest. The same line carries the live counts and the session log.

Push, Pull and Resolve ask which rows first - the ones you selected, the ones the filter shows, or all of them - and every one shows its dry run under the button: cells, elements, what is skipped and why. Type parameters are written once per type, and two rows that give one type different values are flagged before anything is written.

The link detail panel: scope Rooms, source CSV with its full path, on disk modified 23 Aug 2026 with 54 rows, key Id matched to ElementId, last sync never, and a note that with no sync yet differences count as differs.
Every link states its facts: scope, source, what is on disk, the key, the last sync - and its memory of what both sides agreed on, which is how the next Refresh knows who changed what.

4 · 61 tools, three tabs

Everything lives on one ribbon - link management, syncing, and the model side. Every tool that writes shows a dry run under its button first; no pop-up dialogs, no surprises. Click a tab to see the real ribbon.

Click a column header to map it · every tool is one Ctrl+K away
The Source ribbon tab: From Revit, From file, Google Sheet, Workbook, Re-link, Rename, Duplicate and Unlink under Link; Refresh, Open source, Open folder, Save template and Apply template under Check. The Sync ribbon tab: Push, Pull and Resolve under Sync; Map column, Auto-match, Create params and Write keys under Map. The Model ribbon tab: Select rows, No row, Edit in Hub, Color by state and Reset colors under Show; Save as, Schedule and Key schedule under Export.

Shown at full size - scroll the strip sideways to reach the last tools, exactly as you would in Revit.

Templates carry the setup

Save template keeps the scope, key, mappings and parameters; Apply template replays them on the next project's file. The mapping you did once is the mapping you never do again.

Keys that survive people

Key by any parameter or by element id. Files exported From Revit carry a Parapet ID column, so rows still find their elements after someone re-marks every door. Write keys gives numbered keys to elements that have none, so a consultant can add their rows.

The model answers back

Select rows picks the rows' elements in Revit, No row finds the elements the file forgot, Color by state paints the model in the grid's colours, and Edit in Hub hands the rows to Parapet Hub for the bulk edits.

Typical jobs

Room programmes from the client's spreadsheet → names, numbers, departments, areas checked against the brief
Door schedules maintained by the hardware consultant in Google Sheets - or in a Parapet Sheet you sent as a link
Equipment lists from MEP engineers (CSV, JSON or XML exports) onto families and spaces
Cost codes / classification (Uniclass, OmniClass) applied by type across the model
QA: export a scope, review offline, push only the corrections back

What never happens

A row silently creating or deleting an element - unmatched rows are flagged and skipped, and the log lists each one
A write with no dry run - every button shows cells, elements and skips before it runs
An invalid value reaching the model - units, read-only parameters and type conflicts are caught per cell, in red
A sync you cannot take back - push, pull and resolve are one Revit undo each
Parapet Link · $79/year · 14-day free trial, no card · 2 computers

Or take Parapet Pro - Hub, Link and Audit Pro together for $149/year.

Questions

Can I import Excel into Revit without an add-in?

Only indirectly - paste into a schedule or write a Dynamo graph. Revit has no native import of parameters from Excel.

Do I have to start from a spreadsheet?

No. Most people start from Revit: pick a category, the types of a category, the current selection or a schedule, tick the parameters, and Link writes the file. It carries a Parapet ID column, so rows find their elements even when marks change. Someone edits the file; Refresh shows the difference; Push writes it back.

What happens when both sides change?

Link remembers what both sides agreed on at the last sync. A cell that only moved in the file is "to push", one that only moved in Revit is "to pull", one that moved on both sides is a conflict - amber in the grid, with both values in the detail panel. Resolve picks a side for the rows you choose; nothing else is touched.

Can Link write type parameters?

Yes. Click a column header and tick "type parameter", or link the types of a category directly. A type value is written once per type; the dry run says how many instances change, and two rows that give the same type different values are flagged before anything is written.

Which file formats can Parapet Link read?

Excel workbooks (.xlsx, .xlsm and the older .xls), comma / semicolon / tab-delimited text (.csv, .tsv, .txt - delimiter and encoding are detected), JSON (an array of objects), XML (repeated row elements), Google Sheets and Parapet Sheets (tables hosted on parapet.app). Every format pushes into Revit; every format except .xls and .xml also takes values back with Pull - save an .xls as .xlsx and re-link to pull.

What is a Parapet Sheet?

A table hosted on parapet.app that Link creates straight from Revit (To Parapet Sheet). You send the link; whoever opens it edits in the browser - no Excel, no account - with every column validated by its Revit parameter kind, every change named and kept in history, and locks or an edit key where you want them. Back in Revit it is just another source: Refresh, Push, Pull. Free hosts 1 sheet of 500 rows; Parapet Sheets - included with Link raises that to 100 sheets with full history.

What does Link do for elements that are not in the spreadsheet?

Validation counts them (NO ROW in the grid filters). No row picks them in Revit, Color by state paints them in the active view, and Write keys gives numbered keys to elements that have none so a consultant can add their rows.

Can I review changes before they reach Revit?

Yes - turn on Approve edits first on any Parapet Sheet (in the browser owner bar or on the sheets dashboard). From then on, edits by anyone else land as amber proposals: approve or reject them per cell, row, column or all at once, in the browser or with Link's Approve tool. Nothing unreviewed can ever be pushed into the model, and approved changes keep their proposer's name in the per-cell history.

Does Parapet Link work with Google Sheets?

Yes. Paste the sheet's URL, sign in with your Google account the first time; any sheet you can open can be linked, pushed to and pulled from. The data moves directly between your PC and Google under your own account.

What happens to rows whose element is not in the model?

They are flagged in validation and skipped; rows are never added to the model silently, and the log lists every skipped row.

How much does Parapet Link cost?

$79/year after a 14-day free trial with no card - or $149/year for Parapet Pro, which adds Hub and Audit Pro; 2 computers per subscription.

Read the guide: linking Excel, CSV and Google Sheets to Revit · Parapet Link vs Ideate BIMLink.

Two sides.
One truth.

Link your ugliest spreadsheet first. If Link can explain that one, it can explain all of them.

Revit 2020-2027 · Windows 10/11 · 2 computers per subscription

Parapet Link · Revit and your spreadsheet, side by side · 14-day free trialStart free trial