pragmatic.

Canadian mortgage tools · CAD

Refinance Analyzer

Current public data and calculations from Pragmatic Mortgage. Anonymous access; no account required.

calculator
slug
refinance-analyzer
title
Refinance Analyzer
description
Payment change, savings, penalty, and breakeven timeline.
category
refinance
input Schema
{
  "type": "object",
  "properties": {
    "propertyValue": {
      "anyOf": [
        {
          "type": "number"
        },
        {
          "type": "string",
          "pattern": "^-?\\d+(?:\\.\\d+)?$"
        }
      ]
    },
    "maxLtvPct": {
      "anyOf": [
        {
          "type": "number",
          "description": "Maximum loan-to-value as a fraction: 0.8 means 80%."
        },
        {
          "type": "string",
          "description": "Maximum loan-to-value as a fraction: 0.8 means 80%.",
          "pattern": "^-?\\d+(?:\\.\\d+)?$"
        }
      ],
      "description": "Maximum loan-to-value as a fraction: 0.8 means 80%."
    },
    "horizonMonths": {
      "type": "integer",
      "minimum": 6,
      "maximum": 720
    },
    "discountRate": {
      "anyOf": [
        {
          "type": "number",
          "description": "Annual discount rate as a fraction: 0.04 means 4%."
        },
        {
          "type": "string",
          "description": "Annual discount rate as a fraction: 0.04 means 4%.",
          "pattern": "^-?\\d+(?:\\.\\d+)?$"
        }
      ],
      "description": "Annual discount rate as a fraction: 0.04 means 4%."
    },
    "current": {
      "type": "object",
      "properties": {
        "principal": {
          "anyOf": [
            {
              "type": "number"
            },
            {
              "type": "string",
              "pattern": "^-?\\d+(?:\\.\\d+)?$"
            }
          ]
        },
        "nominalRatePercent": {
          "anyOf": [
            {
              "type": "number"
            },
            {
              "type": "string",
              "pattern": "^-?\\d+(?:\\.\\d+)?$"
            }
          ]
        },
        "amortization": {
          "type": "object",
          "properties": {
            "years": {
              "type": "integer",
              "minimum": 0,
              "maximum": 40
            },
            "months": {
              "type": "integer",
              "minimum": 0,
              "maximum": 11
            }
          },
          "required": [
            "years",
            "months"
          ],
          "additionalProperties": false
        },
        "termMonths": {
          "type": "integer",
          "minimum": 1,
          "maximum": 120
        },
        "paymentFrequency": {
          "type": "string",
          "enum": [
            "monthly",
            "semi_monthly",
            "biweekly",
            "accelerated_biweekly",
            "weekly",
            "accelerated_weekly"
          ]
        },
        "explicitPayment": {
          "anyOf": [
            {
              "anyOf": [
                {
                  "type": "number"
                },
                {
                  "type": "string",
                  "pattern": "^-?\\d+(?:\\.\\d+)?$"
                }
              ]
            },
            {
              "type": "null"
            }
          ]
        },
        "startDateISO": {
          "anyOf": [
            {
              "type": "string",
              "pattern": "^\\d{4}-\\d{2}-\\d{2}(?:T\\d{2}:\\d{2}:\\d{2}(?:\\.\\d+)?(?:Z|[+-]\\d{2}:\\d{2}))?$"
            },
            {
              "type": "null"
            }
          ]
        }
      },
      "required": [
        "principal",
        "nominalRatePercent",
        "amortization",
        "termMonths",
        "paymentFrequency"
      ],
      "additionalProperties": false
    },
    "debts": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "balance": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "string",
                "pattern": "^-?\\d+(?:\\.\\d+)?$"
              }
            ]
          },
          "apr": {
            "anyOf": [
              {
                "type": "number",
                "description": "Annual debt interest as a decimal fraction: 0.199 means 19.9%."
              },
              {
                "type": "string",
                "description": "Annual debt interest as a decimal fraction: 0.199 means 19.9%.",
                "pattern": "^-?\\d+(?:\\.\\d+)?$"
              }
            ],
            "description": "Annual debt interest as a decimal fraction: 0.199 means 19.9%."
          },
          "minPayment": {
            "anyOf": [
              {
                "anyOf": [
                  {
                    "type": "number"
                  },
                  {
                    "type": "string",
                    "pattern": "^-?\\d+(?:\\.\\d+)?$"
                  }
                ]
              },
              {
                "type": "null"
              }
            ]
          },
          "payoffMonths": {
            "anyOf": [
              {
                "type": "integer",
                "minimum": 1,
                "maximum": 480
              },
              {
                "type": "null"
              }
            ]
          },
          "consolidate": {
            "type": "boolean"
          }
        },
        "required": [
          "balance",
          "apr"
        ],
        "additionalProperties": false
      },
      "maxItems": 12,
      "default": []
    },
    "fees": {
      "type": "object",
      "properties": {
        "prepaymentPenalty": {
          "anyOf": [
            {
              "type": "number"
            },
            {
              "type": "string",
              "pattern": "^-?\\d+(?:\\.\\d+)?$"
            }
          ]
        },
        "dischargeFee": {
          "anyOf": [
            {
              "type": "number"
            },
            {
              "type": "string",
              "pattern": "^-?\\d+(?:\\.\\d+)?$"
            }
          ],
          "default": 0
        },
        "legalFee": {
          "anyOf": [
            {
              "type": "number"
            },
            {
              "type": "string",
              "pattern": "^-?\\d+(?:\\.\\d+)?$"
            }
          ],
          "default": 0
        },
        "appraisalFee": {
          "anyOf": [
            {
              "type": "number"
            },
            {
              "type": "string",
              "pattern": "^-?\\d+(?:\\.\\d+)?$"
            }
          ],
          "default": 0
        },
        "otherFees": {
          "anyOf": [
            {
              "type": "number"
            },
            {
              "type": "string",
              "pattern": "^-?\\d+(?:\\.\\d+)?$"
            }
          ],
          "default": 0
        },
        "lenderIncentive": {
          "anyOf": [
            {
              "type": "number"
            },
            {
              "type": "string",
              "pattern": "^-?\\d+(?:\\.\\d+)?$"
            }
          ],
          "default": 0
        },
        "rollIn": {
          "type": "boolean",
          "default": false
        }
      },
      "required": [
        "prepaymentPenalty"
      ],
      "additionalProperties": false
    },
    "plan": {
      "type": "object",
      "properties": {
        "keepSamePayment": {
          "type": "boolean",
          "default": false
        },
        "increasePayment": {
          "anyOf": [
            {
              "type": "number"
            },
            {
              "type": "string",
              "pattern": "^-?\\d+(?:\\.\\d+)?$"
            }
          ],
          "default": 0
        },
        "cashOut": {
          "anyOf": [
            {
              "type": "number"
            },
            {
              "type": "string",
              "pattern": "^-?\\d+(?:\\.\\d+)?$"
            }
          ],
          "default": 0
        },
        "paymentFrequency": {
          "type": "string",
          "enum": [
            "monthly",
            "semi_monthly",
            "biweekly",
            "accelerated_biweekly",
            "weekly",
            "accelerated_weekly"
          ]
        },
        "newNominalRatePercent": {
          "anyOf": [
            {
              "type": "number"
            },
            {
              "type": "string",
              "pattern": "^-?\\d+(?:\\.\\d+)?$"
            }
          ]
        },
        "newAmortization": {
          "type": "object",
          "properties": {
            "years": {
              "type": "integer",
              "minimum": 1,
              "maximum": 40
            },
            "months": {
              "type": "integer",
              "minimum": 0,
              "maximum": 11
            }
          },
          "required": [
            "years",
            "months"
          ],
          "additionalProperties": false
        },
        "newTermMonths": {
          "type": "integer",
          "minimum": 12,
          "maximum": 120
        },
        "explicitPayment": {
          "anyOf": [
            {
              "anyOf": [
                {
                  "type": "number"
                },
                {
                  "type": "string",
                  "pattern": "^-?\\d+(?:\\.\\d+)?$"
                }
              ]
            },
            {
              "type": "null"
            }
          ]
        },
        "startDateISO": {
          "anyOf": [
            {
              "type": "string",
              "pattern": "^\\d{4}-\\d{2}-\\d{2}(?:T\\d{2}:\\d{2}:\\d{2}(?:\\.\\d+)?(?:Z|[+-]\\d{2}:\\d{2}))?$"
            },
            {
              "type": "null"
            }
          ]
        }
      },
      "required": [
        "paymentFrequency",
        "newNominalRatePercent",
        "newAmortization",
        "newTermMonths"
      ],
      "additionalProperties": false
    }
  },
  "required": [
    "propertyValue",
    "maxLtvPct",
    "current",
    "fees",
    "plan"
  ],
  "additionalProperties": false
}

Open the full calculator → · Structured data (JSON)