You do not need a paid seat to read Finviz. The pages are public. A Python package named finvizfinance pulls a quote, the news, the insider tape, and a screener into tables you can keep. It is a reader, not a broker. The rows move, and the page addresses move with them.
Install it once. Then call the page that still holds the rows. Several old links now redirect, and the bare calendar no longer opens the economic list.
pip install finvizfinance
A stock
Open the stock page, not the old quote link. The old link redirects, and the industry name on the live page uses a longer filter than the package still ships with. If industry comes back empty, that is the filter, not a missing company.
from finvizfinance.quote import finvizfinance
stock = finvizfinance("AAPL")
fund = stock.ticker_fundament()
stock.ticker_charts()
The live page is finviz.com/stock. The dict holds the company, the sector, the industry, and the price. Do not freeze a number from a screenshot. Read it again when you need it.
The news
The news call returns two tables, the wire and the blogs. Take the one you meant. A headline from an old example is not this morning's tape.
from finvizfinance.news import News all_news = News().get_news() wire = all_news["news"] blogs = all_news["blogs"]
Insiders
The insider list has three windows. Latest is the default. The other two are the top of the week, and the largest owner trades. Read the window you named. Do not treat a printed row from last year as the book.
from finvizfinance.insider import Insider latest = Insider(option="latest").get_insider() week = Insider(option="top week").get_insider() owners = Insider(option="top owner trade").get_insider()
The screener
The screener now lives on the stocks page. The old link redirects there, and the grid is no longer a plain table. A fresh install can come back empty until it learns that markup. Start on the stocks page, and check that the first ticker is a real symbol before you trust the frame.
from finvizfinance.screener.overview import Overview
screen = Overview()
screen.set_filter(filters_dict={"Index": "S&P 500"})
frame = screen.screener_view()
The calendar
Do not open the bare calendar. That address is the earnings preview. The economic calendar is its own page. The package still starts on the old link, so point it at the economic page before you read the rows.
from finvizfinance.calendar import Calendar days = Calendar().calendar()
The page you want is finviz.com/calendar/economic. If the title says earnings season, you are on the wrong page.