Browsing all articles from July, 2026
Jul
31

Thinking of selling this summer? You’re not alone.

Author admin    Category Uncategorized     Tags

Property118

Thinking of selling this summer? You’re not alone.

With the summer holidays now in full swing, many landlords are finally getting the chance to take a step back and think about what comes next.

The latest Property118 Landlord Sentiment Survey suggests many have already decided the direction they want to travel. More than two-thirds now expect to sell some or all of their portfolio over the next three years, with the number planning to leave the sector altogether continuing to rise.

Over a third of landlords surveyed expect to remortgage within the next 12 months, many moving from pre-2022 fixed rates onto significantly higher repayments, and more than nine in ten no longer expect property values will outperform inflation leading to stagnated value and possibly lower values the longer you wait.

70% of landlords surveyed have mortgages on their properties so we understand how difficult is to start the ball rolling if you think you need to evict tenants before you sell – even optimistic timelines will need to factor in 6 – 12 months of costs without any rental income.

Our advice is simple: if selling is already part of your long-term plan, don’t wait until the rent has stopped before deciding how you’ll do it.

We know from landlords who have found out the hard way that months of paying mortgages and other running costs on an empty property steadily eat away at the equity they’d spent years building and can quickly become a real problem for landlords who are have ploughed all the wealth they have built up into more properties.

It’s one of the reason landlords with several properties are selling one or two at first. By releasing their equity, and paying off loans altogether they have a lot more time to sell the rest before cash flow becomes a real problem.

They are planning the best way to leave the PRS and exploring their options from a position of strength.

The mistakes we often see landlords make are from those who have underestimated the time, cost and risks involved in selling rental property through a high street agent and from those who have rushed in to vacate their properties without thinking through the costs that go unnoticed when they’re paid for from rent.

Once the rent stops, the mortgage, insurance and other property costs don’t. We’ve spoken to plenty of landlords who assumed they’d sell quickly, only to find months of carrying costs steadily eating into the equity they’d worked so hard to build.

If you’re thinking about leaving the PRS, it’s worth planning how you’ll sell just as carefully as deciding when.

Instead of spending months preparing vacant properties, waiting for tenants to leave, decorating, finding estate agents and hoping chains hold together, we help landlords achieve a clean exit while continuing to collect rent right up until completion.

We typically achieve 85 – 90% of the market value, and for that we cover all the costs and take away all the hassle that comes with selling the portfolio.

We find solutions for sellers, buyers and tenants. And by looking after tenants, they help us help our sellers. It means sellers can keep all their options open and we can sell to incoming landlords, investors, corporate buyers, owner occupiers or the tenants themselves.

We have a wide range of experts at the end of a phone line helping to make it possible even when tenants don’t have a deposit – all at no extra expense to the seller.

If that’s not possible, our plan B is to sell to incoming landlord who want to keep tenants in situ or to help tenants leave by offering practical and financial help to move so they sign a voluntary deed of surrender.

Because we work so hard to keep so many options open and provide an alternative way of selling that people will want to choose, we don’t believe you will get a higher price if you want to sell with tenants in situ.

Any company promising you more is hiding a huge list of costs that are going to come after the sale. That’s not the case with us. We are proudly transparent about everything we do and the offer you accept is the offer you will walk away with.

If you want to avoid the costs and risks of vacating your property before finding a buyer, we are the UK’s No.1 Tenanted-Sales Specialist and your best choice.

The second half of the year has a habit of disappearing. Before you know it, the children are back at school, autumn is here and Christmas is on the horizon.

So, if leaving the PRS is one of your goals, now is the time to get everything ready.

With so popular opinion that house prices will not grow over the next three years (and may even fall), there’s nothing to gain by waiting any longer for “the right moment”.

Contact Landlord Sales Agency now and we’ll help you prepare your strategy, prepare the listing and be ready to take advantage of the traditional increase in buyer activity straight after the summer holidays.

Let us get on with the prep while you get on with your holidays and your life.

