Help regarding extracting/ importing data from IFC to Estimation software


Introduction :-

I’m from India. My company is developing an Estimation software for the Construction Industry in India. This software uses the Masterformat Coding system, and broadly based on the RS Means database.

Through our interaction with multiple buyers (Contractors, Architects, Construction companies etc.), we’ve been asked about linking our software to a design software repeatedly. This prompted me to study Revit (Parameters, Elements, Keynotes etc.) in some depth. While doing this, I came to read about IFC, and how it’s the default software for data exchange in BIM. This led me to read up on IFC, and to gain firsthand knowledge by using it with my copy of Revit.

Before you read on, please note, I don’t have any technical knowledge about software development myself. And I have a very limited, basic knowledge about technical drawing. As such, my queries will be in layman terms, and my understanding of the responses might take time. Please bear with me with in this regard.

Body :-

Just my casual reading through the schemas, & flipping through various screenshots, lead me to believe that integration of IFC with my software will not be as difficult as I had initially envisaged.

Our software has a ‘Property Master’ at the back-end of our database. This master breaks up various construction items (Pumps, Motors, Sinks, Light Fixtures, Windows, Furniture etc.) into various “Properties”. This includes ‘basic dimensions’ like Length, Width, Thickness, Radius etc. It also has complex dimensions like Pressure, Water Flow Rate, Area, Current, Density, Electric Charge, Luminous Flux etc. Apart from such dimension & sizes, we also include things like Shape, Colour, Basic Material, Technical Standard etc.

I’ve seen enough in IFC to know that many of these “properties” in our database can correlate easily to various IFC ‘heads’. There’s IFCShape, IFCLengthmeasure, IFCUnit, IFCMaterial etc.

We also separate all the different Units (mm, K, sqmm, psig, kg etc.) from each Item, and store them in a separate field. We then run this through a ‘Conversion Master’ which can calculate basic conversion through set formulas easily (mm to inch, Celcius to Kelvin etc.). I think the IFC Table 126 can easily relate to this ‘conversion master’ in our database (and their corresponding ‘groups’, like Length, Pressure, Thickness, Area etc.).

Finally, we assign various ‘Keywords’ to each element (construction item). This basically specifies what item is (Pump, Light Fixture, Wash Basin, Door, Furniture etc.) in various levels of details.

I would like to know how we can extract all these details from a design software using IFC, and link all these to the different groups in my database?

Requirements :-

My requirements for links with IFC are very specific. For starters, we’re going to link all these details into my software, and then, hopefully, move the clients data into our database (construction objects, their prices, manufacturer info etc.). i.e.- We don’t need to export data through IFC into other software (maybe that comes later). We also don’t need to have anything to do with the design relationship part of BIM. i.e.- The relation between a washbasin with its corresponding wall, and the floor, is of no importance to me.

I just want the different details for each element (size, colour, model etc.), and to link those details with their corresponding ‘groups’ in our database. I would then like my software to assimilate all these different links (size, shape, colour etc.), and suggest the best match for each element with an element (‘item’) of matching description in our database.

Example :-

A typical Revit model should have details like Wash basin Depth, Dia. etc. And the material (ceramic, steel, marble etc.) it’s made of. I want these details (dia, depth, material) to get linked to the relevant group in our database. Then our software can make suggestions (depending on the Element Type) and suggest the closest match in our database. Similarly, if a floor in Revit is made of Marble, the marble would have a thickness. And the Area of that floor would determine how much quantity of marble is being used in that model.

I don’t know how to link the various IFC heads to their corresponding ‘groups’ in our database. I don’t even know if this broad idea has any sort of practical feasibility in the real world. These are just general/ layman thoughts, and would sincerely appreciate any & all the help in this matter.

Vikram Poddar

P.S.- I’m also using this as a starting point. Linking construction activities (Floor laying, Painting, Wall erection etc.) is not presently in my thought, but will come later. Hope this clarifies some queries.

Hi Vikram,

Welcome to the forum.

I’d suggest you look into IfcOpenShell or IFC++ or even XBIM initiatives first. As much as I am aware both modules are capable of extraxcting all the elements, their relationships and most importantly (for you), all the properties and parameters of said elements from IFC files. IfeOpenShell is a Python module, while IFC++ is a C++ library, so talk to your software developers, which one works best for you.

Some stackoverflow topics to start you off:

I’m a civil engineer with some knowledge and I was able to get all data from any IFC file into a structured database within 2-3 weeks using IfcOpenShell, so I speak from experience that it is not that difficult.

Best of luck!

Dear Jure,

Thank you so much for these insights. I shall research both links & platforms in some depth.


If you are developing 5D the IfcOpenShell library has also got very advanced implementations of parametric resource assignment, parametric cost rates, rate libraries, and cost formula interpretation. There are also utilities to calculate quantities, bulk assign properties and quantities, and extract quantities and properties in only one or two lines of code.

More than happy to help in any way. Since it is open source, you may also find help at

Hello Moult,

Thanks for your reply. Apologies for the delayed reply. It’s Diwali here, so lots of holidays, staff MIA etc.

Our database is in SQL, and the coding is done in C#. Hope this bit of info. helps.

Would the IfcOpenShell help with these? If not, what would you recommend?

If you’re with C#, unfortunately IfcOpenShell is for C++/Python. Perhaps you can look at XBim.

Dear Moult,

Thank you so much for your cotniued interest in my problem, and the effort to help. As always, I appreciate it.

Duly noted about XBim. I studied it briefly. From my understading, xbim is separate from ifc, and it helps connect .NET programs/ softwares to Ifc. Is this correct?

If so, I’m just wondering about the best possible solution. Here are my options.

Option 1 :-

i.e.- Revit → Ifc → xbim → Buildsystem (my software/ in Sql and .NET).

Option 2 :-

i.e.- Revit → plug-in → plug-in 2 → Buildsystem

Initially, I discussed a bit with some developers (18-24 months ago, before the pandemic) for the link with Revit. They told me I’ll need to develop one plug-in to extract all the relevant parameters from Revit. Then I’ll have to develop another plug-in to match all the Revit Parameters with the different groups (length, Shape, Material etc.) in my database.

Should I try and pursue a link directly with Revit? This option of 2 plug-ins + uncertainty of proper data extraction was what led me to explore Ifc in the first place.

I initially went towards Ifc because it is already linked to Revit. Now, I need to link with xbim to link with Ifc, which will then link with Revit.

I think the Data extraction in Option 1 will be more accurate. However, problems might come in migrating it from Ifc to Xbim to My software. I thinkdata migration will be easier in Option 2, but I have doubts about the accuracy of Data extraction.

Also, please keep in mind, I have a website (on Sql & .NET) with all the data. I believe the website will be the way forward, while the software becomes obsolete soon.

I’m not sure which option with be best for me. Any help?

XBim is a library to work with IFC data. XBim is software, but IFC itself is a schema or specification of data.

Considering you’re asking on the buildingSMART forums, I think we would all support you wholeheartedly in going for option 1, where your software integrates with IFC, and you expect Revit users to output an IFC to interact with your software. The biggest benefit of this approach is that your software then works not just with Revit, but with ArchiCAD, Tekla, 12D, FreeCAD, and Blender.

Thank you. I shall start reading up on xbim in depth now.