ALG Homebuyer Advantage™

See the numbers behind your homebuying strategy.

Compare buying today versus waiting, see the full monthly housing-payment components, then explore payment-reduction and offer-structure options before deciding how to move forward.

Property & Offer Workspace

Build a comparison for this property.

Conventional, one-unit purchase planning. Optional details appear on the offer summary and in your review email draft.

Applies to the Strategy Center. Offers B and C keep their own credit sliders.
Adjust property expenses and lending assumptions

Blank fields retain the original estimates. Entered taxes, insurance, HOA and MI stay constant across offers and the Wait scenario; entered closing costs apply to each offer. Confirm costs and the county loan limit with ALG. Estimates exclude unentered assessments and other expenses.

$150,000$2,500,000

Your Cost-of-Waiting Snapshot

$716,625

If you wait 2 years, this is the projected home price using your selected appreciation assumption.

Estimated Price Increase$66,625
Estimated Extra Down Payment$6,663
Estimated Loan Today$585,000
Estimated Future Loan$644,963

Purchase Today Scenario

$4,880/mo
Estimated Monthly Payment Breakdown
Principal & Interest$0
Property Taxes$0
Homeowners Insurance$0
Mortgage Insurance$0
HOA Dues$0

Wait Scenario

$5,394/mo
Estimated Monthly Payment Breakdown
Principal & Interest$0
Property Taxes$0
Homeowners Insurance$0
Mortgage Insurance$0
HOA Dues$0
Monthly difference: $515/mo
ALG Homebuyer Advantage™ Strategy Center

Turn your numbers into a homebuying strategy.

Buyer View focuses on the decision. Real Estate Pro View adds the transaction detail needed to help structure the offer.
Buyer View

Know what your strategy could look like before you write the offer.

Estimated Buyer Funds$0
Note-Rate Full Monthly Payment$0/mo
Estimated Seller Help$0
Real Estate Pro View

Help the buyer see the tradeoffs before the offer is written.

Estimated Loan$0
Current LTV0.00%
Max Seller Contribution$0
Conforming Status
Payment Reduction Strategies

Compare seller-funded and buyer-funded strategies.

Seller Contribution Capacity$0
Estimated Closing Costs$0
Estimated Buydown Cost$0
Seller Contribution Applied$0
Year 1 Estimated Full Payment$0/mo
P&I $0 + taxes, insurance, MI & HOA
Year 2 Estimated Full Payment$0/mo
P&I $0 + taxes, insurance, MI & HOA
Year 3 Estimated Full Payment$0/mo
P&I $0 + taxes, insurance, MI & HOA
Year 4 Onward Full Payment$0/mo
P&I $0 + taxes, insurance, MI & HOA
Monthly Taxes, Insurance & Mortgage Insurance
Property Taxes$0
Homeowners Insurance$0
Mortgage Insurance$0
HOA Dues$0
Strategy Goal

What matters most in this purchase strategy?

Choose the buyer's priority. ALG Homebuyer Advantage™ will compare the three offer structures already on the page and identify the one that best matches that goal.

The recommendation is a planning comparison based on the current calculator assumptions and the Offer A / B / C structures shown below.
Recommended Strategy

Adjust the scenario to compare the available strategies.

Estimated Buyer Funds$0
Year 1 Full Payment$0/mo
Seller Help Applied$0
Offer Strategy & Seller Contribution Analysis

Compare the offer structures side by side.

Offer A tests price reduction, Offer B applies seller help to closing costs, and Offer C adds the selected temporary buydown. These offers have independent credit sliders; Strategy Center funding choices apply only to its own scenario. Slider percentages refer to purchase price, while the program limit also considers the entered appraisal.

Offer A

Lower Price Focus

$0$50,000
$640,000
Seller Help Applied$0
Buyer Funds Needed$0
Year 1 Full Payment$0
Note-Rate Full Payment$0
Monthly Payment Components
P&I$0
Property Taxes$0
Homeowners Insurance$0
Mortgage Insurance$0
HOA Dues$0
Uses no temporary buydown. The comparison shows what negotiating the price itself may do.
Offer B

Lower Cash Focus

$650,000
0%Max 6.00%
Seller Help Applied$0
Buyer Funds Needed$0
Year 1 Full Payment$0
Note-Rate Full Payment$0
Monthly Payment Components
P&I$0
Property Taxes$0
Homeowners Insurance$0
Mortgage Insurance$0
HOA Dues$0
Seller help is applied toward estimated closing costs only. No temporary buydown is used in Offer B.
Offer C

Lower Payment Focus

