Skip to content

Tenant screening ​

Screening a tenant for a letting: the applicant answers one flow with income, employment or accounts and two referees, the same four rules apply to everyone, and borderline applicants go to the lettings team. Pack: examples/policies/tenant-screening/.

A pattern for expressing a property & rentals policy, not compliance guidance: the thresholds, lists and fields are placeholders chosen to make the example run; a real policy comes from the business's own rules. It calls no app, so it runs in an empty workspace as it is.

The decision it automates ​

Whether to accept the applicant, refer them to the lettings team, or decline, when the application is submitted.

Data expected ​

  • The applicant as a subject (kind user) with identityVerified, written by your platform from its identity check.
  • The flow's answers under submission: rent, monthlyIncome, employment, employerName or accounts, referee1Email and referee2Email.

Steps and rules ​

StepTypeWhy
collectwait_for_collectionThe tenant-application flow; self-employed applicants are asked for accounts instead of an employer.
rulesevaluate_rulesThe tenant-screening rule set under max_severity.
routebranchrules.outcome == manual_review opens a case.
reviewcreate_caselettings_review, 48-hour SLA.
decideemit_decisionFrom the rules, or the reviewer's decision.

The rule set tenant-screening (useCase: onboarding) uses max_severity: a failed block rule rejects, a failed warn rule sends the run to review, and the weights add up to the score.

RuleTypeSeverity, weightFails when
tenant_identity_verifiedcomparisonblock, 100subject.identityVerified is not true
tenant_rent_ceilingexpressionblock, 100rent is above 60% of monthlyIncome
tenant_rent_to_incomeexpressionwarn, 40rent is above 40% of monthlyIncome
tenant_two_refereescomparisonwarn, 20no second referee was given

What a reviewer sees ​

A lettings_review case with the answers and each criterion met or missed, so the landlord can be told why.

How to adapt it ​

Take the rent from your listing instead of the form, add your referencing provider as an asynchronous app (an app you build) whose webhook resumes the run when references return, and add a guarantor step for applicants above the threshold.

Run it ​

bash
pnpm policy:import examples/policies/tenant-screening --publish

The fixture applies for a rent of 1 850 on an income of 4 200 (44%): the rent-to-income rule fails, a lettings_review case opens, the check approves it and the run completes with a manual approve.

Released under the Apache-2.0 License.