Lease vs. buy calculator template
The cost of leasing against buying over the lease term, with the loan payment, balance and equity at the end. Eight inputs, six calculation fields.
Try the live Lease vs. buy calculator first- Import-ready Gravity Forms JSON
- One-page install guide
- The plugins it needs, with links
- Everything in Template
- Step-by-step PDF with screenshots of every field and formula
- The CSS skin from this site, with notes on matching your brand
What you'll need
Check these before you buy so there are no surprises. Links may be affiliate links.
- Required Gravity Forms (any license) Calculation fields are in core; the exponents and if blocks need GP Advanced Calculations.
- Required GP Advanced Calculations (Gravity Wiz) Exponents, functions and date math in calculation fields. The formulas in this template use its syntax. Part of Gravity Perks; needs the Spellbook plugin active as well.
Free build guide: Lease vs. buy calculator for WordPress
This guide rebuilds the Lease vs. buy calculator from this site in Gravity Forms: 8 inputs, 6 live results and no submit button. Expect about 42 minutes by hand. The template above is the same form as an import file, and the bundle adds a PDF version of this guide with a screenshot of every setting, plus the stylesheet.
You will end up with:
- Net cost of buying over the lease term
- Cost of leasing
- Buying minus leasing
- Loan payment
- Loan balance at the end of the lease term
- Equity at that point
What you need
- Gravity Forms (any license) — Calculation fields are in core; the exponents and if blocks need GP Advanced Calculations.
- GP Advanced Calculations (Gravity Wiz) — Exponents, functions and date math in calculation fields. The formulas in this template use its syntax. Part of Gravity Perks; needs the Spellbook plugin active as well.
The formulas below use GP Advanced Calculations syntax: exponents, functions or date math that core calculation fields cannot do. Install and activate it, with its Spellbook parent plugin, before you start; without it every result shows 0.
1. Create the form
- Go to Forms → New Form and name it Lease vs. buy.
- In Form Settings → Form Layout, set the CSS Class Name to
fo-live-only. Step 3 uses it to hide the submit button. - Leave the form open in the editor; the fields come next.
2. Add the fields, in this order
Field IDs are assigned as you add fields. If yours come out differently, change the {Label:ID} references in the formulas to match your IDs. Settings not mentioned stay at their defaults.
1. Lease: due at signing · Number · ID 1
Number Format Currency; Default Value 2000; Description “Down payment, first month, fees.”; Layout: half width, on the same row as its neighbor (drag the field beside it in the editor; no CSS class needed).
2. Lease: monthly payment · Number · ID 2
Number Format Currency; Default Value 450; Description “With tax.”; Layout: half width, on the same row as its neighbor (drag the field beside it in the editor; no CSS class needed).
3. Lease term (months) · Number · ID 3
Number Format 9,999.99; Default Value 36; Description “The comparison runs over these months.”.
4. Buy: price · Number · ID 4
Number Format Currency; Default Value 35000; Description “Negotiated price with tax and fees.”; Layout: half width, on the same row as its neighbor (drag the field beside it in the editor; no CSS class needed).
5. Buy: down payment · Number · ID 5
Number Format Currency; Default Value 5000; Layout: half width, on the same row as its neighbor (drag the field beside it in the editor; no CSS class needed).
6. Loan APR (%) · Number · ID 6
Number Format 9,999.99; Default Value 6.5; Layout: half width, on the same row as its neighbor (drag the field beside it in the editor; no CSS class needed).
7. Loan term (months) · Number · ID 7
Number Format 9,999.99; Default Value 60; Layout: half width, on the same row as its neighbor (drag the field beside it in the editor; no CSS class needed).
8. Car value at the end of the lease term (% of price) · Number · ID 8
Number Format 9,999.99; Default Value 55; Description “What it would sell for then. 50–60% after three years is typical; the lease contract's residual is a good guide.”.
9. Net cost of buying over the lease term · Number · ID 9
Number Format Currency; Description “Down payment and loan payments, less the equity you hold at the end (car value minus what you still owe).”; Custom CSS Class (Appearance tab) fo-result; tick Enable Calculation, Rounding 0.
if( {APR:6} == 0 ):
( {Buy down:5} + ( ( {Price:4} - {Buy down:5} ) / {Loan term:7} ) * {Lease term:3} - ( ( {Price:4} * {Residual:8} / 100 ) - ( ( {Price:4} - {Buy down:5} ) - ( ( {Price:4} - {Buy down:5} ) / {Loan term:7} ) * {Lease term:3} ) ) )
else:
( {Buy down:5} + ( ( {Price:4} - {Buy down:5} ) * ( {APR:6} / 1200 ) / ( 1 - ( 1 + ( {APR:6} / 1200 ) ) ^ ( 0 - {Loan term:7} ) ) ) * {Lease term:3} - ( ( {Price:4} * {Residual:8} / 100 ) - ( ( {Price:4} - {Buy down:5} ) * ( ( 1 + ( {APR:6} / 1200 ) ) ^ {Lease term:3} ) - ( ( {Price:4} - {Buy down:5} ) * ( {APR:6} / 1200 ) / ( 1 - ( 1 + ( {APR:6} / 1200 ) ) ^ ( 0 - {Loan term:7} ) ) ) * ( ( ( 1 + ( {APR:6} / 1200 ) ) ^ {Lease term:3} ) - 1 ) / ( {APR:6} / 1200 ) ) ) )
endif;
10. Cost of leasing · Number · ID 10
Number Format Currency; Description “Everything paid over the term; you hand the car back.”; Layout: half width, on the same row as its neighbor (drag the field beside it in the editor; no CSS class needed); Custom CSS Class (Appearance tab) fo-result fo-result--sub; tick Enable Calculation, Rounding 0.
( {Lease down:1} + {Lease payment:2} * {Lease term:3} )
11. Buying minus leasing · Number · ID 11
Number Format Currency; Description “Negative means buying is cheaper over the term once you count the equity.”; Layout: half width, on the same row as its neighbor (drag the field beside it in the editor; no CSS class needed); Custom CSS Class (Appearance tab) fo-result fo-result--sub; tick Enable Calculation, Rounding 0.
if( {APR:6} == 0 ):
( {Buy down:5} + ( ( {Price:4} - {Buy down:5} ) / {Loan term:7} ) * {Lease term:3} - ( ( {Price:4} * {Residual:8} / 100 ) - ( ( {Price:4} - {Buy down:5} ) - ( ( {Price:4} - {Buy down:5} ) / {Loan term:7} ) * {Lease term:3} ) ) ) - ( {Lease down:1} + {Lease payment:2} * {Lease term:3} )
else:
( {Buy down:5} + ( ( {Price:4} - {Buy down:5} ) * ( {APR:6} / 1200 ) / ( 1 - ( 1 + ( {APR:6} / 1200 ) ) ^ ( 0 - {Loan term:7} ) ) ) * {Lease term:3} - ( ( {Price:4} * {Residual:8} / 100 ) - ( ( {Price:4} - {Buy down:5} ) * ( ( 1 + ( {APR:6} / 1200 ) ) ^ {Lease term:3} ) - ( ( {Price:4} - {Buy down:5} ) * ( {APR:6} / 1200 ) / ( 1 - ( 1 + ( {APR:6} / 1200 ) ) ^ ( 0 - {Loan term:7} ) ) ) * ( ( ( 1 + ( {APR:6} / 1200 ) ) ^ {Lease term:3} ) - 1 ) / ( {APR:6} / 1200 ) ) ) ) - ( {Lease down:1} + {Lease payment:2} * {Lease term:3} )
endif;
12. Loan payment · Number · ID 12
Number Format Currency; Layout: half width, on the same row as its neighbor (drag the field beside it in the editor; no CSS class needed); Custom CSS Class (Appearance tab) fo-result fo-result--sub; tick Enable Calculation, Rounding 2.
if( {APR:6} == 0 ):
( ( {Price:4} - {Buy down:5} ) / {Loan term:7} )
else:
( ( {Price:4} - {Buy down:5} ) * ( {APR:6} / 1200 ) / ( 1 - ( 1 + ( {APR:6} / 1200 ) ) ^ ( 0 - {Loan term:7} ) ) )
endif;
13. Loan balance at the end of the lease term · Number · ID 13
Number Format Currency; Layout: half width, on the same row as its neighbor (drag the field beside it in the editor; no CSS class needed); Custom CSS Class (Appearance tab) fo-result fo-result--sub; tick Enable Calculation, Rounding 0.
if( {APR:6} == 0 ):
( ( {Price:4} - {Buy down:5} ) - ( ( {Price:4} - {Buy down:5} ) / {Loan term:7} ) * {Lease term:3} )
else:
( ( {Price:4} - {Buy down:5} ) * ( ( 1 + ( {APR:6} / 1200 ) ) ^ {Lease term:3} ) - ( ( {Price:4} - {Buy down:5} ) * ( {APR:6} / 1200 ) / ( 1 - ( 1 + ( {APR:6} / 1200 ) ) ^ ( 0 - {Loan term:7} ) ) ) * ( ( ( 1 + ( {APR:6} / 1200 ) ) ^ {Lease term:3} ) - 1 ) / ( {APR:6} / 1200 ) )
endif;
14. Equity at that point · Number · ID 14
Number Format Currency; Description “Car value less the balance. Negative means you would owe more than it is worth.”; Custom CSS Class (Appearance tab) fo-result fo-result--sub; tick Enable Calculation, Rounding 0.
if( {APR:6} == 0 ):
( {Price:4} * {Residual:8} / 100 ) - ( ( {Price:4} - {Buy down:5} ) - ( ( {Price:4} - {Buy down:5} ) / {Loan term:7} ) * {Lease term:3} )
else:
( {Price:4} * {Residual:8} / 100 ) - ( ( {Price:4} - {Buy down:5} ) * ( ( 1 + ( {APR:6} / 1200 ) ) ^ {Lease term:3} ) - ( ( {Price:4} - {Buy down:5} ) * ( {APR:6} / 1200 ) / ( 1 - ( 1 + ( {APR:6} / 1200 ) ) ^ ( 0 - {Loan term:7} ) ) ) * ( ( ( 1 + ( {APR:6} / 1200 ) ) ^ {Lease term:3} ) - 1 ) / ( {APR:6} / 1200 ) )
endif;
3. Hide the submit button
The results are live, so nothing needs submitting. Add this filter to your theme’s functions.php or a code-snippets plugin; it hides the button on any form carrying the fo-live-only class:
add_filter( 'gform_submit_button', function ( $button, $form ) {
return str_contains( (string) rgar( $form, 'cssClass' ), 'fo-live-only' ) ? '' : $button;
}, 10, 2 );
Or with CSS alone: .fo-live-only_wrapper .gform_footer { display: none; }
4. Put it on a page and make it look like this
Add the form to any page with the Gravity Forms block, or the shortcode [gravityform id="X" title="false" ajax="false"]. The form inherits your theme’s styles; the classes you set in step 2 are hooks for the look you see on this site:
fo-resulton a calculation field makes it the big teal result panel.fo-result fo-result--submakes the smaller secondary figures.fo-segmentedon a radio field turns it into a segmented switch.- Two fields on one row is the editor’s own column layout: drag a field beside another and the row splits in half. No CSS class is needed, and the old
gf_left_halfReady Classes are deprecated.
The bundle includes the two stylesheets that implement those classes, with notes on matching your brand colors. Without them the form still works; it just looks like your theme’s default Gravity Forms styling.
How the math works is explained under “How it’s calculated” on the live Lease vs. buy calculator.