How to get the 2D materials in Materials Project

Hello everyone!

I know that there are 130000+ inorganic materials in Materials Project database. But currently, I am only interested in the 2D materials. Is there a method to extract the 2D materials directly from Materials Project? Thanks in advance!


Hi @Pan_Xiang, welcome!

There’s not an easy way to do this search right now, however if you’re comfortable with Python, this is fairly straight forward to do with our pymatgen package.

The basic steps are to download all the structures from Materials Project using MPRester (this will take several minutes) and then use some of the analysis tools in pymatgen.analysis.dimensionality to estimate the dimensionality of the materials (this will take several hours).

Hope this helps – we do intend to add this kind of searching to the website in future, but it’s further out on our roadmap right now.



1 Like

Dear Matthew Horton,

Thank you so much for your reply and it is very useful!

Using pymatgen.ext.matproj.MPRester(“API_KEY”).get_data(“materials_id”) method, I can download the structure data one by one. But it’s too slow. It will take about a month to traverse from mp-1 to mp-2000000. So is there any other way to download all the structures from Materials Project?

Thanks again!


You can query based on a list of mpids:


Dear Peter Schindler,

Thank you for your help! It is a very effective method!

I want to download all materials in MP, so I have another question about the naming method of material_id. I found that the materials_id prefixed with “mp-” range from one to several million but are not continuous: some point to other materials, and most are empty. Besides, some material_id also prefix with “mvc-” and “NMGC-”. Do you know the naming rules of material_id in MP?


Dear Pan,

I wouldn’t worry about the material_id naming conventions. If you want to query the whole database, don’t query it based on the ID but rather by a property that is true for any material, for example:

criteria = {"structure": {'$exists': True}}


criteria = {"nsites": {"$gt": 0}}

However, there are very few cases where you actually want the entire database and you should think about other constraints before querying (e.g. number of atoms in the unit cell, energy above hull, etc.). Also, think about which properties are relevant in your case and only query those.

Hope this helps.


1 Like