$650,000
0%Max 6.00%
Seller Help Applied$0
Buyer Funds Needed$0
Year 1 Full Payment$0
Note-Rate Full Payment$0
Year 1 Monthly Payment Components
P&I$0
Property Taxes$0
Homeowners Insurance$0
Mortgage Insurance$0
HOA Dues$0
Uses the selected temporary buydown. Any portion not covered by seller help remains included in Estimated Buyer Funds Needed.
The right strategy may matter just as much as the price you negotiate.

Planning estimates only. Maximum seller contribution does not mean the full amount can necessarily be used. Actual eligible costs, temporary buydown requirements, loan-program rules, lender requirements, contract terms, and underwriting determine the amount that may be applied.

Listing Agent Perspective

What does each offer mean for the seller?

Uses the eligible credit actually applied in each offer. Unused requested credit requires contract and lender review.

Proceeds = price − applied buyer credit − entered selling expenses − entered payoffs. Blank expenses are treated as $0, not verified as absent. This is not an escrow net sheet. Negative proceeds indicate a potential seller cash requirement.

Price Reduction vs. Seller Credit

Compare the same proposed seller budget.

Same price-minus-credit result only when the full proposed credit can be used. Percentage-based selling expenses can still create different final proceeds. A higher contract price must be supported by appraisal.

Bring the Numbers Into the Conversation

Save, share, or review this offer.

Review This Offer With Michael

Review opens your email app with a draft addressed to Michael. Review the draft and send it yourself. The PDF button opens a printable summary; choose Save as PDF in the print dialog.

Save or share this scenario

Links otherwise contain calculation inputs only. Anyone with a shared link can view the included details. Device saves include the details and are stored only in this browser.

Planning assumptions and eligibility

Conventional one-unit purchase illustration only. The planning LTV caps are 97% primary, 90% second home and a conservative 75% investment; these are screening assumptions, not a complete eligibility decision. MI is an estimate, not a quote. Temporary buydowns are excluded for investment property. Qualification uses the note-rate payment. Buyer-funded buydowns and buyer-paid shortfalls require lender confirmation. Rate availability, credit, income, reserves, property eligibility, subordinate financing and lender overlays are not evaluated. No refinancing is assumed. Buyer funds are total estimated funds, before any deposit already paid; not a final cash-to-close figure.

Seller-contribution limits use the lower of price or entered appraisal and the modeled first-lien LTV; subordinate financing requires review. Credit cannot cover the down payment or reserves. Best Overall Balance uses 40% buyer funds, 40% Year 1 payment and 20% price; it does not measure lifetime cost. Estimates and shared inputs are not loan approvals or rate locks.

Reference rules: Fannie Mae temporary buydowns · Interested party contributions. Confirm current lender requirements with ALG.

'; } function selectedLabel(field) { return field.options[field.selectedIndex].textContent; } function makeOffer(price, requestedCredit, type, future) { var down = n(e.down.value), rate = n(future ? e.rateLater.value : e.rateNow.value); var loan = price * (1 - down / 100); var valuation = future ? price : Math.min(price, optional('Appraisal', price)); var ltv = loan / valuation, occ = e.occ.value; var pct = occ === 'investment' ? .02 : ltv > .90 + 1e-9 ? .03 : ltv > .75 + 1e-9 ? .06 : .09; var cap = valuation * pct; var actualType = occ === 'investment' ? 'none' : type; var bd = buydown(loan, rate, actualType); var taxes = optional('Taxes', price * .0125) / 12; var insurance = optional('Insurance', price * .0035 / 12); var hoa = optional('HOA', 0); var mi = optional('MI', loan * miRate(Math.round((1 - ltv) * 10000) / 100) / 12); var closing = optional('Closing', loan * .0175); var eligibleCosts = closing + bd.cost; var requested = requestedCredit === null ? cap : Math.max(0, requestedCredit); var applied = Math.min(requested, cap, eligibleCosts); var toClosing = Math.min(closing, applied); var toBuydown = Math.min(bd.cost, Math.max(0, applied - toClosing)); var funds = price * down / 100 + closing - toClosing + bd.cost - toBuydown; var extras = taxes + insurance + mi + hoa; var payments = [0, 1, 2, 3].map(function(i) { return (i < bd.payments.length ? bd.payments[i] : bd.note) + extras; }); var reasons = []; if (ltv > maxLtv(occ) + 1e-9) reasons.push('Above the selected planning LTV cap; lender review required'); if (loan > optional('Limit', 832750)) reasons.push('Above the selected conforming loan limit; lender review required'); if (type !== 'none' && occ === 'investment') reasons.push('Temporary buydowns are unavailable for investment property in this model'); var expensePct = optional('SellPct', 0), fixed = optional('SellFixed', 0), payoff = optional('Payoff', 0); return { price: price, loan: loan, ltv: ltv, valuation: valuation, sellerPct: pct, cap: cap, requested: requested, sellerHelp: applied, eligibleCosts: eligibleCosts, closing: closing, bd: bd, type: actualType, taxes: taxes, insurance: insurance, mi: mi, hoa: hoa, toClosing: toClosing, toBuydown: toBuydown, buyerBuydown: bd.cost - toBuydown, buyerFunds: funds, fullPayment: payments[0], noteFull: bd.note + extras, payments: payments, remaining: Math.max(0, cap - applied), unused: Math.max(0, requested - applied), priceLessCredit: price - applied, sellingExpenses: price * expensePct / 100 + fixed, payoff: payoff, net: price - applied - price * expensePct / 100 - fixed - payoff, eligible: reasons.length === 0, reasons: reasons }; } function card(title, q, seller) { var html = '

