Skip to main content

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


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

oz_tracker-0.1.0.tar.gz (12.3 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

oz_tracker-0.1.0-py3-none-any.whl (16.5 kB view details)

Uploaded Python 3

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

Hashes for oz_tracker-0.1.0.tar.gz
Algorithm Hash digest
SHA256 5343ea014daaa74e4514555cfd8c9cbf8e68125b3e8b780e7728ed4abdc6034b
MD5 c639fefd2be1e068c5de488910e62eed
BLAKE2b-256 fabe184bf9f28a1bb9ae7ae66ba342d92223fa06585348fe810db258fc37a9e0

See more details on using hashes here.

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

Hashes for oz_tracker-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 974a5164bd1edc7d5c6595c616f25bead9b164ce733c4c0aebc9efe83fd635a3
MD5 27df24ed3a6719b7e831e3c7d1515696
BLAKE2b-256 923c859f88bd88b7858f7a37099532230b579f3ec3f3afff18abac7a37083f35

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page