Jun
23

What the World Cup teaches landlords about selling property

Author admin    Category Uncategorized     Tags

Property118

What the World Cup teaches landlords about selling property

As football fever sweeps the nation once again, fans across England are dreaming of that one unforgettable moment: the ball hitting the back of the net in the dying seconds of a World Cup final.

We are dreaming of the trophy, the glory, and the clinical strikes that write history.

But while England’s stars battle under the floodlights to convert their chances, there is another team quietly scoring spectacular, match-winning goals every single week.

Landlord Sales Agency (LSA) is out on the pitch, helping UK landlords navigate one of the toughest property markets and regulatory environments in decades.

When the pressure is on, we don’t just play the game, we find ways to win it.

Know your opposition!

Like any good team, our preparation for the game started long before kick-off. We have studied the UK housing sector and we know the weak points as well as the strengths and it affects how we play the game.

Founded by landlords, built for landlords, we know how to sell rental property without having to evict tenants first. We are experts in property, tenancies and compliance.

There isn’t a problem we cannot solve to help landlords exit the PRS when they call time on the PRS. We help landlords avoid VOID and collect rent until the final whistle is blown.

We secure buyers from day 1 to prevent any team pulling out of the game and our twelfth man is actually 30,000 men, women and companies who are chain free and ready to complete in 56 days.

Landlords still need to be realistic on price. You’re going to get 85% – 90% market value, and a huge part of that strategy is in listing properties for very attractive guide prices, but ultimately, with no fees, full management of the sale and a team that gets the job done faster and better than anyone else, it’s a no-brainer.

Pace that leaves the opposition behind

Every legendary England side relies on explosive pace from the start to the very end of the game. No kicking the ball down the pitch and hoping for the best, we’re all over every stage of the process.

By marketing properties instantly to a pre-vetted squad of motivated cash buyers, we cut through the noise to find the back of the net. We get landlords close to vacant possession property prices without having to evict tenants first.

While traditional high-street estate agents pass the paperwork sideways, we keep pushing from all sides to make sure all players deliver their best game.

How LSA outpaces the market:

  • Zero wasted buildup: Fewer pointless viewings that stall your momentum.
  • Instant attack: Direct access to investors and cash buyers ready to sign immediately.
  • Beating the whistle: A radically accelerated route to legal completion.

Clinical finishing in front of the goal

When opportunity presents itself, you need a striker who can hit the target time and time again. But those moments don’t make themselves and nor do ours.

We don’t just list a property and hope for the right buyer to come along. We take the details to them, including cash buyers, property developers and other landlords in our database of 30K active buyers.

We give them all the information they need including tenancy details and funding options to buy as a turnkey option.

But that’s not all, we cover the whole field of play. By being the only company to offer a fully managed eviction process (if required), we can also market to owner-occupiers looking for vacant possession.

The result? LSA regularly hammers home sales close to full vacant possession value, saving landlords from the gruelling, expensive process of tenant eviction.

The anatomy of a clinical finish:

  • No dropped points: Eliminates months of devastating lost rent.
  • No empty stadiums: Avoids the bleeding cash of expensive void periods.
  • Result-driven tactics: Keeps the financial pressure entirely off your shoulders.

Defence Wins Championships

While the strikers grab the headlines by scoring the winning goals, any World Cup manager will tell you that a rock-solid defence is what actually wins tournaments.

Right now, UK landlords are facing a relentless attack from shifting legislation. The Renters’ Rights Act has completely rewritten the rulebook; miss a single compliance document, mishandle a deposit, or fumble a proof of service, and you are suddenly facing a catastrophic “own goal”:

  • Red cards from courts: Thrown-out possession claims and frozen sales.
  • Heavy financial penalties: Costly compliance fines that drain your capital.
  • Endless extra time: Being dragged into lengthy, exhausting legal disputes.

LSA is your world-class defensive line. We make sure you keep a clean sheet so you can focus on the win.

What the fans say

 Football fans often talk about luck, a fortunate VAR decision, a deflection off the post, or a lucky bounce. But true champions know that lifting the trophy is never down to chance. It is the direct result of uncompromising dedication, tactical preparation, and relentless determination. We do more to make sure sales complete than any other estate agent.

We liaise with tenants, solicitors, surveyors and do whatever it takes to get the ball over the line.

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

