Founder & Lead Engineer, RAITHub
Co-living management software leases rooms or beds, not whole units: every resident has their own agreement, rent and deposit, while shared bills are split across the house. Buy an operator platform if your model is standard. Build when room types, bill rules or community features keep fighting the product. PropDesk, the property platform RAITHub built, supplies the base patterns: 4 roles and 1,024 tests.
This guide is for co-living operators, HMO landlords and PropTech founders in the UK, US, EU, Australia, the Gulf and Asia who have outgrown a unit-based tool or a spreadsheet. RAITHub has not shipped a co-living product. PropDesk is a property management platform for landlords; everything below about rooms, beds and shared bills is engineering guidance adapted from it, and is labelled that way. Where housing rules come up, they are general information: confirm the current rule with your adviser.
What is co-living management software, and how is it different from property management software?
It is property management software where the thing you let is a room or a bed inside a shared home, and the home itself has shared costs, shared spaces and a community. Most property management tools assume one lease per unit and one household per lease. Co-living breaks both assumptions at once.
| Concern | Unit-based property management | Co-living |
|---|---|---|
| What is let | A flat or house | A room or a bed; sometimes a whole room to a couple |
| Agreements per home | One, often with joint tenants | One per resident, with different start and end dates |
| Vacancy | The unit is empty or it is not | A house can be 4 of 6 rooms full, with a 7th resident arriving next Tuesday |
| Utilities | Usually the tenant's account | Often the operator's account, recharged or bundled into rent |
| Move-ins | A few a year per unit | Constant, so proration and deposits run every week |
| Community | Rarely in scope | Events, house rules, announcements, room swaps |
| Licensing | Varies by place | Often triggered by the number of unrelated people sharing, such as HMO licensing in England |
If your tool can only answer "is unit 4B let?", every one of those rows becomes a spreadsheet. That is usually the moment operators start asking whether to build.
Should I buy co-living management software or build my own?
Buy if your houses, room types and bill rules look like everyone else's; the platform vendor carries the maintenance. Build when the software is your product, or when your operating model is the thing that makes you different and no product models it. Operator platforms exist for this market: StarRez, for example, lists co-living alongside student housing and build-to-rent among the sectors it serves, and says it is trusted by 1,300+ institutions and organisations globally (StarRez, checked 30 September 2026). Check any vendor's room-level features against your own model before signing.
| Your situation | Usually the better fit | Why |
|---|---|---|
| A handful of HMOs, monthly room lets, bills included in rent | Buy | Standard room-letting features cover it; custom software is overhead |
| Several cities, one brand, standard room types | Buy, and build a thin layer on top if needed | Keep the ledger in the product; build only the resident experience or reporting |
| Mixed stays: nightly, monthly and fixed-term in the same building | Build, or buy and integrate carefully | Few tools price one bed three ways without double-letting it |
| You split bills by metered use, room size or occupancy days | Build the billing engine | The rule is yours, and it has to reconcile to the penny every month |
| You are selling a co-living platform to operators | Build | The software is the product |
For a small portfolio the maths usually favours buying; the property management software guide for small landlords works through that decision. The rest of this post assumes you have a reason to build.
How do you model room-level leases and bed inventory so nothing is double-let?
Make the bed the thing you let, give every lease a date range, and let the database refuse any two live leases on the same bed whose dates overlap. A private room is simply a room with one bed. The application checks availability first for a friendly message; the constraint is the guarantee.
PostgreSQL does this with an exclusion constraint on a range type. Its documentation shows the pattern for room reservations, using the btree_gist extension so an equality check on the room and an overlap check on the dates live in one constraint (PostgreSQL: range types). Adapted to co-living, as a minimal sketch written for this post:
CREATE EXTENSION IF NOT EXISTS btree_gist;
CREATE TABLE room (
id uuid PRIMARY KEY,
property_id uuid NOT NULL REFERENCES property(id),
label text NOT NULL, -- 'Room 3 (ensuite)'
size_weight int NOT NULL DEFAULT 10 -- used by bill splits; 10 = standard
);
CREATE TABLE bed (
id uuid PRIMARY KEY,
room_id uuid NOT NULL REFERENCES room(id),
label text NOT NULL -- 'Room 3, bed A'
);
-- One lease per resident per bed. Dates are [start, end): the end day is free again.
CREATE TABLE lease (
id uuid PRIMARY KEY,
bed_id uuid NOT NULL REFERENCES bed(id),
resident_id uuid NOT NULL REFERENCES resident(id),
during daterange NOT NULL,
rent_cents bigint NOT NULL CHECK (rent_cents >= 0),
currency char(3) NOT NULL, -- 'GBP', 'EUR', 'AUD', 'AED', 'SGD'
status text NOT NULL CHECK (status IN ('pending', 'active', 'ended', 'cancelled')),
EXCLUDE USING GIST (bed_id WITH =, during WITH &&)
WHERE (status IN ('pending', 'active'))
);
-- Free beds in a property for a requested stay.
SELECT b.id, b.label
FROM bed b
JOIN room r ON r.id = b.room_id
WHERE r.property_id = $1
AND NOT EXISTS (
SELECT 1 FROM lease l
WHERE l.bed_id = b.id
AND l.status IN ('pending', 'active')
AND l.during && daterange($2::date, $3::date)
);
Four design choices matter more than the SQL:
- Half-open dates. A lease ending on the 1st and the next starting on the 1st do not overlap, so a changeover day does not show as a clash.
- Money in integer minor units, with a currency on every row. An operator with houses in London and Lisbon has GBP and EUR in the same database; never add them together.
- Whole-room lets are a rule, not a special table. Letting a twin room to a couple means creating leases on both beds in one transaction, or marking the room as let whole. Pick one, and test it.
- Cancelled and ended leases stay. The constraint ignores them, and the history answers deposit disputes later.
Once leases exist per bed, collecting rent per resident is the same problem PropDesk solves per tenant; the online rent collection guide covers idempotent charges and webhook confirmation.
How should co-living software split utility bills fairly?
Choose one written rule per house, apply it in integer cents, and hand out the leftover cents deterministically so the shares always add back to the bill. The rule itself is a business decision; the rounding is an engineering one, and it is where most spreadsheets go wrong.
| Method | How it works | Fair when | Watch out for |
|---|---|---|---|
| All-inclusive rent | Bills are in the rent; no split | Usage is predictable and you price in a buffer | A cold winter comes out of your margin |
| Equal split | Bill divided by residents | Nobody moved in or out this period | A resident who stayed 5 days pays a full share |
| Occupancy days | Weighted by days each resident lived there | Frequent move-ins and move-outs | Needs accurate lease dates, which you already have |
| Days times room weight | Occupancy days multiplied by a room factor | Rooms differ a lot, such as ensuite versus standard | Publish the weights in the agreement |
Here is the occupancy-days method with room weights, written for this post as a minimal illustration. Everything stays an integer, including the remainders, so no floating-point rounding can make the total drift:
type Share = { leaseId: string; days: number; weight: number } // integers only
// Split a bill (in minor units: pence, cents, fils) by days x weight.
// Largest-remainder rounding: the shares always sum to totalCents.
export function splitBill(totalCents: number, shares: Share[]): Map<string, number> {
if (!Number.isSafeInteger(totalCents) || totalCents < 0) throw new Error('totalCents must be a non-negative integer')
const units = shares.map((s) => ({ id: s.leaseId, units: s.days * s.weight }))
const totalUnits = units.reduce((sum, u) => sum + u.units, 0)
if (totalUnits === 0) throw new Error('nobody occupied the house in this period')
const parts = units.map((u) => {
const product = totalCents * u.units
const rem = product % totalUnits // exact integer remainder
return { id: u.id, cents: (product - rem) / totalUnits, rem }
})
let left = totalCents - parts.reduce((sum, p) => sum + p.cents, 0)
const order = [...parts].sort((a, b) => b.rem - a.rem || a.id.localeCompare(b.id))
for (const p of order) {
if (left === 0) break
p.cents += 1
left -= 1
}
return new Map(parts.map((p) => [p.id, p.cents]))
}
A worked example: a GBP 412.37 electricity bill (41,237 pence) for a 30-day month, four residents, all standard rooms (weight 1). Two stayed all month, one moved in on day 13, one moved out after day 12.
| Resident | Days | Exact share (pence) | After rounding |
|---|---|---|---|
| A | 30 | 13,745.67 | GBP 137.46 |
| B | 30 | 13,745.67 | GBP 137.46 |
| C | 18 | 8,247.40 | GBP 82.47 |
| D | 12 | 5,498.27 | GBP 54.98 |
| Total | 90 | 41,237.00 | GBP 412.37 |
The two leftover pence go to A and B, who had the largest remainders; the tie between them is broken by ID, so the same inputs always give the same output. The test that matters is a property test: for any bill and any set of shares, the result sums exactly to the bill.
One caution. Whether you may recharge utilities to residents, how, and at what price differs by country and sometimes by city. Confirm the current rule with your adviser before you ship a recharge feature, and keep the rule configurable per property.
How do move-ins, move-outs and rent proration work with Stripe?
Decide your own proration rule, usually by day, and compute the first and last partial periods yourself. Then bill the resident on a fixed day each month. Stripe will prorate for you, but its defaults are built for software subscriptions, not tenancies.
- Stripe prorates to the second by default. Its documentation says so, and points to proration customisations if you want to prorate by day, week or month instead (Stripe: prorations). A resident who moved in at 16:00 does not expect a bill for a fraction of a day.
- Anchor billing to a day of the month.
billing_cycle_anchor_configsets the renewal day, and Stripe creates a prorated invoice for the period from creation to the first full invoice unless you setproration_behaviortonone(Stripe: billing cycle). - A simple, explainable pattern: set
proration_behavior: 'none', and charge the first partial month as a separate one-off item calculated by your own daily rule. Your number, your rule, printed on the resident's statement.
Worked example in euros: a room at EUR 780 a month, a resident moving in on 12 September. September has 30 days, and the resident occupies days 12 to 30, which is 19 days. 78,000 cents × 19 ÷ 30 = 49,400 cents, so the first charge is EUR 494.00, and full rent starts on 1 October. Where the division is not exact, round once, in one place, and test it. The same approach works in AUD for a Sydney house or AED for a Dubai one. Deposits follow local rules on where they must be held and when they must be returned; confirm the current rule with your adviser, and see split payments and escrow for the ledger side of holding money you do not own yet.
If you operate houses on behalf of owners and pay them out, that is a marketplace money flow, not plain rent collection. Stripe Connect for marketplace payments covers the account types and payout timing.
Which roles and portals does a co-living platform need?
Start from the four roles every property product needs, then add the two that co-living introduces: the community manager and, often, the property owner. PropDesk's 4 roles, each with its own portal from one codebase and permission checks on the server, map across like this. The mapping is guidance; PropDesk itself serves landlords, tenants and contractors, not co-living houses.
| PropDesk role | Co-living equivalent | Sees and does | Must never see |
|---|---|---|---|
| Landlord | Operator or house manager | Houses, rooms, beds, leases, bills, arrears | Houses run by another operator on the platform |
| Tenant | Resident | Own lease, own bill shares, payments, maintenance, house notices | Other residents' rent, arrears or documents |
| Contractor | Contractor or cleaner | Assigned jobs, access notes | Anything about money |
| Admin | Platform admin | Users, settings, audit trail | Nothing hidden, so every action is logged |
| (new) | Community manager | Events, announcements, house rules, room-swap requests | Rent ledgers and deposits |
| (new) | Owner or investor | Occupancy and income for their own properties | Resident personal data beyond what the agreement allows |
The subtle rule in co-living is that residents of one house can see each other's first names and room numbers for community features, but never each other's money. Put that in the permission matrix explicitly, and test it. SaaS authorisation and RBAC design covers the matrix, and tenant portal features covers what residents actually use.
Which community features are worth building first?
The ones that reduce operator work, not the ones that look good in a pitch deck. In order of value in a first release:
- House notices and rules, with a record of who has acknowledged them.
- Maintenance requests with shared visibility: one report of a broken washing machine, not five. The maintenance request system guide covers priorities and contractor routing.
- Room-swap and transfer requests, which end one lease and start another on the same day, in one transaction.
- Events and a house calendar. Useful, but last: a feed nobody reads is a cost.
Deliver these as a responsive web app or a PWA (a web app residents can add to their home screen). It reaches every phone without app-store releases.
Which scheduled jobs does a co-living platform need?
PropDesk runs 5 daily jobs: rent reminders, late fee assessment, lease expiry alerts, maintenance auto-closure and scheduled rent increases. Co-living keeps all five and adds jobs driven by turnover and shared costs. Each one must be safe to run twice or late.
| Job | Source | What must hold if it runs twice or late |
|---|---|---|
| Rent reminders and late fees | PropDesk pattern | One reminder and at most one fee per charge |
| Lease expiry and renewal offers | PropDesk pattern | A missed day still sends the alert the next day |
| Monthly bill split run | New for co-living | A bill is split once; a re-run produces the same shares, not new ones |
| Move-out checklist and deposit deadline | New for co-living | The deadline is calculated from the lease end, per the property's configured rule |
| Turnover cleaning jobs | New for co-living | One cleaning job per vacated bed, assigned before the next move-in |
| Licence and certificate expiry | New for co-living | Alerts start well before expiry, and repeat until someone records a renewal |
The last row is where housing rules meet software. In England, for example, a house in multiple occupation is a property rented by at least 3 people who are not from 1 household and share facilities; a large HMO rented to 5 or more people needs a licence, which lasts a maximum of 5 years, and smaller HMOs may need one depending on the council (GOV.UK: HMO licensing). A platform should store the licence, its expiry and any occupancy limit per property, and refuse a lease that would exceed that limit. Other countries and cities have their own rules; confirm the current rule with your adviser for every place you operate.
What does custom co-living software cost, and how long does it take?
A focused first release, one audience and one money flow, typically takes 4 to 6 weeks at fixed scope with RAITHub; a co-living product with bed inventory, per-resident rent, bill splits and resident portals is several releases. The real estate platform cost guide breaks down what drives the number, and the MVP cost estimator gives a first range for your feature list. Compare it honestly with three years of an operator platform's fees for your bed count.
How does working with a Dhaka team fit co-living operators' hours?
RAITHub works from Dhaka, UTC+6, with no daylight saving. UK teams get about 3 to 4 working hours of overlap and Central Europe 4 to 5; Dubai and Singapore about 7; Sydney 4 to 5. For US clients there is a daily 2-hour evening overlap, Dhaka 19:00 to 21:00, which is US East mornings. The working week is agreed per client, and everything outside the overlap runs on written daily handoffs.
Why RAITHub for this
- The base is built and tested. PropDesk has Stripe rent collection, leases, maintenance routing, 4 role-based portals, 5 daily jobs and 1,024 automated tests (PropDesk case study). Room-level leasing and bill splits extend those patterns; they are new work, and are quoted as such.
- Money logic gets money-grade tests. Bill splits, proration and deposit deadlines get property tests and CI gates, the same standard as PropDesk's rent collection.
- Multi-operator isolation. BlockEstate, a multi-tenant listing and inquiry platform, reached its MVP in 6 weeks; keeping one operator's houses invisible to another is the same problem. The real estate industry page summarises this work.
- Clear terms. A free 15-minute technical audit, then a fixed written quote, fixed scope or a dedicated monthly team. You own the IP, and an NDA is standard. See SaaS development for what a build includes.
When you don't need us
- You run a few houses with monthly room lets and bills included. A room-letting tool you can buy already does this.
- Your operating model matches an operator platform's. Buy it, and spend the build budget on filling rooms.
- You need a native iOS or Android app. RAITHub builds web apps and PWAs only.
- You need licensing, deposit or tenancy law advice. That is a job for a local adviser; RAITHub builds the rules they give you into software.
- You want developers placed in your team by the hour. RAITHub does not offer staff augmentation.
If you already have a co-living app that breaks under real residents, start with a fix rather than a rebuild.
Sources checked on 30 September 2026. Housing and utility rules are general information only; confirm the current rule with your adviser.
If room-level leasing or shared bills are what your current tool gets wrong, book the free 15-minute technical audit. Bring your room types, your bill-split rule and one month of move-ins.
Frequently asked questions
What is co-living management software?
Co-living management software runs shared homes where each resident rents a room or bed on their own agreement. It tracks bed-level availability, per-resident rent and deposits, shared utility bills, maintenance and community features such as house notices, which unit-based property management tools usually do not handle.
Can normal property management software handle room-by-room rentals?
Some can, often by treating each room as a unit. That works until residents share bills, move in on different days or switch rooms. If you are keeping a spreadsheet beside your tool for any of those, the tool is not modelling rooms properly.
How should co-living operators split utility bills between residents?
Pick one published rule per house, such as equal shares, occupancy days or days weighted by room size, and calculate in integer pence or cents with largest-remainder rounding so shares always add up to the bill. Check the local rules on recharging utilities with your adviser.
How do you prevent the same room being let twice?
Let beds, not houses, give each lease a date range, and add a database constraint that rejects two live leases on the same bed with overlapping dates. PostgreSQL does this with an exclusion constraint on a date range, so the guarantee holds even when two bookings arrive at once.
Has RAITHub built co-living software?
No. RAITHub built PropDesk, a property management platform with Stripe rent collection, 4 role-based portals, 5 daily jobs and 1,024 tests. Its lease, payment and permission patterns carry over to co-living; bed inventory, bill splits and community features would be new work.
Can co-living software be a web app instead of a mobile app?
Yes. A responsive web app or PWA covers rent payment, maintenance requests, notices and bill statements on any phone, without app-store releases. RAITHub builds web apps and PWAs only, not native mobile apps.
Related posts
Ready to discuss your project?
Book a free 15-minute technical audit with our engineering team.