' + esc(title) + '

'; if (!q.eligible) html += '
Lender review required
'; html += line('Purchase price', money(q.price)) + line('Seller credit applied', money(q.sellerHelp)); if (seller) { html += line('Price less credit', money(q.priceLessCredit)) + line('Entered selling expenses', money(q.sellingExpenses)) + line('Entered payoffs', money(q.payoff)) + line('Proceeds after entered costs', money(q.net)); } else { html += line('Buyer funds needed', money(q.buyerFunds)) + line('Year 1 full payment', money(q.fullPayment) + '/mo') + line('Note-rate full payment', money(q.noteFull) + '/mo') + line('Price less credit', money(q.priceLessCredit)) + line('Proceeds after entered costs', money(q.net)); } if (q.reasons.length) html += '

' + esc(q.reasons.join('. ')) + '.

'; return html + '
'; } function updateGoalRecommendation(goal, offers) { var keys = ['A', 'B', 'C'], available = keys.filter(function(k) { return offers[k].eligible; }); if (goal === 'compare' || available.length === 0) { e.recBadge.textContent = goal === 'compare' ? 'Compare All Strategies' : 'Lender Review Required'; e.recTitle.textContent = goal === 'compare' ? 'Review the tradeoffs' : 'No strategy passes this planning screen'; e.recReason.textContent = 'Review the offer notes and ask ALG to confirm eligibility, funds and the note-rate payment.'; e.recFunds.textContent = e.recPayment.textContent = e.recSellerHelp.textContent = '—'; } else { var choice = chooseGoalStrategy(goal, offers); e.recBadge.textContent = 'Closest Match to Selected Goal'; e.recTitle.textContent = choice.name; e.recReason.textContent = goalReason(goal, choice).replace('among the three offer structures', 'among the structures that pass this planning screen').replace('among the three structures', 'among the structures that pass this planning screen') + ' Subject to lender review; not a loan approval.'; e.recFunds.textContent = money(choice.buyerFunds); e.recPayment.textContent = money(choice.fullPayment) + '/mo'; e.recSellerHelp.textContent = money(choice.sellerHelp); } e.compareAll.style.display = goal === 'compare' || available.length < 3 ? 'block' : 'none'; e.compareAll.innerHTML = keys.map(function(k) { var q = offers[k]; return '

' + esc(q.name) + ': ' + money(q.buyerFunds) + ' buyer funds; ' + money(q.fullPayment) + '/mo Year 1.' + (q.eligible ? '' : ' Excluded from ranking: ' + esc(q.reasons.join('. ')) + '.') + '

