Jul
9

Everyone’s talking about landlords leaving – but the real story is in who’s buying

Author admin    Category Uncategorized     Tags

Property118

Everyone’s talking about landlords leaving – but the real story is in who’s buying

There is a lot of conflicting noise around the private rented sector at the moment. Some say landlords leaving is creating a shortage of rental properties. Others say the sector is simply changing, with smaller landlords being replaced by larger, more commercially run operators.

The one thing that is crystal clear is landlords with small portfolios or just one or two properties, especially those who self-manage, are under more pressure than ever. Not because they are bad landlords, and not because their properties are in poor condition. Far from it. Most of the properties we sell are in excellent order.

The problem with not knowing who is buying the rental stock is those landlords who want to sell do not know whether they should sell with tenant in place (better for investors), or with vacant possession (better for owner occupiers).

Get that wrong and in a slow market, it will cost you a lot of unnecessary stress, hassle, time and money. Add in the possibility of retaliatory tenant action, fines and the risk of rising interest costs while the process progresses and it’s no wonder so many landlords who want to leave the PRS find themselves stuck in limbo, not knowing which way to turn.

That was exactly the position a Derby landlord found himself in when he came to us with six rental properties to sell. He knew that selling with vacant possession to owner-occupiers through a high-street estate agent for the best sales price would mean evicting his tenants and losing at least 6 months’ rent with ongoing mortgage costs etc.

Selling with tenants in situ at an auction would be quicker, but the sale prices they achieve are typically very low due to them only being open to cash buyers and the commission/costs are too high.

He recognised all options involve compromise and was looking for the perfect balance between sales price, procedure and risk management. Put simply, he couldn’t afford to take the risk of running multiple empty properties for months on end while he waited for slow sales to complete. That’s when he turned to Landlord Sales Agency.

Let’s be real, we don’t promise the highest sale price – tenanted property does not sell for more than vacant possession property despite what some property buying companies claim. But the money left in your bank at the end of the day after you consider the savings you’ll make by selling with tenants in place is surprisingly similar when you sell through us.

The main difference is the route you will take to get there. Sell through us and you get there quicker without the stress and hassle and risk of the ‘list and linger’ route.

We provide a safer, more reliable and more balanced option, not the fastest because that means excluding people buying with mortgages from the process, but fast enough to make a real difference. A sale that is secured from the start and so reliable that we can provide an interest free advance on the money from the sale, if required by request at the start of the sale. And, we do everything we can to make keep the compromise on sales price as small as possible. We have to, to be the best option for our sellers. It’s how we’ve stayed in business doing what we do for over 20 years and why we’re trusted partners with Property118 and LandlordZONE.

An option with more certainty, less risk and the least compromise possible.

And we do all the heavy lifting so you can sit back and relax or get one with things that matter more.

Rather than ignore the tenants’ concerns as most (all as far as we know) other options do, we make a point of finding out what they are and help them plan for every outcome to secure their full tenant cooperation and keep all options open. That meant we could sell landlord-to-landlord and to owner occupiers and use the competition between the groups to push prices above investor or cash-buyer only markets.

We sold 4 of the Derby landlord’s 6 properties to a cash buyer with no searches and no survey, avoiding what could have been a nine-month court delay AND for £30,000 higher than the investor market estimates.

His story is not unique, Ian, a landlord who came to us recently, said he first contacted Landlord Sales Agency because he had “a rented property which still had the tenant in and I needed to sell the property, hopefully with the tenant in place.” Within a short space of time, he had been matched with one of our top property experts, agreed a price and fees, and had his property advertised with a firm offer and deposit paid within just one month.

But as with all landlord properties, it was not completely plain sailing, and that is where our team at Landlord Sales Agency excels.

“The purchaser wanted the tenant to vacate, I left this totally in the hands of Landlord Sales Agency, who served notice on the tenant. They were in contact with the tenant and helped her with relocation expenses.” Ian went on to say that everything was resolved without him having to contribute any input or deal with any stress. The tenant moved and the deal completed. “I am extremely happy with the service received and thoroughly recommend Landlord Sales Agency.”

Doing whatever it takes to get the job done as efficiently as possible is one of the reasons why so many landlords come back to us.

Landlords with bigger portfolios often choose to exit in stages, selling a few properties at a time in areas when the demand is high. They recognise demand shifts and choose us to take advantage of the opportunities while they last.  At the moment in particular, we are seeing strong demand for properties in the North, which is one reason many landlords are choosing to act now rather than leave their exit to chance.