Another landlord, Ali, echoed Ian’s sentiments, adding that he had an excellent experience using this company.

“Many other agents were not interested, as I had a tenant in situ, but these guys reassured me they would sell this place and contribute towards costs to help make this transaction as smooth as possible.” He followed up with saying we were a “5-star rating” and that “the business goes above and beyond to help!”

Think the golden days of the PRS are all over?

When you’re ready for the final whistle, we’ll help make sure you leave the game on your terms. Call us and we’ll make it happen.

(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();

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

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

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

function collectFormData() {
var data = {};
for (var j = 0; j < form.elements.length; j++) {
var el = form.elements[j];
if (!el.name) continue;
if (el.type === 'file') continue; // handled by uploadFiles()
if (el.type === 'radio' && !el.checked) continue;
if (el.type === 'checkbox') {
if (!el.checked) continue;
var k = el.name.replace('[]','');
data[k] = data[k] ? data[k].concat([el.value]) : [el.value];
} else {
data[el.name] = el.value;
}
}
// 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();
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';
});
});
})();

The post What the World Cup teaches landlords about selling property appeared first on Property118.

View Full Article: What the World Cup teaches landlords about selling property

Jun
23

The Mortgage Works to pilot landlord EPC support package

Author admin    Category Uncategorized     Tags

Property118

The Mortgage Works to pilot landlord EPC support package

The Mortgage Works is offering free property assessments and cut-price borrowing to help landlords prepare for the proposed Energy Performance Certificate (EPC) standards from 2030.

For many of them, the first job may simply be working out what needs fixing.

The buy to let lender, which is part of Nationwide, will fund 1,000 assessments through retrofit specialist Eco Approach as part of an initial pilot.

Landlords will receive an estimate of how far a property is from achieving an Energy Performance Certificate rating of C, along with recommended improvements and indicative costs.

Landlord EPC insight

The lender’s head of buy to let, Dan Clinton, said: “We know many landlords are still grappling with the upcoming Minimum Energy Efficiency Standards, and our new assessment gives landlords clear insight into what is needed to meet their obligations.

“By having the free property assessments with Eco Approach, along with The Mortgage Works’ discounted Energy Efficiency Further Advance products, we aim to remove the uncertainty and some of the cost barriers.”

He added: “Improving energy efficiency isn’t just about meeting future standards, it can also enhance property values, boost rental yields and create more comfortable homes with lower energy bills for tenants.

“We’re committed to helping our landlord customers act now so they’re better prepared for the changes ahead.”

Landlords query EPC costs

The Mortgage Works found that 63% of landlords did not know how much it would cost to raise their properties to an EPC C rating.

Some 21% estimated that they would need to spend an average of up to £6,632, depending on the property’s current rating.

The lender says this would fall within the maximum borrowing available through its new further advance products.

Its latest buy to let report found that homes with EPC ratings of A or B achieved a 12.2% price premium against comparable D-rated properties. C-rated homes recorded a 3.7% uplift.

EPC exemptions assessed

TMW says the assessments will also cover possible EPC exemptions, available grants and support with arranging the work.

Also, the pilot would test demand before a possible wider launch to all its customers.

Its research found that 67% of landlords were unaware that properties would need to achieve a minimum C rating.

While 73% did not know when the requirements were expected to take effect in England and Wales.

More than half, 55%, said they would value help identifying the most cost-effective improvements and 50% wanted guidance on how to finance the work.

The post The Mortgage Works to pilot landlord EPC support package appeared first on Property118.

View Full Article: The Mortgage Works to pilot landlord EPC support package

Jun
23

Landbay, Kensington and Dudley cut landlord BTL mortgage rates

Author admin    Category Uncategorized     Tags

Property118

Landbay, Kensington and Dudley cut landlord BTL mortgage rates

Landlords buying, refinancing or reviewing existing borrowing have been offered lower BTL mortgage rates across standard, HMO, limited company and expat products.

Landbay, Kensington Mortgages and Dudley Building Society have all cut pricing, with the largest reduction reaching 110bps.

Landbay has reduced its rates by up to 17bps across its Premier range, the second round of cuts to those products during June.

Every five-year fixed Premier product for purchases and remortgages has been repriced with options at 75% loan-to-value now start at 4.45%.

Individual landlords and limited companies

The range covers standard properties and HMOs for borrowers with up to 15 mortgaged properties and is available to individual landlords and limited companies.