'; }).join(''); } function update() { var price = n(e.price.value), years = n(e.years.value), app = n(e.app.value), down = n(e.down.value); var rateNow = n(e.rateNow.value), rateLater = n(e.rateLater.value), occ = e.occ.value; var investment = occ === 'investment'; Array.prototype.forEach.call(e.type.options, function(option) { option.disabled = investment && option.value !== 'none'; }); if (investment) e.type.value = 'none'; var type = e.type.value, futurePrice = price * Math.pow(1 + app / 100, years); var now = makeOffer(price, 0, 'none', false), later = makeOffer(futurePrice, 0, 'none', true); var main = makeOffer(price, e.funding.value === 'buyer' ? 0 : optional('Requested', null), type, false); var discount = Math.min(price - 50000, Math.max(0, n(e.aDiscount.value))); var maxPct = now.cap / price * 100; var bPct = clampSellerSlider(e.bSlider, e.bDisplay, e.bMax, maxPct, false); var cPct = clampSellerSlider(e.cSlider, e.cDisplay, e.cMax, maxPct, true); var A = makeOffer(price - discount, 0, 'none', false); var B = makeOffer(price, price * bPct / 100, 'none', false); var C = makeOffer(price, price * cPct / 100, type, false); A.name = 'Offer A — Lower Price Focus'; B.name = 'Offer B — Lower Cash Focus'; out('OfferCTitle', type === 'none' ? 'Closing Costs Only' : 'Lower Payment Focus'); C.name = type === 'none' ? 'Offer C — Closing Costs Only' : 'Offer C — Lower Payment Focus'; if (type === 'none') { C.eligible = false; C.reasons.push(investment ? 'No temporary buydown for investment property; compare A and B' : 'No temporary buydown selected; compare A and B to avoid ranking a duplicate structure'); } var offers = { A: A, B: B, C: C }; e.priceValue.textContent = money(price); e.priceDirect.value = Math.round(price).toLocaleString('en-US'); e.yearsValue.textContent = years + (years === 1 ? ' year' : ' years'); e.heroYears.textContent = years; e.appValue.textContent = app.toFixed(2) + '%'; e.downValue.textContent = down.toFixed(0) + '%'; e.rateNowValue.textContent = rateNow.toFixed(3) + '%'; e.rateLaterValue.textContent = rateLater.toFixed(3) + '%'; e.future.textContent = money(futurePrice); e.priceIncrease.textContent = money(futurePrice - price); e.extraDown.textContent = money((futurePrice - price) * down / 100); e.loanNow.textContent = money(now.loan); e.loanLater.textContent = money(later.loan); e.paymentNow.textContent = money(now.noteFull) + '/mo'; e.paymentLater.textContent = money(later.noteFull) + '/mo'; e.paymentDiff.textContent = money(later.noteFull - now.noteFull) + '/mo'; [ ['Now', now], ['Later', later] ].forEach(function(pair) { var prefix = 'top' + pair[0], q = pair[1]; e[prefix + 'PI'].textContent = money(q.bd.note) + '/mo'; e[prefix + 'Taxes'].textContent = money(q.taxes) + '/mo'; e[prefix + 'Insurance'].textContent = money(q.insurance) + '/mo'; e[prefix + 'MI'].textContent = money(q.mi) + '/mo'; out(pair[0] + 'HOA', money(q.hoa) + '/mo'); }); e.buyerFunds.textContent = money(main.buyerFunds); e.buyerPayment.textContent = money(main.noteFull) + '/mo'; e.buyerSellerHelp.textContent = money(main.sellerHelp); e.proLoan.textContent = money(now.loan); e.proLtv.textContent = (now.ltv * 100).toFixed(2) + '%'; e.proSellerMax.textContent = money(now.cap); e.proConforming.textContent = now.loan <= optional('Limit', 832750) ? 'Within selected limit' : 'Lender review'; e.ltvStatus.textContent = (now.eligible ? 'Within the selected planning thresholds. ' : 'Lender review required. ') + 'LTV: ' + (now.ltv * 100).toFixed(2) + '%; planning cap: ' + (maxLtv(occ) * 100).toFixed(0) + '%. Contribution limit: ' + (now.sellerPct * 100).toFixed(0) + '% of ' + money(now.valuation) + ' (lower of price or entered appraisal). Not a complete eligibility decision.'; e.ltvStatus.classList.toggle('alg6-warning', !now.eligible); out('Eligibility', investment ? 'Investment property: temporary buydowns are unavailable in this conventional model. Closing costs only is selected.' : 'Temporary buydown payments do not change the note rate. Qualification uses the note-rate payment. Lender approval of the plan and funding source is required.'); el('Eligibility').classList.toggle('alg6-warning', investment); e.sellerCapacity.textContent = money(main.cap); e.closingCosts.textContent = money(main.closing); e.buydownCost.textContent = money(main.bd.cost); e.sellerApplied.textContent = money(main.sellerHelp); e.year1.textContent = money(main.bd.payments[0] === undefined ? main.bd.note : main.bd.payments[0]) + '/mo'; e.year2.textContent = money(main.bd.payments[1] === undefined ? main.bd.note : main.bd.payments[1]) + '/mo'; e.notePI.textContent = money(main.bd.note) + '/mo'; e.year1Full.textContent = money(main.payments[0]) + '/mo'; e.year2Full.textContent = money(main.payments[1]) + '/mo'; e.noteFull.textContent = money(main.payments[3]) + '/mo'; out('Year3Full', money(main.payments[2]) + '/mo'); out('Year3PI', money(main.bd.payments[2] === undefined ? main.bd.note : main.bd.payments[2]) + '/mo'); out('Increase1', 'Below note-rate payment: ' + money(main.noteFull - main.payments[0]) + '/mo'); [1, 2, 3].forEach(function(i) { out('Increase' + (i + 1), 'Increase from prior year: ' + money(main.payments[i] - main.payments[i - 1]) + '/mo'); }); e.strategyTaxes.textContent = money(main.taxes) + '/mo'; e.strategyInsurance.textContent = money(main.insurance) + '/mo'; e.strategyMI.textContent = money(main.mi) + '/mo'; out('StrategyHOA', money(main.hoa) + '/mo'); el('CreditDetails').innerHTML = [ ['Requested seller credit', main.requested], ['Modeled eligible costs + buydown', main.eligibleCosts], ['Applied to closing costs', main.toClosing], ['Applied to temporary buydown', main.toBuydown], ['Unused requested credit', main.unused], ['Buyer funds needed', main.buyerFunds] ].map(function(pair) { return '
' + esc(pair[0]) + '' + money(pair[1]) + '
'; }).join(''); e.strategyStatus.classList.toggle('alg-exhausted', e.funding.value === 'seller' && Math.round(main.remaining) === 0); if (e.funding.value === 'buyer') { e.strategyStatus.innerHTML = 'No Seller Concessions selected.
' + esc(main.bd.name) + ' is shown as buyer-funded. Estimated buyer funds needed: ' + money(main.buyerFunds) + '. Confirm funding eligibility with ALG.'; } else { e.strategyStatus.innerHTML = '' + esc(main.bd.name) + ' with Seller Concessions.
Estimated seller contribution applied: ' + money(main.sellerHelp) + '.
Remaining contribution capacity: ' + money(main.remaining) + '.' + (main.buyerBuydown > 0 ? ' Buyer-funded buydown shortfall included in buyer funds: ' + money(main.buyerBuydown) + '. Lender review required.' : '') + '
Remaining capacity is unused room under the program limit; additional eligible costs and an agreed seller credit are still needed to use it.'; } e.aDiscountDisplay.textContent = money(discount); ['A', 'B', 'C'].forEach(function(key) { var q = offers[key], p = key.toLowerCase(); e[p + 'Price'].textContent = money(q.price); e[p + 'Help'].textContent = money(q.sellerHelp); e[p + 'Funds'].textContent = money(q.buyerFunds); e[p + 'Year1Full'].textContent = money(q.fullPayment) + '/mo'; e[p + 'NoteFull'].textContent = money(q.noteFull) + '/mo'; e[p + 'PI'].textContent = money(q.bd.payments[0] === undefined ? q.bd.note : q.bd.payments[0]) + '/mo'; e[p + 'Taxes'].textContent = money(q.taxes) + '/mo'; e[p + 'Insurance'].textContent = money(q.insurance) + '/mo'; e[p + 'MI'].textContent = money(q.mi) + '/mo'; out('Offer' + key + 'HOA', money(q.hoa) + '/mo'); out('Offer' + key + 'Eligibility', q.eligible ? 'Planning estimate — confirm with ALG.' : q.reasons.join('. ') + '.'); }); e.cNoteText.textContent = 'Uses ' + C.bd.name + '. ' + (C.buyerBuydown > 0 ? money(C.buyerBuydown) + ' of buyer-funded buydown shortfall is included in buyer funds; lender confirmation required.' : 'Seller credit applies only to the eligible modeled costs.'); updateGoalRecommendation(e.goal.value, offers); el('SellerCards').innerHTML = ['A', 'B', 'C'].map(function(k) { return card(offers[k].name, offers[k], true); }).join(''); var budget = Math.min(optional('Budget', 15000), price - 50000); el('Budget').value = budget; var cut = makeOffer(price - budget, 0, 'none', false); var credit = makeOffer(price, budget, el('BudgetUse').value === 'closing' ? 'none' : type, false); var unused = Math.max(0, budget - credit.sellerHelp); out('BudgetStatus', unused > .005 ? 'Only ' + money(credit.sellerHelp) + ' of the ' + money(budget) + ' proposed credit is usable under these assumptions. Price less credit differs by ' + money(unused) + '; these are not equal seller concessions.' : 'The full ' + money(budget) + ' budget is usable. Both structures have the same price-minus-credit figure, before selling expenses.'); el('BudgetStatus').classList.toggle('alg6-warning', unused > .005); el('BudgetCards').innerHTML = card('Reduce the purchase price', cut, false) + card('Keep price + apply seller credit', credit, false); latest = { now: now, later: later, main: main, offers: offers, budget: budget, cut: cut, credit: credit }; refreshReview(); lastMaxPct = maxPct; } var controls = Array.prototype.slice.call(root.querySelectorAll('input, select')).filter(function(field) { return field.id !== 'alg6IncludeDetails' && field.id !== 'alg5HomePriceDirect'; }); var defaults = {}; controls.forEach(function(field) { defaults[field.id] = field.value; }); var personal = ['alg6Address', 'alg6Agent', 'alg6Contact']; function snapshot(includeDetails) { var fields = {}; controls.forEach(function(field) { if (includeDetails || personal.indexOf(field.id) < 0) fields[field.id] = field.value; }); return { v: 1, view: root.classList.contains('alg-pro-view') ? 'pro' : 'buyer', fields: fields }; } function restore(state) { if (!state || state.v !== 1 || !state.fields || typeof state.fields !== 'object' || Array.isArray(state.fields)) throw new Error('Unrecognized saved scenario.'); // Reset dynamic slider bounds before applying saved values; update() re-clamps to actual limits. e.bSlider.max = e.cSlider.max = '9'; controls.forEach(function(field) { var value = Object.prototype.hasOwnProperty.call(state.fields, field.id) ? state.fields[field.id] : defaults[field.id]; if (typeof value !== 'string' && typeof value !== 'number') value = defaults[field.id]; value = String(value); if (field.tagName === 'SELECT') { var ok = Array.prototype.some.call(field.options, function(o) { return o.value === value; }); field.value = ok ? value : defaults[field.id]; } else if (field.type === 'number' || field.type === 'range') { if (value === '') field.value = field.type === 'range' ? defaults[field.id] : ''; else if (isFinite(Number(value))) field.value = String(Math.max(Number(field.min || 0), Math.min(Number(field.max || 1e9), Number(value)))); else field.value = defaults[field.id]; } else field.value = value.slice(0, field.maxLength > 0 ? field.maxLength : 160); }); setView(state.view === 'buyer' ? 'buyer' : 'pro'); lastMaxPct = null; update(); } function linkFor(includeDetails) { var u = new URL(window.location.href); if (u.protocol !== 'https:' && u.protocol !== 'http:') throw new Error('Create a scenario link from the calculator installed on your website.'); u.hash = 'alg-hba=' + encodeURIComponent(JSON.stringify(snapshot(includeDetails))); return u.href; } function reviewText() { var key = el('ReviewOffer').value, q = latest.offers[key]; return 'Michael, please review this offer scenario.\n\nProperty: ' + (el('Address').value || 'Not entered') + '\nRealtor / brokerage: ' + (el('Agent').value || 'Not entered') + '\nPreferred contact: ' + (el('Contact').value || 'Not entered') + '\n\n' + q.name + '\nPrice: ' + money(q.price) + ' | Down: ' + e.down.value + '% | Loan: ' + money(q.loan) + '\nOccupancy: ' + selectedLabel(e.occ) + ' | Note rate: ' + e.rateNow.value + '% | Term: 30 years' + '\nRequested credit: ' + money(q.requested) + ' | Applied: ' + money(q.sellerHelp) + ' | Program cap: ' + money(q.cap) + '\nBuyer funds: ' + money(q.buyerFunds) + ' | Buydown: ' + q.bd.name + '\nMonthly payments Y1 / Y2 / Y3 / Y4+: ' + q.payments.map(function(v) { return money(v); }).join(' / ') + '\nNote-rate payment: ' + money(q.noteFull) + ' | Seller proceeds after entered costs: ' + money(q.net) + '\nStatus: ' + (q.eligible ? 'Passes limited planning screen; confirm full eligibility.' : q.reasons.join('. ')) + '\n\nPlanning estimates only; not an approval, rate lock, or contract instruction. Please confirm costs, credit use, program eligibility and funding before the offer is finalized.'; } function refreshReview() { var body = reviewText(); el('Review').href = 'mailto:mlarson@mylenderalg.com?subject=' + encodeURIComponent('ALG Offer Review — ' + (el('Address').value || 'Purchase scenario')) + '&body=' + encodeURIComponent(body); } function copyText(text, message) { el('CopyText').value = text; out('ActionStatus', 'Use the text box if automatic copying is unavailable.'); if (navigator.clipboard && navigator.clipboard.writeText) { navigator.clipboard.writeText(text).then(function() { out('ActionStatus', message); }, function() { el('CopyText').focus(); el('CopyText').select(); out('ActionStatus', 'Select and copy the text in the box.'); }); } else { el('CopyText').focus(); el('CopyText').select(); out('ActionStatus', 'Select and copy the text in the box.'); } } function printSummary() { var q = latest.offers[el('ReviewOffer').value], offers = latest.offers; var rows = [ ['Purchase price', 'price'], ['Loan amount', 'loan'], ['Requested seller credit', 'requested'], ['Program contribution limit', 'cap'], ['Eligible costs + buydown', 'eligibleCosts'], ['Seller credit applied', 'sellerHelp'], ['Unused requested credit', 'unused'], ['Buyer funds needed', 'buyerFunds'], ['Year 1 monthly payment', 'fullPayment'], ['Note-rate monthly payment', 'noteFull'], ['Price less applied credit', 'priceLessCredit'], ['Entered selling expenses', 'sellingExpenses'], ['Entered payoffs', 'payoff'], ['Proceeds after entered costs', 'net'] ]; var table = ''; rows.forEach(function(row) { table += '' + ['A', 'B', 'C'].map(function(k) { return ''; }).join('') + ''; }); table += '' + ['A', 'B', 'C'].map(function(k) { return ''; }).join('') + '
Offer comparisonA · Lower PriceB · Lower CashC · Selected Strategy
' + esc(row[0]) + '' + money(offers[k][row[1]]) + '
Planning screen' + (offers[k].eligible ? 'Review with ALG' : 'Excluded from ranking') + '
'; var notes = ['Educational estimates only; not loan approval, a commitment, financial advice or a rate lock. All loans subject to underwriting and property approval.', 'Qualification uses the note rate. Payments include estimated taxes, insurance, MI and HOA and hold them constant through the buydown timeline. Actual costs can change. No refinancing assumed.', 'Credit is limited by modeled eligible costs and program limits; unused credit is not cash back or down-payment assistance. Buyer-funded buydowns require lender confirmation. Buyer funds are before deposits already paid.', 'Seller proceeds deduct only entered costs and payoffs; blank expenses equal $0. Not an escrow net sheet. Full eligibility, subordinate financing and lender overlays are not evaluated.' ]; var status = ['A', 'B', 'C'].filter(function(k) { return !offers[k].eligible; }).map(function(k) { return k + ': ' + offers[k].reasons.join('; '); }).join(' | '); var html = 'ALG Offer Summary
Choose Save as PDF in your print dialog. Default layout is US Letter.
' + '