Another landlord, Ali, echoed Ian’s sentiments, adding that he had an “excellent experience using this company. Many other agents were not interested, as I had a tenant in situ, but these guys reassured me they would sell this place and contribute towards costs to help make this transaction as smooth as possible.” He followed up by saying we were a “5 star rating” and that “the business goes above and beyond to help!”

So, if you want the best chance of a fast, clean exit with the smallest compromise possible, let us do the hard work for you. No fuss, no hassle and no need to gamble on the wrong strategy before you know your options — just the right buyer, the right sale structure and a team focused on getting the job done.

Please contact us using the form below if you need assistance.

(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)<128;}el.setAttribute("data-theme",dark?"dark":"light");if(window.turnstile&&el.childElementCount===0){try{window.turnstile.render(el,{sitekey:el.getAttribute("data-sitekey"),theme:el.getAttribute("data-theme")});}catch(e){}}})();

(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) < parseFloat(cmp);
case 'contains': return val.indexOf(cmp) !== -1;
case 'startswith': return val.indexOf(cmp) === 0;
case 'endswith': return val.slice(-cmp.length) === cmp;
default: return false; // fail closed — mirror the CRM shared matcher
}
}

function applyConditionals() {
Object.keys(condMap).forEach(function(fieldId) {
var cond = condMap[fieldId];
var rules = cond.rules || [];
var match = cond.logicType === 'any'
? rules.some(evalRule)
: rules.every(evalRule);
var show = cond.actionType === 'show' ? match : !match;
var wrapper = form.querySelector('[data-field-id="' + fieldId + '"]');
if (!wrapper) {
var el = form.querySelector('[name="' + fieldId + '"], [name="' + fieldId + '[]"]');
if (el) wrapper = el.closest('.crm-field, .crm-half');
}
if (wrapper) wrapper.style.display = show ? '' : 'none';
});
}

form.addEventListener('change', applyConditionals);
form.addEventListener('input', applyConditionals);
applyConditionals();

// ── Required-field validation (Next + Submit) ────────────────────────
// Validate from the form's field config (id + type), NOT the [required]
// HTML attribute: a checkbox group can't carry a meaningful `required`
// (native means "tick every box"), so attribute checks skip it — which is
// why empty checkbox questions slipped past Next straight to submit.
var crmRequired = [{"id":"c364951b-ecb0-4a12-bfa4-9dbe564310e8","type":"name","label":"Name"},{"id":"910107df-b8a8-4541-879f-541cef9449e4","type":"email","label":"Email"},{"id":"3b317ed9-d327-4fe2-b92e-67efede67e6d","type":"phone","label":"Phone"},{"id":"c6fae2f0-c335-452b-aa03-2cc066163d71","type":"textarea","label":"Please give us details of how we can help and the properties in question"},{"id":"34c27d9f-b3d1-4a6d-b720-24000e9fa468","type":"checkbox","label":"Privacy Policy"}];
function crmWrapper(id) {
var w = form.querySelector('[data-field-id="' + id + '"]');
if (!w) { var el = form.querySelector('[name="' + id + '"], [name="' + id + '[]"]'); if (el) w = el.closest('.crm-field, .crm-half'); }
return w;
}
function crmFilled(fld) {
var els = form.querySelectorAll('[name="' + fld.id + '"], [name="' + fld.id + '[]"]');
if (!els.length) return true;
if (['checkbox','radio','product','consent'].indexOf(fld.type) !== -1) { return Array.prototype.some.call(els, function(el){ return el.checked; }); }
return (els[0].value || '').trim() !== '';
}
function crmFirstInvalid(pageIdx) {
for (var i = 0; i < crmRequired.length; i++) {
var fld = crmRequired[i]; var w = crmWrapper(fld.id);
if (!w) continue;
if (w.style.display === 'none') continue;
if (pageIdx != null) { var pd = w.closest('[data-page]'); if (!pd || parseInt(pd.getAttribute('data-page')) !== pageIdx) continue; }
if (!crmFilled(fld)) return fld;
}
return null;
}
// Shows the error in a red box UNDER the field, matching the form's own
// .crm-message error styling, and scrolls to it.
function crmMarkError(w, text) {
if (!w) return;
var e = w.querySelector('.crm-inline-error');
if (!e) { e = document.createElement('div'); e.className = 'crm-inline-error'; w.appendChild(e); }
e.style.cssText = 'background:#fee2e2;color:#991b1b;padding:.55rem .75rem;border-radius:4px;margin-top:.4rem;font-size:.9rem';
e.textContent = text || 'Please answer this before continuing.';
}
function crmClearError(w) { if (!w) return; var e = w.querySelector('.crm-inline-error'); if (e) e.parentNode.removeChild(e); }
function crmReportInvalid(fld) {
var w = crmWrapper(fld.id);
var t = (['checkbox','product'].indexOf(fld.type) !== -1) ? 'Please select at least one option.' : (fld.type === 'radio' ? 'Please choose an option.' : 'Please fill this in.');
crmMarkError(w, t);
if (w && w.scrollIntoView) w.scrollIntoView({ behavior: 'smooth', block: 'center' });
}
form.addEventListener('change', function(e){ var w = e.target && e.target.closest ? e.target.closest('.crm-field, .crm-half, [data-field-id]') : null; if (w) crmClearError(w); });
form.addEventListener('input', function(e){ var w = e.target && e.target.closest ? e.target.closest('.crm-field, .crm-half, [data-field-id]') : null; if (w) crmClearError(w); });

