rentready 0.7.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- rentready-0.7.0/LICENSE +9 -0
- rentready-0.7.0/PKG-INFO +209 -0
- rentready-0.7.0/README.md +195 -0
- rentready-0.7.0/pyproject.toml +23 -0
- rentready-0.7.0/rentready/__init__.py +575 -0
- rentready-0.7.0/rentready/__main__.py +3 -0
- rentready-0.7.0/rentready/hosted.py +425 -0
- rentready-0.7.0/rentready/pack.py +174 -0
- rentready-0.7.0/rentready/watch.py +332 -0
- rentready-0.7.0/rentready.egg-info/PKG-INFO +209 -0
- rentready-0.7.0/rentready.egg-info/SOURCES.txt +16 -0
- rentready-0.7.0/rentready.egg-info/dependency_links.txt +1 -0
- rentready-0.7.0/rentready.egg-info/entry_points.txt +2 -0
- rentready-0.7.0/rentready.egg-info/top_level.txt +1 -0
- rentready-0.7.0/setup.cfg +4 -0
- rentready-0.7.0/tests/test_hosted.py +167 -0
- rentready-0.7.0/tests/test_rentready.py +297 -0
- rentready-0.7.0/tests/test_web.py +131 -0
rentready-0.7.0/LICENSE
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 genzagents
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
|
|
6
|
+
|
|
7
|
+
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
|
|
8
|
+
|
|
9
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
rentready-0.7.0/PKG-INFO
ADDED
|
@@ -0,0 +1,209 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: rentready
|
|
3
|
+
Version: 0.7.0
|
|
4
|
+
Summary: Is your English rental ready for the landlord database (Register your rental property, Renters' Rights Act)? Region window and deadline, gas/EICR/EPC validity, the £65 fee, the upload checklist. Zero dependencies. Also an MCP server.
|
|
5
|
+
Author: genzagents
|
|
6
|
+
License: MIT
|
|
7
|
+
Project-URL: Homepage, https://genzagents.github.io/rentready/
|
|
8
|
+
Project-URL: Source, https://github.com/genzagents/rentready
|
|
9
|
+
Keywords: landlord,Renters Rights Act,PRS database,Register your rental property,EICR,EPC,gas safety,MCP
|
|
10
|
+
Requires-Python: >=3.9
|
|
11
|
+
Description-Content-Type: text/markdown
|
|
12
|
+
License-File: LICENSE
|
|
13
|
+
Dynamic: license-file
|
|
14
|
+
|
|
15
|
+
# rentready
|
|
16
|
+
|
|
17
|
+
**Is your rental ready for England's landlord database?**
|
|
18
|
+
|
|
19
|
+
From 15 December 2026 every private landlord in England must register each property on the government's
|
|
20
|
+
"Register your rental property" service (Renters' Rights Act 2025), region by region, at **£65 per property per year**,
|
|
21
|
+
uploading the gas safety record, EICR and EPC. Without an active entry there is no possession order from the court,
|
|
22
|
+
and penalties run to £7,000 (£40,000 for a repeat). `rentready` tells you your region's window and deadline, whether
|
|
23
|
+
your certificates will still be in date, what to book, what to upload and what it costs. Zero dependencies, one file,
|
|
24
|
+
also an MCP server and a Claude Code plugin, so your own agent can run it.
|
|
25
|
+
|
|
26
|
+
**No install: check in your browser at https://genzagents.github.io/rentready/** (0.7.0: now with the registration pack). Add your properties or
|
|
27
|
+
paste a CSV, see every property's window, deadline and certificate state, then download one `.ics` with every date and
|
|
28
|
+
reminder. It runs `docs/rentready.js`, a line-for-line port of the Python that `tests/test_web.py` holds to identical
|
|
29
|
+
answers and an identical calendar on five dates; the only network call is the postcode lookup at postcodes.io, and
|
|
30
|
+
your list stays in your browser.
|
|
31
|
+
|
|
32
|
+
```bash
|
|
33
|
+
curl -sL https://raw.githubusercontent.com/genzagents/rentready/main/rentready/__init__.py | python3 - check "B3 2TA" --gas=2026-02-01 --eicr=2023-06-01 --epc=2017-05-01 --epc-rating=D
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
```
|
|
37
|
+
rentready 0.3.0 B3 2TA region: West Midlands
|
|
38
|
+
Window: requirement starts 2026-12-15, deadline 2027-03-14 (139 days from 2026-10-26); the service opens for everyone on 2026-12-15
|
|
39
|
+
PASS registration deadline: West Midlands requirement starts 2026-12-15, deadline 2027-03-14; you can register from 2026-12-15
|
|
40
|
+
WARN gas safety record: expires 2027-02-01, before the 2027-03-14 deadline (98 days)
|
|
41
|
+
PASS EICR: valid to 2028-06-01
|
|
42
|
+
PASS EPC: valid to 2027-05-01
|
|
43
|
+
INFO EPC rating: rating D meets today's E minimum; the proposed C minimum for new tenancies from 2028 and all tenancies from 2030 would not be met
|
|
44
|
+
Do next:
|
|
45
|
+
- Book before 2027-02-01: annual gas safety check by a Gas Safe engineer; upload the record and issue date
|
|
46
|
+
Fee: £65 a year (65 per property); renewal annual, on the anniversary of the first property registered (one date for the whole portfolio); later properties pay pro rata
|
|
47
|
+
Upload at registration (within 28 days of the entry):
|
|
48
|
+
- Latest gas safety record (CP12) and its issue date, if the property has gas
|
|
49
|
+
- EICR (or EIC if no EICR yet) and its expiry date
|
|
50
|
+
- Latest EPC, and any MEES exemption; if the EPC has lapsed, the start date of the current tenancy
|
|
51
|
+
READY: nothing expires before your deadline. Gather the details above and register when your window opens.
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
## The timetable
|
|
55
|
+
|
|
56
|
+
| Region | Requirement starts | Deadline (midnight) |
|
|
57
|
+
|---|---|---|
|
|
58
|
+
| West Midlands | 15 Dec 2026 | 14 Mar 2027 |
|
|
59
|
+
| East of England | 15 Jan 2027 | 14 Apr 2027 |
|
|
60
|
+
| East Midlands | 15 Feb 2027 | 14 May 2027 |
|
|
61
|
+
| South East | 15 Mar 2027 | 14 Jun 2027 |
|
|
62
|
+
| Yorkshire and The Humber | 15 Apr 2027 | 14 Jul 2027 |
|
|
63
|
+
| North West | 15 May 2027 | 14 Aug 2027 |
|
|
64
|
+
| North East | 15 Jun 2027 | 14 Sep 2027 |
|
|
65
|
+
| London | 15 Jul 2027 | 14 Oct 2027 |
|
|
66
|
+
| South West | 15 Aug 2027 | 14 Nov 2027 |
|
|
67
|
+
|
|
68
|
+
Registration opens for all of England on 15 December 2026. Source: the Private Rented Sector Database Regulations 2026 as
|
|
69
|
+
summarised by the [NRLA](https://www.nrla.org.uk/resources/renters-rights/landlord-database-register-your-rental-property-service.)
|
|
70
|
+
and [HCR Law](https://www.hcrlaw.com/news-and-insights/renters-rights-act-2025-private-rented-sector-database-to-go-live-from-15-december-2026/);
|
|
71
|
+
official guidance at [housinghub.campaign.gov.uk](https://housinghub.campaign.gov.uk/renting-is-changing/get-ready-to-register/). Check gov.uk before relying on a date.
|
|
72
|
+
|
|
73
|
+
## Install
|
|
74
|
+
|
|
75
|
+
```bash
|
|
76
|
+
pip install git+https://github.com/genzagents/rentready # or copy rentready/__init__.py anywhere
|
|
77
|
+
rentready regions
|
|
78
|
+
rentready check "SW1A 1AA" --no-gas --eicr=2024-01-01 --epc=2020-01-01 --properties=3 --json
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
Exit code 0 when nothing fails, 1 otherwise, so it works in a cron or a CI step.
|
|
82
|
+
|
|
83
|
+
### A whole portfolio from one CSV (0.2.0)
|
|
84
|
+
|
|
85
|
+
```bash
|
|
86
|
+
rentready portfolio properties.csv # one line per property, every FAIL/WARN, total fee, earliest deadline
|
|
87
|
+
rentready portfolio properties.csv --json
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
`properties.csv` has a header row with any of `name, postcode, gas, no_gas, eicr, epc, epc_rating, tenancy_start, region`
|
|
91
|
+
(common spellings like `Address`, `Post Code`, `Gas safety`, `Rating` are accepted; a JSON list of objects works too):
|
|
92
|
+
|
|
93
|
+
```csv
|
|
94
|
+
name,postcode,gas,no_gas,eicr,epc,epc_rating
|
|
95
|
+
12 Example St,B3 2TA,2026-02-01,,2023-06-01,2017-05-01,D
|
|
96
|
+
Flat 4,SW1A 1AA,,yes,2024-01-01,2020-01-01,C
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
### Dates in your calendar, with reminders (0.2.0)
|
|
100
|
+
|
|
101
|
+
```bash
|
|
102
|
+
rentready calendar properties.csv --out=rentready.ics # whole portfolio
|
|
103
|
+
rentready calendar "B3 2TA" --gas=2026-02-01 --eicr=2023-06-01 --epc=2017-05-01 --out=rentready.ics
|
|
104
|
+
rentready calendar properties.csv --reminders=90,30,7 > rentready.ics
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
One all-day event per dated thing: the day your region's window opens, the registration deadline, and each gas safety,
|
|
108
|
+
EICR and EPC expiry, each with reminders 60 and 14 days before (change with `--reminders`). Import the file into Google,
|
|
109
|
+
Apple or Outlook calendar; UIDs are deterministic, so re-importing after a renewal updates the events instead of duplicating them.
|
|
110
|
+
This is the free, serverless version of the monthly watch: nothing is stored anywhere but your own calendar.
|
|
111
|
+
|
|
112
|
+
### The registration pack (0.5.0; in the browser from 0.7.0)
|
|
113
|
+
|
|
114
|
+
```bash
|
|
115
|
+
rentready pack properties.csv --out=pack.md # add --organisation for a company or trust
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
No terminal? On https://genzagents.github.io/rentready/ press **Show my registration pack** after a check: the same pack
|
|
119
|
+
(docs/rentready.js, parity-tested against pack.py), printable or saved as `registration-pack.md` for your agent. Extra
|
|
120
|
+
columns pasted in the CSV are kept with your list in the browser.
|
|
121
|
+
|
|
122
|
+
Every question *Register your rental property* asks, in the service's own words (gov.uk "Get ready to register", Oct 2026):
|
|
123
|
+
you as the landlord once, then per property the dwelling, tenancy, rent and health-and-safety sections. Answers come
|
|
124
|
+
pre-filled from the CSV, a GATHER line marks each gap, and the pack tells you which columns to add to fill them
|
|
125
|
+
(`ownership, dwelling_type, bedrooms, let, occupants, households, licence, furnished, rent, rent_frequency, bills`,
|
|
126
|
+
optional `freeholder, manager`). Each certificate gets a file name to scan it as (`12-example-st_eicr_2023-06-01.pdf`) and
|
|
127
|
+
a state: READY, RENEW SOON (expires before your deadline), RENEW (lapsed: renew before you upload) or GATHER. A lapsed EPC
|
|
128
|
+
is accepted with the current tenancy's start date, and an F or G rating adds the MEES exemption question. A property is
|
|
129
|
+
**ready to register** only when every answer and file is in hand. Nothing registers for you: you start the entry with
|
|
130
|
+
GOV.UK One Login.
|
|
131
|
+
|
|
132
|
+
### Watch
|
|
133
|
+
|
|
134
|
+
A certificate that lapses in month four is the thing nobody notices until the deadline. The watch is the alarm, and it
|
|
135
|
+
runs for free as a GitHub Action in a private repo of yours that holds `properties.csv`: on the first of every month it
|
|
136
|
+
re-checks every property, keeps one issue up to date with the full table, and **comments on that issue only when
|
|
137
|
+
something needs action**: a gas safety record, EICR or EPC within 60 days of expiring, your region's window opening,
|
|
138
|
+
a deadline nearing or passing, or a property no longer ready. GitHub emails the comment to you. No server, no account
|
|
139
|
+
beyond GitHub, no dependencies; your dates never leave your repo except for the postcode lookup. Example:
|
|
140
|
+
[issue #1](https://github.com/genzagents/rentready/issues/1) watches [`docs/example.csv`](docs/example.csv).
|
|
141
|
+
|
|
142
|
+
Copy [`docs/watch.yml`](docs/watch.yml) to `.github/workflows/rentready-watch.yml`:
|
|
143
|
+
|
|
144
|
+
```yaml
|
|
145
|
+
on:
|
|
146
|
+
schedule: [{ cron: "23 7 1 * *" }] # the 1st of each month
|
|
147
|
+
workflow_dispatch:
|
|
148
|
+
push: { paths: [properties.csv] }
|
|
149
|
+
permissions: { issues: write, contents: read }
|
|
150
|
+
jobs:
|
|
151
|
+
watch:
|
|
152
|
+
runs-on: ubuntu-latest
|
|
153
|
+
steps:
|
|
154
|
+
- uses: actions/checkout@v4
|
|
155
|
+
- uses: genzagents/rentready@v0.7.0
|
|
156
|
+
with:
|
|
157
|
+
portfolio: properties.csv
|
|
158
|
+
# warn-days: 90
|
|
159
|
+
# always-comment: "true" # a monthly "all fine" email too
|
|
160
|
+
```
|
|
161
|
+
|
|
162
|
+
The same command runs from cron on your own machine with a local state file instead of an issue:
|
|
163
|
+
|
|
164
|
+
```bash
|
|
165
|
+
rentready watch properties.csv --state=rentready-state.json # exit 1 when something needs action
|
|
166
|
+
```
|
|
167
|
+
|
|
168
|
+
### As an MCP server / Claude Code plugin
|
|
169
|
+
|
|
170
|
+
```bash
|
|
171
|
+
claude plugin marketplace add genzagents/marketplace
|
|
172
|
+
claude plugin install rentready@genzagents
|
|
173
|
+
```
|
|
174
|
+
|
|
175
|
+
Or add to any MCP client: `python3 /path/to/rentready/__init__.py mcp` (stdio). Four tools: `check_property`, `check_portfolio` (CSV or JSON text in, one table out), `make_calendar` (returns the .ics text for one property or a portfolio) and `registration_pack` (the markdown checklist above).
|
|
176
|
+
|
|
177
|
+
## What it checks
|
|
178
|
+
|
|
179
|
+
- Region from the postcode (postcodes.io, no key; `--region=` to skip the lookup). Wales and Scotland are flagged out of scope.
|
|
180
|
+
- Registration window and deadline for that region; whether it is open, upcoming or missed.
|
|
181
|
+
- Gas safety record (annual), EICR (five-yearly), EPC (ten-yearly): valid at the deadline, expiring before it, expired, or missing.
|
|
182
|
+
- EPC rating against the current E minimum and the proposed C minimum.
|
|
183
|
+
- The fee for N properties, the renewal rule, the full list of details the service asks for, and the penalties.
|
|
184
|
+
|
|
185
|
+
### Hosted monthly watch (0.4.0)
|
|
186
|
+
|
|
187
|
+
The paid step for landlords who do not want a GitHub repo: pay once a year, paste your properties into the checkout,
|
|
188
|
+
and get the same alerts in your inbox. The runner is in this repo and needs no server:
|
|
189
|
+
|
|
190
|
+
```bash
|
|
191
|
+
rentready hosted run --dry-run # polls Polar for subscribers, prints every email it would send
|
|
192
|
+
rentready hosted run # sends through Resend: first report within the hour, alerts on change, a monthly digest
|
|
193
|
+
rentready hosted replay ~/.rentready-hosted/<id>.json # re-runs a stored report from its stored inputs: IDENTICAL or DIFFERENT
|
|
194
|
+
```
|
|
195
|
+
|
|
196
|
+
Every email is reproducible from the inputs and date stored beside it. Setup and prices: [docs/HOSTED.md](docs/HOSTED.md).
|
|
197
|
+
Letting agents can run it for their landlords from a file with `--subscribers=subs.json`, no payment provider needed.
|
|
198
|
+
|
|
199
|
+
## What it does not do
|
|
200
|
+
|
|
201
|
+
It does not register for you, fetch certificates, or hold any data. It never sends your dates anywhere; the only network call
|
|
202
|
+
is the postcode lookup. Not legal advice.
|
|
203
|
+
|
|
204
|
+
## Roadmap
|
|
205
|
+
|
|
206
|
+
`rentready calendar` puts every date in your calendar and `rentready watch` emails you from GitHub when something needs action, both free. The hosted monthly watch (no repo, no CSV to keep, the same alerts to your inbox) is the
|
|
207
|
+
paid step, £12 a year for up to 10 properties; the runner shipped in 0.4.0 and the checkout opens when payments are set up. EPC lookup by address from the official open-data register is next (the register's API moved to get-energy-performance-data.communities.gov.uk in 2026 and needs a free key). Press the button on the [project page](https://genzagents.github.io/rentready/) if you want it.
|
|
208
|
+
|
|
209
|
+
MIT. Built by [genzagents](https://github.com/genzagents); sibling of [citable](https://github.com/genzagents/citable).
|
|
@@ -0,0 +1,195 @@
|
|
|
1
|
+
# rentready
|
|
2
|
+
|
|
3
|
+
**Is your rental ready for England's landlord database?**
|
|
4
|
+
|
|
5
|
+
From 15 December 2026 every private landlord in England must register each property on the government's
|
|
6
|
+
"Register your rental property" service (Renters' Rights Act 2025), region by region, at **£65 per property per year**,
|
|
7
|
+
uploading the gas safety record, EICR and EPC. Without an active entry there is no possession order from the court,
|
|
8
|
+
and penalties run to £7,000 (£40,000 for a repeat). `rentready` tells you your region's window and deadline, whether
|
|
9
|
+
your certificates will still be in date, what to book, what to upload and what it costs. Zero dependencies, one file,
|
|
10
|
+
also an MCP server and a Claude Code plugin, so your own agent can run it.
|
|
11
|
+
|
|
12
|
+
**No install: check in your browser at https://genzagents.github.io/rentready/** (0.7.0: now with the registration pack). Add your properties or
|
|
13
|
+
paste a CSV, see every property's window, deadline and certificate state, then download one `.ics` with every date and
|
|
14
|
+
reminder. It runs `docs/rentready.js`, a line-for-line port of the Python that `tests/test_web.py` holds to identical
|
|
15
|
+
answers and an identical calendar on five dates; the only network call is the postcode lookup at postcodes.io, and
|
|
16
|
+
your list stays in your browser.
|
|
17
|
+
|
|
18
|
+
```bash
|
|
19
|
+
curl -sL https://raw.githubusercontent.com/genzagents/rentready/main/rentready/__init__.py | python3 - check "B3 2TA" --gas=2026-02-01 --eicr=2023-06-01 --epc=2017-05-01 --epc-rating=D
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
```
|
|
23
|
+
rentready 0.3.0 B3 2TA region: West Midlands
|
|
24
|
+
Window: requirement starts 2026-12-15, deadline 2027-03-14 (139 days from 2026-10-26); the service opens for everyone on 2026-12-15
|
|
25
|
+
PASS registration deadline: West Midlands requirement starts 2026-12-15, deadline 2027-03-14; you can register from 2026-12-15
|
|
26
|
+
WARN gas safety record: expires 2027-02-01, before the 2027-03-14 deadline (98 days)
|
|
27
|
+
PASS EICR: valid to 2028-06-01
|
|
28
|
+
PASS EPC: valid to 2027-05-01
|
|
29
|
+
INFO EPC rating: rating D meets today's E minimum; the proposed C minimum for new tenancies from 2028 and all tenancies from 2030 would not be met
|
|
30
|
+
Do next:
|
|
31
|
+
- Book before 2027-02-01: annual gas safety check by a Gas Safe engineer; upload the record and issue date
|
|
32
|
+
Fee: £65 a year (65 per property); renewal annual, on the anniversary of the first property registered (one date for the whole portfolio); later properties pay pro rata
|
|
33
|
+
Upload at registration (within 28 days of the entry):
|
|
34
|
+
- Latest gas safety record (CP12) and its issue date, if the property has gas
|
|
35
|
+
- EICR (or EIC if no EICR yet) and its expiry date
|
|
36
|
+
- Latest EPC, and any MEES exemption; if the EPC has lapsed, the start date of the current tenancy
|
|
37
|
+
READY: nothing expires before your deadline. Gather the details above and register when your window opens.
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
## The timetable
|
|
41
|
+
|
|
42
|
+
| Region | Requirement starts | Deadline (midnight) |
|
|
43
|
+
|---|---|---|
|
|
44
|
+
| West Midlands | 15 Dec 2026 | 14 Mar 2027 |
|
|
45
|
+
| East of England | 15 Jan 2027 | 14 Apr 2027 |
|
|
46
|
+
| East Midlands | 15 Feb 2027 | 14 May 2027 |
|
|
47
|
+
| South East | 15 Mar 2027 | 14 Jun 2027 |
|
|
48
|
+
| Yorkshire and The Humber | 15 Apr 2027 | 14 Jul 2027 |
|
|
49
|
+
| North West | 15 May 2027 | 14 Aug 2027 |
|
|
50
|
+
| North East | 15 Jun 2027 | 14 Sep 2027 |
|
|
51
|
+
| London | 15 Jul 2027 | 14 Oct 2027 |
|
|
52
|
+
| South West | 15 Aug 2027 | 14 Nov 2027 |
|
|
53
|
+
|
|
54
|
+
Registration opens for all of England on 15 December 2026. Source: the Private Rented Sector Database Regulations 2026 as
|
|
55
|
+
summarised by the [NRLA](https://www.nrla.org.uk/resources/renters-rights/landlord-database-register-your-rental-property-service.)
|
|
56
|
+
and [HCR Law](https://www.hcrlaw.com/news-and-insights/renters-rights-act-2025-private-rented-sector-database-to-go-live-from-15-december-2026/);
|
|
57
|
+
official guidance at [housinghub.campaign.gov.uk](https://housinghub.campaign.gov.uk/renting-is-changing/get-ready-to-register/). Check gov.uk before relying on a date.
|
|
58
|
+
|
|
59
|
+
## Install
|
|
60
|
+
|
|
61
|
+
```bash
|
|
62
|
+
pip install git+https://github.com/genzagents/rentready # or copy rentready/__init__.py anywhere
|
|
63
|
+
rentready regions
|
|
64
|
+
rentready check "SW1A 1AA" --no-gas --eicr=2024-01-01 --epc=2020-01-01 --properties=3 --json
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
Exit code 0 when nothing fails, 1 otherwise, so it works in a cron or a CI step.
|
|
68
|
+
|
|
69
|
+
### A whole portfolio from one CSV (0.2.0)
|
|
70
|
+
|
|
71
|
+
```bash
|
|
72
|
+
rentready portfolio properties.csv # one line per property, every FAIL/WARN, total fee, earliest deadline
|
|
73
|
+
rentready portfolio properties.csv --json
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
`properties.csv` has a header row with any of `name, postcode, gas, no_gas, eicr, epc, epc_rating, tenancy_start, region`
|
|
77
|
+
(common spellings like `Address`, `Post Code`, `Gas safety`, `Rating` are accepted; a JSON list of objects works too):
|
|
78
|
+
|
|
79
|
+
```csv
|
|
80
|
+
name,postcode,gas,no_gas,eicr,epc,epc_rating
|
|
81
|
+
12 Example St,B3 2TA,2026-02-01,,2023-06-01,2017-05-01,D
|
|
82
|
+
Flat 4,SW1A 1AA,,yes,2024-01-01,2020-01-01,C
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
### Dates in your calendar, with reminders (0.2.0)
|
|
86
|
+
|
|
87
|
+
```bash
|
|
88
|
+
rentready calendar properties.csv --out=rentready.ics # whole portfolio
|
|
89
|
+
rentready calendar "B3 2TA" --gas=2026-02-01 --eicr=2023-06-01 --epc=2017-05-01 --out=rentready.ics
|
|
90
|
+
rentready calendar properties.csv --reminders=90,30,7 > rentready.ics
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
One all-day event per dated thing: the day your region's window opens, the registration deadline, and each gas safety,
|
|
94
|
+
EICR and EPC expiry, each with reminders 60 and 14 days before (change with `--reminders`). Import the file into Google,
|
|
95
|
+
Apple or Outlook calendar; UIDs are deterministic, so re-importing after a renewal updates the events instead of duplicating them.
|
|
96
|
+
This is the free, serverless version of the monthly watch: nothing is stored anywhere but your own calendar.
|
|
97
|
+
|
|
98
|
+
### The registration pack (0.5.0; in the browser from 0.7.0)
|
|
99
|
+
|
|
100
|
+
```bash
|
|
101
|
+
rentready pack properties.csv --out=pack.md # add --organisation for a company or trust
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
No terminal? On https://genzagents.github.io/rentready/ press **Show my registration pack** after a check: the same pack
|
|
105
|
+
(docs/rentready.js, parity-tested against pack.py), printable or saved as `registration-pack.md` for your agent. Extra
|
|
106
|
+
columns pasted in the CSV are kept with your list in the browser.
|
|
107
|
+
|
|
108
|
+
Every question *Register your rental property* asks, in the service's own words (gov.uk "Get ready to register", Oct 2026):
|
|
109
|
+
you as the landlord once, then per property the dwelling, tenancy, rent and health-and-safety sections. Answers come
|
|
110
|
+
pre-filled from the CSV, a GATHER line marks each gap, and the pack tells you which columns to add to fill them
|
|
111
|
+
(`ownership, dwelling_type, bedrooms, let, occupants, households, licence, furnished, rent, rent_frequency, bills`,
|
|
112
|
+
optional `freeholder, manager`). Each certificate gets a file name to scan it as (`12-example-st_eicr_2023-06-01.pdf`) and
|
|
113
|
+
a state: READY, RENEW SOON (expires before your deadline), RENEW (lapsed: renew before you upload) or GATHER. A lapsed EPC
|
|
114
|
+
is accepted with the current tenancy's start date, and an F or G rating adds the MEES exemption question. A property is
|
|
115
|
+
**ready to register** only when every answer and file is in hand. Nothing registers for you: you start the entry with
|
|
116
|
+
GOV.UK One Login.
|
|
117
|
+
|
|
118
|
+
### Watch
|
|
119
|
+
|
|
120
|
+
A certificate that lapses in month four is the thing nobody notices until the deadline. The watch is the alarm, and it
|
|
121
|
+
runs for free as a GitHub Action in a private repo of yours that holds `properties.csv`: on the first of every month it
|
|
122
|
+
re-checks every property, keeps one issue up to date with the full table, and **comments on that issue only when
|
|
123
|
+
something needs action**: a gas safety record, EICR or EPC within 60 days of expiring, your region's window opening,
|
|
124
|
+
a deadline nearing or passing, or a property no longer ready. GitHub emails the comment to you. No server, no account
|
|
125
|
+
beyond GitHub, no dependencies; your dates never leave your repo except for the postcode lookup. Example:
|
|
126
|
+
[issue #1](https://github.com/genzagents/rentready/issues/1) watches [`docs/example.csv`](docs/example.csv).
|
|
127
|
+
|
|
128
|
+
Copy [`docs/watch.yml`](docs/watch.yml) to `.github/workflows/rentready-watch.yml`:
|
|
129
|
+
|
|
130
|
+
```yaml
|
|
131
|
+
on:
|
|
132
|
+
schedule: [{ cron: "23 7 1 * *" }] # the 1st of each month
|
|
133
|
+
workflow_dispatch:
|
|
134
|
+
push: { paths: [properties.csv] }
|
|
135
|
+
permissions: { issues: write, contents: read }
|
|
136
|
+
jobs:
|
|
137
|
+
watch:
|
|
138
|
+
runs-on: ubuntu-latest
|
|
139
|
+
steps:
|
|
140
|
+
- uses: actions/checkout@v4
|
|
141
|
+
- uses: genzagents/rentready@v0.7.0
|
|
142
|
+
with:
|
|
143
|
+
portfolio: properties.csv
|
|
144
|
+
# warn-days: 90
|
|
145
|
+
# always-comment: "true" # a monthly "all fine" email too
|
|
146
|
+
```
|
|
147
|
+
|
|
148
|
+
The same command runs from cron on your own machine with a local state file instead of an issue:
|
|
149
|
+
|
|
150
|
+
```bash
|
|
151
|
+
rentready watch properties.csv --state=rentready-state.json # exit 1 when something needs action
|
|
152
|
+
```
|
|
153
|
+
|
|
154
|
+
### As an MCP server / Claude Code plugin
|
|
155
|
+
|
|
156
|
+
```bash
|
|
157
|
+
claude plugin marketplace add genzagents/marketplace
|
|
158
|
+
claude plugin install rentready@genzagents
|
|
159
|
+
```
|
|
160
|
+
|
|
161
|
+
Or add to any MCP client: `python3 /path/to/rentready/__init__.py mcp` (stdio). Four tools: `check_property`, `check_portfolio` (CSV or JSON text in, one table out), `make_calendar` (returns the .ics text for one property or a portfolio) and `registration_pack` (the markdown checklist above).
|
|
162
|
+
|
|
163
|
+
## What it checks
|
|
164
|
+
|
|
165
|
+
- Region from the postcode (postcodes.io, no key; `--region=` to skip the lookup). Wales and Scotland are flagged out of scope.
|
|
166
|
+
- Registration window and deadline for that region; whether it is open, upcoming or missed.
|
|
167
|
+
- Gas safety record (annual), EICR (five-yearly), EPC (ten-yearly): valid at the deadline, expiring before it, expired, or missing.
|
|
168
|
+
- EPC rating against the current E minimum and the proposed C minimum.
|
|
169
|
+
- The fee for N properties, the renewal rule, the full list of details the service asks for, and the penalties.
|
|
170
|
+
|
|
171
|
+
### Hosted monthly watch (0.4.0)
|
|
172
|
+
|
|
173
|
+
The paid step for landlords who do not want a GitHub repo: pay once a year, paste your properties into the checkout,
|
|
174
|
+
and get the same alerts in your inbox. The runner is in this repo and needs no server:
|
|
175
|
+
|
|
176
|
+
```bash
|
|
177
|
+
rentready hosted run --dry-run # polls Polar for subscribers, prints every email it would send
|
|
178
|
+
rentready hosted run # sends through Resend: first report within the hour, alerts on change, a monthly digest
|
|
179
|
+
rentready hosted replay ~/.rentready-hosted/<id>.json # re-runs a stored report from its stored inputs: IDENTICAL or DIFFERENT
|
|
180
|
+
```
|
|
181
|
+
|
|
182
|
+
Every email is reproducible from the inputs and date stored beside it. Setup and prices: [docs/HOSTED.md](docs/HOSTED.md).
|
|
183
|
+
Letting agents can run it for their landlords from a file with `--subscribers=subs.json`, no payment provider needed.
|
|
184
|
+
|
|
185
|
+
## What it does not do
|
|
186
|
+
|
|
187
|
+
It does not register for you, fetch certificates, or hold any data. It never sends your dates anywhere; the only network call
|
|
188
|
+
is the postcode lookup. Not legal advice.
|
|
189
|
+
|
|
190
|
+
## Roadmap
|
|
191
|
+
|
|
192
|
+
`rentready calendar` puts every date in your calendar and `rentready watch` emails you from GitHub when something needs action, both free. The hosted monthly watch (no repo, no CSV to keep, the same alerts to your inbox) is the
|
|
193
|
+
paid step, £12 a year for up to 10 properties; the runner shipped in 0.4.0 and the checkout opens when payments are set up. EPC lookup by address from the official open-data register is next (the register's API moved to get-energy-performance-data.communities.gov.uk in 2026 and needs a free key). Press the button on the [project page](https://genzagents.github.io/rentready/) if you want it.
|
|
194
|
+
|
|
195
|
+
MIT. Built by [genzagents](https://github.com/genzagents); sibling of [citable](https://github.com/genzagents/citable).
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
[build-system]
|
|
2
|
+
requires = ["setuptools>=68"]
|
|
3
|
+
build-backend = "setuptools.build_meta"
|
|
4
|
+
|
|
5
|
+
[project]
|
|
6
|
+
name = "rentready"
|
|
7
|
+
version = "0.7.0"
|
|
8
|
+
description = "Is your English rental ready for the landlord database (Register your rental property, Renters' Rights Act)? Region window and deadline, gas/EICR/EPC validity, the £65 fee, the upload checklist. Zero dependencies. Also an MCP server."
|
|
9
|
+
readme = "README.md"
|
|
10
|
+
requires-python = ">=3.9"
|
|
11
|
+
license = { text = "MIT" }
|
|
12
|
+
authors = [{ name = "genzagents" }]
|
|
13
|
+
keywords = ["landlord", "Renters Rights Act", "PRS database", "Register your rental property", "EICR", "EPC", "gas safety", "MCP"]
|
|
14
|
+
|
|
15
|
+
[project.urls]
|
|
16
|
+
Homepage = "https://genzagents.github.io/rentready/"
|
|
17
|
+
Source = "https://github.com/genzagents/rentready"
|
|
18
|
+
|
|
19
|
+
[project.scripts]
|
|
20
|
+
rentready = "rentready:main"
|
|
21
|
+
|
|
22
|
+
[tool.setuptools]
|
|
23
|
+
packages = ["rentready"]
|