ALG Homebuyer Advantage™

Offer comparison · ' + esc(new Date().toLocaleDateString('en-US')) + '

' + '

Property: ' + esc(el('Address').value || 'Not entered') + '

Realtor: ' + esc(el('Agent').value || 'Not entered') + ' · ' + esc(el('Contact').value || 'Contact not entered') + '

' + '

Prepared with Michael Larson · 661-472-1321 · mlarson@mylenderalg.com

' + '

30-year fixed illustration · ' + esc(selectedLabel(e.occ)) + ' · ' + esc(e.down.value) + '% down · ' + esc(e.rateNow.value) + '% note rate · selected loan limit ' + money(optional('Limit', 832750)) + '

' + '

Appraisal assumption: ' + (el('Appraisal').value ? money(optional('Appraisal', 0)) : 'purchase price for each offer') + '. Selling expenses: ' + optional('SellPct', 0) + '% + ' + money(optional('SellFixed', 0)) + '. Payoffs: ' + money(optional('Payoff', 0)) + '.

' + table + '

Featured: ' + esc(q.name) + ' · ' + esc(q.bd.name) + '

' + q.payments.map(function(v, i) { return '
Year ' + (i === 3 ? '4 onward' : i + 1) + '' + money(v) + '/mo' + (i === 0 ? 'Below note payment: ' + money(q.noteFull - v) : 'Increase: ' + money(v - q.payments[i - 1])) + '/mo
'; }).join('') + '
' + '

