Skip to content

LIHTC Capital Stack & Scenario Modeling

Find the mix that wins, not just the mix that closes

Subsidy Stack Optimizer sweeps unit count, AMI election, and capital structure through the same real Proforma engine behind Site Feasibility — hundreds of combinations, so you can compare affordability, funding gaps, and unit counts before locking a mix. Agency scoring is program-specific; the California workflow includes CDLAC/CTCAC calculations.

Testing one mix at a time doesn't find the best one

Closing the gap and winning the competition are two different optimization problems, and most teams only have the tooling to test one mix against one objective at a time.

  • Layering LIHTC equity, soft funds, and bonds into a stack that actually closes the gap usually means testing unit-mix and AMI combinations one at a time, by hand.
  • The mix that closes the funding gap and the mix that scores highest on your credit type's tie-breaker are often different answers, and testing both takes two separate spreadsheets.
  • Agency scoring and financial feasibility often live in separate workbooks, making it harder to understand the trade-offs.
  • Trying "one more unit" or "one more AMI band" means re-running the whole proforma by hand, every time.

How it works

Every combination priced by the same engine, ranked by what actually matters for your credit type.

1

Sweep every combination

Unit count, AMI election, and capital structure, swept and priced by the same real proforma engine behind Site Feasibility — not a hand-picked handful of scenarios.

2

Rank by what you're actually optimizing for

Compare the lowest funding gap and most units before you lock a mix. California projects can also use CDLAC/CTCAC scoring objectives.

3

Score alongside the money

For California projects, CDLAC/CTCAC tie-breaker and scoring math — Access to Opportunity, lowest-income targeting, the 9% tie-breaker — computed for every swept combination, not bolted on after the fact.

4

Solve exactly, not by trial and error

An exact AMI-designation solver finds the mix that provably maximizes rent under your set-aside constraint, not just the best of the combinations you thought to try.

5

Stress-test the winner

Credit-price and interest-rate sensitivity run against the mix you pick, before you lock it in.

Real results

Close-up views of the optimizer’s controls and calculated results. This example uses California program assumptions.

UNIT MIXER / SUBSIDY STACK OPTIMIZER

Find a better mix.
Protect what matters.

Explore unit counts and financing structures without rebuilding your model. Set the sweep range, protect your minimum earned developer fee, and compare the possibilities.

01
Give your model room to explore

This example tests 70%–130% of the entered unit mix.

02
Keep your fee in the equation

This example sets a $1,000,000 minimum earned developer fee. A run that cannot earn it cannot win.

Actual controls from a potential project proforma. Agency scoring depends on the supported program.

01Test a range

Evaluate unit counts, AMI elections, and capital structures.

02Compare trade-offs

Review the funding gap alongside your priorities.

03Apply a selected run

Carry that run’s figures back into your proforma.

What gets scored

California scoring example: compare supported CDLAC/CTCAC calculations alongside the financial results. Other states have their own allocating-agency requirements.

CTCAC lowest income

4 CCR §10325(c)(6) — up to 52 of the ~106–109-point CTCAC 9% application score, with the real 45-point eligibility floor checked for every combination, not just the one you pick.

Minimum set-aside

Every swept combination is tested against the set-aside election you choose (Average Income, 20/50, 40/60, and others), not assumed to qualify.

9% tie-breaker

The real CDLAC/CTCAC tie-breaker formula, computed for every combination the sweep produces — not estimated only for the one you were already planning to file.

Legal designation sets, solved exactly

A real Riverside County run enumerates 343 legal AMI-designation sets and solves for the best one exactly — not sampled, not approximated.

Run your own unit mix through it