How to make a Revit plugin for tagging, and what it takes to keep it working
Build a Revit add-in that tags elements with C# and the IndependentTag API. See the steps, then what firms hit: edge cases, yearly Revit changes, crashes, and undo.
The working method
Serious Revit plugins are built in .NET with C#. This is the route that gives you full control over the API, performance, and a real interface.
- Create a class library that targets the .NET version of the Revit release you support, and reference the Revit API assemblies.
- Implement
IExternalCommandand register it with an.addinmanifest so Revit loads it. - Collect the elements in the active view with a
FilteredElementCollectorthat is scoped to the view. - Open a
Transaction, and for each element callIndependentTag.Createwith the view, the element's reference, and a position. The overloads differ between Revit versions. - Commit the transaction, and roll it back if anything fails.
That produces tags. It does not produce good tags.
Where it breaks
Placing a tag is easy. Placing it well is the work. A tag at the element's midpoint lands on ducts, fittings, and other tags. To avoid that, you need the 2D footprint of every element as it is drawn in the view, the real size of each tag, and a search for free space. Much of the API is undocumented, and the explanations are in third-party blogs.
Every view changes the logic. Plans, sections, rotated views, cropped views, linked models, and fabrication parts each behave differently. Something that works for one element breaks as soon as the view changes. There are too many edge cases to cover from a single test project.
Your firm's standard. Tags inside or outside the duct, above or below, leader angles, and where size and elevation sit are all firm rules. You have to build and maintain every one of them.
The code rots. Race conditions, hidden state, swallowed errors, and misleading fallbacks are the usual mistakes. They turn into silent failures, where a tag is missing and nothing tells you. This is the complexity wall that quick plugins hit.
Revit changes every year. Revit ships a new version annually and several update releases in between. Revit 2025 moved to .NET 8 and required every add-in to be recompiled, with API changes across several areas. Revit 2027 moves to .NET 10. Tag-creation overloads and orientation handling also differ by version. Staying current, and moving to newer and faster APIs when they appear, is a cost that never goes away.
Crashes and lost work. Plugins run inside Revit, so an unhandled exception, a call from the wrong thread, or an unfinished transaction can take Revit down. Revit has no native autosave, so a crash can wipe out two or three hours of work. You also have to build the undo yourself, as one undo step per operation, or a bad run cannot be reversed.
Performance. Large views with thousands of elements need careful use of the API, or the run freezes Revit.
What it costs
If your firm has a dedicated BIM developer and tagging is a narrow task you own, building makes sense. Otherwise the add-in becomes a second job for whoever wrote it. RayCAD is the maintained version of this: a .NET plugin that handles placement, firm standards, undo, crash safety, and Revit 2021 to 2027. Read the full build vs buy comparison and see how RayCAD runs inside Revit.
What building a Revit tagging add-in yourself really costs
- Time. Whoever builds and maintains the script is doing software development instead of the billable engineering and drafting work they were hired for.
- The AI loop.With Claude or ChatGPT it becomes an endless loop of “fix this”, “now fix that”. Each fix can break a case that worked before, and nobody on the team owns the code.
- Cost. Hours spent building and maintaining scripts, times your hourly rate, against $200 per month for RayCAD for the whole company.
You can build a Revit tagging add-in, and this page shows how. For production MEPF sheets, RayCAD is the cheaper and safer choice. Try it free for 15 days.
Frequently asked questions
How do I make a Revit plugin for tagging?
Write a C# add-in that implements IExternalCommand, collects the elements in a view, and creates tags with the IndependentTag API inside a transaction. Then package it with an .addin manifest.
Which language is best for a Revit add-in?
C# on .NET. Serious Revit plugins are built in .NET because it gives full API access, performance, and a real user interface.
How much work is it to maintain a Revit add-in?
A lot, and it never ends. Revit ships a new version every year plus update releases, and some versions change the runtime. Revit 2025 moved to .NET 8 and Revit 2027 moves to .NET 10.
Why is tagging hard to automate with the Revit API?
Placing a tag is simple. Placing it where it does not overlap anything, in every view type, at every scale, to a firm's standard, is where the edge cases are.
Sources
- Autodesk University, Pros and cons of Dynamo versus Revit add-ins (checked October 21, 2026)
- Autodesk, migrating from .NET Framework 4.8 to .NET 8 (Revit 2025) (checked October 21, 2026)
- rvtdocs, What's new in Revit API 2027 (.NET 10) (checked October 21, 2026)