// ── Multi-page navigation ────────────────────────────────────────────

// ── Submit ────────────────────────────────────────────────────────────
var submitBtn = form.querySelector('button[type=submit]');
var btnText = submitBtn ? submitBtn.textContent : 'Submit';

var crmApiUrl = "https://p118-crm-api.accent.sh";

function collectFormData() {
var data = {};
for (var j = 0; j < form.elements.length; j++) {
var el = form.elements[j];
if (!el.name) continue;
if (el.type === 'file') continue; // handled by uploadFiles()
if (el.type === 'radio' && !el.checked) continue;
if (el.type === 'checkbox') {
if (!el.checked) continue;
var k = el.name.replace('[]','');
data[k] = data[k] ? data[k].concat([el.value]) : [el.value];
} else {
data[el.name] = el.value;
}
}
// Repeater fields: sub-inputs are named "[][]”.
// 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.';
msg.style.display = ‘block';
}
} 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 < old.attributes.length; a++) {
s.setAttribute(old.attributes[a].name, old.attributes[a].value);
}
if (!old.src) { s.textContent = old.textContent; }
old.parentNode.replaceChild(s, old);
}
nodes.forEach(function(n){
if (n.tagName === 'SCRIPT') { reexec(n); }
else if (n.querySelectorAll) {
var scripts = n.querySelectorAll('script');
for (var k = 0; k < scripts.length; k++) { reexec(scripts[k]); }
}
});
var first = nodes[0];
try { if (first && first.scrollIntoView) first.scrollIntoView({ behavior: 'smooth', block: 'start' }); } catch (e) {}
});
}

form.addEventListener('submit', function(e){
e.preventDefault();
// Validate required fields before submitting. Next only guards the pages
// before it, so the final page (and single-page forms) are checked here;
// jump to the first page that has a problem.
var vbad0 = crmFirstInvalid(null);
if (vbad0) { crmReportInvalid(vbad0); return; }
var data = collectFormData();
if (submitBtn) { submitBtn.disabled = true; submitBtn.textContent = 'Processing…'; }
msg.style.display = 'none';

// Standard form (no payment)
uploadFiles(data)
.then(function(d) { return submitFormData(d); })
.catch(function(err){
if (submitBtn) { submitBtn.disabled = false; submitBtn.textContent = btnText; }
msg.className = 'crm-message error';
msg.textContent = err.message;
msg.style.display = 'block';
});
});

// ── Repeater fields (add / remove rows) ──────────────────────────
form.querySelectorAll( '.crm-repeater' ).forEach( function ( rep ) {
var rowsWrap = rep.querySelector( '.crm-repeater-rows' );
var tpl = rep.querySelector( '.crm-repeater-template' );
var addBtn = rep.querySelector( '.crm-repeater-add' );
if ( addBtn && tpl && rowsWrap ) {
addBtn.addEventListener( 'click', function () {
var idx = parseInt( rep.getAttribute( 'data-next-index' ) || '1', 10 );
var tmp = document.createElement( 'div' );
tmp.innerHTML = tpl.innerHTML.split( '__ROW__' ).join( idx );
var row = tmp.firstElementChild;
if ( ! row ) { return; }
row.setAttribute( 'data-row', idx );
rowsWrap.appendChild( row );
rep.setAttribute( 'data-next-index', idx + 1 );
rep.dispatchEvent( new CustomEvent( 'crm-repeater-change', { bubbles: true } ) );
} );
}
if ( rowsWrap ) {
rowsWrap.addEventListener( 'click', function ( e ) {
var btn = e.target.closest ? e.target.closest( '.crm-repeater-remove' ) : null;
if ( ! btn ) { return; }
if ( rowsWrap.querySelectorAll( '.crm-repeater-row' ).length <= 1 ) { return; }
var r = btn.closest( '.crm-repeater-row' );
if ( r ) { r.remove(); }
rep.dispatchEvent( new CustomEvent( 'crm-repeater-change', { bubbles: true } ) );
} );
}
} );
})();

