Mutual funds and stocks data extraction from MorningStar with Python
Project description
Introduction
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.
Getting Started
Installation
You can install it via pip on the terminal by typing:
pip install mstarpy
You can also install it via git on the terminal by using :
pip install git+https://github.com/Mael-J/mstarpy.git@master
Import the package MStarpy as follow
import mstarpy as ms
Fund analysis
Initialize Funds to start your analysis
funds = ms.Funds("VTSAX")
Historical nav
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'}]
Holdings of the fund
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+10
More on funds
You can access many other methods to retrieve detailed information about the fund.
Examples are available in this notebook:
Stock Analysis
Initialize Stock to start your analysis
stock = ms.Stock("FR0000121014")
Historical price
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'}]
Income Statement
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'}
More on stocks
You can access many other methods to retrieve detailed information about the stock.
Examples are available in this notebook:
Look for securities
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'}}}]
Contribution
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.
Disclaimer
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.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file mstarpy-8.1.0.tar.gz.
File metadata
- Download URL: mstarpy-8.1.0.tar.gz
- Upload date:
- Size: 24.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.9.25
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
8b78d92d7f4cd1250d32fe351ef5d2219cef092b4b9f6ba3605fda11d69f04db
|
|
| MD5 |
21920edad408c41e5d52b24e5e67d7d0
|
|
| BLAKE2b-256 |
d1127c7b00628383b8016eed2c43cfe13dd993f1f7a14a70999942d17f07ffbc
|
File details
Details for the file mstarpy-8.1.0-py3-none-any.whl.
File metadata
- Download URL: mstarpy-8.1.0-py3-none-any.whl
- Upload date:
- Size: 25.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.9.25
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b96797b6f0e11758ddd917c7ec0b9415c54452d346e57a3a977d6a78ffdb4afe
|
|
| MD5 |
719af1cbd25c76b32fa29415c2c39617
|
|
| BLAKE2b-256 |
a409206804da465502798fe1ebad3773b5145d1a5253758054374f9f7f106a1f
|