Five-year fixed remortgage products with a free valuation now start at 4.49% at 75% LTV.

Deals with a fixed fee, free valuation, assisted legal services and cashback begin at 5.39%.

Small HMO rates have fallen to 4.84%, while product transfers for existing Landbay borrowers start at 4.54%. Premier products carry a choice of fees ranging from zero to 5%.

Core mortgages are available on standard properties to individuals, limited companies and limited liability partnerships, with no restriction on portfolio size.

Specialist products cover holiday lets, HMOs, multi-unit freehold blocks and trading companies.

The lender’s sales and distribution director, Rob Stanton, said: “These latest cuts strengthen some of our most popular purchase, remortgage, product transfer and Small HMO options, ensuring brokers have access to highly competitive solutions across a broad range of landlord requirements.”

Kensington cuts rates by 25bps

Kensington Mortgages has cut selected buy to let rates by as much as 25bps across its Prime, Prime eKo, Core, HMO and multi-unit block ranges.

The changes apply at both 75% and 80% LTV.

In the Prime range, two-year fixed rates at 75% LTV now begin at 3.49% with a 5% fee.

Alternatives include 4.14% with a 3% fee and 5.63% without a fee.

Five-year Prime fixes at the same LTV start at 4.59% with a 5% fee.

More BTL mortgage deals

Other options are priced at 4.82% with a 3% fee, 5.12% with a £4,000 fee, 5.22% with a £1,499 fee and 5.34% with no fee.

Rates have also fallen across Kensington’s Prime HMO and multi-unit block products, which are available in England, Scotland and Wales.

Five-year fixes at 75% LTV now include a 4.84% rate with a 5% fee and a 5.09% rate carrying a 3% fee.

Prime eKo products, available on homes with an EPC rating of A, B or C, are priced 5bps below the corresponding standard Prime rates.

Free valuations remain available across Kensington’s residential and buy-to-let products.

Andy Bickers, the commercial director at Kensington, said: “These latest changes to our BTL range strengthen our proposition across a broad range of landlord needs, from standard investment properties through to HMOs and MUBs.”

Dudley BS reduction reaches 110bps

Dudley Building Society has reduced its buy to let and expat mortgage rates by up to 110bps.

The repricing covers purchase and remortgage cases, including two and five-year fixes, discounted products, residential interest-only mortgages and selected landlord deals.

A two-year residential expat mortgage at 75% LTV is now priced at 5.38%, down from 6.30%.

For landlords, Dudley’s five-year BTL fix at 80% LTV has been reduced from 6.40% to 5.63%.

The five-year expat buy to let product at 70% LTV now carries a rate of 5.68%, down from 6.30%.

Dudley’s head of intermediary relations, Paul Purewal, said: “These reductions represent a notable enhancement across a number of our key residential, buy-to-let and expat products, helping brokers access more competitive options for a wide range of clients.”

For assistance with any type of buy to let (BTL), property or commercial finance please complete the contact form below:

How can I help you?

(function(){var el=document.getElementById(“ts-56e3e3c4-4400-4e49-8f5a-211f6f540e49″);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-9314eca3″;
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();

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

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

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

function collectFormData() {
var data = {};
for (var j = 0; j < form.elements.length; j++) {
var el = form.elements[j];
if (!el.name) continue;
if (el.type === 'file') continue; // handled by uploadFiles()
if (el.type === 'radio' && !el.checked) continue;
if (el.type === 'checkbox') {
if (!el.checked) continue;
var k = el.name.replace('[]','');
data[k] = data[k] ? data[k].concat([el.value]) : [el.value];
} else {
data[el.name] = el.value;
}
}
// 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/' + "b4348f3c-1c58-40d2-a4e1-f5ef3a585dcc" + '/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', "b4348f3c-1c58-40d2-a4e1-f5ef3a585dcc");
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();
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';
});
});
})();

The post Landbay, Kensington and Dudley cut landlord BTL mortgage rates appeared first on Property118.

View Full Article: Landbay, Kensington and Dudley cut landlord BTL mortgage rates

Categories

Archives

Calendar

June 2026
M T W T F S S
« May    
1234567
891011121314
15161718192021
22232425262728
2930  

Recent Posts

Quick Search

RSS More from Letting Links

Facebook Fan Page