Extracting Option-to-Renew Terms From a Commercial Lease
9 min read · updated August 11, 2026
An option to renew is a right that expires. The lease states it as a relationship to a date it does not print, and half the exercise provisions in circulation make notice ineffective if it is sent too early as well as too late. Both edges have to come out of the extraction.
The opposite of an auto-renewal
The arithmetic here resembles the notice-window arithmetic of an evergreen contract, and the consequence is inverted. An auto-renewal clause renews unless you send notice, so a missed deadline costs you another term you did not want. An option renews only if you send notice, so a missed deadline loses the space. The same phrase — “not less than nine months prior to the Expiration Date” — means “last chance to escape” in one document and “last chance to stay” in the other.
That is a reason to keep them in separate tables with separate alerting rules rather than in one notice_deadlines view. The auto-renewal arithmetic, including the deemed-receipt offsets that apply equally here, is worked through in extracting auto-renewal terms from a contract; this page is about what an option adds on top.
The window has two edges
A typical option clause: “Provided that Tenant is not then in default, Tenant shall have one (1) option to extend the Term for five (5) years by delivering written notice to Landlord not more than twelve (12) months nor less than nine (9) months prior to the Expiration Date. Time is of the essence.”
The Expiration Date is usually not printed either. It is derived from the Commencement Date and the term length:
Commencement Date 2024-03-01
Initial term 10 years
Expiration Date 2034-02-28 (day before the
tenth anniversary)
Window opens 12 months prior 2033-02-28
Window closes 9 months prior 2033-05-28
Notice before 2033-02-28 -> ineffective (too early)
Notice after 2033-05-28 -> ineffective (too late)Store window_open and window_close as two dates, plus the basis for each. A single renewal_deadline column loses the early edge, and an early notice is a real failure mode: a tenant who writes in eighteen months ahead because a calendar reminder fired has, under a strict reading of “not more than twelve months”, not exercised anything.
“Time is of the essence” is worth its own boolean. Its presence is a standard signal that the deadlines are to be applied strictly, and its presence or absence is a fact about the document that a reviewer will want to filter on.
Months and days are not interchangeable
Drafters express the same intent in months or in days, and the two do not land on the same date. Nine months before 28 February 2034 is 28 May 2033. Two hundred and seventy days before the same date is 3 June 2033:
From 2033-06-03 forward to 2034-02-28:
Jun 3 -> Jul 3 30
-> Aug 3 61
-> Sep 3 92
-> Oct 3 122
-> Nov 3 153
-> Dec 3 183
-> Jan 3 214
-> Feb 3 245
-> Feb 28 270
"9 months prior" 2033-05-28
"270 days prior" 2033-06-03 difference: 6 daysSix days, on a right worth five years of occupancy. So notice_period needs a unit as well as a number, and the computation must use calendar-month arithmetic for months and day arithmetic for days rather than approximating one with the other. The same rule applies to the month-end edge case: three months before 31 May is 28 February in a common year and 29 February in a leap year, and a library that clamps to the end of the month and one that overflows into March will disagree by a day or three. Pinning that behaviour down belongs in a date field validation rule rather than in whichever library the pipeline happens to import.
Extract the anchor explicitly too. Some options count back from the Expiration Date, some from the end of the then-current term where multiple options exist, and some from the Commencement Date plus a stated number of months. Where two or more successive options exist, each has its own window computed from the end of the term it extends, so the record is a list rather than a single object, and the second window cannot be computed until the first option is exercised and the new expiration is known.
Conditions precedent are fields
An option is conditional, and the conditions are as important as the dates because they decide whether the deadline is worth alerting on at all:
- No default. “Provided Tenant is not in default” may be tested at the date of notice, at the commencement of the renewal term, or both, and the clause usually says which. Extract the test and its timing as separate values, because “not in default at either date” is a substantively different condition.
- Occupancy. “Provided Tenant is then in occupancy of at least seventy-five percent (75%) of the Premises” adds a numeric threshold that has to be checked against something outside the lease.
- Personal to the original tenant. “This option is personal to the original Tenant named herein and may not be exercised by any assignee or subtenant” means the option may already be void. This is a boolean that materially changes whether the row belongs in an alerting queue.
- Form of notice. Where the clause requires notice in a specified form, or delivered to a specified officer, or accompanied by something, that requirement is part of a valid exercise.
Model these as a conditions array of typed objects, each with a condition type, a test timing and any threshold value, rather than as prose in a notes field — the trade-off in nested versus flat extraction schemas. The array is what lets a portfolio system answer “which options are we still able to exercise” instead of “which options exist”.
Renewal rent is a deadline graph
The renewal rent is usually not a number. Three shapes dominate: a stated schedule; a formula against the then-current rent, such as “the greater of the then-current Base Rent or ninety-five percent (95%) of Fair Market Rent”; and pure fair market rent with a determination procedure.
That procedure is the part that surprises a schema built for dates, because it is a chain of relative deadlines that only begins once notice is given:
T0 Tenant exercises (within the window)
+30 days Landlord delivers its FMR determination
+20 days Tenant accepts or objects
+15 days if objected, each party appoints an appraiser
+30 days appraisers deliver valuations
... a third appraiser or an averaging rule resolves
a gap beyond a stated percentageNone of these dates exists at extraction time. What exists is a graph: nodes with a duration and a predecessor. Store it that way — a list of steps each with an anchor_step, a duration, a unit and the party responsible — and the whole chain becomes computable the moment the first event happens. Flattening it to “fair market rent with arbitration” loses the fact that a tenant who misses the twenty-day objection window has accepted the landlord’s number.
The formula shape needs care of its own: “the then-current Base Rent” is the escalated rent in the final year of the initial term, not the original base rent, so computing it requires the escalation schedule from the rent escalation clause. And “ninety-five percent of Fair Market Rent” with a floor at the then-current rent is a maximum of two expressions, one of which is unknown — store it as a formula, never as a number.