Monthly components at note rate: P&I ' + money(q.bd.note) + ' · Taxes ' + money(q.taxes) + ' · Insurance ' + money(q.insurance) + ' · MI ' + money(q.mi) + ' · HOA ' + money(q.hoa) + '.

' + (status ? '

Review notes: ' + esc(status) + '

' : '') + '
' + notes.map(function(t) { return '

' + esc(t) + '

'; }).join('') + '

Accelerated Lending Group · NMLS 1563471 · CA DRE 02022124. Michael Larson · NMLS 278522 · CA DRE 01747928. Licensed by the California Department of Real Estate. Equal Housing Opportunity. © 2026 Accelerated Lending Group.

'; var win = window.open('', '_blank'); if (!win) { out('ActionStatus', 'Allow popups for this site to open the printable summary, or use Copy Review Details.'); return; } win.opener = null; win.document.open(); win.document.write(html); win.document.close(); win.document.getElementById('printNow').addEventListener('click', function() { win.print(); }); out('ActionStatus', 'Summary opened. Use Print / Save as PDF in that window.'); } controls.forEach(function(field) { if (field.type === 'range') field.addEventListener('input', update); field.addEventListener('change', function() { if (field.type === 'number' && field.value.trim() !== '' && isFinite(Number(field.value))) field.value = String(Math.max(Number(field.min || 0), Math.min(Number(field.max || 1e9), Number(field.value)))); update(); }); if (field.type === 'text') field.addEventListener('input', refreshReview); }); e.buyerBtn.addEventListener('click', function() { setView('buyer'); }); e.proBtn.addEventListener('click', function() { setView('pro'); }); e.priceDirect.addEventListener('change', cleanDirect); e.priceDirect.addEventListener('blur', cleanDirect); e.priceDirect.addEventListener('keydown', function(ev) { if (ev.key === 'Enter') { ev.preventDefault(); cleanDirect(); e.priceDirect.blur(); } }); el('Print').addEventListener('click', printSummary); el('CopyReview').addEventListener('click', function() { copyText(reviewText(), 'Review details copied.'); }); el('Share').addEventListener('click', function() { try { copyText(linkFor(el('IncludeDetails').checked), 'Scenario link copied.'); } catch (err) { out('ActionStatus', err.message); } }); el('IncludeDetails').addEventListener('change', function() { el('CopyText').value = ''; out('ActionStatus', 'Click Copy Scenario Link to create a link with this setting.'); }); el('Save').addEventListener('click', function() { try { window.localStorage.setItem('alg-hba-scenario-v1', JSON.stringify(snapshot(true))); out('ActionStatus', 'Scenario saved on this device.'); } catch (err) { out('ActionStatus', 'Device storage is unavailable. Use Copy Scenario Link instead.'); } }); el('Load').addEventListener('click', function() { try { var saved = window.localStorage.getItem('alg-hba-scenario-v1'); if (!saved) { out('ActionStatus', 'No scenario has been saved on this device.'); return; } restore(JSON.parse(saved)); out('ActionStatus', 'Saved scenario loaded.'); } catch (err) { out('ActionStatus', 'Could not load the saved scenario. Current inputs remain available.'); } }); el('Reset').addEventListener('click', function() { restore({ v: 1, view: 'pro', fields: defaults }); el('CopyText').value = ''; el('IncludeDetails').checked = false; out('ActionStatus', 'Inputs reset. A previously saved device scenario is retained.'); }); setView('pro'); var fragment = window.location.hash; if (fragment.indexOf('#alg-hba=') === 0) { try { if (fragment.length > 16000) throw new Error('Link too long'); restore(JSON.parse(decodeURIComponent(fragment.slice(9)))); out('ActionStatus', 'Shared scenario loaded. Confirm assumptions before using it.'); } catch (err) { restore({ v: 1, view: 'pro', fields: defaults }); out('ActionStatus', 'The shared scenario could not be read. Default inputs are shown.'); } } else update(); })();

