When loading a page with a mortgage calculator on 1C-Bitrix, the user waits 5 seconds — 70% of leads are lost. We solve this with tagged caching and asynchronous data loading. Accurate annuity calculation including insurance and fees is the foundation of trust. Our experience: 10+ years, certified specialists, licensed software, quality guarantee. Clients get a tool that increases conversion by 30% and reduces application processing time to 2 minutes. Operational cost savings up to 200,000 RUB per year. Lead attrition reduction by 70% — additional profit up to 500,000 RUB per month. Get an instrument that brings real leads — leave a request for development.
A mortgage calculator is not just a form with fields. It is a full-fledged service that helps the client make a decision: compare banks, see the payment schedule, evaluate overpayment. Without quality implementation, the user goes to aggregator sites. We build mortgage calculators that retain visitors and push them to apply.
How does a mortgage calculator on 1C-Bitrix calculate annuity payments?
Annuity payment — the same amount every month. Formula:
P = S × r / (1 - (1 + r)^(-n)) Parameters:
-
P— monthly payment -
S— loan amount (price − down payment) -
r— monthly interest rate (annual ÷ 12 ÷ 100) -
n— number of months
This is the classic annuity formula, detailed in financial mathematics. PHP implementation:
namespace MyProject\Services; class MortgageCalculator { public static function calculate( float $propertyPrice, float $downPayment, float $annualRate, int $termYears ): array { $loanAmount = $propertyPrice - $downPayment; $termMonths = $termYears * 12; $monthlyRate = $annualRate / 12 / 100; if ($monthlyRate == 0) { $monthlyPayment = $loanAmount / $termMonths; } else { $monthlyPayment = $loanAmount * $monthlyRate * pow(1 + $monthlyRate, $termMonths) / (pow(1 + $monthlyRate, $termMonths) - 1); } $totalPayment = $monthlyPayment * $termMonths; $totalInterest = $totalPayment - $loanAmount; $overpaymentPct = ($totalInterest / $loanAmount) * 100; return [ 'loan_amount' => round($loanAmount, 2), 'monthly_payment' => round($monthlyPayment, 2), 'total_payment' => round($totalPayment, 2), 'total_interest' => round($totalInterest, 2), 'overpayment_pct' => round($overpaymentPct, 1), 'down_payment_pct' => round(($downPayment / $propertyPrice) * 100, 1), ]; } public static function buildPaymentSchedule( float $loanAmount, float $annualRate, int $termMonths ): array { $schedule = []; $monthlyRate = $annualRate / 12 / 100; $monthlyPayment = $loanAmount * $monthlyRate * pow(1 + $monthlyRate, $termMonths) / (pow(1 + $monthlyRate, $termMonths) - 1); $balance = $loanAmount; for ($month = 1; $month <= $termMonths; $month++) { $interestPayment = $balance * $monthlyRate; $principalPayment = $monthlyPayment - $interestPayment; $balance -= $principalPayment; $schedule[] = [ 'month' => $month, 'payment' => round($monthlyPayment, 2), 'principal' => round($principalPayment, 2), 'interest' => round($interestPayment, 2), 'balance' => round(max($balance, 0), 2), ]; } return $schedule; } } More on bank integration
For an aggregator, bank data is stored in an HL-block and updated by the manager. Each record contains the rate, minimum down payment, term, and a link to the partner API. When the user selects a bank, a POST request with calculation parameters is sent, and a preliminary approval is returned.What does the payment schedule and insurance give the user?
A full amortization schedule is a competitive advantage. The user sees how the principal decreases and how much goes to interest in different periods. For visualization, we use Chart.js or ApexCharts — lightweight libraries without extra dependencies.
// Data for the chart comes from the server via AJAX async function updateChart(params) { const response = await fetch('/ajax/mortgage/schedule/', { method: 'POST', body: new URLSearchParams({ ...params, sessid: BX.bitrix_sessid() }), }); const data = await response.json(); if (!data.success) return; const years = []; const principalByYear = []; const interestByYear = []; data.schedule.forEach((month, i) => { const yearIndex = Math.floor(i / 12); if (!years[yearIndex]) { years[yearIndex] = `Year ${yearIndex + 1}`; principalByYear[yearIndex] = 0; interestByYear[yearIndex] = 0; } principalByYear[yearIndex] += month.principal; interestByYear[yearIndex] += month.interest; }); renderStackedBarChart(years, principalByYear, interestByYear); } Including insurance makes the calculation more realistic and increases user trust. Banks require insurance: property (0.1–0.5% of property value per year), life and health (0.3–1.5% of loan amount, optional but reduces rate), title (relevant for secondary market). Manager time saved on manual recalculation — up to 2 hours per day, reducing operational costs.
Comparison of banks in one table — mortgage calculator development
For aggregators and developer sites — a table comparing offers from several banks. Data is stored in an HL-block and updated by the manager:
| Bank | Rate | Down Payment | Term |
|---|---|---|---|
| Bank A | 8.5% | from 15% | up to 30 years |
| Bank B | 7.9% | from 20% | up to 25 years |
| Bank C | 9.1% | from 10% | up to 30 years |
An aggregator with multiple banks works faster than manual entry and increases conversion by 30%.
Why choose our mortgage calculator?
We use the Bitrix component model (Component 2.0), tagged caching, and ORM for working with infoblocks and HL-blocks. This ensures high response speed even under heavy load. All calculations are performed on the server with PHP 8.1+ and strict types, eliminating rounding errors. Integration with 1C via CommerceML allows automatic export of applications and data synchronization. We guarantee support for 30 days after release and manager training.
Process of work and integration
User interaction with the mortgage calculator in a few steps:
- Select property value and down payment.
- Enter annual rate and loan term.
- Click "Calculate" — via AJAX request, the server returns monthly payment and total overpayment.
- Open payment schedule with chart.
- Send application — data is automatically transferred to CRM.
Only 2–3 seconds of interaction — and the client gets an answer. The calculation result is passed to the application form as hidden fields — the manager sees what the client considered:
document.getElementById('submit-btn').addEventListener('click', () => { document.getElementById('hidden-loan-amount').value = currentResult.loan_amount; document.getElementById('hidden-monthly-pay').value = currentResult.monthly_payment; document.getElementById('hidden-annual-rate').value = currentParams.annualRate; document.getElementById('hidden-term-years').value = currentParams.termYears; }); Additionally, we integrate with 1C via CommerceML for automatic application export.
What is included in the work
- Requirements analysis and interface prototyping
- Implementation of the mathematical core on PHP 8.1+ using Bitrix ORM
- Frontend development on Bitrix Framework (BX.UI) with responsive design
- Integration with banks via API (YooKassa, Sber) and 1C
- Tagged caching for high response speed
- Documentation, source code access, manager training
- Support for 30 days after release
Timelines
| Task | Duration |
|---|---|
| Basic calculator (annuity, main fields, application form) | 5–8 days |
| Calculator with payment schedule, chart, insurance | 2–3 weeks |
| Full mortgage aggregator with multiple banks, saving calculations | 4–6 weeks |
Contact us for a consultation — we will calculate the timeline and cost for your task. Order a turnkey mortgage calculator development and get a tool that brings leads.

