finvizp
Finviz for Python — an unofficial, async-first, Arrow-native Finviz client
built on fastreq, direct lxml, and
PyArrow.
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.
Metadata
Release files for finvizp 1.0.2
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| finvizp-1.0.2.tar.gz | 145.2 kB | Without provenance | Details for finvizp-1.0.2.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| finvizp-1.0.2-py3-none-any.whl | Python 3 | none | any | Details for finvizp-1.0.2-py3-none-any.whl |
Total release size: 315.0 kB
Release files / finvizp-1.0.2.tar.gz
| Download URL | finvizp-1.0.2.tar.gz |
|---|---|
| Size | 145.2 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
9fe2470ed31f5c34ac4a053cb6cb860c794d834a914267a9562f79eb8e1de646
|
|
BLAKE2b-256 checksum How to use checksums |
d35115a1a9753e96197d6d2894ac6ec1846c69f2e1c1bbd2e859fd47b14cd1bc
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.13.6 {"installer":{"name":"uv","version":"0.13.6","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}
|
Release files / finvizp-1.0.2-py3-none-any.whl
| Download URL | finvizp-1.0.2-py3-none-any.whl |
|---|---|
| Size | 169.7 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
0695887fd16ff5ed44c0584be84beb9d9102c9aadf0e0005792a62e27728c5a3
|
|
BLAKE2b-256 checksum How to use checksums |
4aad1aa95422693d2a20daaeeeb2e7d1b86951e99e0ce03127c2489a595111a9
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.13.6 {"installer":{"name":"uv","version":"0.13.6","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}
|
Security for finvizp 1.0.2
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.