Back to Property Insights
Looking at recent cases, is it any wonder landlords feel persecuted?
Industry News Pinned

Looking at recent cases, is it any wonder landlords feel persecuted?

Property118 · · 12 min read

Property118 Looking at recent cases, is it any wonder landlords feel persecuted? There have always been bad landlords, just as there are bad operators in every industry, and nobody is suggesting councils shouldn’t act when tenants are being put at risk. But something else appears to be happening in the private rented sector. New research from the National Residential Landlords Association (NRLA) suggests hostility towards landlords is becoming an increasingly important reason why some are questioning their future in the sector. Negative portrayals of landlords by politicians, campaigners and the media have risen from the eighth to the fourth most-mentioned issue affecting landlord confidence, while comments about landlords’ treatment and public portrayal have doubled as a proportion of responses since early 2025. Look at a few recent stories and perhaps it isn’t difficult to understand why. When does a landlord’s responsibility end? A landlord was recently fined as part of a £42,500 prosecution involving several properties, with one home occupied by three adults reportedly containing accumulated waste, urine, faeces and dead rodents in a clear case of hoarding. The council accused the landlord of “allowing” people to live in those conditions despite the NHS recognising hoarding as a mental health condition. This week Lewisham Council announced an ‘intelligence-led Rogue Landlords Taskforce’ to actively identify landlords suspected of breaking housing rules, saying “tenants should not have to live in ‘mouldy, rat-infested or downright dangerous’ homes because landlords have failed in their responsibilities. That feels like quite an assumption in itself. Or an admission of bias? Surely, their objective should be “prevent tenants living in mouldy, rat infested or downright dangerous homes” by investigating the cause then deciding who is to blame? Or, as in the case of the hoarding, find the correct organisation to help a person with mental health issues get the right help. Otherwise, it could seem like councils are only interested in helping people if it involves fining landlords. Sometimes the landlord unquestionably will be responsible. But rats can also be attracted by rubbish, food waste and conditions created inside or around a home and a landlord cannot stop a hoarder hoarding. That’s the job of health professionals. Likewise, landlords can face on-the-spot fines of up to £7,000 for serious damp and mould. What part of ‘on the spot’ investigates the cause? No wonder so many landlords report feeling persecuted, it feels increasingly like innocent until proved guilty doesn’t apply to landlords. Instead, the current trend seems to be more in keeping with ‘guilty by default unless you can prove otherwise’. A growing trend Lewisham says it has already issued 153 enforcement notices this financial year and collected £160,875 in fines since April , with enforcement expected to increase following the launch of the taskforce. And Lewisham isn’t alone in stepping up enforcement. Bristol City Council has consulted on tougher financial penalties under the Renters’ Rights Act, including proposals for penalties to be increased by 20% where breaches affect vulnerable tenants . Meanwhile, the Government has told councils to make greater use of their enforcement powers, and local authorities now have substantially larger penalties available to them under the Renters’ Rights Act. So, an obvious question follows: How many more councils will follow? From regulating landlords to looking for them None of this means responsible landlords should be protected from scrutiny. But there is an important difference between investigating a landlord because there is evidence of wrongdoing and actively searching the sector for people who might be doing something wrong. When enforcement becomes proactive rather than reactive, it is easy to see why some landlords feel the line between regulating and investigating has crossed into hunting. For someone who has spent years maintaining properties, responding to repairs, paying tax and providing homes, being repeatedly addressed as part of a sector requiring “crackdowns”, “taskforces” and tougher penalties can understandably feel hostile. Sometimes paying for certainty makes better financial sense Lewisham Council put it rather neatly itself: “Getting fined up to £40,000 is not a good way to save money.” For landlords who still enjoy the business and want to remain in the sector, the answer is good management, meticulous compliance and keeping on top of the changing rules. But for those who have already decided they’ve had enough, that £40,000 comment raises another interesting point. Saving money isn’t always about choosing the option with the lowest apparent cost. The same applies when selling. Holding out for the highest possible property price can look like the obvious way to protect your equity. But the headline sale price isn’t the amount that eventually reaches your bank account. Mortgage payments, maintenance, insurance, compliance, tax, agency fees, legal costs and months of continuing exposure to the responsibilities of being a landlord all need to be taken into account. Sometimes using a little more of your equity to secure a faster, more reliable exit can leave you better off overall. At Landlord Sales Agency, we specialise in finding the right exit for rental properties rather than simply putting them on the market and hoping for the best. That could mean selling with the tenant remaining in situ, helping the tenant buy their home, negotiating a voluntary surrender if they want to leave, or finding an investor from our database of more than 30,000 buyers. We deal with tenants throughout the process, solve problems that might otherwise derail a sale and work to keep everyone pulling in the same direction. There are no seller agency fees or commission , and if we can’t achieve a price you’re happy with, you don’t have to sell. Most importantly, look at the net figure and the risk attached to achieving it , rather than simply comparing headline valuations. Lewisham Council says: “Getting fined £40,000 isn’t a good way to save money.” Neither is spending months carrying costs and risks to save a few thousand pounds on the price of your exit. If you’ve decided you’ve had enough, talk to Landlord Sales Agency about how much you could walk away with – and how quickly you could put being a landlord behind you. Name * Email * Phone * Please give us details of how we can help and the properties in question * Privacy Policy * I have read and accept Property118’s Privacy Policy (function(){var el=document.getElementById("ts-607776b5-3f7b-431c-b5cc-fc304603fee3");if(!el)return;var b=document.body,h=document.documentElement;var dark=b.classList.contains("dark-mode")||b.classList.contains("dark")||b.classList.contains("night-mode")||h.classList.contains("dark");if(!dark){var bg=window.getComputedStyle(b).backgroundColor,m=bg.match(/\d+/g);if(m)dark=(m[0]*0.299+m[1]*0.587+m[2]*0.114) Submit (function(){ var uid = "crm-form-ba09a29b"; var form = document.getElementById(uid + '-form'); var wrap = document.getElementById(uid); var msg = wrap.querySelector('.crm-message'); var totalPages = 1; var curPage = 0; // ── Conditional logic ──────────────────────────────────────────────── var condMap = {}; function getFieldValue(fieldId) { var els = form.querySelectorAll('[name="' + fieldId + '"], [name="' + fieldId + '[]"]'); if (!els.length) return ''; var first = els[0]; if (first.type === 'checkbox' || first.type === 'radio') { var checked = []; els.forEach(function(el){ if (el.checked) checked.push(el.value); }); return checked.join(','); } return first.value; } function evalRule(rule) { var val = getFieldValue(rule.fieldId); var cmp = rule.value; switch (rule.operator) { case 'is': return val === cmp; case 'isnot': return val !== cmp; case 'greaterthan': return parseFloat(val) > parseFloat(cmp); case 'lessthan': return parseFloat(val) [ ][ ]', so the prefix arm above // collects EVERY rendered row. Demanding all of them be filled means one blank // extra row - added by mistake, or rendered by settings.minRows - blocks Next and // Submit with a generic message on the wrapper. Only the first row is required. var firstRow = form.querySelector('[data-field-id="' + fld.id + '"] .crm-repeater-row'); if (firstRow) { reqEls = Array.prototype.filter.call(reqEls, function (el) { return firstRow.contains(el); }); } var toTest = reqEls.length ? reqEls : [els[0]]; return Array.prototype.every.call(toTest, function (el) { return (el.value || '').trim() !== ''; }); } function crmFirstInvalid(pageIdx) { for (var i = 0; i [ ][ ]". // Group those flat keys into an array of row objects under the repeater // id. Plain fields, checkbox "[]" arrays and single-bracket composites // (name[first], address[city]) don't match the double-bracket pattern, so // ordinary submissions are unchanged. var _repRe = /^(.+?)\[(\d+)\]\[(.+)\]$/; var _repIds = {}; Object.keys( data ).forEach( function ( key ) { var m = key.match( _repRe ); if ( ! m ) { return; } var rid = m[1], row = parseInt( m[2], 10 ), sub = m[3]; _repIds[ rid ] = true; if ( ! Array.isArray( data[ rid ] ) ) { data[ rid ] = []; } if ( ! data[ rid ][ row ] || typeof data[ rid ][ row ] !== 'object' ) { data[ rid ][ row ] = {}; } data[ rid ][ row ][ sub ] = data[ key ]; delete data[ key ]; } ); Object.keys( _repIds ).forEach( function ( rid ) { if ( Array.isArray( data[ rid ] ) ) { data[ rid ] = data[ rid ].filter( function ( r ) { return r && typeof r === 'object'; } ); } } ); // GF auto-substituted {user_agent} / {referer} on hidden fields // at render time. We do the equivalent right before submit so // fields whose default value carries these placeholders // resolve to the browser's actual values rather than being // stored as literal "{user_agent}" / "{referer}" strings. // The last ARTICLE the visitor read (set client-side on post views by // P118_Article_Views). Used to attribute the enquiry to the article // even after navigating away or with a stripped/absent referer. var lastPost = ''; try { var lpm = document.cookie.match(/(?:^|;\s*)p118_last_post=([^;]+)/); if (lpm) lastPost = decodeURIComponent(lpm[1]); } catch (e) {} var subs = { '{user_agent}': navigator.userAgent || '', // Prefer the last article read; fall back to the (lossy) HTTP referer. '{referer}': lastPost || document.referrer || '', '{last_post}': lastPost || '', '{embed_url}': window.location.href || '', }; for (var name in data) { if (!data.hasOwnProperty(name)) continue; var v = data[name]; if (typeof v !== 'string') continue; for (var tag in subs) { if (v.indexOf(tag) !== -1) v = v.split(tag).join(subs[tag]); } data[name] = v; } // Agent/BDM attribution — read LIVE so it works even on a fully cached // page (the browser always sees the real URL + cookie). URL ?ataid=/?cid= // first, then the 30-day agent_id/cid cookies set by atat-tracking.php. var _qp = new URLSearchParams(window.location.search); var _ataid = _qp.get('ataid') || (document.cookie.match(/(?:^|;\s*)agent_id=([^;]+)/) || [])[1] || ''; var _cid = _qp.get('cid') || (document.cookie.match(/(?:^|;\s*)cid=([^;]+)/) || [])[1] || ''; if (_ataid) data.agent_id = decodeURIComponent(_ataid); if (_cid) data.bdm_id = decodeURIComponent(_cid); return data; } function uploadFiles(data) { var fileInputs = form.querySelectorAll('input[type=file][data-crm-file-field]'); var uploads = []; fileInputs.forEach(function(el) { if (!el.files || !el.files[0]) return; var fd = new FormData(); fd.append('file', el.files[0]); var fieldName = el.name; uploads.push( fetch(crmApiUrl + '/public/forms/' + "08ceeaae-4809-444e-ba0f-88da5836c463" + '/upload', { method: 'POST', body: fd }) .then(function(r) { if (!r.ok) throw new Error('File upload failed (' + r.status + ')'); return r.json(); }) .then(function(res) { if (res.path) data[fieldName] = res.path; else throw new Error(res.error || 'File upload failed'); }) ); }); return Promise.all(uploads).then(function() { return data; }); } function submitFormData(data) { var body = new FormData(); body.append('action', 'p118_crm_submit'); body.append('form_id', "08ceeaae-4809-444e-ba0f-88da5836c463"); body.append('data', JSON.stringify(data)); // Embed-page context for GF-style merge tags ({embed_url}, // {embed_post:post_title}, {embed_post:ID}). Captured PHP-side // at render time, then echoed to JS so the submit fetch can // forward to V2 as request headers. body.append('embed_url', ""); body.append('embed_post_id', "0"); body.append('embed_post_title', ""); return fetch("https:\/\/www.property118.com\/wp-admin\/admin-ajax.php", { method: 'POST', body: body, credentials: 'same-origin' }) .then(function(r){ return r.json(); }) .then(function(res){ var p = res.data || res; if (p && p.success) { if (p.confirmationType === 'form' && p.nextFormId) { return swapInNextForm(p.nextFormId, p.prefill || {}); } if (p.confirmationType === 'redirect' && p.confirmationRedirectUrl) { window.location.href = p.confirmationRedirectUrl; } else { form.style.display = 'none'; msg.className = 'crm-message success'; msg.innerHTML = p.confirmationMessage || 'Thank you for your submission.'; // Carry the calculator's own results across. A calculator form // renders its figures into [data-iht-results] as the visitor // types; hiding the form hid those too, so the completion // screen went blank and the visitor lost what they had just // worked out. Nothing happens on forms without that element. var resultsEl = form.querySelector('[data-iht-results]'); if (resultsEl && resultsEl.innerHTML.trim()) { var carried = document.createElement('div'); carried.className = 'crm-message-results'; carried.innerHTML = resultsEl.innerHTML; msg.appendChild(carried); } // Download link for a generated report, present only when the // API filed the PDF before responding. Built through the DOM // rather than concatenated into innerHTML so the URL cannot // inject markup. if (p.reportDownloadUrl) { var dlWrap = document.createElement('p'); dlWrap.className = 'crm-report-download'; var dl = document.createElement('a'); dl.className = 'crm-report-button'; // Building through the DOM stops markup injection but not a // javascript: URL, which would run in this origin the moment // the submitter clicks the button. dl.href = /^https?:\/\//i.test(String(p.reportDownloadUrl)) ? p.reportDownloadUrl : '#'; dl.target = '_blank'; dl.rel = 'noopener noreferrer'; dl.textContent = 'Download your report (PDF)'; dlWrap.appendChild(dl); msg.appendChild(dlWrap); } msg.style.display = 'block'; if (msg.scrollIntoView) { msg.scrollIntoView({ behavior: 'smooth', block: 'start' }); } } } else { throw new Error((p && p.error) || 'Submission failed.'); } }); } // Replace this whole form widget with another form, rendered server-side // with the carried-over values seeded in. Inline injected via // innerHTML won't run, so we re-create each script node to execute it // (this is what wires up the new form's submit / conditional logic). function swapInNextForm(nextFormId, prefill) { var rbody = new FormData(); rbody.append('action', 'p118_crm_render_form'); rbody.append('form_id', nextFormId); rbody.append('prefill', JSON.stringify(prefill || {})); return fetch("https:\/\/www.property118.com\/wp-admin\/admin-ajax.php", { method: 'POST', body: rbody, credentials: 'same-origin' }) .then(function(r){ return r.json(); }) .then(function(res2){ var pd = res2.data || res2; if (!pd || !pd.html) { throw new Error((pd && pd.error) || 'Could not load the next form.'); } var frag = document.createElement('div'); frag.innerHTML = pd.html; var parent = wrap.parentNode; var nodes = []; while (frag.firstChild) { var node = frag.firstChild; parent.insertBefore(node, wrap); nodes.push(node); } parent.removeChild(wrap); function reexec(old) { var s = document.createElement('script'); for (var a = 0; a The post Looking at recent cases, is it any wonder landlords feel persecuted? appeared first on Property118 .

Originally published by

Property118

Read full article