MStarpy is an open-source Python package designed to extract and access financial data from morningstar.com.
It provides free access to public data on stocks and funds, empowering both retail and professional investors with the same high-quality information. Whether you're conducting research, building investment models, or creating dashboards, MStarpy makes it easy to integrate Morningstar data into your workflow.
Our mission is to democratize access to financial insights and support investors in making informed decisions.
The project is open to contributions — join us on GitHub and help improve the future of financial transparency.
You can install it via pip on the terminal by typing:
pip install mstarpyYou can also install it via git on the terminal by using :
pip install git+https://github.com/Mael-J/mstarpy.git@masterImport the package MStarpy as follow
import mstarpy as msInitialize Funds to start your analysis
funds = ms.Funds("VTSAX")Get historical nav and total return of the fund
import datetime
end_date = datetime.datetime.today()
start_date = end_date - datetime.timedelta(days=10)
funds.nav(start_date,end_date)[{'nav': 150.01, 'totalReturn': 232.36911, 'date': '2025-07-03'},
{'nav': 148.8, 'totalReturn': 230.49479, 'date': '2025-07-07'},
{'nav': 148.74, 'totalReturn': 230.40185, 'date': '2025-07-08'},
{'nav': 149.69, 'totalReturn': 231.87342, 'date': '2025-07-09'},
{'nav': 150.1, 'totalReturn': 232.50852, 'date': '2025-07-10'},
{'nav': 149.48, 'totalReturn': 231.54813, 'date': '2025-07-11'},
{'nav': 149.82, 'totalReturn': 232.0748, 'date': '2025-07-14'}]
funds.holdings()ticker securityName weighting marketValue
0 MSFT Microsoft Corp 6.02457 1.099423e+11
1 NVDA NVIDIA Corp 5.51387 1.006226e+11
2 AAPL Apple Inc 5.31119 9.692390e+10
3 AMZN Amazon.com Inc 3.44210 6.281481e+10
4 META Meta Platforms Inc Class A 2.49597 4.554891e+10You can access many other methods to retrieve detailed information about the fund.
Examples are available in this notebook:
Initialize Stock to start your analysis
stock = ms.Stock("FR0000121014")Get historical price of the stock
import datetime
end_date = datetime.datetime.today()
start_date = end_date - datetime.timedelta(days=10)
stock.historical(start_date, end_date)[{'open': 483.75,
'high': 483.75,
'low': 475.0,
'close': 477.7,
'volume': 1102,
'previousClose': 486.0,
'date': '2025-07-04'},
{'open': 480.0,
'high': 480.0,
'low': 472.2,
'close': 475.95,
'volume': 1322,
'previousClose': 477.7,
'date': '2025-07-07'}]
stock.incomeStatement()
{'_meta': {'companyId': '0C00000VOS',
'statementType': 'income-statement',
'periodReport': 'Success',
'latestReport': 'Success'},
'columnDefs': ['2015',
'2016',
'2017',
'2018',
'2019',
'2020',
'2021',
'2022',
'2023',
'2024',
'TTM'],
'filingIdList': [None,
None,
None,
None,
None,
'328683655',
'384266622',
'437916148',
'502488388',
'577784039',
...
'footer': {'currency': 'EUR',
'currencySymbol': '€',
'orderOfMagnitude': 'Million',
'fiscalYearEndDate': '12-31'},
'userType': 'Free'}
You can access many other methods to retrieve detailed information about the stock.
Examples are available in this notebook:
You can search for securities using the screener_universe method, which leverages the logic behind Morningstar's screener : MorningStar screener
ms.screener_universe("a",
language = "fr",
field=["name", "isin", "priceToEarnings", "sector"],
filters={"priceToEarnings[trailing]": ("<", 10),
"investmentType" : "EQ",
"sector": "Technology",
"domicile": "FRA"}
)[{'meta': {'securityID': '0P00009WB0',
'performanceID': '0P00009WB0',
'companyID': '0C00000VXC',
'universe': 'EQ',
'exchange': 'XPAR',
'ticker': 'ATO'},
'fields': {'name': {'value': 'Atos SE'},
'isin': {'value': 'FR001400X2S4'},
'priceToEarnings': {'value': 0.088323},
'sector': {'value': 'Technology'}}},
{'meta': {'securityID': '0P0000CKNR',
'performanceID': '0P0000CKNR',
'companyID': '0C00000VXC',
'universe': 'EQ',
'exchange': 'PINX',
'ticker': 'AEXAF'},
'fields': {'name': {'value': 'Atos SE'},
'isin': {'value': 'FR001400X2S4'},
'priceToEarnings': {'value': 0.096288},
'sector': {'value': 'Technology'}}},
{'meta': {'securityID': '0P0000C3TX',
'performanceID': '0P0000C3TX',
'companyID': '0C00000VXC',
'universe': 'EQ',
'exchange': 'XMUN',
...
'ticker': 'AXI1'},
'fields': {'name': {'value': 'Atos SE'},
'isin': {'value': 'FR001400X2S4'},
'priceToEarnings': {'value': 0.087758},
'sector': {'value': 'Technology'}}}]
The project is open-source and you can contribute on Github.
If you would like to support my work, you can Buy me a Coffee.
MStarpy is not affiliated to morningstar.com or any other companies.
The package aims to share public information about funds and stocks to automatize analysis. It is the result of a free and independent work.
MStarpy does not give any investment recommendations.