(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://crm-api.property118.com";

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 Thinking of selling this summer? You’re not alone. appeared first on Property118.

View Full Article: Thinking of selling this summer? You’re not alone.

Jul
31

Serviced office company loses inheritance tax relief despite extensive services

Author admin    Category Uncategorized     Tags

Property118

Serviced office company loses inheritance tax relief despite extensive services

At first glance, the business considered by the Upper Tribunal in The Executors of Keith Denis Lewis Beresford v HMRC looked very different from an ordinary commercial letting operation. Four floors of a London office building were divided into serviced offices, customers received reception and telephone-answering support, offices could be reconfigured to suit their requirements, and additional facilities ranged from meeting rooms and server space to catering, postage and courier services. The serviced-office operation generated most of the company’s turnover and required considerably more day-to-day activity than simply granting a lease and collecting rent, yet the Tribunal concluded that the business was still mainly making or holding investments and therefore did not qualify for inheritance tax business property relief.

The judgment is important because it shows how far a property-based business can move beyond conventional letting without necessarily crossing the line from investment into a qualifying non-investment business. It also confirms that long working hours, substantial turnover, active management and a broad range of customer services are not decisive in themselves, because the Tribunal’s attention will eventually return to a more fundamental question: what, in commercial terms, were the customers principally paying to receive?

A substantial serviced-office operation

Mr Keith Beresford owned all the shares in Fiveteam Limited, which in turn owned Ninecourt Limited. Ninecourt’s principal asset was a six-floor commercial building at 16 High Holborn in London, acquired in 2008. From 2010, two floors covering approximately 11,000 square feet were let conventionally to commercial tenants, while the remaining four floors, covering approximately 21,000 square feet, were operated as serviced offices through Orega Management Limited, acting as Ninecourt’s agent. Following Mr Beresford’s death in September 2018, his executors claimed business property relief in respect of the value attributable to his shares, but HMRC determined that the relief was unavailable because Ninecourt’s business consisted wholly or mainly of making or holding investments.

The serviced-office arrangements were extensive rather than incidental. Orega advertised the offices, negotiated with prospective customers, collected payments, employed staff and managed the centre, while customers occupied identified offices accessed through secure key fobs. There were approximately 42 separate offices, generally occupied by between seven and 20 businesses at any one time, with the price usually calculated by reference to the size of the office and the number of workstations it could accommodate. Ninecourt retained the right to move customers between offices and could reposition partitions when different layouts were required, although the evidence showed that customers were not commonly moved once they had taken possession of an office.

Customers also received a package of standard services, including furnished accommodation, reception facilities, telephone answering, kitchens, cleaning, office equipment, heating, electricity and air conditioning. Other facilities, including meeting rooms, server space, telecoms, catering, secretarial assistance, postage, couriers and photocopying, were charged through separate contract service fees. In turnover terms, the serviced-office side of the operation was plainly significant, accounting for approximately 75% of Ninecourt’s turnover during the five-year period considered by the Tribunal and producing substantially more gross profit than the conventionally let floors in four of those five years.

Why business activity was not enough

The statutory issue arose under sections 104 and 105 of the Inheritance Tax Act 1984. Although unquoted company shares can constitute relevant business property, section 105(3) excludes shares where the company’s business consists wholly or mainly of dealing in land, buildings or securities, or of making or holding investments. The question was not whether Ninecourt carried on a business in the ordinary sense, because nobody disputed that it did, but whether the business, viewed as a whole, remained mainly an investment business despite the scale of the serviced-office activities.

The Upper Tribunal was careful not to create an automatic rule against businesses involving land. It confirmed that there is no legal presumption that every business exploiting property for profit must be treated as an investment business, and that the correct exercise is to examine the facts and place the business at the appropriate point on a broad spectrum. At one end sits the conventional property owner who grants occupation rights and receives income, while businesses such as hotels and shops lie towards the other end because the premises provide the setting in which a wider commercial service or trade is conducted. Between those two examples are numerous hybrid businesses in which property occupation and customer services are supplied together.

When carrying out that evaluation, factors such as the capital employed, the work undertaken by employees, the turnover and profits generated by the different activities, and the overall commercial context can all be relevant. The Tribunal nevertheless stressed that this is not a mechanical exercise in which whichever side wins the greatest number of factors also wins the case. The evidence must be considered in the round, with the importance given to each factor depending upon the nature of the particular business.

That distinction explains why the intensity of the operation did not settle the Beresford appeal. An investment can be actively managed without ceasing to be an investment, and much of the work undertaken in a property business may still relate to finding occupiers, negotiating agreements, collecting income, maintaining accommodation and preserving the value of the underlying asset. The volume of work may demonstrate that a business is substantial and professionally operated, but it does not necessarily reveal whether its essential character is investment or something else.

What were the customers really buying?

The decisive part of the case concerned the facility fee charged to serviced-office customers. The executors argued that customers were purchasing an integrated service package rather than paying for occupation of property, pointing to the reception facilities, communications services, office equipment, flexible terms and the ability to alter the accommodation. The agreements were expressed as licences rather than tenancies, denied customers any proprietary interest in the building and allowed Ninecourt to allocate a different office where necessary.

The First-tier Tribunal, whose factual findings were largely upheld on appeal, considered that the primary element of the transaction remained the customer’s use of an identified office. Individual room numbers appeared in customer agreements and invoices, secure fobs controlled access to the relevant areas, and pricing was closely related to the amount of floor space occupied or the number of workstations that the office could theoretically contain. Although Ninecourt could move customers, that did not happen frequently, and the commercial reality was that a customer normally acquired the use of a particular fitted-out room for the duration of the agreement.

The Upper Tribunal rejected the argument that an investment activity could arise only where a formal tenancy or proprietary right of occupation had been granted. The contractual label was not conclusive, nor was it necessary for customers to acquire an interest in the land comparable to a conventional lease. The substance of the arrangement was that they paid a periodic charge for the use of office space within the building, accompanied by a package of facilities and services, and the Tribunal was entitled to decide which part of that package predominated.

The considerable price difference between the serviced offices and the conventionally let floors did not alter that conclusion. The executors argued that the premium demonstrated the value of the services, but the Tribunal considered that the higher income also reflected the smaller areas available to individual customers, the shorter contractual commitments, the flexibility of the arrangements and the fact that the offices were already partitioned, decorated, furnished and ready to occupy. The premium therefore could not be attributed entirely to the additional services, particularly when a central part of the commercial attraction was the ability to obtain suitable office accommodation without accepting the cost and long-term obligations of a conventional lease.

The First-tier Tribunal got part of the analysis wrong

The executors did establish that the First-tier Tribunal had made an error of law when it classified the provision of heating, electricity and air conditioning as investment management activities. The Upper Tribunal drew a clear distinction between work carried out to maintain or enhance property as an investment and services supplied for the use and benefit of customers. Heating an office for its occupants, supplying electricity and providing air conditioning fell into the latter category, even though the cost was included within the facility fee rather than separately metered or invoiced.

This was more than a minor correction because the First-tier Tribunal had itself described the case as finely balanced, and the misclassification could have affected its decision about the nature of the facility fee. The Upper Tribunal therefore set aside the earlier decision and reconsidered the outcome for itself, taking account of the fact that the utilities were genuine non-investment services rather than aspects of managing the property.

The correction did not, however, change the result. Most of the activities associated with the facility fee could still properly be described as managing and providing the office accommodation, while the heating, electricity and air conditioning were not sufficiently important within the overall package to alter its commercial character. The separately charged contract services were accepted as trading activities, but the parties had agreed that the classification of the much larger facility fee would determine on which side of the statutory line the business fell.

Having reconsidered the facts, the Upper Tribunal decided that a reasonable businessperson would regard the facility fee as income from an investment because the predominant return was still being received for allowing customers to occupy offices within the building. Ninecourt’s business, considered as a whole, was therefore mainly one of making or holding investments, so the Tribunal confirmed HMRC’s determination and dismissed the executors’ appeal.

The uncomfortable lesson for property-based businesses

The judgment does not mean that every serviced-office company, holiday accommodation operator or other property-based enterprise must fail the business property relief test. The Upper Tribunal expressly rejected such a presumption, and every case will continue to depend upon the precise balance between the exploitation of the property and the provision of genuinely substantive services. The result nevertheless demonstrates how difficult it can be to show that services have overtaken occupation as the main commercial substance of the business.

Nor will the case necessarily be won by demonstrating that an operation employs staff, demands constant attention, charges considerably more than a conventional landlord or accounts for most of a company’s turnover and profits. Those facts all formed part of the executors’ case, but they could not displace the Tribunal’s conclusion that customers were still principally buying access to fitted-out office space on flexible terms.

The most revealing evidence in future disputes is therefore likely to concern the customer proposition itself: how prices are calculated, what customers genuinely value, how extensively the additional services are used, how much revenue and profit those services produce, and whether the property is merely the platform from which a wider service is delivered or remains the principal thing for which customers pay. Beresford confirms that the answer will not be found in the description attached to the business or the wording printed at the top of the customer agreement, but in the commercial substance of what is actually being supplied.

Cases such as this are a reminder that inheritance tax outcomes often turn on the detailed facts of the business rather than the label attached to it. For landlords with substantial portfolios, particularly those thinking about retirement, succession or passing wealth to the next generation, it is worth reviewing whether their present ownership and business arrangements still support their longer-term objectives.

A Property118 consultation provides an opportunity to step back from the day-to-day management of the portfolio, consider the commercial and family issues that matter most, and identify the areas where further tax or legal advice may be required.

Book a Property118 consultation

The post Serviced office company loses inheritance tax relief despite extensive services appeared first on Property118.

View Full Article: Serviced office company loses inheritance tax relief despite extensive services

Jul
31

Why is the Labour government gambling with tenants’ homes?

Author admin    Category Uncategorized     Tags

Property118

Why is the Labour government gambling with tenants’ homes?

Apparently, the Labour government can redesign the private rented sector, raise landlords’ taxes and remove a possession route used for decades without calculating what the whole package will cost.

That is not policymaking, it is gambling, except ministers are playing with other people’s homes.

Baroness Taylor of Stevenage has now admitted there was ‘no single assessment’ of the combined cost of the Renters’ Rights Act and planned tax increases.

The government assessed the individual measures, we are told, but never stood back and asked the obvious question: what happens when landlords are hit by all of them at once?

Any landlord could have answered it.

MPs without real-world experience

Now we have a cabinet without any real world or business experience who don’t understand that costs and risk rise.

That means that some rents will increase and landlord investment will fall.

It also means that landlord properties are sold, usually to an owner-occupier so they leave the PRS, and tenant selection becomes stricter.

Yet the same government that failed to examine the cumulative burden was happy to present landlords as the source of the housing crisis.

That becomes even harder to swallow when its own English Housing Survey shows that 63% of private tenancies ending in the previous year ended because renters wanted to move.

Only 14% ended because the landlord or agent asked them to leave, while 3% cited a landlord-imposed rent increase.

Section 21 was necessary

Where, then, was the epidemic of ruthless landlords casually throwing good tenants into the street?

Section 21 was never perfect, but the political slogan ‘no-fault eviction’ erased every circumstance behind its use.

A landlord selling, moving back into a property, dealing with serious disruption or reorganising student accommodation was placed in the same moral category as a criminal landlord.

Nobody appears to have asked landlords why notices were being served.

Again, we could have told them.

Tenants who don’t pay

Politicians still don’t understand that landlords do not generally want to evict reliable tenants who pay and look after their homes.

Empty properties produce no income, while changeovers bring costs, uncertainty and work.

We run a business and need to keep costs down.

The idea that landlords wake up eager to remove good occupants has always been nonsense.

The result is a government policy that has been designed around the exceptional case, with every landlord paying the final bill.

Landlord tax bills up

Its tax assessment says the administrative burden of the planned two percentage point property income tax rise will be negligible.

While filling in the tax return may not become much harder, paying the bill certainly will when the increase hits from April 2027.

A landlord who cannot fully offset finance costs, while facing higher interest rates, repairs, insurance, compliance bills and a higher tax rate, has limited choices.

Yes, that does mean increasing the rent, reducing investment or selling.

Ministers may dislike those choices, but their disapproval does not alter the real-world maths of being a landlord.

Tighter tenant screening

And who suffers when the landlord pool shrinks further? Not the wealthy professional with a spotless credit record and a large salary.

It will be the tenant on benefits, the family with limited savings, the applicant with an imperfect history and anyone else regarded as higher risk.

When homes are scarce, landlords do not stop selecting; they select more cautiously.

The loudest tenant campaigners shout about rights, which is fine since we are all entitled to an opinion.

But tenant rights written into legislation do not manufacture cheap to rent properties from thin air, pay for repairs or persuade somebody to risk their life savings.

Combined burden issue

The government has now admitted, too late to have an impact, that it did not assess the combined burden.

The scandal of what has happened to the private rented sector in 2026 is not that ministers failed to predict every consequence; it is that they apparently chose not to count them.

We still don’t have the court impact assessment for abolishing section 21.

We still don’t know what is coming down the line. Can we be sure the landlord database won’t infringe our right to privacy?

While ministers refuse to count the cost of what they have done, landlords and tenants are lumbered with the consequences.

Let’s face it, you can’t drive out landlords and then act surprised when tenants have nowhere to live. Or can you?

Until next time,

The Landlord Crusader

The post Why is the Labour government gambling with tenants’ homes? appeared first on Property118.

View Full Article: Why is the Labour government gambling with tenants’ homes?

Jul
31

Regional BTR schemes face viability squeeze

Author admin    Category Uncategorized     Tags

Property118

Regional BTR schemes face viability squeeze

Record investment in build to rent (BTR) is failing to translate evenly into new homes, with regional schemes increasingly struggling to remain financially viable.

Knight Frank says that just over 6,700 BTR homes have been completed so far in 2026.

Nearly half were delivered in London and Tier 1 cities such as Manchester and Birmingham.

Tier 2 cities, including Nottingham, Liverpool and Sheffield, accounted for 14% of completions.

Smaller towns and other regional locations delivered a further 14%.

Strong case for BTR

Nick Pleydell-Bouverie, the property consultancy’s head of residential investment, said: “The investment case for BTR remains incredibly strong.

“Demand for high-quality rental homes continues to outstrip supply in many markets, supporting strong occupancy levels and rental growth across the sector.

“We’re continuing to see a highly selective market, with a significant proportion of activity driven by a relatively small number of large transactions.”

He added: “The challenge now is ensuring that development opportunities can stack up financially so that much-needed new supply can be delivered.

“That’s where viability remains a key consideration for investors looking to deploy capital into the sector.”

Larger cities benefit

Knight Frank says projects outside the largest cities were facing pressure from rising costs and tighter development economics.

Some schemes now require grant funding, changes to Section 106 agreements or adjustments to affordable housing obligations before construction can proceed.

Completed BTR stock across the country has reached 166,359 homes, an increase of 17% compared with a year earlier.

Another 49,620 homes are under construction, while 125,639 are moving through the planning pipeline.

Viability pressures remain

Knight Frank said the pressure was particularly pronounced in regional markets, where higher development costs can be harder to absorb than in London or the largest cities.

Lizzie Breckner, the head of residential investment research, said: “While supply continues to increase overall, we’re seeing a growing divide between the largest cities, where schemes are still moving forward, and a number of regional markets where rising costs and tighter development economics are making it harder to bring forward new projects.

“Viability pressures remain, particularly across many regional locations, and are increasingly shaping where development can happen.

“As a result, multifamily delivery is likely to come under further pressure unless those challenges begin to ease.”

She added: “There are reasons to be optimistic. We’re starting to see improvements in parts of the planning process, particularly around Gateway 2 approvals, which should help improve certainty for developers.

“But there is still more to do if we want to unlock delivery at the scale required.”

Multifamily schemes dominate

Apartment-led multifamily schemes remain the largest part of that pipeline, making up 71% of homes currently being built.

Single-family housing now accounts for a quarter of construction, as investors and developers expand beyond city-centre apartment blocks.

Investment reached £2.08 billion during the second quarter, the highest quarterly figure recorded by Knight Frank.

However, the total was driven by a small number of major transactions.

Sales of completed and operating developments accounted for 29% of deals.

Forward funding and forward commitment agreements made up the remaining 71%.

The post Regional BTR schemes face viability squeeze appeared first on Property118.

View Full Article: Regional BTR schemes face viability squeeze

Jul
30

Bank of England split as three policymakers push for rate hike

Author admin    Category Uncategorized     Tags

Property118

Bank of England split as three policymakers push for rate hike

In a divided vote, the Bank of England has held interest rates at 3.75%.

The Monetary Policy Committee (MPC) narrowly voted 6-3 to keep the Bank Rate unchanged.

Three members voted to increase the Bank Rate by 0.25 percentage points, to 4%.

Energy prices have remained volatile

The MPC said of its decision: “In response to events in the Middle East, crude and refined energy prices have remained volatile and higher than pre-conflict. The impact of the energy shock on the UK economy remains uncertain.

“CPI inflation has fallen to 2.6% since the previous meeting, although it is expected to rise later this year as the effects of higher energy prices continue to pass through. The risk of material second-round effects in price and wage-setting, against which policy needs to lean, is greater the longer higher energy prices persist.

“There is little evidence so far to suggest such effects, and there have continued to be clear signs of underlying disinflation in recent data.”

Industry reaction

Samuel Fuller, director at Financial Markets Online, said: “The Bank of England’s hawks are doubling down. Three members of the Committee voted for an immediate increase in interest rates, one more than did so in June.

“Their militancy is reflected in the Committee’s minutes, which talk tough about the Bank’s willingness to act decisively to cool inflation.

“While CPI has come in under expectation for three months in a row, and sank back to a 15-month low in June, the Bank is on alert in case the energy shock drives secondary inflation.

“In recent weeks, markets had begun to predict that the Bank would be content to leave interest rates unchanged for the rest of the year.

“That bet may now change as the Bank’s minutes suggest it has refined its stance from ‘watch and wait’ to ‘watch and wait with a big stick’.

“While this means no immediate change for savers, we’re likely to see mortgage interest rates tick back up in coming weeks. With America’s on-off war with Iran now into its sixth month, continued volatility and lingering inflationary pressure have tipped the Bank into more hawkish territory and UK equities and mortgage borrowers could be the biggest losers.”

Nathan Emerson, CEO at Propertymark, said: “By holding interest rates, the Bank of England has opted for a measured approach as inflation remains above its 2 per cent target. While price pressures have eased in recent months, today’s decision reflects the need to ensure inflation continues moving in the right direction before further policy changes are considered.

“A stable base rate provides greater certainty for the housing market. It gives lenders more confidence to continue offering competitive mortgage products while allowing buyers to make informed financial decisions. Savers also continue to benefit from relatively attractive returns on savings, helping some prospective homeowners build towards a deposit.

“However, inflationary pressures have not disappeared. Higher household costs, including July’s increase in the energy price cap, alongside ongoing uncertainty in global energy markets, mean the Bank of England is likely to continue taking a cautious, data-led approach over the coming months.”

Hina Bhudia, Partner, Knight Frank Finance, said: “The MPC has turned a little more hawkish since the previous meeting, with three members voting to raise the base rate, which is unsurprising given the escalation of hostilities in the Middle East. Mortgage lenders have already repriced higher to account for this, so borrowers should enjoy some stability in the short term.

“That said, the outlook for mortgage rates over the coming months remains highly uncertain. Much will depend on developments in the Middle East and whether higher energy prices feed through into broader inflation at a time when demand across the economy remains relatively subdued. Many lenders are behind their targets for the year and will pass on to borrowers any reduction in funding costs as soon as they can.”

Colleen Babcock, property expert at Rightmove said: “There’s stability for now as the Bank of England holds its Base Rate as widely expected. We’ve seen average mortgage rates increase over the last few weeks as geopolitical tensions have escalated, and the average two-year fixed rate is currently coming it at 5.11%.

“For broader context, this is up from 4.25% before the war in Iran started, but down from around 5.43% at the peak of tensions in April. For home-movers, rates remain elevated which continues to stretch affordability. However, while rates are high, they’re also relatively steady, which helps movers to plan and make decisions.

“Even relatively small changes in mortgage rates can have a noticeable impact on monthly repayments, particularly for first-time buyers, so any downwards movement in rates during the second half of this year would be very welcome.”

The post Bank of England split as three policymakers push for rate hike appeared first on Property118.

View Full Article: Bank of England split as three policymakers push for rate hike

Jul
30

Government admits no assessment of burden facing landlords

Author admin    Category Uncategorized     Tags

Property118

Government admits no assessment of burden facing landlords

The government has confirmed it carried out no assessment of the combined impact of landlord tax hikes and Renters’ Rights Act reforms.

In a written parliamentary answer, Baroness Taylor of Stevenage said the government had made “no single assessment” of the cumulative costs landlords will face from the Renters’ Rights Act alongside planned tax changes.

No single assessment

In a written parliamentary question, Lord Truscott asked: “What assessment the government have made of the combined cost of new regulatory measures under the Renters’ Rights Act in addition to proposed tax increases for the average landlord”.

Baroness Taylor of Stevenage said: “My department has made no single assessment covering the combined cost of the measures in the Renters’ Rights Act and proposed tax increases.

“Last year’s Budget, the government announced a 2ppt increase to the rate of property income to be introduced from April 2027. This is to help narrow the gap between taxes paid on work and paid on income from assets. An assessment of this policy was published in a Tax Information and Impact Note.”

In the impact notice, it claims the 2ppt increase would be “negligible”.

It said: “By 2029 to 2030, 2.4 million landlords (6% of taxpayers in 2029 to 2030) will face an increase in tax as a result of this measure. Administratively, this measure will affect individuals (including partners in partnerships) with profits from property rental income. It is anticipated that both the one-off and ongoing administrative burdens for these individuals will be negligible.”

Hit renters and landlords

However, industry figures have previously warned that the combined impact of rising taxation and increased regulation could push more landlords to exit the private rented sector.

Jonathan Stinton, head of mortgage relations at Coventry Building Society, said: “Hiking property income tax won’t just hit landlords, it will hit renters in the pocket too. When the cost of being a landlord rises, those pressures almost always find their way into monthly rents, meaning those who don’t own a home pay the price.

“A similar rise to tax on dividends means the cost will also go up for landlords who hold their property in a limited company.

“The more landlords are taxed the less appealing it is to let a property, which could lead to fewer landlords and reduced choice for landlords. The simple but powerful forces of supply and demand would then push rents higher, making it much more difficult to rent a home. First-time buyers who are trying to save a deposit while renting could especially struggle and worry that their homeownership dreams are pushed even further out of sight.”

Sam Humphreys, head of M&A at Dwelly, said: “The rise in property income and dividends tax presents all types of landlords with yet another obstacle to adapt to at a time when they are already absorbing significant operational changes under the Renter’s Rights Act.”

 

The post Government admits no assessment of burden facing landlords appeared first on Property118.

View Full Article: Government admits no assessment of burden facing landlords

Jul
30

Final warning for landlords as possession deadline looms

Author admin    Category Uncategorized     Tags

Property118

Final warning for landlords as possession deadline looms

Landlords only have until tomorrow (31 July) to apply for court possession under Section 21 or older Section 8 notices.

When the Renters’ Rights Act came into force in May, fixed-term tenancies were abolished, and all existing Assured Shorthold Tenancies (ASTs) automatically became Assured Periodic Tenancies (APTs).

However, landlords already in the possession process could still rely on valid Section 21 or Section 8 notices served before 1 May, provided they applied to court by 31 July.

Industry bodies have urged landlords to act now, with one expert warning capacity pressures are “unlike anything seen” as landlords rush to meet the deadline.

Hard deadline with very real consequences

Paul Shamplina, founder of Landlord Action, told Property118: “The final 31 July deadline is now upon us and, for landlords whose existing notice remains valid until that date, it is a hard deadline with very real consequences.

“I have been on the phone constantly, and the capacity pressures and volume of work we are experiencing are unlike anything I have seen since starting Landlord Action.

“We have been warning landlords about this date for months, but the last-minute panic is very apparent. It is not enough simply to have served a notice or contacted a solicitor. The possession claim must be started in time, and before that can happen we need to review the paperwork and regulatory documents to ensure everything is compliant.

“Where landlords have prepared notices themselves, we frequently find missing documents or other problems that could cause the claim to fail in court.

“The pressure has become so intense that, wherever possible, we are arranging for completed claims to be hand-delivered to the courts so we know they have been received.”

Unintended consequences

Mr Shamplina warns that landlords who have left it too late will lose the opportunity to rely on their existing notice.

He explains: “Those seeking to sell may then have to begin again under the new Section 8 process using Ground 1A, subject to the relevant conditions and notice period.

“One of the unintended consequences is that some landlords who might otherwise have allowed a tenancy to continue have acted now because they feared losing the ability to recover their property.

“That means tenants are being asked to leave earlier than they might have been, which risks adding further pressure to already stretched temporary and social housing services. That is the opposite of the greater security the reforms were intended to provide.”

Industry reaction

A spokesperson for the National Residential Landlords Association (NRLA), warned landlords they will have to start possession proceedings again if they miss the deadline.

The spokesperson told Property118: “As many will already know, Section 21 had an accelerated possession procedure which allowed judges to base their decisions on the paperwork alone, a system that did not require a court date.

“If a landlord issued a valid Section 21 notice before 1 May 2026, they may still apply to the court for a possession order before 31 July 2026, provided it is no more than six months after service of the notice.

“It is crucial to note that if these deadlines are missed, the Section 21 notice will expire and landlords will need to start possession proceedings again under the new regulations.

“We expect these changes to have a significant impact on court wait times, with an already overloaded court system set to experience further delays due to an upsurge in the number of Section 8 court hearings brought before the courts.”

Kim Lidbury, president of ARLA Propertymark (Association of Residential Letting Agents), explains it’s important for letting agents to help landlords with the upcoming deadline.

She said: “The 31 July deadline is an important date for landlords who served a valid Section 21 or relevant Section 8 notice before the Renters’ Rights Act came into force. To rely on the previous possession process, landlords must have submitted their possession claim to the court by this date.

“Missing the deadline could mean landlords are required to pursue possession under the new legislative framework instead, which introduces different grounds, processes and requirements. This could result in additional delays, costs and uncertainty.

“Landlords who are affected should act without delay. Letting agents have a vital role to play in helping landlords understand the transitional arrangements, ensuring the correct documentation has been submitted, and providing professional advice to help clients navigate the new legal framework with confidence.

“As the sector adapts to these significant reforms, professional agents will be key to supporting compliance while helping landlords continue to provide high-quality homes for tenants.”

The post Final warning for landlords as possession deadline looms appeared first on Property118.

View Full Article: Final warning for landlords as possession deadline looms

Jul
29

Realising gains before CGT changes: the new reason landlords are selling

Author admin    Category Uncategorized     Tags

Property118

Realising gains before CGT changes: the new reason landlords are selling

Ask landlords why they are selling, and the answer used to be regulation. This quarter, the survey tells a different story. The strongest pull towards the exit is now financial, and Capital Gains Tax is right at the top of it.

For Q2, the Property118 Landlord Sentiment Survey expanded its question on why landlords sell, asking them to rank six potential triggers rather than three. The results reorder the usual assumptions about what is driving disposals.

Two financial factors sit clearly at the top, and they are effectively tied. Higher interest rates scored 4.14. The desire to realise gains before any change to Capital Gains Tax scored 4.13. The regulatory pressures of the Renters’ Reform agenda and new EPC rules formed a middle tier. Circumstantial triggers, such as tenants moving out, ranked lowest.

The Budget speculation is already doing its work

The significance of that near-tie should not be missed. It means the anticipation of a tax change is now as powerful a motivation to sell as the very real, here-and-now cost of borrowing.

Capital Gains Tax has been the subject of persistent speculation ahead of successive fiscal events. For a landlord sitting on years of accrued gains, the calculation is uncomfortable but simple: if the rate might rise, there is an incentive to sell now and bank the gain at today’s rate rather than risk paying more later.

Whether or not any change materialises, the speculation itself is pulling sales forward. That is a lesson in how tax uncertainty, quite apart from tax policy, shapes behaviour in the real economy.

Refinancing pressure is building underneath

The interest-rate half of the equation is intensifying too. The share of landlords expecting to remortgage within the next twelve months rose to 34.2% in Q2, up from 31.6% in Q1. This question is directly comparable between the two quarters, so the increase is a genuine shift.

For many, this is not borrowing to expand. It is fixed-rate deals reaching maturity and rolling onto materially higher costs. With rates still well above pre-2022 levels, that rising cohort faces a squeeze on returns, and for those least able to absorb it, refinancing can be the moment the decision to sell is finally made.

What it means for landlords weighing their options

None of this is advice to sell, and every landlord’s position is different. But the survey makes the backdrop clear. The financial case, the cost of borrowing and the tax position on disposal, is now doing as much to drive landlords towards the exit as regulation ever did.

For those considering their next move, the practical questions are worth thinking through carefully and, where the sums are significant, with professional advice: how exposed is the portfolio to remortgaging over the next year, what the CGT position looks like today, and how much of any decision is being driven by speculation rather than certainty. The one thing the data suggests is that these conversations are already happening, in large numbers, around kitchen tables across the country.

Visit Survey Results Page

Get clarity on the next step for your property business

A private consultation designed to help you understand your options, sense-check your direction and agree practical next steps based on your circumstances and objectives.

BOOK YOUR CONSULTATION TODAY

1. Property business details


— Select —2026/272027/28
— Select —Use a percentage of gross rentEnter an annual amount
— Select —Retain all post-tax profit in the companyExtract all post-tax profit as dividendsExtract a percentage as dividends
— Select —YesNo

— Select —YesNo

Get your free PDF report


(function(){
var uid = “crm-form-263729fd”;
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":"29a6d2dd-1824-4d07-ae3f-5e14607d1599","type":"number","label":"Gross annual rent"}];
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://crm-api.property118.com";

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/’ + “ffff0ec7-9df5-4d37-9e93-d9bb0b6b64fc” + ‘/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’, “ffff0ec7-9df5-4d37-9e93-d9bb0b6b64fc”);
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 } ) );
} );
}
} );
})();

