Opportunity Zone investment tracker — OZ 1.0 and OZ 2.0 eligibility, QOF tax benefits, rural QORF analysis, and portfolio tracking
Project description
oz-tracker 🏘️
Opportunity Zone investment tracker for OZ 1.0 and OZ 2.0.
Check eligibility, calculate QOF tax benefits, analyze rural QORF enhanced incentives, and track a portfolio of Qualified Opportunity Fund investments — built for the One Big Beautiful Bill Act (2025) permanent OZ program.
Why oz-tracker?
The One Big Beautiful Bill Act made Opportunity Zones permanent with decennial redesignation cycles. OZ 2.0 brings stricter eligibility, enhanced rural benefits, and new reporting requirements. No open source Python library existed to handle both OZ 1.0 and OZ 2.0 mechanics — until now.
Installation
pip install oz-tracker
Quickstart
from oztracker import OZ1Checker, OZ2Checker, OZInvestment
from oztracker import calculate_benefits, compare_scenarios, OZPortfolio
# Check OZ 1.0 eligibility (current map through 2028)
oz1 = OZ1Checker()
print(oz1.is_designated("17031840100")) # True
# Check OZ 2.0 eligibility (2027 designations)
oz2 = OZ2Checker()
print(oz2.is_eligible("17031840100")) # True
print(oz2.is_rural("17019000100")) # True
# Compare OZ 1.0 vs 2.0 tract overlap
oz2.compare_oz1_oz2(oz1.designated_tracts)
# Calculate QOF tax benefits
inv = OZInvestment(
id="INV001",
investor_name="Jay Patel",
fund_name="Midwest OZ Fund I",
fund_type="qof",
oz_version="oz2",
tract_id="17031840100",
investment_type="real_estate",
capital_gain_invested=500_000,
investment_date="2027-03-15",
fmv_at_investment=500_000,
current_fmv=750_000,
state="IL",
is_rural=False,
)
benefits = calculate_benefits(inv, exit_date="2037-03-15")
benefits.summary()
# Compare all scenarios
compare_scenarios(
capital_gain=500_000,
investment_date="2027-01-01",
current_fmv=700_000,
exit_date="2037-01-01",
)
# Portfolio tracking
p = OZPortfolio(name="Family OZ Portfolio")
p.add(inv)
p.summary()
OZ 2.0 Key Changes (One Big Beautiful Bill Act 2025)
- Program made permanent — decennial redesignation every 10 years
- Stricter eligibility — MFI threshold tightened from 80% to 70% of AMI
- Contiguous tract rule eliminated — fewer eligible tracts in 2027
- Rural QORF enhanced benefits — 30% basis step-up vs 10% standard
- Rolling 5-year deferral — no more 2026 deadline
- New reporting requirements — annual IRS Form 8996 disclosures
Eligibility Rules
OZ 1.0 (current map, through 2028):
- Poverty rate >= 20%, OR
- MFI <= 80% of state/metro AMI
OZ 2.0 (2027 designations):
- MFI < 70% of state/metro AMI, OR
- Poverty rate >= 20% AND MFI <= 125% of state/metro AMI
Tax Benefits Modeled
- OZ 1.0: deferral through 12/31/2026, 5-year 10% step-up, 7-year 15% step-up
- OZ 2.0: rolling 5-year deferral, 5-year 10% step-up
- Rural QORF: 5-year 30% step-up (triple standard benefit)
- 10-year exclusion: post-investment appreciation excluded from tax
Running Tests
PYTHONPATH=. pytest tests/ -v
37 tests across all modules.
Who This Is For
- Investors evaluating OZ 1.0 vs OZ 2.0 strategy
- Real estate developers screening project locations for eligibility
- Fund managers tracking QOF and QORF portfolios
- Tax advisors modeling capital gains deferral scenarios
- Community development practitioners preparing for 2027 redesignation
License
MIT 2026 Jaypatel1511
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 oz_tracker-0.1.0.tar.gz.
File metadata
- Download URL: oz_tracker-0.1.0.tar.gz
- Upload date:
- Size: 12.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.9.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
5343ea014daaa74e4514555cfd8c9cbf8e68125b3e8b780e7728ed4abdc6034b
|
|
| MD5 |
c639fefd2be1e068c5de488910e62eed
|
|
| BLAKE2b-256 |
fabe184bf9f28a1bb9ae7ae66ba342d92223fa06585348fe810db258fc37a9e0
|
File details
Details for the file oz_tracker-0.1.0-py3-none-any.whl.
File metadata
- Download URL: oz_tracker-0.1.0-py3-none-any.whl
- Upload date:
- Size: 16.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.9.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
974a5164bd1edc7d5c6595c616f25bead9b164ce733c4c0aebc9efe83fd635a3
|
|
| MD5 |
27df24ed3a6719b7e831e3c7d1515696
|
|
| BLAKE2b-256 |
923c859f88bd88b7858f7a37099532230b579f3ec3f3afff18abac7a37083f35
|