Ready to Compare Conventional Options?

Bakersfield • Kern County • California

Request QuoteApply NowCall Now

Licensing, Fair Housing & Important Disclosures

This calculator is provided for educational and illustrative purposes only and does not constitute a loan approval, preapproval, commitment to lend, or financial advice.

Payment examples are estimates based on user-entered assumptions and may not include all loan costs. Actual rates, APR, payments, fees, closing costs, and terms will vary based on borrower qualifications, loan program, property type, occupancy, and market conditions.

Home value appreciation rates, future home prices, and long-term cost estimates are not guaranteed. Long-term cost examples are simplified projections and do not account for refinancing, tax treatment, investment returns, future income changes, or changing market conditions.

Estimated homeowners insurance is provided for illustrative purposes only. Actual premiums may vary based on property characteristics, geographic location, coverage selections, insurance carrier, deductibles, replacement cost, claims history, and other underwriting factors.

Estimated conventional mortgage insurance is based on representative borrower and loan assumptions and is provided for illustrative purposes only. Actual mortgage insurance premiums may vary based on credit profile, loan-to-value ratio, occupancy, property type, loan program, mortgage insurance provider, and underwriting guidelines in effect at the time of application.

All loans are subject to underwriting approval, including the marketability, quality, and condition of the subject property.

Accelerated Lending Group | NMLS: 1563471 | DRE #: 02022124

Licensed by the California Department of Real Estate

Equal Housing Opportunity  |  © 2026 Accelerated Lending Group. All Rights Reserved.

This calculator, including its methodology, calculations, algorithms, presentation, user interface, visual design, analytical framework, and related content, is proprietary to Accelerated Lending Group and is protected by applicable copyright, trade secret, and other intellectual property laws. Unauthorized copying, reproduction, distribution, reverse engineering, modification, commercial use, or creation of derivative works, in whole or in part, is strictly prohibited without the prior written consent of Accelerated Lending Group.

Mortgage calculations are provided for educational and illustrative purposes only and do not constitute a loan approval, commitment to lend, or guarantee of financing.