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
  1. Contact — Capture the prospect under Contacts → Add contact. Pick the role "Tenant" or "Prospective tenant".
  2. 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.
  3. Negotiate — Edit the offer as terms evolve. Each version is logged.
  4. 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.
  5. 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.

[!tip] Imported Ejar contracts go through the same lifecycle as native ones. The only difference is the import metadata is preserved so you can always trace back to the original PDF.

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:

  1. Pick the property and unit.
  2. Enter the contract terms (start, end, rent, schedule).
  3. Tell the system which past receivables have already been paid, partially paid, or are still owed.
  4. 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 — Within 90 days of end date. 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. Account owners control this at Settings → Configuration → Leases → "Contract expiry lead (days)" (default 30). Lower it to be notified later, raise it to start the renew/terminate decision earlier.

Renewal is a new contract — clone the expiring one as a starting point and adjust terms. You can renew a contract that's expiring, expired, or already closed, straight from the Renew action on the contract page.

Renewing from the contract page

The Renew Contract form 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. You can always fine-tune the full terms from the Renew Contract form on the contract page.

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.

[!info] The Unit contracts tab under Property → Documents is a read-only index: it links each contract's designated document and its page. Uploading and replacing files happens on the contract page itself, where each file goes into its named slot.