
Apartment Maintenance Requests by QR: A Setup Playbook
Saturday, 11:40pm. A resident texts a photo of water pooling under a kitchen sink to the property manager's personal cell, because that number is the only one she was ever given. The photo has no unit number in it. The manager is asleep. By Monday it has become a phone call, a walkthrough, a second visit once the technician works out it is the supply line and not the trap, and a resident who now tells everyone the building is slow.
None of that was a plumbing problem. It was a routing problem.
This is the operator's code, not the listing agent's
Most writing about property codes is about leasing. Sign riders, window cards, virtual tours, the whole apparatus for turning a passerby into a lead. That work is real, and property marketing codes do it well.
This is the other half of a building's life. The resident already signed. They will live there for two years, and across those two years the only thing they need from you at 11pm is a way to report that something broke. The code handling that gets scanned more times over one lease than the leasing code managed all year.
Unit codes belong where the failures happen
Put the code where the problem occurs, not where the paperwork lives.
Inside the cabinet under the kitchen sink. On the inside of the panel door at the breaker box. Beside the water heater. Inside the closet holding the HVAC air handler. Low on the back of the front door, for everything else.
Each of those is somewhere a resident is already standing when something goes wrong. A person crouched under a sink with a flashlight is not going to go find the welcome packet. A sticker two feet from their face is the difference between a report tonight and a report next week, after the cabinet floor has swelled.
Make each code unit-specific. If the sticker in 3B opens a form that already knows it is 3B, the resident never types a unit number and never types it wrong. That one detail removes the most common piece of bad data in maintenance intake. For a hundred-unit building that is a lot of stickers, which is what a bulk generator handles: one code per unit per location, labeled by unit, printed as sheets, installed at turnover.
Common-area faults need codes of their own
The laundry room is where this pays off fastest.
Washer 4 eats quarters. Three residents notice. None of them report it, because reporting means working out who to tell, and it is not their machine anyway. So it stays broken for two weeks and the complaint eventually arrives as a public review instead of a ticket.
A code on each machine, identifying that machine, converts a two-week silence into a same-day report. Same for the gym: one per treadmill, per bike, per rack. Same for the parking structure: one per gate, per level, per light bank that keeps failing.
The rule for common areas is that the code identifies the asset, not the room. "The gym has a problem" produces a technician wandering around looking for it. "Bike 2, display dead" produces a technician who brought the right part.
Put a code at the door too, for genuine room-level issues: door not latching, lights out, someone left a mess. Just do not let the door code become the catch-all that swallows every asset-level report.
What the form has to capture
The measure of a good intake form is whether a technician can load the truck straight from it.
- Unit or asset ID, prefilled by the code. Never typed.
- What broke, picked from a short list rather than typed free-form. Faucet, toilet, disposal, outlet, heat, cooling, appliance, door or lock, pest, other.
- A photo, and ideally two. This field does more work than all the others combined.
- Is it leaking, sparking, or without heat right now. Three yes-or-no toggles that drive priority.
- When entry is convenient, and whether entry without the resident present is allowed. Include the pet question, because a technician opening a door onto a loose dog is a different category of incident.
- Best contact number for the technician, which is frequently not the number on the lease.
- Free text last, length-limited, clearly optional.
One screen and a scroll, no more. Every extra field costs you reports, and an unreported leak costs far more than a miscategorized one. A form code gets a working version of this live in an afternoon if you have no portal yet; if you already run maintenance software, point the code at that system's intake URL instead.
Separately, a short follow-up survey after the ticket closes earns its keep. Two questions: was it actually fixed, and did anyone tell you when they were coming. The second question is where most complaints originate.
Per-appliance codes carry the model number
Ask a resident what model their dishwasher is and you get a photo of a control panel, on a good day.
Put a code on the appliance itself and let the page behind it carry make, model, serial, install date, and warranty status. Now the resident reports "dishwasher not draining" and the ticket arrives already knowing which model, installed which year, under warranty until which date.
The consequences are concrete. The technician brings the right pump. Purchasing knows whether to file a warranty claim or simply buy the part. And when the same model fails in eleven units, you find out because the tickets share a model number, not because somebody happened to remember.
Install cost is one sticker per appliance at turnover, when the unit is empty and somebody is already walking it with a checklist. Retrofitting an occupied building is harder, so start with new installs and units that turn.
Routing so the ticket lands on the right phone
The intake form's real job is deciding who gets called.
Plumbing goes to the plumber. Electrical goes to the electrician. Appliances go to whoever holds the service contract, which may be the manufacturer rather than your vendor. Anything in the laundry room may belong to a leasing company that owns the machines outright, in which case the correct action is a report to them and not a work order for your team.
Make the category list on the form match your vendor list exactly. Four contractors means the form sorts every report into one of four buckets, plus "unsure." Categories that map to no vendor create tickets that sit in a queue while somebody decides who owns them.
Two operational notes. Send the resident a confirmation with a ticket number, because the absence of one is the reason they call you anyway. And route after-hours reports differently from business-hours reports, since the same dead outlet is a Tuesday task and a Saturday non-event.
When a form is flatly the wrong channel
Gas smell. Water coming through a ceiling. Sparks. Smoke. Somebody locked out at 2am in January. A form is the wrong tool for every one of those, and a resident who fills one out and then waits has been failed by your design, not by their judgment.
So the page behind the code shows a phone number first, above everything, before the form. Not in a footer. Not behind a second tap. A large tappable number under a plain line: "Gas, fire, flooding, or no heat: call now."
Make it dial on tap. A phone code does exactly that on its own if you want a separate emergency sticker, and pairing it with the ordinary link behavior of a scanned code is the whole trick: one square opens the dialer, the other opens the form.
Some operators go further and print a dedicated red emergency sticker beside every unit code, dial-only, no form on it at all. That costs one more sticker per unit and removes any chance that a panicking resident picks the slow path.
Pick one building and one failure point. Print unit-specific stickers for under the kitchen sink, install them at the next twelve turnovers, and count how many of those units file through the code before they file through your cell phone.