The post Everyone’s talking about landlords leaving – but the real story is in who’s buying appeared first on Property118.

View Full Article: Everyone’s talking about landlords leaving – but the real story is in who’s buying

Jul
9

Andy Burnham’s council housebuilding plan risks ‘postcode lottery’

Author admin    Category Uncategorized     Tags

Property118

Andy Burnham’s council housebuilding plan risks ‘postcode lottery’

Landlords watching Labour’s next housing move may find the private rented sector is still expected to absorb pressure where council housebuilding falls short.

An analysis by specialist lender Together claims potential PM Andy Burnham‘s plan for the biggest council housebuilding programme since the post-war period risks becoming a ‘postcode lottery’.

That’s because publicly owned brownfield land is not evenly spread across England.

Mr Burnham has said Labour would use vacant land to reduce costs and deliver a major programme of social and affordable homes.

Labour’s ‘postcode lottery’

Together’s chief commercial officer, Ryan Etchells, said: “Building on vacant public land is a sensible idea, but our analysis shows it can only ever be part of the answer.

“There isn’t enough public land to deliver a programme this size, and that’s before considering that the places with the greatest need tend to have the least land.

“As it stands, whether this pledge reaches your community is close to a postcode lottery.”

He added: “They need sites to be assembled and bought, existing land intensified, and the wider public estate brought into play — and all of that needs finance that moves quickly and understands complex, non-standard sites.”

Not enough housing capacity

Together’s analysis of Searchland data says publicly owned brownfield land in England has capacity for at most 187,000 to 207,000 homes.

That is less than two-thirds of a 300,000-home social and affordable housing programme previously announced by Labour, before any assessment of whether each site is genuinely deliverable.

The specialist lender says the government does not own enough registered land to build a programme of that size on public land alone.

A third or more of the homes would still need land bought at current market value.

Not every area will benefit

The available land is also heavily concentrated in various areas with Birmingham’s 185 sites having capacity for 11,500 homes.

By contrast, around two-thirds of the 20 areas with the deepest housing delivery shortfalls have little or no significant public land available for housebuilding.

Bournemouth, Christchurch and Poole have a shortfall of around 4,550 homes, while Greenwich is short by around 3,880 and Newham by around 2,870.

Leicester, Sandwell, Thurrock, Southend-on-Sea, Basildon, Portsmouth and Southampton are also listed among the areas with large delivery gaps.

Some of the largest public landholdings sit in areas already meeting or beating housing targets, including Leeds, Wandsworth, Waltham Forest, Newcastle and Nottingham.

PRS landlords needed

For private landlords, Labour’s plans for house building matters because pressure on the PRS tends to rise when social housing supply fails to match demand.

David Smith, a partner and residential property law expert at Bishop & Sewell, said Burnham’s ambition to increase social homes could be positive for the sector.

However, he warns that a clearer role for private landlords is needed.

He said: “Perhaps more encouraging is his ambition to drive an increase in social homes.

“That will be a welcome move for the private rented sector.”

He added: “The sector has, however, been asked to do too much and is somewhat of a dumping ground in which all kinds of housing needs are expected to be addressed.”

Housing bill to rise

The Centre for Policy Studies has separately claimed Mr Burnham’s council house pledge would add to England’s housing subsidy bill.

It argues that £39bn over 10 years may deliver only between 14,335 and 15,494 homes a year.

Its report says the average-sized three-bedroom semi-detached house costs around £251,700 to build.

And that’s even with land provided free, meaning £3.9bn a year would cover 15,494 homes.

The organisation’s head of housing and infrastructure, Ben Hopkinson, said: “The cost of building social housing, like all housing, has been driven up by regulation, construction costs and an unruly planning system.

“Subsidising rents for some on the taxpayer’s dime while refusing to tackle the broader lack of housing for all tenures suggests Andy Burnham is going to be yet another Prime Minister driven by ideology, not what actually works.”

The post Andy Burnham’s council housebuilding plan risks ‘postcode lottery’ appeared first on Property118.

View Full Article: Andy Burnham’s council housebuilding plan risks ‘postcode lottery’

Categories

Archives

Calendar

July 2026
M T W T F S S
« Jun   Aug »
 12345
6789101112
13141516171819
20212223242526
2728293031  

Recent Posts

Quick Search

RSS More from Letting Links

Facebook Fan Page