finvizp
Finviz for Python — an unofficial, async-first, Arrow-native Finviz client
built on fastreq, direct lxml, and
PyArrow.
[!IMPORTANT]
finvizpis not affiliated with, endorsed by, or sponsored by Finviz. Finviz is a trademark of its respective owner.
Install
uv add finvizp # or: pip install finvizp
Quick start
Async-first:
import asyncio
import finvizp
async def main() -> None:
async with finvizp.FinvizClient() as client:
universe = await finvizp.symbols_async(client=client)
bundle = await finvizp.quote_async("AAPL", client=client)
print(bundle.data.snapshot.num_rows)
asyncio.run(main())
Every operation has a sync twin (same name, no _async suffix) for
scripts and notebooks:
import finvizp
matches = finvizp.search_symbols("APPLE")
income = finvizp.statements("AAPL", statement="IA") # IA/IQ/BA/BQ/CA/CQ
snap = finvizp.snapshot("AAPL") # cached, no 2nd request
quote = finvizp.quote("AAPL") # complete bundle
universe = finvizp.symbols()
finvizp.capabilities() # implemented/planned ledger
Sync twins reject an active event loop; results, caching, and errors are identical.
What's implemented
| Milestone | Surface | Status |
|---|---|---|
| 0.1 | Symbols, statements, quote bundles, cache | ✅ |
| 0.2 | Screener, signals/earnings, registry drift tools | ✅ |
| 0.3 | Groups, spectrum, maps, news, insider, calendar | ✅ |
| 0.4 | Markets, artifacts (charts/spectrum), forex/crypto, futures | ✅ |
| 0.5 | Frozen-surface + finvizfinance parity audit | ✅ |
| 1.0 | Stable release | ✅ |
The full implemented/planned ledger lives in the
capability matrix and
finvizp.capabilities().
Design in one screen
- Async-first with sync twins — one transport, no hidden event loops.
- Arrow-native — every dataset is a versioned, deterministic Arrow table.
- Immutable
FetchResult[T]— full provenance, typed partial/error diagnostics, no in-place mutation. - Complete compound bundles — e.g. a quote page yields every relation in
one fetch; cache-preserving projections (
snapshot,ratings,news,insider,peers,etf_holders) never re-request. - Structured-first sources — public JSON/XHR or embedded payloads when same-tier, complete, direct, and snapshot-coherent; lxml parsing otherwise.
- Explicit proxies, route-isolated auth, conservative pacing/retries,
bounded result caching, single-flight coalescing. A per-client 429
circuit breaker trips after 3 consecutive rate limits and fails fast
(
CircuitOpenError, no request sent) until the cooldown passes. - No login/browser automation, bulk crawling, pandas contract, persistence layer, telemetry, or entitlement bypass.
Documentation
User docs (Diataxis — tutorials, how-to, reference, explanation), rendered
with Zensical from
docs/user/:
| You want to… | Go to |
|---|---|
| Try it in 5 minutes | Get started |
| Use the sync API | Use the sync API |
| Set proxies / caching | Proxies & cache |
Migrate from finvizfinance |
Migration guide |
| Check a dataset's columns | Arrow schemas |
| Understand result envelopes | Results |
| See every capability + status | Capability matrix |
Deep links: screener · screener registry · groups/maps/events · markets/artifacts · schema versioning · keep your own history · access & responsible use
Build the site locally:
uv run zensical build --clean
Background research (surface inventory, finvizfinance audit, Yahoo overlap,
snapshot-history semantics) lives under
docs/research/ and
docs/brainstorming/; the
foundation design
tracks the approved architecture. Publication mechanics:
docs/publishing.md.
Development
uv sync --all-groups
uv run pytest
uv run ruff format --check . && uv run ruff check .
uv run ty check src
uv build
Access policy
Finviz public pages, Elite features, and export/API endpoints carry
different entitlements. finvizp does not automate login, solve challenges,
bypass access controls, or rotate proxies to evade limits. Callers are
responsible for valid access and data-use rights. See
access & responsible use.
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 finvizp-1.0.1.tar.gz.
File metadata
- Download URL: finvizp-1.0.1.tar.gz
- Upload date:
- Size: 138.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via:
uv/0.12.13 {"installer":{"name":"uv","version":"0.12.13","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
897f48d149441f9af6e6a51e0716a6d61a973945d558bc0b3c7256e276588ec7
|
|
| MD5 |
d5aa708bb634ad252f00e24f4c1ae76a
|
|
| BLAKE2b-256 |
2c2bce4b872391686672d2c6e8c02bd124257ded279ded5729000708dac78fa5
|
File details
Details for the file finvizp-1.0.1-py3-none-any.whl.
File metadata
- Download URL: finvizp-1.0.1-py3-none-any.whl
- Upload date:
- Size: 165.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via:
uv/0.12.13 {"installer":{"name":"uv","version":"0.12.13","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ce5a63178b75197be3d2453b9e2af240a0395f76b5d5ccdf43b0f32819730f24
|
|
| MD5 |
44659bb8e69d49dee25360b6c4d5f47e
|
|
| BLAKE2b-256 |
718126567b9a5792dd7da655d1f0bb09f77b66aba8ea103820beedbb2ecf692e
|