Leases and contracts
Offers, contracts, Ejar import, and the path a tenant takes from interest to signed.
On this page
The lease workflow takes a prospective tenant from initial interest to a signed, active contract, and then keeps that contract running until expiry. This article covers the offer-to-contract path, Ejar import, and how to add direct contracts that started before you joined the system.
The path from offer to signed contract
Contact (prospective tenant)
│
▼
Lease offer ──► Negotiated ──► Accepted ──► Contract
│
▼
Optional: rejected / withdrawn → archived
- Contact: Capture the prospect under Contacts → Add contact. Pick the role "Tenant" or "Prospective tenant".
- Lease offer: Open Leases → New offer. Pick the unit, the contact, propose start/end dates, the total rent across the contract (excl. VAT. The modal shows the implied per-year value as a hint so you can match the Ejar PDF's "Annual Rent" row), and any one-off fees. Save the offer. It enters the workflow's "Draft" step.
- Negotiate: Edit the offer as terms evolve. Each version is logged.
- Accept: When the prospect agrees, mark the offer Accepted. The system creates a Contract from the offer's terms. The offer itself stays archived for the audit trail.
- Contract: Now live. Receivables are generated for every scheduled rent installment; deposits are recorded; the contract appears on the property/unit page.
Ejar import
If you operate under the Saudi Ejar system, you don't need to retype contracts. Open Contracts → Import from Ejar, upload the signed PDF, and confirm the extracted fields. The system reads the Ejar template (parties, term, rent, schedule) and creates the contract directly: no offer required, since Ejar contracts are already executed. See the dedicated Ejar contract import page for a complete walkthrough.
Extraction runs in the background. As soon as you choose a PDF it becomes a draft, named after the file, and extraction starts on its own. You can watch it live, upload more PDFs at the same time (each becomes its own draft, even for different properties), or leave the page entirely: nothing is lost. When a draft is ready you get a clickable notification, and a counter appears next to the Add direct contract button on the Contracts page.
The Drafts tab. All your drafts live on the Drafts tab of the Add direct contract page. From there you can continue a ready draft (it opens the normal review screen, then the pre-filled contract form), retry a failed one, or delete one you no longer need. A draft disappears from the list the moment its contract is created. Deleting a draft also deletes the uploaded PDF.
Quick add (fastest onboarding). Turn on the Quick add toggle on the upload screen and clean PDFs skip review entirely: the contract, its tenant, and any missing units are created automatically the moment extraction finishes, and you get a notification per file. This works for every contract shape (single or multiple units, fixed rent or escalations). If anything cannot be read or is ambiguous (a missing date, an unclear unit, a period that overlaps an existing contract), that file simply falls back to Needs review with a note explaining why, so quick add can never create a wrong contract. Payments are not recorded automatically (the PDF does not say what has been paid); record them on each contract afterwards. In practice: create your properties, drop all your Ejar PDFs on each one with Quick add on, and come back to your contracts and tenants ready.
The imported schedule matches the PDF exactly. When the Ejar contract has an escalating or uneven payment schedule (rent that steps up year over year, or different amounts per installment), the system fills the editable "Record Payments" schedule with those exact per-row amounts (not a flat average), and the contract total equals the sum of those payments to the halala. The numbers you confirm on import are the numbers that get stored, so there's nothing to reconcile afterward. You can still edit any row before saving if the PDF needs a correction.
The Free plan caps PDF extracts at 10 over the lifetime of the workspace. Paid plans are unlimited. See Plans and billing.
Direct contracts (recording existing contracts)
When you start using the system, you probably already have contracts in progress from before. Contracts → Add direct contract is a guided flow for entering them:
- Pick the property and unit.
- Enter the contract terms (start, end, rent, schedule).
- Tell the system which past receivables have already been paid, partially paid, or are still owed.
- Submit. The system creates the contract and back-dates the receivables and payments so your dashboard reflects reality.
Direct contracts don't go through the offer step: they're treated as already-active from the start date you specified.
Contract lifecycle
A contract has three lifecycle states:
- Active: Between start and end date. Receivables generate on schedule; payments verified per the workflow.
- Expiring soon: Inside the expiry lead your workspace sets for that contract's type, 30 days for residential and 60 for commercial by default. Appears on the dashboard expiry alert; the contract-expiry workflow can prompt a renewal flow.
- Expired / archived: Past end date. Stays read-only for reporting; you can't add new payments or receivables to it, but you can still see history.
When does a contract start expiring? The system starts the contract-expiry workflow a set number of days before the end date, and residential and commercial contracts have their own separate windows. Account owners control both at Settings → Configuration → Contracts → Contract expiry:
- Residential expiry lead (days), default 30
- Commercial expiry lead (days), default 60
Lower a number to be notified later, raise it to start the renew/terminate decision earlier. The two are independent, so you can set commercial shorter than residential if that suits how you work.
Which window does a contract use? Its own type, which is the type of its main unit. A contract never mixes residential and commercial units: if you try to put a shop and an apartment on the same offer or contract, the system refuses and names the unit that does not match. Create a separate contract for it instead.
For the same reason, you cannot change a unit's type while a contract is on it (active, scheduled, expiring or expired). Close the contract first, or ask a workspace admin, who can confirm past the warning when a unit was typed wrongly to begin with.
A contract created before this rule that mixes both types keeps working and uses its main unit's window, but it cannot be renewed. Terminate it and create one contract per type.
Renewal is a new contract: the expiring one is cloned as a starting point and the terms adjusted. Renewal happens through the renewal workflow, not through a form on the contract page. The system opens that workflow itself as a lease nears its end date, and you pick it up from Tasks.
Starting a renewal the system did not start
The system opens a renewal decision as a lease nears its end date. Two situations it cannot reach on its own:
- the lease has already closed and the tenant now wants to come back;
- the office decided to terminate, and has since changed its mind.
For those, a workspace administrator can use Start renewal on the contract page. It does not renew anything by itself: it opens the same renewal workflow, and the terms are filled in at its first step like any other renewal.
The renewal editor at the first step starts pre-filled from the current contract and lets you edit the full commercial terms before creating the new version:
- Lease terms: new start/end dates and payment frequency (the total updates as you go).
- Escalation periods: add, remove, or re-price each period's annual rent.
- Service fees & VAT: electricity, gas, water, general services, and parking are carried forward and stay editable, along with VAT.
- Payment schedule: a live, editable schedule (with the rent / services / VAT breakdown) you can fine-tune row by row before submitting.
The expiry review (renew or terminate)
When a contract approaches its end date, the contract-expiry workflow opens a review step. This step is decision-only: the reviewer just decides Renew or Terminate, and sees the current contract's correct all-in total (rent + service fees + VAT) for context. Nothing is created yet.
- Renew: approving starts the Contract Renewal workflow. Its first step, Initiate Renewal, is a full offer-style terms editor pre-filled from the current contract: new start/end dates, rent, payment frequency, escalation periods, service fees, VAT, and a live payment schedule (with the rent / services / VAT breakdown), exactly like creating a new offer. Whatever you don't change is carried forward from the current contract. The later review steps (Property Manager, General Manager) show that captured draft read-only so they can Approve or Return, and the new contract version is created only once the workflow is fully approved.
- Terminate: capture the reason and let the closure run.
On mobile, the expiry step works the same (decision-only), but the rich Initiate-Renewal editor is web-only for now. A renewal initiated on mobile carries all of the current contract's terms (rent, schedule, service fees, VAT) forward automatically. To fine-tune them, open the same renewal task on the web.
Any attachment slots or input fields your admin configured on the expiry/renewal/termination steps appear right in these steps, and each gate offers Approve / Return, the same as every other workflow. You can act from the Tasks inbox, the Dashboard expiry alert, or the contract page itself. Once the renewal completes it produces the next contract version, and the version selector on the contract page lets you switch between v1, v2, v3… each keeping its own documents.
Discounts on scheduled payments
If you negotiate relief with a tenant (a hard month, a goodwill reduction), you can apply a discount to individual payments on the contract's payment schedule instead of editing the contract:
- Who can do it: workspace admins, plus any role your admin grants the payment-discounts permission in Settings → Configuration → Roles.
- Single or bulk: each schedule row has a Discount action, and Manage discounts at the top of the schedule applies a fixed amount or a percentage to several unpaid payments at once.
- A reason is required. Every discount is logged (who applied it, when, and why), and the history stays visible on the contract.
- The contract itself doesn't change. The signed amounts and the contract total stay exactly as contracted (matching your Ejar PDF); the schedule shows the original amount struck through next to the reduced one, and the tenant owes the reduced figure. A fully discounted payment shows "Settled (discounted)".
- Removing a discount restores the amount: the tenant owes the original figure again, and the log keeps both the apply and the removal.
Receivables, reminders, and the dashboard all follow the reduced amounts automatically. See Money. Discounts are applied on the web; the mobile app shows them read-only.
Rescheduling payments
When a tenant needs to pay on different dates, use Reschedule at the top of the payment schedule. A reschedule changes when the remaining payments are due (you can move dates, split one payment into several, or merge several into one), without changing the total owed. (To reduce what the tenant owes, add a discount instead; you can include discounts in the same reschedule.)
- Pick the unpaid payments, then edit each one. Every payment you pick becomes its own card: keep a single line to just move its date, or add lines to split it across several dates. To merge payments into one, tick two or more (they must share the same unit and billing period) and press Merge; you can split some payments and merge others in the same request. Each card's amounts must add up to that card's remaining total (already-paid amounts stay put).
- It goes through approval. A reschedule is a proposal that routes through an approval chain, by default Lease Manager → Accountant → General Manager (your workspace can change this under Settings → Workflows). The schedule only changes once it's fully approved; approvers can return it with comments. Approval requests appear in the Tasks page and in notifications.
- You can see what a payment became. After a reschedule, the original payment stays visible in the schedule as a struck-through "Rescheduled" row. Expand it to see the payments it was split into or merged with (each with full detail). The Rescheduled ×N chip and the modal's History tab also show your past reschedules (who proposed it, when it was applied, and whether it included a discount). History shows applied and pending ones by default; rejected or cancelled proposals are tucked behind a "Show all" toggle so the list stays clean without losing the record.
Proposing a reschedule is done on the web; the mobile app shows the indicator and history and lets approvers act on their reschedule tasks.
Documents
Each contract holds attachments: the signed PDF, addenda, ID copies, photos. Stored encrypted; visibility scoped by permission. The contract PDF is also generated automatically by the system if you want a printable version.
The contract page also shows a Workflow documents section: one named slot per file the lease-offer workflow asked for (e.g. "Ejar Draft Contract", "Final Ejar Contract"), pinned to the contract when it was created. Empty slots are listed too, so you can see at a glance what's still missing. Admins and lease managers can upload or remove files in each slot, on web and in the mobile app.
The designated contract document
One attachment slot in the lease-offer workflow can be marked as the contract document: the file that counts as the unit's official signed contract (on the default workflow, the "Final Ejar Contract" slot). That designation powers the one-click contract download on the unit's contract history and on Property → Documents → Unit contracts. To change it, open Settings → Workflows → Lease offer and tick Contract document on the slot that receives the final signed file. Only one slot can hold the mark, and ticking a new one moves it. If the slot allows multiple files, the most recent upload is used. Contracts keep the designation they were created with; editing the workflow later never re-labels old contracts.
Renewals work the same way: the Contract renewal workflow has its own designated slot ("Renewed Ejar Contract" by default), since each renewal produces a new signed contract. Files uploaded during the renewal workflow land on the new contract version automatically; renewals made directly from the contract page get the slots too, ready for upload afterwards. Each contract version keeps its own documents: renewing never overwrites the previous version's files, and the version selector on the contract page shows each version with exactly its own documents.