.p118-crm-form{–navy:#0b3d66;–pale:#f5f8fb;–line:#cfd9e3;–muted:#5b6775;max-width:980px;margin:24px auto;font-family:Arial,Helvetica,sans-serif;color:#1f2937}
.p118-crm-form .crm-field{margin-bottom:14px}
.p118-crm-form label{display:block;font-weight:700;color:var(–navy);margin-bottom:6px}
.p118-crm-form input[type=”number”],.p118-crm-form input[type=”text”],.p118-crm-form input[type=”email”],.p118-crm-form select{width:100%;min-height:44px;border:1px solid #aebdca;border-radius:7px;padding:10px 11px;background:#fff;font-size:16px;color:#1f2937;box-sizing:border-box}
.p118-crm-form input:focus,.p118-crm-form select:focus,.p118-crm-form button:focus{outline:3px solid rgba(21,93,145,.24);outline-offset:1px}
/* section headings */
.p118-crm-form .crm-section,.p118-crm-form h2,.p118-crm-form h3{color:var(–navy);font-size:20px;margin:22px 0 6px;padding-top:10px;border-top:1px solid var(–line)}
/* shareholder repeater rows as cards */
.p118-crm-form .crm-repeater-field>label{font-size:20px;border-top:1px solid var(–line);padding-top:10px;margin-top:22px}
.p118-crm-form .crm-repeater-rows{counter-reset:p118sh}
.p118-crm-form .crm-repeater-row{counter-increment:p118sh;position:relative;border:1px solid #b9c7d3;border-radius:10px;padding:52px 16px 16px;margin-top:12px;background:#fbfdff}
.p118-crm-form .crm-repeater-row::before{content:”Shareholder ” counter(p118sh);position:absolute;top:15px;left:16px;font-size:18px;font-weight:700;color:var(–navy)}
.p118-crm-form .crm-repeater-row-fields{display:grid;grid-template-columns:1fr;gap:12px}
.p118-crm-form .p118-btl-calc-btn{appearance:none;border:0;border-radius:8px;padding:13px 20px;font-size:16px;font-weight:700;cursor:pointer;background:var(–navy);color:#fff;margin:12px 0}
.p118-crm-form .crm-repeater-row .crm-field{margin-bottom:0}
.p118-crm-form .crm-repeater-row-fields input:not([type=”checkbox”]),.p118-crm-form .crm-repeater-row-fields select{width:100%;box-sizing:border-box}
/* single-checkbox booleans (salary optimisation, dividends, pension, non-resident toggles) */
.p118-crm-form .crm-repeater-row-fields .crm-choices label{display:flex;gap:9px;align-items:center;font-weight:400;min-height:44px;margin:0;cursor:pointer}
.p118-crm-form .crm-repeater-row-fields .crm-choices input[type=”checkbox”]{width:18px;height:18px;min-height:0;flex:0 0 auto;margin:0}
.p118-crm-form .crm-repeater-remove{position:absolute;top:12px;right:12px;background:#fff;color:#9f1239;border:1px solid #e6a6b8;border-radius:8px;padding:6px 10px;font-size:13px;font-weight:700;cursor:pointer}
.p118-crm-form .crm-repeater-add,.p118-crm-form button[type=”submit”]{appearance:none;border:0;border-radius:8px;padding:12px 17px;font-size:16px;font-weight:700;cursor:pointer}
.p118-crm-form .crm-repeater-add{background:#e6eef5;color:var(–navy);border:1px solid #b9cad9;margin-top:12px}
.p118-crm-form button[type=”submit”]{background:var(–navy);color:#fff}
/* consent + submit area */
.p118-crm-form .crm-consent-label{font-weight:400;display:flex;gap:8px;align-items:flex-start}
/* results */
.p118-btl-results{margin-top:20px}
.p118-btl-hint{background:var(–pale);border:1px dashed var(–line);border-radius:10px;padding:16px;color:var(–muted);font-size:15px}
.p118-btl-out{border:2px solid var(–navy);border-radius:12px;background:var(–pale);padding:18px}
.p118-btl-headline{font-weight:700;font-size:18px;margin:0 0 14px}
.p118-btl-headline.p118-pos{color:#17633a}
.p118-btl-headline.p118-neg{color:#9f1239}
.p118-btl-tablewrap{overflow-x:auto;margin-top:12px}
.p118-btl-table{width:100%;border-collapse:collapse;background:#fff;font-size:14px;min-width:640px}
.p118-btl-table th,.p118-btl-table td{border:1px solid #d6e0e8;padding:9px 10px;vertical-align:top}
.p118-btl-table th{background:var(–navy);color:#fff;text-align:left}
.p118-btl-table td+td{text-align:right;white-space:nowrap}
.p118-btl-table tr:nth-child(even) td{background:#f8fafc}
.p118-btl-table tr.p118-btl-strong td{font-weight:700}
.p118-btl-table td.p118-btl-net{text-align:right;white-space:nowrap}
/* summary cards */
.p118-btl-summary{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:12px;margin:14px 0}
.p118-btl-card{background:#fff;border:1px solid var(–line);border-radius:10px;padding:15px;display:flex;flex-direction:column}
.p118-btl-cardlabel{display:block;color:var(–muted);font-size:13px;margin-bottom:7px}
/* margin-top:auto pins the value to the bottom of each (equal-height) card, so
all three values line up even when a label wraps to two lines */
.p118-btl-value{font-size:24px;font-weight:700;color:var(–navy);margin-top:auto}
.p118-btl-value.p118-pos{color:#17633a}
.p118-btl-value.p118-neg{color:#9f1239}
@media(max-width:760px){.p118-btl-summary{grid-template-columns:1fr}}
/* figures-used recap + warning notes */
.p118-btl-figures{background:#fff;border:1px solid var(–line);border-radius:10px;padding:15px;margin-top:15px}
.p118-btl-figures p{margin:6px 0 0;line-height:1.5}
.p118-btl-warning{background:#fff8e6;border:1px solid #e8cc80;border-radius:9px;padding:12px;margin-top:14px;font-size:14px;line-height:1.5}
/* “Estimated result” heading (override the section-heading border-top) */
.p118-btl-out .p118-btl-resulttitle{border-top:0;padding-top:0;margin:0 0 10px;color:var(–navy);font-size:21px}
/* static disclaimer notes, always visible below the form */
.p118-btl-notes{margin-top:18px}
.p118-btl-note{font-size:12px;color:var(–muted);line-height:1.5;margin-top:14px}
/* title + intro at the top (matches the standalone calculator) */
.p118-btl-header{margin-bottom:8px}
.p118-btl-title{color:var(–navy);font-size:28px;line-height:1.2;margin:0 0 10px}
.p118-btl-intro{line-height:1.55;margin:0 0 6px;color:#1f2937}

(function(){
‘use strict';

// ── Field ids (must match the seeded BTL Calculator form) ──────────────────
var F = {
year:’8ca5faab-7fd0-4263-ab16-c28cac2a33dd’,
rent:’29a6d2dd-1824-4d07-ae3f-5e14607d1599′,
interest:’a4cb8069-1050-4ccd-951f-d5aa4dea1cee’,
costMode:’3decd8c1-e458-4085-bb5c-fab26e71432b’,
costPct:’b6bf5767-e12f-4c46-aec2-06a7eba263f3′,
costAmt:’e9cb6264-8168-4b6d-81ff-c4ed51212e4f’,
associated:’aaa3b1a0-7c1d-4e01-aa7b-069a6335ff7d’,
extraction:’fdce52bf-c76f-449c-a63b-bce9e7906c6b’,
extractionPct:’8bd621d8-8eef-4114-9db9-d0f5f7c17963′,
shareholders:’c441faed-5bf9-4290-9335-37c9aba50a40′,
shName:’fe7f6621-acd1-42b9-b4fc-37ca29cbaf1a’,
shShare:’9df50ba8-ff5a-454a-9748-4bb9cb45f5c8′,
shResident:’e5601232-087b-4db0-8d4a-4b4a91cbbeb3′,
shOtherIncome:’3843a208-bb92-4b89-be11-9bd3088b57e9′,
shOtherDiv:’5609d332-3866-48ea-9ca1-4eb519005d46′,
shOptimise:’bce9079f-806e-4f61-b9ec-ea9591cd448f’,
shDividends:’b2b09c3b-0ef8-4ec5-8c29-686d2db85d8a’,
shPension:’5e6320c4-fd4b-4a97-93a0-f9048581c39a’,
// non-UK-resident only (shown when “UK tax resident?” = No)
shEntitledPa:’7c1de2f0-11aa-4b22-9c33-a1b2c3d40001′,
shApplyDivTax:’7c1de2f0-11aa-4b22-9c33-a1b2c3d40002′,
shApplySalaryTax:’7c1de2f0-11aa-4b22-9c33-a1b2c3d40003′,
name:’df54eedb-ec85-410c-b865-c14e5d5983c6′,
reportData:’c8e98065-9275-4fd9-9bbe-607e5eb8e588′
};

var repeater = document.querySelector(‘.crm-repeater[data-repeater-id=”‘ + F.shareholders + ‘”]’);
var mount = document.querySelector(‘.p118-btl-results’);
var reportField = document.querySelector(‘[name=”‘ + F.reportData + ‘”]’);
if (!repeater || !mount) { return; }
var form = repeater.closest(‘form’) || document;

// ── helpers to read the native fields ──────────────────────────────────────
function el(id){ return form.querySelector(‘[name=”‘ + id + ‘”]’); }
function val(id){ var e = el(id); return e ? e.value : ”; }
function num(id){ var v = parseFloat(val(id)); return isFinite(v) ? v : 0; }
function entered(id){ var e = el(id); return !!e && String(e.value).trim() !== ”; }
// read a sub-field inside a given repeater row by its child field id
function rowEl(row, childId){ var w = row.querySelector(‘[data-field-id=”‘ + childId + ‘”]’); return w ? w.querySelector(‘input,select,textarea’) : null; }
function rowVal(row, childId){ var e = rowEl(row, childId); return e ? e.value : ”; }
function rowNum(row, childId){ var v = parseFloat(rowVal(row, childId)); return isFinite(v) ? v : 0; }
function rowYes(row, childId, dflt){ var e = rowEl(row, childId); if (!e) return dflt; if (e.type === ‘checkbox’) return !!e.checked; return e.value === ‘yes'; }

function money(v){ return new Intl.NumberFormat(‘en-GB’,{style:’currency’,currency:’GBP’,maximumFractionDigits:0}).format(isFinite(v)?v:0); }
function percent(v){ return (isFinite(v)?v:0).toFixed(1).replace(‘.0′,”) + ‘%'; }
function escapeHtml(v){ return String(v||”).replace(/[&'”]/g,function(ch){return {‘&':’&’,”:’>’,”‘”:’'’,'”‘:’"’}[ch];}); }

// ── TAX ENGINE (unchanged — same maths as the standalone calculator) ───────
var TAX = {
‘2026’:{pa:12570,basicBand:37700,additionalThreshold:125140,generalRates:[0.20,0.40,0.45],propertyRates:[0.20,0.40,0.45],dividendRates:[0.1075,0.3575,0.3935],dividendAllowance:500,section24Rate:0.20,employeePT:12570,employeeUEL:50270,employeeMain:0.08,employeeUpper:0.02,employerST:5000,employerRate:0.15,ctLowerLimit:50000,ctUpperLimit:250000,ctSmallRate:0.19,ctMainRate:0.25,ctMarginalFraction:0.015},
‘2027’:{pa:12570,basicBand:37700,additionalThreshold:125140,generalRates:[0.20,0.40,0.45],propertyRates:[0.22,0.42,0.47],dividendRates:[0.1075,0.3575,0.3935],dividendAllowance:500,section24Rate:0.22,employeePT:12570,employeeUEL:50270,employeeMain:0.08,employeeUpper:0.02,employerST:5000,employerRate:0.15,ctLowerLimit:50000,ctUpperLimit:250000,ctSmallRate:0.19,ctMainRate:0.25,ctMarginalFraction:0.015}
};
function personalAllowance(ani,eligible,tax){ if(!eligible){return 0;} return Math.max(0,tax.pa-Math.max(0,ani-100000)/2); }
function allocateTax(amount,occupied,rates,zeroRateAllowance,tax){
amount=Math.max(0,amount);occupied=Math.max(0,occupied);zeroRateAllowance=Math.max(0,zeroRateAllowance||0);
var basicAvailable=Math.max(0,tax.basicBand-Math.min(occupied,tax.basicBand));
var basic=Math.min(amount,basicAvailable);var remaining=amount-basic;occupied+=basic;
var higherAvailable=Math.max(0,tax.additionalThreshold-Math.max(occupied,tax.basicBand));
var higher=Math.min(remaining,higherAvailable);remaining-=higher;var additional=Math.max(0,remaining);
var slices=[basic,higher,additional];var totalTax=0;
for(var i=0;i<3;i++){var free=Math.min(slices[i],zeroRateAllowance);zeroRateAllowance-=free;totalTax+=(slices[i]-free)*rates[i];}
return {tax:totalTax,occupied:occupied+higher+additional,slices:slices};
}
function computeIncomeTax(input,tax){
var other=Math.max(0,input.other||0),property=Math.max(0,input.property||0),dividends=Math.max(0,input.dividends||0);
if(input.applyDividendTax===false){dividends=0;}
var ani=other+property+dividends;var allowance=personalAllowance(ani,input.personalAllowance!==false,tax);var remainingPA=allowance;
var otherTaxable=Math.max(0,other-remainingPA);remainingPA=Math.max(0,remainingPA-other);
var propertyTaxable=Math.max(0,property-remainingPA);remainingPA=Math.max(0,remainingPA-property);
var dividendTaxable=Math.max(0,dividends-remainingPA);var occupied=0,total=0;
var a=allocateTax(otherTaxable,occupied,tax.generalRates,0,tax);total+=a.tax;occupied=a.occupied;
var b=allocateTax(propertyTaxable,occupied,tax.propertyRates,0,tax);total+=b.tax;occupied=b.occupied;
var c=allocateTax(dividendTaxable,occupied,tax.dividendRates,tax.dividendAllowance,tax);total+=c.tax;occupied=c.occupied;
return {tax:total,allowance:allowance,ani:ani,taxable:occupied};
}
function employeeNIC(salary,tax,statePensionAge,apply){ if(!apply||statePensionAge||salary<=tax.employeePT){return 0;} return Math.max(0,Math.min(salary,tax.employeeUEL)-tax.employeePT)*tax.employeeMain+Math.max(0,salary-tax.employeeUEL)*tax.employeeUpper; }
function employerNIC(salary,tax,apply){ if(!apply||salary<=tax.employerST){return 0;} return (salary-tax.employerST)*tax.employerRate; }
function corporationTax(profit,associated,tax){ if(profit<=0){return 0;} var divisor=associated+1,lower=tax.ctLowerLimit/divisor,upper=tax.ctUpperLimit/divisor; if(profit=upper){return profit*tax.ctMainRate;} return profit*tax.ctMainRate-(upper-profit)*tax.ctMarginalFraction; }
function personalScenario(state,shareholders){
var tax=TAX[state.year];var propertyProfitBeforeInterest=state.rent-state.costs;var totalTax=0,totalCredit=0,totalCash=state.rent-state.costs-state.interest;var rows=[];
shareholders.forEach(function(s){
var propertyProfit=Math.max(0,propertyProfitBeforeInterest*s.share);var interest=state.interest*s.share;
var base=computeIncomeTax({other:s.otherIncome,property:0,dividends:s.otherDividends,personalAllowance:s.personalAllowance,applyDividendTax:s.applyDividendTax},tax);
var full=computeIncomeTax({other:s.otherIncome,property:propertyProfit,dividends:s.otherDividends,personalAllowance:s.personalAllowance,applyDividendTax:s.applyDividendTax},tax);
var adjustedAboveAllowance=Math.max(0,full.ani-full.allowance);var creditBase=Math.min(interest,propertyProfit,adjustedAboveAllowance);
var credit=Math.max(0,creditBase*tax.section24Rate);var incremental=Math.max(0,full.tax-credit-base.tax);
totalTax+=incremental;totalCredit+=credit;
});
return {tax:totalTax,credit:totalCredit,cashAfterTax:totalCash-totalTax,combinedWealth:totalCash-totalTax};
}
function dividendAllocations(dividendPool,shareholders){
var participants=shareholders.filter(function(s){return s.receivesDividends;});var participatingShares=participants.reduce(function(sum,s){return sum+s.share;},0);var result={};
shareholders.forEach(function(s){result[s.index]=0;});if(dividendPool<=0||participatingShares<=0){return result;}
participants.forEach(function(s){result[s.index]=dividendPool*(s.share/participatingShares);});return result;
}
function companyScenario(state,shareholders,salaries){
var tax=TAX[state.year];var operatingProfit=state.rent-state.costs-state.interest;var employerNi=0,totalSalary=0;
shareholders.forEach(function(s,i){var salary=Math.max(0,salaries[i]||0);totalSalary+=salary;employerNi+=employerNIC(salary,tax,s.applySalaryTax);});
var preCT=operatingProfit-totalSalary-employerNi;if(preCT0){return null;}
var ct=corporationTax(preCT,state.associated,tax);var postCT=preCT-ct;var dividendPool=Math.max(0,postCT)*state.extractionPct;
var dividendByShareholder=dividendAllocations(dividendPool,shareholders);var personalTax=0,employeeNi=0,netCash=0,rows=[];
shareholders.forEach(function(s,i){
var salary=Math.max(0,salaries[i]||0);var dividend=dividendByShareholder[s.index]||0;
var base=computeIncomeTax({other:s.otherIncome,property:0,dividends:s.otherDividends,personalAllowance:s.personalAllowance,applyDividendTax:s.applyDividendTax},tax);
var taxableSalary=s.applySalaryTax?salary:0;
var full=computeIncomeTax({other:s.otherIncome+taxableSalary,property:0,dividends:s.otherDividends+dividend,personalAllowance:s.personalAllowance,applyDividendTax:s.applyDividendTax},tax);
var incomeTax=Math.max(0,full.tax-base.tax);var eni=employeeNIC(salary,tax,s.statePensionAge,s.applySalaryTax);
personalTax+=incomeTax;employeeNi+=eni;netCash+=salary+dividend-incomeTax-eni;
rows.push({name:s.name,resident:s.resident,salary:salary,dividend:dividend,incomeTax:incomeTax,employeeNi:eni,net:salary+dividend-incomeTax-eni});
});
var retained=postCT-dividendPool;var combinedWealth=retained+netCash;
return {operatingProfit:operatingProfit,employerNi:employerNi,employeeNi:employeeNi,ct:ct,dividendPool:dividendPool,personalTax:personalTax,retained:retained,combinedWealth:combinedWealth,rows:rows};
}
function salaryOptimisationLimit(s,state,tax){ if(!s.optimiseSalary||!s.personalAllowance){return 0;} var dividendsForAllowance=s.applyDividendTax?s.otherDividends:0;var allowance=personalAllowance(s.otherIncome+dividendsForAllowance,true,tax);var unusedAllowance=Math.max(0,allowance-s.otherIncome);var companyCashProfit=Math.max(0,state.rent-state.costs-state.interest);return Math.min(unusedAllowance,companyCashProfit); }
function candidateSalaries(s,state,tax){ var limit=salaryOptimisationLimit(s,state,tax);if(limit<=0){return [0];}var values=[0,Math.min(limit,tax.employerST),Math.min(limit,tax.employeePT),limit];var step=limit<=5000?50:100;for(var x=0;x<=limit;x+=step){values.push(x);}var unique={};values.forEach(function(v){v=Math.max(0,Math.min(limit,Math.round(v/10)*10));unique[v]=true;});return Object.keys(unique).map(Number).sort(function(a,b){return a-b;}); }
function optimiseSalaries(state,shareholders){
var tax=TAX[state.year];var salaries=shareholders.map(function(){return 0;});var best=companyScenario(state,shareholders,salaries);if(!best){return null;}
for(var pass=0;pass<8;pass++){var changed=false;
for(var i=0;ilocalBest.combinedWealth+0.01){localBest=result;localSalary=candidate;}});
if(localSalary!==salaries[i]){salaries[i]=localSalary;best=localBest;changed=true;}}
if(!changed){break;}}
for(var j=0;j<shareholders.length;j++){if(!shareholders[j].optimiseSalary){continue;}var current=salaries[j],limit=salaryOptimisationLimit(shareholders[j],state,tax);
for(var c2=Math.max(0,current-500);c2best.combinedWealth+0.01){best=result;salaries=trial;}}}
return best;
}

// ── read the form ──────────────────────────────────────────────────────────
function getState(){
var costMode=val(F.costMode)||’percent';var rent=num(F.rent);
var costs=costMode===’amount’?num(F.costAmt):rent*(num(F.costPct)/100);
var extractionMode=val(F.extraction)||’retain';
var extractionPct=extractionMode===’retain’?0:(extractionMode===’all’?1:num(F.extractionPct)/100);
return {year:val(F.year)||’2026′,rent:rent,interest:num(F.interest),costs:costs,associated:Math.max(0,Math.floor(num(F.associated))),extractionMode:extractionMode,extractionPct:Math.max(0,Math.min(1,extractionPct))};
}
function getShareholders(){
var rows=repeater.querySelectorAll(‘.crm-repeater-row’);
return Array.prototype.map.call(rows,function(row,index){
var resident=rowVal(row,F.shResident)!==’no';
return {index:index,name:(rowVal(row,F.shName)||”).trim()||(‘Shareholder ‘+(index+1)),share:Math.max(0,rowNum(row,F.shShare))/100,resident:resident,
otherIncome:Math.max(0,rowNum(row,F.shOtherIncome)),otherDividends:Math.max(0,rowNum(row,F.shOtherDiv)),
optimiseSalary:rowYes(row,F.shOptimise,true),receivesDividends:rowYes(row,F.shDividends,true),statePensionAge:rowYes(row,F.shPension,false),
// UK residents get full PA + UK dividend/PAYE treatment; for a non-resident
// read the three conditional fields (defaults match the original: PA off,
// dividend tax off, salary PAYE/NI on).
personalAllowance:resident?true:rowYes(row,F.shEntitledPa,false),
applyDividendTax:resident?true:rowYes(row,F.shApplyDivTax,false),
applySalaryTax:resident?true:rowYes(row,F.shApplySalaryTax,true),
entered:{share:String(rowVal(row,F.shShare)).trim()!==”}};
});
}
function personName(){
var f=form.querySelector(‘[name=”‘+F.name+'[first]”]’),l=form.querySelector(‘[name=”‘+F.name+'[last]”]’);
return ((f?f.value:”)+’ ‘+(l?l.value:”)).trim();
}

// ── render + report_data ────────────────────────────────────────────────────
function showMessage(msg){ mount.innerHTML=’

‘+escapeHtml(msg)+’

‘; if(reportField){reportField.value=”;} }

function recompute(){
var state=getState();var shareholders=getShareholders();
if(!entered(F.rent)||state.rent0.0001){ return showMessage(‘Ownership percentages must total 100% (currently ‘+percent(shareTotal*100)+’).’); }
var personal=personalScenario(state,shareholders);
var optimised=optimiseSalaries(state,shareholders);
if(!optimised){ return showMessage(‘No feasible salary combination for these figures.’); }

var diff=optimised.combinedWealth-personal.combinedWealth;var cls=diff>=0?’p118-pos':’p118-neg';
var headline=diff>=0?’The optimised company structure leaves an estimated ‘+money(diff)+’ more in combined cash and retained profit each year.':’Personal ownership leaves an estimated ‘+money(Math.abs(diff))+’ more cash each year.';
var nonResident=shareholders.some(function(s){return !s.resident;});
var html=’

Estimated result

‘+headline+’

‘+

‘+
Personal ownership: annual cash after tax‘+money(personal.cashAfterTax)+’

‘+

Optimised company: combined cash and retained profit‘+money(optimised.combinedWealth)+’

‘+

Ten-year straight-line difference‘+money(diff*10)+’

‘+

‘+

‘+
row2(‘Annual property cash before tax’,money(state.rent-state.costs-state.interest),money(optimised.operatingProfit))+
row2(‘Income Tax on property / remuneration (before Section 24 credit)’,money(personal.tax+personal.credit),money(optimised.personalTax))+
row2(‘less: Section 24 finance-cost tax credit’,money(personal.credit),’Not applicable’)+
row2(‘Corporation Tax’,’Not applicable’,money(optimised.ct))+
row2(‘Employer and employee National Insurance’,’Not applicable’,money(optimised.employerNi+optimised.employeeNi))+
row2(‘Dividends extracted’,’Not applicable’,money(optimised.dividendPool))+
row2(‘Profit retained in company’,’Not applicable’,money(optimised.retained))+

‘+cell(‘Combined wealth after tax’)+cell(money(personal.combinedWealth))+cell(money(optimised.combinedWealth))+’

‘+
row2(‘Five-year straight-line total’,money(personal.combinedWealth*5),money(optimised.combinedWealth*5))+
row2(‘Ten-year straight-line total’,money(personal.combinedWealth*10),money(optimised.combinedWealth*10))+

Metric Personal ownership Company (optimised)

‘+

‘+
optimised.rows.map(function(r){return ‘
‘+cell(escapeHtml(r.name))+cell(r.resident?’UK resident':’Non-UK resident’)+cell(money(r.salary))+cell(money(r.dividend))+cell(money(r.incomeTax))+cell(money(r.employeeNi))+’

‘;}).join(”)+

Shareholder UK tax status Salary Dividend Income Tax Employee NI Net received
‘+money(r.net)+’

‘+

Figures used

Gross annual rent: ‘+money(state.rent)+’. Non-finance costs: ‘+money(state.costs)+’. Annual mortgage interest and other finance costs: ‘+money(state.interest)+’.

‘+
(nonResident?’

Non-UK resident shareholder warning: the calculator shows a simplified UK-only position. It does not calculate overseas tax, foreign tax credits, temporary non-residence rules or treaty outcomes.

‘:”)+

Salary optimisation: the calculator considered salaries only where a person had unused Personal Allowance, tested the relevant Income Tax and National Insurance outcomes, and restricted total salaries to the company’s available annual profit. Any salary must relate to genuine work performed for the company.

‘+

Projection warning: five- and ten-year figures are simple multiples of the annual result. They do not assume rent growth, inflation, refinancing, investment returns or future changes in tax law.

‘+

‘;
mount.innerHTML=html;

if(reportField){
reportField.value=JSON.stringify({
name:personName()||undefined,taxYear:state.year,rent:state.rent,costs:state.costs,interest:state.interest,
personal:{tax:personal.tax,credit:personal.credit,combinedWealth:personal.combinedWealth},
company:{operatingProfit:optimised.operatingProfit,ct:optimised.ct,nationalInsurance:optimised.employerNi+optimised.employeeNi,personalTax:optimised.personalTax,dividendPool:optimised.dividendPool,retained:optimised.retained,combinedWealth:optimised.combinedWealth,
shareholders:optimised.rows.map(function(r){return {name:r.name,resident:r.resident,salary:r.salary,dividend:r.dividend,incomeTax:r.incomeTax,employeeNi:r.employeeNi,net:r.net};})}
});
}
return true;
}
function cell(v){ return ‘ ‘+v+’

‘; }
function row2(label,a,b){ return ‘
‘+cell(escapeHtml(label))+cell(a)+cell(b)+’

‘; }

// ── two-step flow: “Calculate comparison” computes + reveals the report step ─
var revealed=false;
var resultsField=mount.closest(‘.crm-field’)||mount;
var submitWrap=form.querySelector(‘.crm-submit’);
// Everything AFTER the results mount is the “Get your free PDF report” step —
// hidden until the user calculates. (Submit lives outside the field flow on
// the WP render, so handle it explicitly too.)
var reportEls=[];var sib=resultsField.nextElementSibling;
while(sib){reportEls.push(sib);sib=sib.nextElementSibling;}
function setReportVisible(v){
reportEls.forEach(function(e){e.style.display=v?”:’none';});
if(submitWrap){submitWrap.style.display=v?”:’none';}
}
setReportVisible(false);

// Conditional inputs — show cost %/amount + extraction % based on the selects,
// like the original calculator. Runs on load + on every change.
function showField(id,show){ var e=el(id); var w=e?e.closest(‘.crm-field’):null; if(w){ w.style.display=show?”:’none'; } }
// Per shareholder row: the three UK-treatment fields are only relevant to a
// non-UK-resident, so reveal them only when that row’s “UK tax resident?” = No
// (exactly like the standalone calculator).
function toggleShareholderRow(row){
var nonRes = rowVal(row,F.shResident)===’no';
[F.shEntitledPa,F.shApplyDivTax,F.shApplySalaryTax].forEach(function(cid){
var w = row.querySelector(‘[data-field-id=”‘+cid+'”]’);
if(w){ w.style.display = nonRes ? ” : ‘none'; }
});
}
function toggleShareholderRows(){ Array.prototype.forEach.call(repeater.querySelectorAll(‘.crm-repeater-row’),toggleShareholderRow); }
// Checkbox fields can’t be default-checked via the field config, so seed each
// row’s defaults once (salary optimisation + dividend allocation + PAYE/NI on;
// everything else off). Marked so a user un-tick is never re-applied.
function initShareholderRow(row){
if(row.getAttribute(‘data-p118-init’)===’1′){return;}
row.setAttribute(‘data-p118-init’,’1′);
[F.shOptimise,F.shDividends,F.shApplySalaryTax].forEach(function(cid){
var e=rowEl(row,cid); if(e&&e.type===’checkbox’){e.checked=true;}
});
// “UK tax resident?” renders with a blank “— Select —”; default it to Yes.
var res=rowEl(row,F.shResident); if(res&&res.tagName===’SELECT’&&!res.value){res.value=’yes';}
}
function initShareholderRows(){ Array.prototype.forEach.call(repeater.querySelectorAll(‘.crm-repeater-row’),initShareholderRow); }
function toggleConditional(){
var cm=val(F.costMode)||’percent’, ex=val(F.extraction)||’retain';
showField(F.costPct, cm===’percent’);
showField(F.costAmt, cm===’amount’);
showField(F.extractionPct, ex===’partial’);
toggleShareholderRows();
}
initShareholderRows();
toggleConditional();
form.addEventListener(‘change’, toggleConditional);

var calcBtn=document.createElement(‘button’);
calcBtn.type=’button';calcBtn.className=’p118-btl-calc-btn';calcBtn.textContent=’Calculate comparison';
if(resultsField.parentNode){resultsField.parentNode.insertBefore(calcBtn,resultsField);}
calcBtn.addEventListener(‘click’,function(){ if(recompute()){ revealed=true; setReportVisible(true); } });

// Once the report step is showing, keep the figures live as they tweak inputs.
var t;
function schedule(){ if(!revealed){return;} clearTimeout(t); t=setTimeout(recompute,120); }
form.addEventListener(‘input’,schedule);
form.addEventListener(‘change’,schedule);
document.addEventListener(‘crm-repeater-change’,function(e){ if(repeater.contains(e.target)||e.target===repeater){ initShareholderRows(); toggleShareholderRows(); if(revealed){ schedule(); } } });

// Title + intro at the very top, matching the standalone calculator.
if (form && form.tagName === ‘FORM’ && !form.querySelector(‘.p118-btl-header’)) {
var header=document.createElement(‘div’);
header.className=’p118-btl-header';
header.innerHTML=’

Buy-to-let tax comparison calculator

Compare the estimated annual position where a residential property business is owned personally or through a limited company. Property information is entered first, followed by each owner or shareholder.

‘;
form.insertBefore(header, form.firstChild);
}

// Static disclaimers — always visible below the form (as in the standalone
// calculator). Appended outside the so the two-step reveal never hides them.
var notes=document.createElement(‘div’);
notes.className=’p118-btl-notes';
notes.innerHTML=’

This calculator is an indicative comparison for England, Wales and Northern Ireland. It does not calculate SDLT, CGT, ATED, Employment Allowance, pension contributions, student loans, Gift Aid, Marriage Allowance, High Income Child Benefit Charge, brought-forward losses or brought-forward finance costs. It does not model overseas tax or individual double-taxation treaties. Any salary must relate to genuine work performed for the company.

‘+

If the company is structured with multiple classes of shares, it may be possible for the founders or directors to distribute profits in proportions that differ from the overall shareholdings. The structure may also allow the value of the founders’ shares to be frozen, with future growth allocated to other share classes to incentivise the next generation and support longer-term inheritance tax planning.

‘;
(form.parentNode||form).appendChild(notes);

showMessage(‘Enter your figures above, then press Calculate comparison.’);
})();

The post Realising gains before CGT changes: the new reason landlords are selling appeared first on Property118.

View Full Article: Realising gains before CGT changes: the new reason landlords are selling

Jul
29

Generation Rent rent freeze campaign targets Angela Rayner

Author admin    Category Uncategorized     Tags

Property118

Generation Rent rent freeze campaign targets Angela Rayner

Private renters are being encouraged to press new Housing Secretary Angela Rayner to bring in a rent freeze with a targeted postcard campaign.

Generation Rent has launched a postcard drive asking the government to restrict how much landlords can increase rents.

The campaign group says England has not had what it describes as proper rent controls since 1988.

It claims the number of private renters has risen by around 1,200% during that period.

Rents cost more

As part of its argument, the organisation says a basic 10-item food shop would cost nearly £120 today had grocery prices increased at the same rate as rents.

That would be more than five times the amount shoppers currently pay, it adds.

Generation Rent also says more than a third of private renters are living in poverty.

It argues that another inflation spike would increase the pressure on households and has called for ministers to introduce a limit on rent rises.

Tell Angela your details

The campaign is using physical postcards rather than relying solely on emails.

Renters can include details of their own experiences before the cards are sent to the Housing Secretary.

According to the group, printed correspondence carrying personal accounts is more likely to remain with politicians and can provide a more effective way of reaching decision-makers.

The postcards were designed by Generation Rent and cost £2.75 to send one or supporters can contribute towards the cost of a card for somebody on a lower income.

A limited number can also be sent free of charge.

The post Generation Rent rent freeze campaign targets Angela Rayner appeared first on Property118.

View Full Article: Generation Rent rent freeze campaign targets Angela Rayner

Jul
28

Landlords tighten tenant checks as costs rise

Author admin    Category Uncategorized     Tags

Property118

Landlords tighten tenant checks as costs rise

Landlords are raising rents and becoming more selective about tenants as operating and regulatory costs climb, according to new research.

Some landlords are also putting property improvement work on hold, even while preparing to buy more properties.

Handelsbanken surveyed 200 UK property investors, landlords and property management professionals for its fifth annual Property Investor Report.

It found that 63% had increased rents because of higher overall costs.

Tenant rights bring higher costs

Handelsbanken’s chief economist, James Sproule, said: “The private rented sector is not simply becoming more expensive for landlords to operate; it is becoming more selective.

“Higher costs and greater tenant rights are feeding into rent decisions, but they are also changing how professional investors think about tenant risk, affordability and long-term portfolio planning.

“For renters, that means the challenge may not only be what they pay each month, but how competitive the market feels when trying to secure a suitable home or addition to their portfolio.”

He added: “Higher standards and stronger tenant protections are intended to improve the rental sector over the long term.

“But they also come with real costs, and our research shows professional investors are already adapting their behaviour in response.”

Most tighten tenant selection

In response to the Renters’ Rights Act, 59% said they were tightening their selection criteria, while 44% were considering increasing rents earlier than planned.

Maintenance and repairs were the most frequently reported cost increase over the past 12 months, cited by 45% of respondents.

Insurance costs had risen for 41%, while 40% pointed to spending on energy efficiency improvements.

One in five investors said they had sold properties because of rising costs, while 19% had taken homes out of the private rented sector.

Another 46% had delayed upgrades or improvement work.

Cost of the RRA

The median cost reported for complying with the Renters’ Rights Act was £5,000, although the mean stood at £31,411.

Respondents expected a median annual compliance and improvement bill of £20,000 during the next 12 months.

Handelsbanken said the figure related to spending across professional portfolios and should not be treated as the likely increase for an individual tenant.

Despite the sales and withdrawals reported by some respondents, 84% said they intended to increase the size of their holdings during the next 12 months.

That compares with 54% in Handelsbanken’s 2025 survey.

The post Landlords tighten tenant checks as costs rise appeared first on Property118.

View Full Article: Landlords tighten tenant checks as costs rise

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