<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>LettingLinks - Connecting Landlords &#38; Tenants</title>
	<atom:link href="http://lettinglinks.com/blog/feed" rel="self" type="application/rss+xml" />
	<link>http://lettinglinks.com/blog</link>
	<description>LettingLinks is a FREE social utility that connects property landlords with tenants. People use LettingLinks to find suitable tenants and properties to rent. Why pay for the privilege of finding a person to live in your property? Register your details as a landlord or tenant and connect with one another now.</description>
	<lastBuildDate>Fri, 17 Jul 2026 08:46:17 +0000</lastBuildDate>
	<language>en-US</language>
		<sy:updatePeriod>hourly</sy:updatePeriod>
		<sy:updateFrequency>1</sy:updateFrequency>
	<generator>https://wordpress.org/?v=4.0.38</generator>
	<item>
		<title>Government claim landlords still have a choice over who they rent to</title>
		<link>http://lettinglinks.com/blog/government-claim-landlords-still-have-a-choice-over-who-they-rent-to.html</link>
		<comments>http://lettinglinks.com/blog/government-claim-landlords-still-have-a-choice-over-who-they-rent-to.html#comments</comments>
		<pubDate>Fri, 17 Jul 2026 08:46:17 +0000</pubDate>
		<dc:creator><![CDATA[admin]]></dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[agents]]></category>

		<guid isPermaLink="false">http://lettinglinks.com/blog/government-claim-landlords-still-have-a-choice-over-who-they-rent-to.html</guid>
		<description><![CDATA[<p>Property118 Government claim landlords still have a choice over who they rent to The government has claimed there is “no one-size-fits-all” approach for landlords when determining whether a tenancy is suitable, despite measures being introduced to tackle discrimination in the PRS. In a written parliamentary answer, Labour peer Baroness Taylor of Stevenage claimed the government [&#8230;]</p>
<p>The post <a rel="nofollow" href="http://lettinglinks.com/blog/government-claim-landlords-still-have-a-choice-over-who-they-rent-to.html">Government claim landlords still have a choice over who they rent to</a> appeared first on <a rel="nofollow" href="http://lettinglinks.com/blog">LettingLinks - Connecting Landlords &amp; Tenants</a>.</p>
]]></description>
				<content:encoded><![CDATA[<p><a rel="nofollow" href="https://www.property118.com">Property118</a><br />
<img src="https://www.property118.com/wp-content/uploads/2026/07/ChatGPT-Image-Jul-15-2026-03_25_47-PM.png" style="margin: 1em auto"><br />
<a rel="nofollow" href="https://www.property118.com/government-claim-landlords-still-have-a-choice-over-who-they-rent-to/">Government claim landlords still have a choice over who they rent to</a></p>
<p><strong>The government has claimed there is “no one-size-fits-all” approach for landlords when determining whether a tenancy is suitable, despite measures being introduced to tackle discrimination in the PRS. </strong></p>
<p><a href="https://questions-statements.parliament.uk/written-questions/detail/2026-06-24/hl1268" target="_blank" rel="noopener">In a written parliamentary answer</a>, Labour peer Baroness Taylor of Stevenage claimed the government have taken action to stop rental discrimination.</p>
<p>Under the Renters’ Rights Act, it is illegal for landlords and letting agents to discriminate against prospective tenants who receive benefits or have children, with fines of up to £7,000 for those who break the rules.</p>
<h2>No one-size-fits-all approach</h2>
<p>Baroness Taylor of Stevenage said: “Landlords have tools to assess applicants looking to rent or occupy a property, such as through referencing checks. The government encourages landlords to make sure that these checks are proportionate.</p>
<p>“However, there is no one-size-fits-all approach to determining whether any given tenancy or a licence to occupy a property will be suitable or sustainable.</p>
<p>“Through the Renters’ Rights Act, we have taken direct action to make clear that private landlords must stop discriminatory practices against households with children or receiving benefits in the private rented sector.</p>
<p>“While these measures do not apply to licenses to occupy, the Department continues to monitor trends across the private rented sector and is conducting a robust evaluation of the impact of the Renters&#8217; Rights Act.</p>
<h2>Landlords more cautious</h2>
<p><a href="https://www.property118.com/landlords-tighten-checks-as-arrears-rise/" target="_blank" rel="noopener">As previously reported by Property118</a>, landlords have become more cautious following the act coming into force in May and have tightened referencing checks.</p>
<p>Ben Grech, CEO of Reposit, said: “We know that landlords are becoming increasingly risk-averse, placing greater emphasis on financial security and tenant reliability.</p>
<p>“While there are early signs that arrears are beginning to stabilise, they remain slightly elevated as both landlords and tenants continue to feel the impact of sustained cost pressures.</p>
<p>“With the Renters’ Rights Act now in place and the abolition of Section 21 no-fault evictions, landlords are understandably becoming more cautious, given the reduced flexibility in how they manage tenancies.”</p>
<p>The post <a rel="nofollow" href="https://www.property118.com/government-claim-landlords-still-have-a-choice-over-who-they-rent-to/">Government claim landlords still have a choice over who they rent to</a> appeared first on <a rel="nofollow" href="https://www.property118.com">Property118</a>.</p>
<p>View Full Article: <a href="https://www.property118.com/government-claim-landlords-still-have-a-choice-over-who-they-rent-to/" target="_blank">Government claim landlords still have a choice over who they rent to</a></p>
<p>The post <a rel="nofollow" href="http://lettinglinks.com/blog/government-claim-landlords-still-have-a-choice-over-who-they-rent-to.html">Government claim landlords still have a choice over who they rent to</a> appeared first on <a rel="nofollow" href="http://lettinglinks.com/blog">LettingLinks - Connecting Landlords &amp; Tenants</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://lettinglinks.com/blog/government-claim-landlords-still-have-a-choice-over-who-they-rent-to.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>As private landlords disappear, who will replace us?</title>
		<link>http://lettinglinks.com/blog/as-private-landlords-disappear-who-will-replace-us.html</link>
		<comments>http://lettinglinks.com/blog/as-private-landlords-disappear-who-will-replace-us.html#comments</comments>
		<pubDate>Fri, 17 Jul 2026 08:38:22 +0000</pubDate>
		<dc:creator><![CDATA[admin]]></dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[agents]]></category>

		<guid isPermaLink="false">https://lettinglinks.com/blog/as-private-landlords-disappear-who-will-replace-us.html</guid>
		<description><![CDATA[<p>Property118 As private landlords disappear, who will replace us? Two stories this week caught my landlord eye, and they deserve to sit side by side for a closer analysis, because nobody in the housing debate seems willing to put them there. For years, landlords (especially me) have warned that punishing the private rented sector (PRS) [&#8230;]</p>
<p>The post <a rel="nofollow" href="http://lettinglinks.com/blog/as-private-landlords-disappear-who-will-replace-us.html">As private landlords disappear, who will replace us?</a> appeared first on <a rel="nofollow" href="http://lettinglinks.com/blog">LettingLinks - Connecting Landlords &amp; Tenants</a>.</p>
]]></description>
				<content:encoded><![CDATA[<p><a rel="nofollow" href="https://www.property118.com">Property118</a><br />
<img src="https://www.property118.com/wp-content/uploads/2026/05/landlord-Crusader.png" style="margin: 1em auto"><br />
<a rel="nofollow" href="https://www.property118.com/as-private-landlords-disappear-who-will-replace-us/">As private landlords disappear, who will replace us?</a></p>
<p><strong>Two stories this week caught my landlord eye, and they deserve to sit side by side for a closer analysis, because nobody in the housing debate seems willing to put them there.</strong></p>
<p>For years, landlords (especially me) have warned that punishing the private rented sector (PRS) would backfire on the very people policymakers claim to protect.</p>
<p>Now, the data is trickling in, and the damage appears to be done, leaving the hypocrisy for everyone to see.</p>
<p>The first, from consultancy TwentyEA, is that almost <a href="https://www.property118.com/one-in-five-homes-lost-from-prs-as-small-landlords-struggle/" target="_blank" rel="noopener">850,000 properties have left the private rented sector</a> across the UK in the last decade.</p>
<p>That is roughly one in six rented homes gone, with 181,000 lost in 2025 alone.</p>
<h2>BtR listings rise</h2>
<p>The data shows that listings are at a seven-year high, but the composition of the sector is changing, with Build to Rent listings up 22% year on year in the second quarter of 2026.</p>
<p>Now put these two facts together and we have a problem that tenants’ rights campaigners have shown little interest in discussing.</p>
<p>It&#8217;s this: the individual landlord, the one absorbing Section 24&#8217;s mortgage interest restriction, hefty selective licensing fees, and a proposed ombudsman regime with penalties reaching £40,000, has been squeezed out.</p>
<p>That’s good right? All landlords are bad, the campaigners’ narrative claims.</p>
<p>But the institutional landlords replacing them have a very different structure. They are not <a href="https://www.property118.com/landlords-could-face-monthly-hmrc-tax-bills/" target="_blank" rel="noopener">individual higher-rate taxpayers</a> watching their finance costs treated as profit.</p>
<h2>BtR premium for rents</h2>
<p>Also, these corporates charge tenants more and industry figures put the Build to Rent premium at <a href="https://blog.magnateassets.com/build-to-rent-properties-command-12-premium-why-amenities-drive-rental-value-in-uk-market" target="_blank" rel="noopener">around 12.3%</a> above the wider market.</p>
<p>Nobody has launched a campaign against that.</p>
<p>This is worth sitting with, because it cuts against the story that has been told for years.</p>
<p>Landlords were framed as the obstacle to affordable, well managed housing.</p>
<p>Remove enough of them, went the logic, and something better would take our place.</p>
<p>What has actually taken our place is a corporate product that charges a premium the departing landlord rarely charged, answers to shareholders rather than a local tenant relationship, and is less likely to offer the level of informal flexibility that individual landlords quietly extended.</p>
<p>That includes keeping the rent low for a tenant between jobs or temporarily relaxing payment arrangements for someone experiencing serious illness.</p>
<p>That kind of kindness or consideration does not appear in a spreadsheet and is unlikely to survive the transition to a growing institutional market share.</p>
<h2>Landlords worry too</h2>
<p>Meanwhile, the second story is of Shelter and HSBC UK releasing research showing 40% of working people report sleepless nights over housing costs.</p>
<p>Apparently, 53% say housing bills have made them anxious in the past six months, and one in three are cutting back on food to cover their rent.</p>
<p>Don&#8217;t get me wrong, that distress is real, and it deserves to be taken seriously.</p>
<p>But landlords reading it will notice the framing gap.</p>
<p>A tenant facing rising costs may be able to seek additional work, financial support or cheaper accommodation, although none of those routes is easy or available to everyone.</p>
<p>A landlord facing higher mortgage payments, insurance and compliance costs must eventually increase the rent where permitted, reduce investment, absorb the loss or sell.</p>
<p>That asymmetry rarely features in the campaigning material aimed at this sector.</p>
<h2>Was PRS reform needed?</h2>
<p>The uncomfortable question raised by this week&#8217;s numbers is not whether the PRS needed reform.</p>
<p>It is whether the reform has delivered what was promised, or whether it has simply moved the same rents, and the same pressure on tenants, onto a different type of landlord altogether, one with considerably less reason to compromise.</p>
<p>We cannot disguise the fact that almost 850,000 homes have left the private rented sector.</p>
<p>The buildings have not vanished, but many are no longer available to tenants.</p>
<p>Meanwhile, the new supply entering the market is increasingly being provided by corporate operators charging institutional prices.</p>
<p>Tenants and their campaign groups wanted a fairer private rented sector; instead, they are getting a corporate invoice.</p>
<p><strong><em>Until next time,</em></strong></p>
<p><strong><em>The Landlord Crusader</em></strong></p>
<p>The post <a rel="nofollow" href="https://www.property118.com/as-private-landlords-disappear-who-will-replace-us/">As private landlords disappear, who will replace us?</a> appeared first on <a rel="nofollow" href="https://www.property118.com">Property118</a>.</p>
<p>View Full Article: <a href="https://www.property118.com/as-private-landlords-disappear-who-will-replace-us/" target="_blank">As private landlords disappear, who will replace us?</a></p>
<p>The post <a rel="nofollow" href="http://lettinglinks.com/blog/as-private-landlords-disappear-who-will-replace-us.html">As private landlords disappear, who will replace us?</a> appeared first on <a rel="nofollow" href="http://lettinglinks.com/blog">LettingLinks - Connecting Landlords &amp; Tenants</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://lettinglinks.com/blog/as-private-landlords-disappear-who-will-replace-us.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Councils collect just a quarter of landlord fines – NRLA</title>
		<link>http://lettinglinks.com/blog/councils-collect-just-a-quarter-of-landlord-fines-nrla.html</link>
		<comments>http://lettinglinks.com/blog/councils-collect-just-a-quarter-of-landlord-fines-nrla.html#comments</comments>
		<pubDate>Thu, 16 Jul 2026 23:01:26 +0000</pubDate>
		<dc:creator><![CDATA[admin]]></dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[agents]]></category>

		<guid isPermaLink="false">http://lettinglinks.com/blog/councils-collect-just-a-quarter-of-landlord-fines-nrla.html</guid>
		<description><![CDATA[<p>Property118 Councils collect just a quarter of landlord fines &#8211; NRLA England&#8217;s councils are collecting only a fraction of fines issued for landlord offences, even as local authority inspection numbers grow. The National Residential Landlords Association (NRLA) says councils are carrying out more checks under the Housing, Health and Safety Rating System. However, the collection [&#8230;]</p>
<p>The post <a rel="nofollow" href="http://lettinglinks.com/blog/councils-collect-just-a-quarter-of-landlord-fines-nrla.html">Councils collect just a quarter of landlord fines – NRLA</a> appeared first on <a rel="nofollow" href="http://lettinglinks.com/blog">LettingLinks - Connecting Landlords &amp; Tenants</a>.</p>
]]></description>
				<content:encoded><![CDATA[<p><a rel="nofollow" href="https://www.property118.com">Property118</a><br />
<img src="https://www.property118.com/wp-content/uploads/2026/07/ChatGPT-Image-Jul-16-2026-02_38_04-PM.png" style="margin: 1em auto"><br />
<a rel="nofollow" href="https://www.property118.com/councils-collect-just-a-quarter-of-landlord-fines-nrla/">Councils collect just a quarter of landlord fines &#8211; NRLA</a></p>
<p><strong>England&#8217;s councils are collecting only a fraction of <a href="https://www.property118.com/barrister-doubts-renters-rights-act-disrepair-fines-impact/" target="_blank" rel="noopener">fines issued for landlord offences</a>, even as local authority inspection numbers grow.</strong></p>
<p>The National Residential Landlords Association (NRLA) says councils are carrying out more checks under the Housing, Health and Safety Rating System.</p>
<p>However, the collection of financial penalties continues to lag.</p>
<h2>Responsible landlords &#8216;clobbered&#8217;</h2>
<p>The NRLA&#8217;s chief executive, Ben Beadle, said: &#8220;Whilst an increase in property inspections suggests more proactive enforcement, councils are <a href="https://www.nrla.org.uk/news/increasing-landlord-fines-pointless-if-they-are-not-collected" target="_blank" rel="noopener">failing to collect the money</a> they should from those flouting their obligations.</p>
<p>&#8220;Under a system in which the polluter should be paying, it is those responsible landlords being clobbered with licensing and other fees who are having to cover the costs of rooting out the rogue and criminal minority.&#8221;</p>
<p>He added: &#8220;This is not sustainable and undermines the confidence of those landlords who we want to keep in the market.&#8221;</p>
<h2>£7.5m collected</h2>
<p>The NRLA&#8217;s figures obtained under the Freedom of Information Act show inspections rising from 85,326 across 2021/22 and 2022/23 to 91,620 in 2023/24 and 2024/25.</p>
<p>While that&#8217;s a modest 7% increase, previously published data indicates councils are collecting only around a quarter of fines issued to landlords for housing offences.</p>
<p>Responses from 285 English councils show almost £30m in fines issued to private landlords between 2023/24 and 2024/25.</p>
<p>About £7.5m of that total has been collected.</p>
<h2>Councils must publish reports</h2>
<p>Meanwhile, the cross-party Housing Select Committee has raised concerns about how effectively councils are tackling non-compliance.</p>
<p>Its recent report calls for stronger oversight and clearer accountability around enforcement activity.</p>
<p>The committee also supported calls for councils to publish annual enforcement reports, setting out income from licensing and similar schemes and how that funding is used.</p>
<p>Mr Beadle said: &#8220;Councils must publish annual reports ensuring transparency about the money they receive from licensing and other such schemes, and how that it translates to better enforcement.</p>
<p>&#8220;By not taking this step, both tenants and good faith landlords seeking to do the right thing will continue to be let down by a failing system.&#8221;</p>
<p>The post <a rel="nofollow" href="https://www.property118.com/councils-collect-just-a-quarter-of-landlord-fines-nrla/">Councils collect just a quarter of landlord fines &#8211; NRLA</a> appeared first on <a rel="nofollow" href="https://www.property118.com">Property118</a>.</p>
<p>View Full Article: <a href="https://www.property118.com/councils-collect-just-a-quarter-of-landlord-fines-nrla/" target="_blank">Councils collect just a quarter of landlord fines – NRLA</a></p>
<p>The post <a rel="nofollow" href="http://lettinglinks.com/blog/councils-collect-just-a-quarter-of-landlord-fines-nrla.html">Councils collect just a quarter of landlord fines – NRLA</a> appeared first on <a rel="nofollow" href="http://lettinglinks.com/blog">LettingLinks - Connecting Landlords &amp; Tenants</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://lettinglinks.com/blog/councils-collect-just-a-quarter-of-landlord-fines-nrla.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Selling your property portfolio doesn’t need to be a headache</title>
		<link>http://lettinglinks.com/blog/selling-your-property-portfolio-doesnt-need-to-be-a-headache.html</link>
		<comments>http://lettinglinks.com/blog/selling-your-property-portfolio-doesnt-need-to-be-a-headache.html#comments</comments>
		<pubDate>Thu, 16 Jul 2026 07:56:01 +0000</pubDate>
		<dc:creator><![CDATA[admin]]></dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[agents]]></category>

		<guid isPermaLink="false">https://lettinglinks.com/blog/selling-your-property-portfolio-doesnt-need-to-be-a-headache.html</guid>
		<description><![CDATA[<p>Property118 Selling your property portfolio doesn’t need to be a headache With the Renters’ Rights Act, Making Tax Digital and tougher Right to Rent checks, landlords could be forgiven for thinking everything is becoming more complicated. Every new rule, deadline or compliance requirement can feel like another problem to deal with, and for landlords already [&#8230;]</p>
<p>The post <a rel="nofollow" href="http://lettinglinks.com/blog/selling-your-property-portfolio-doesnt-need-to-be-a-headache.html">Selling your property portfolio doesn’t need to be a headache</a> appeared first on <a rel="nofollow" href="http://lettinglinks.com/blog">LettingLinks - Connecting Landlords &amp; Tenants</a>.</p>
]]></description>
				<content:encoded><![CDATA[<p><a rel="nofollow" href="https://www.property118.com">Property118</a><br />
<img src="https://www.property118.com/wp-content/uploads/2026/07/ChatGPT-Image-Jul-15-2026-02_23_20-PM.png" style="margin: 1em auto"><br />
<a rel="nofollow" href="https://www.property118.com/selling-your-property-portfolio-doesnt-need-to-be-a-headache/">Selling your property portfolio doesn’t need to be a headache</a></p>
<p><strong>With the Renters’ Rights Act, Making Tax Digital and tougher Right to Rent checks, landlords could be forgiven for thinking everything is becoming more complicated.</strong></p>
<p>Every new rule, deadline or compliance requirement can feel like another problem to deal with, and for landlords already thinking about scaling down or leaving the sector, selling a buy-to-let may seem just as difficult.</p>
<p>A tougher sales market and the introduction of a 12-month re-letting ban mean selling has become a more complicated proposition for landlords.</p>
<p>Hamptons recently reported longer selling times, with the average house taking 59 days to go under offer in June and analysis of landlord sales in 2025 found that 51% of landlord house sales failed to complete.</p>
<p><strong>But it doesn’t have to be.</strong></p>
<p>At Landlord Sales Agency, we sell all kinds of buy-to-let properties, from straightforward tenanted houses to entire property portfolios. Most sell in 28 days or less and 95%+ of accepted offers complete because we secure the sale with a non-refundable deposit as soon as an offer is accepted. Buyers complete within 56 days of our notice.</p>
<p>While some landlords who want to sell are choosing to endure the PRS rather than risk the prospect of being left with an empty property that can’t easily return to the rental market, many more are choosing to sell with tenants in situ rather than risk running empty property for 6 – 18 months.</p>
<p><strong>They simply want a clean break, a reliable sale, the right buyer and are happy to accept 85 – 90% vacant possession value to make it happen sooner than later. We do all that and more.</strong></p>
<p>Many of the properties we sell have no problems at all. Landlords come to us because they are retiring, reducing their workload, or simply deciding that now is the right time to sell one, several or all of their properties.</p>
<p>But when a property does come with a complication, we know how to find a practical solution.</p>
<p>The Renters&#8217; Rights Act has changed the process, but it hasn&#8217;t stopped us selling properties. Most successful sales come down to finding an approach that works for the buyer, seller and tenant.</p>
<p><strong>A recent Lincoln HMO is a good example of what can be achieved when a sale hits an unexpected problem.</strong></p>
<p>The seller had planned a nine-bed HMO, but due to a misunderstanding regarding the layout, the council only issued a six-bed licence.</p>
<p>Two lenders then declined the deal.</p>
<p>For many sellers, that could have meant the sale falling apart and going back to square one. We took a different approach.</p>
<p><strong>Working with our specialist HMO broker, surveyor, lender contacts and the council, we secured an upgraded HMO licence to secure finance based on the future nine-bed configuration and the accepted offer price, enabling the sale to proceed once the required works were completed and the licensing position resolved.</strong></p>
<p>The problem did not disappear. We simply found a practical way through it.</p>
<p>Whether you have one straightforward rental property, a group of well-performing tenanted houses, or a large portfolio with a mixture of property types, we can help.</p>
<p>We work with landlords at every stage of their property journey. Some want to sell a single property while keeping the rest of their portfolio. Others want to reduce their workload by selling several properties, while some are ready to retire and exit the private rented sector completely.</p>
<p><strong>We can sell entire property portfolios or partial portfolios in bulk, with many sales completed in less than 28 days.</strong></p>
<p><strong>And if a complication does arise, our team is there to help find a solution.</strong></p>
<p>For properties where vacant possession may be required, we negotiate with tenants to avoid eviction where possible, personally help tenants relocate and, in some circumstances, provide financial assistance to help them find a new home.</p>
<p>Our aim is to find a solution that gets the landlord moving forward rather than allowing one problem to hold up an entire sale.</p>
<p>Landlord Sales Agency was founded by landlords for landlords and is made up of specialist portfolio exit experts who understand what it takes to sell buy-to-let properties.</p>
<p>Straightforward properties, tenanted houses, partial portfolios or entire portfolios, whatever you own and whatever your reason for selling, talk to us first.</p>
<p><strong>Selling your portfolio doesn’t have to be a headache. You may be closer to a sale than you think, all you have to do is fill out the form below.</strong></p>
<div class="p118-crm-form" id="crm-form-ba09a29b">
<div class="crm-page">
<div class="crm-field"><label for="crm-field-c364951b-ecb0-4a12-bfa4-9dbe564310e8">Name<span class="crm-required">*</span></label>
<div></div>
</div>
<div class="crm-field"><label for="crm-field-910107df-b8a8-4541-879f-541cef9449e4">Email<span class="crm-required">*</span></label></div>
<div class="crm-field"><label for="crm-field-3b317ed9-d327-4fe2-b92e-67efede67e6d">Phone<span class="crm-required">*</span></label></div>
<div class="crm-field"><label for="crm-field-c6fae2f0-c335-452b-aa03-2cc066163d71">Please give us details of how we can help and the properties in question<span class="crm-required">*</span></label><textarea id="crm-field-c6fae2f0-c335-452b-aa03-2cc066163d71" name="c6fae2f0-c335-452b-aa03-2cc066163d71"></textarea></div>
<div class="crm-field"><label for="crm-field-34c27d9f-b3d1-4a6d-b720-24000e9fa468">Privacy Policy<span class="crm-required">*</span></label>
<div class="crm-choices"><label> I have read and accept Property118’s <a href="/privacy-policy/">Privacy Policy</a></label></div>
</div>
<div class="crm-field crm-turnstile">
<div id="ts-607776b5-3f7b-431c-b5cc-fc304603fee3" class="cf-turnstile"></div>
</div>
<p>(function(){var el=document.getElementById(&#8220;ts-607776b5-3f7b-431c-b5cc-fc304603fee3&#8243;);if(!el)return;var b=document.body,h=document.documentElement;var dark=b.classList.contains(&#8220;dark-mode&#8221;)||b.classList.contains(&#8220;dark&#8221;)||b.classList.contains(&#8220;night-mode&#8221;)||h.classList.contains(&#8220;dark&#8221;);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)&lt;128;}el.setAttribute(&quot;data-theme&quot;,dark?&quot;dark&quot;:&quot;light&quot;);if(window.turnstile&amp;&amp;el.childElementCount===0){try{window.turnstile.render(el,{sitekey:el.getAttribute(&quot;data-sitekey&quot;),theme:el.getAttribute(&quot;data-theme&quot;)});}catch(e){}}})();									</p></div>
<div class="crm-submit">
					<button type="submit">Submit</button>
				</div>
<div class="crm-message"></div>
</p></div>
<p>		(function(){<br />
			var uid     = &#8220;crm-form-ba09a29b&#8221;;<br />
			var form    = document.getElementById(uid + &#8216;-form&#8217;);<br />
			var wrap    = document.getElementById(uid);<br />
			var msg     = wrap.querySelector(&#8216;.crm-message&#8217;);<br />
			var totalPages = 1;<br />
			var curPage = 0;</p>
<p>			// ── Conditional logic ────────────────────────────────────────────────<br />
			var condMap = {};</p>
<p>			function getFieldValue(fieldId) {<br />
				var els = form.querySelectorAll(&#8216;[name=&#8221;&#8216; + fieldId + &#8216;&#8221;], [name=&#8221;&#8216; + fieldId + &#8216;[]&#8221;]&#8217;);<br />
				if (!els.length) return &#8221;;<br />
				var first = els[0];<br />
				if (first.type === &#8216;checkbox&#8217; || first.type === &#8216;radio&#8217;) {<br />
					var checked = [];<br />
					els.forEach(function(el){ if (el.checked) checked.push(el.value); });<br />
					return checked.join(&#8216;,&#8217;);<br />
				}<br />
				return first.value;<br />
			}</p>
<p>			function evalRule(rule) {<br />
				var val = getFieldValue(rule.fieldId);<br />
				var cmp = rule.value;<br />
				switch (rule.operator) {<br />
					case &#8216;is': return val === cmp;<br />
					case &#8216;isnot': return val !== cmp;<br />
					case &#8216;greaterthan': return parseFloat(val) &gt; parseFloat(cmp);<br />
					case &#8216;lessthan': return parseFloat(val) &lt; parseFloat(cmp);<br />
					case &#039;contains&#039;: return val.indexOf(cmp) !== -1;<br />
					case &#039;startswith&#039;: return val.indexOf(cmp) === 0;<br />
					case &#039;endswith&#039;: return val.slice(-cmp.length) === cmp;<br />
					default: return false; // fail closed — mirror the CRM shared matcher<br />
				}<br />
			}</p>
<p>			function applyConditionals() {<br />
				Object.keys(condMap).forEach(function(fieldId) {<br />
					var cond = condMap[fieldId];<br />
					var rules = cond.rules || [];<br />
					var match = cond.logicType === &#039;any&#039;<br />
						? rules.some(evalRule)<br />
						: rules.every(evalRule);<br />
					var show = cond.actionType === &#039;show&#039; ? match : !match;<br />
					var wrapper = form.querySelector(&#039;[data-field-id=&quot;&#039; + fieldId + &#039;&quot;]&#039;);<br />
					if (!wrapper) {<br />
						var el = form.querySelector(&#039;[name=&quot;&#039; + fieldId + &#039;&quot;], [name=&quot;&#039; + fieldId + &#039;[]&quot;]&#039;);<br />
						if (el) wrapper = el.closest(&#039;.crm-field, .crm-half&#039;);<br />
					}<br />
					if (wrapper) wrapper.style.display = show ? &#039;&#039; : &#039;none&#039;;<br />
				});<br />
			}</p>
<p>			form.addEventListener(&#039;change&#039;, applyConditionals);<br />
			form.addEventListener(&#039;input&#039;, applyConditionals);<br />
			applyConditionals();</p>
<p>			// ── Required-field validation (Next + Submit) ────────────────────────<br />
			// Validate from the form&#039;s field config (id + type), NOT the [required]<br />
			// HTML attribute: a checkbox group can&#039;t carry a meaningful `required`<br />
			// (native means &quot;tick every box&quot;), so attribute checks skip it — which is<br />
			// why empty checkbox questions slipped past Next straight to submit.<br />
			var crmRequired = [{&quot;id&quot;:&quot;c364951b-ecb0-4a12-bfa4-9dbe564310e8&quot;,&quot;type&quot;:&quot;name&quot;,&quot;label&quot;:&quot;Name&quot;},{&quot;id&quot;:&quot;910107df-b8a8-4541-879f-541cef9449e4&quot;,&quot;type&quot;:&quot;email&quot;,&quot;label&quot;:&quot;Email&quot;},{&quot;id&quot;:&quot;3b317ed9-d327-4fe2-b92e-67efede67e6d&quot;,&quot;type&quot;:&quot;phone&quot;,&quot;label&quot;:&quot;Phone&quot;},{&quot;id&quot;:&quot;c6fae2f0-c335-452b-aa03-2cc066163d71&quot;,&quot;type&quot;:&quot;textarea&quot;,&quot;label&quot;:&quot;Please give us details of how we can help and the properties in question&quot;},{&quot;id&quot;:&quot;34c27d9f-b3d1-4a6d-b720-24000e9fa468&quot;,&quot;type&quot;:&quot;checkbox&quot;,&quot;label&quot;:&quot;Privacy Policy&quot;}];<br />
			function crmWrapper(id) {<br />
				var w = form.querySelector(&#039;[data-field-id=&quot;&#039; + id + &#039;&quot;]&#039;);<br />
				if (!w) { var el = form.querySelector(&#039;[name=&quot;&#039; + id + &#039;&quot;], [name=&quot;&#039; + id + &#039;[]&quot;]&#039;); if (el) w = el.closest(&#039;.crm-field, .crm-half&#039;); }<br />
				return w;<br />
			}<br />
			function crmFilled(fld) {<br />
				var els = form.querySelectorAll(&#039;[name=&quot;&#039; + fld.id + &#039;&quot;], [name=&quot;&#039; + fld.id + &#039;[]&quot;]&#039;);<br />
				if (!els.length) return true;<br />
				if ([&#039;checkbox&#039;,&#039;radio&#039;,&#039;product&#039;,&#039;consent&#039;].indexOf(fld.type) !== -1) { return Array.prototype.some.call(els, function(el){ return el.checked; }); }<br />
				return (els[0].value || &#039;&#039;).trim() !== &#039;&#039;;<br />
			}<br />
			function crmFirstInvalid(pageIdx) {<br />
				for (var i = 0; i &lt; crmRequired.length; i++) {<br />
					var fld = crmRequired[i]; var w = crmWrapper(fld.id);<br />
					if (!w) continue;<br />
					if (w.style.display === &#039;none&#039;) continue;<br />
					if (pageIdx != null) { var pd = w.closest(&#039;[data-page]&#039;); if (!pd || parseInt(pd.getAttribute(&#039;data-page&#039;)) !== pageIdx) continue; }<br />
					if (!crmFilled(fld)) return fld;<br />
				}<br />
				return null;<br />
			}<br />
			// Shows the error in a red box UNDER the field, matching the form&#039;s own<br />
			// .crm-message error styling, and scrolls to it.<br />
			function crmMarkError(w, text) {<br />
				if (!w) return;<br />
				var e = w.querySelector(&#039;.crm-inline-error&#039;);<br />
				if (!e) { e = document.createElement(&#039;div&#039;); e.className = &#039;crm-inline-error&#039;; w.appendChild(e); }<br />
				e.style.cssText = &#039;background:#fee2e2;color:#991b1b;padding:.55rem .75rem;border-radius:4px;margin-top:.4rem;font-size:.9rem&#039;;<br />
				e.textContent = text || &#039;Please answer this before continuing.&#039;;<br />
			}<br />
			function crmClearError(w) { if (!w) return; var e = w.querySelector(&#039;.crm-inline-error&#039;); if (e) e.parentNode.removeChild(e); }<br />
			function crmReportInvalid(fld) {<br />
				var w = crmWrapper(fld.id);<br />
				var t = ([&#039;checkbox&#039;,&#039;product&#039;].indexOf(fld.type) !== -1) ? &#039;Please select at least one option.&#039; : (fld.type === &#039;radio&#039; ? &#039;Please choose an option.&#039; : &#039;Please fill this in.&#039;);<br />
				crmMarkError(w, t);<br />
				if (w &amp;&amp; w.scrollIntoView) w.scrollIntoView({ behavior: &#039;smooth&#039;, block: &#039;center&#039; });<br />
			}<br />
			form.addEventListener(&#039;change&#039;, function(e){ var w = e.target &amp;&amp; e.target.closest ? e.target.closest(&#039;.crm-field, .crm-half, [data-field-id]&#039;) : null; if (w) crmClearError(w); });<br />
			form.addEventListener(&#039;input&#039;, function(e){ var w = e.target &amp;&amp; e.target.closest ? e.target.closest(&#039;.crm-field, .crm-half, [data-field-id]&#039;) : null; if (w) crmClearError(w); });</p>
<p>			// ── Multi-page navigation ────────────────────────────────────────────</p>
<p>			// ── Submit ────────────────────────────────────────────────────────────<br />
			var submitBtn = form.querySelector(&#039;button[type=submit]&#039;);<br />
			var btnText   = submitBtn ? submitBtn.textContent : &#039;Submit&#039;;</p>
<p>			var crmApiUrl = &quot;https://p118-crm-api.accent.sh&quot;;</p>
<p>			function collectFormData() {<br />
				var data = {};<br />
				for (var j = 0; j &lt; form.elements.length; j++) {<br />
					var el = form.elements[j];<br />
					if (!el.name) continue;<br />
					if (el.type === &#039;file&#039;) continue; // handled by uploadFiles()<br />
					if (el.type === &#039;radio&#039; &amp;&amp; !el.checked) continue;<br />
					if (el.type === &#039;checkbox&#039;) {<br />
						if (!el.checked) continue;<br />
						var k = el.name.replace(&#039;[]&#039;,&#039;&#039;);<br />
						data[k] = data[k] ? data[k].concat([el.value]) : [el.value];<br />
					} else {<br />
						data[el.name] = el.value;<br />
					}<br />
				}<br />
				// Repeater fields: sub-inputs are named &quot;[][]&#8221;.<br />
				// Group those flat keys into an array of row objects under the repeater<br />
				// id. Plain fields, checkbox &#8220;[]&#8221; arrays and single-bracket composites<br />
				// (name[first], address[city]) don&#8217;t match the double-bracket pattern, so<br />
				// ordinary submissions are unchanged.<br />
				var _repRe = /^(.+?)[(d+)][(.+)]$/;<br />
				var _repIds = {};<br />
				Object.keys( data ).forEach( function ( key ) {<br />
					var m = key.match( _repRe );<br />
					if ( ! m ) { return; }<br />
					var rid = m[1], row = parseInt( m[2], 10 ), sub = m[3];<br />
					_repIds[ rid ] = true;<br />
					if ( ! Array.isArray( data[ rid ] ) ) { data[ rid ] = []; }<br />
					if ( ! data[ rid ][ row ] || typeof data[ rid ][ row ] !== &#8216;object&#8217; ) { data[ rid ][ row ] = {}; }<br />
					data[ rid ][ row ][ sub ] = data[ key ];<br />
					delete data[ key ];<br />
				} );<br />
				Object.keys( _repIds ).forEach( function ( rid ) {<br />
					if ( Array.isArray( data[ rid ] ) ) {<br />
						data[ rid ] = data[ rid ].filter( function ( r ) { return r &amp;&amp; typeof r === &#8216;object'; } );<br />
					}<br />
				} );<br />
				// GF auto-substituted {user_agent} / {referer} on hidden fields<br />
				// at render time. We do the equivalent right before submit so<br />
				// fields whose default value carries these placeholders<br />
				// resolve to the browser&#8217;s actual values rather than being<br />
				// stored as literal &#8220;{user_agent}&#8221; / &#8220;{referer}&#8221; strings.<br />
				// The last ARTICLE the visitor read (set client-side on post views by<br />
				// P118_Article_Views). Used to attribute the enquiry to the article<br />
				// even after navigating away or with a stripped/absent referer.<br />
				var lastPost = &#8221;;<br />
				try {<br />
					var lpm = document.cookie.match(/(?:^|;s*)p118_last_post=([^;]+)/);<br />
					if (lpm) lastPost = decodeURIComponent(lpm[1]);<br />
				} catch (e) {}<br />
				var subs = {<br />
					&#8216;{user_agent}':  navigator.userAgent || &#8221;,<br />
					// Prefer the last article read; fall back to the (lossy) HTTP referer.<br />
					&#8216;{referer}':     lastPost || document.referrer || &#8221;,<br />
					&#8216;{last_post}':   lastPost || &#8221;,<br />
					&#8216;{embed_url}':   window.location.href || &#8221;,<br />
				};<br />
				for (var name in data) {<br />
					if (!data.hasOwnProperty(name)) continue;<br />
					var v = data[name];<br />
					if (typeof v !== &#8216;string&#8217;) continue;<br />
					for (var tag in subs) {<br />
						if (v.indexOf(tag) !== -1) v = v.split(tag).join(subs[tag]);<br />
					}<br />
					data[name] = v;<br />
				}<br />
				// Agent/BDM attribution — read LIVE so it works even on a fully cached<br />
				// page (the browser always sees the real URL + cookie). URL ?ataid=/?cid=<br />
				// first, then the 30-day agent_id/cid cookies set by atat-tracking.php.<br />
				var _qp = new URLSearchParams(window.location.search);<br />
				var _ataid = _qp.get(&#8216;ataid&#8217;) || (document.cookie.match(/(?:^|;s*)agent_id=([^;]+)/) || [])[1] || &#8221;;<br />
				var _cid   = _qp.get(&#8216;cid&#8217;)   || (document.cookie.match(/(?:^|;s*)cid=([^;]+)/)      || [])[1] || &#8221;;<br />
				if (_ataid) data.agent_id = decodeURIComponent(_ataid);<br />
				if (_cid)   data.bdm_id   = decodeURIComponent(_cid);<br />
				return data;<br />
			}</p>
<p>			function uploadFiles(data) {<br />
				var fileInputs = form.querySelectorAll(&#8216;input[type=file][data-crm-file-field]&#8217;);<br />
				var uploads = [];<br />
				fileInputs.forEach(function(el) {<br />
					if (!el.files || !el.files[0]) return;<br />
					var fd = new FormData();<br />
					fd.append(&#8216;file&#8217;, el.files[0]);<br />
					var fieldName = el.name;<br />
					uploads.push(<br />
						fetch(crmApiUrl + &#8216;/public/forms/&#8217; + &#8220;08ceeaae-4809-444e-ba0f-88da5836c463&#8243; + &#8216;/upload&#8217;, { method: &#8216;POST&#8217;, body: fd })<br />
							.then(function(r) {<br />
								if (!r.ok) throw new Error(&#8216;File upload failed (&#8216; + r.status + &#8216;)&#8217;);<br />
								return r.json();<br />
							})<br />
							.then(function(res) {<br />
								if (res.path) data[fieldName] = res.path;<br />
								else throw new Error(res.error || &#8216;File upload failed&#8217;);<br />
							})<br />
					);<br />
				});<br />
				return Promise.all(uploads).then(function() { return data; });<br />
			}</p>
<p>			function submitFormData(data) {<br />
				var body = new FormData();<br />
				body.append(&#8216;action&#8217;,  &#8216;p118_crm_submit&#8217;);<br />
				body.append(&#8216;form_id&#8217;, &#8220;08ceeaae-4809-444e-ba0f-88da5836c463&#8243;);<br />
				body.append(&#8216;data&#8217;,    JSON.stringify(data));<br />
				// Embed-page context for GF-style merge tags ({embed_url},<br />
				// {embed_post:post_title}, {embed_post:ID}). Captured PHP-side<br />
				// at render time, then echoed to JS so the submit fetch can<br />
				// forward to V2 as request headers.<br />
				body.append(&#8216;embed_url&#8217;,        &#8220;&#8221;);<br />
				body.append(&#8216;embed_post_id&#8217;,    &#8220;0&#8221;);<br />
				body.append(&#8216;embed_post_title&#8217;, &#8220;&#8221;);</p>
<p>				return fetch(&#8220;https://www.property118.com/wp-admin/admin-ajax.php&#8221;, { method: &#8216;POST&#8217;, body: body, credentials: &#8216;same-origin&#8217; })<br />
					.then(function(r){ return r.json(); })<br />
					.then(function(res){<br />
						var p = res.data || res;<br />
						if (p &amp;&amp; p.success) {<br />
							if (p.confirmationType === &#8216;form&#8217; &amp;&amp; p.nextFormId) {<br />
								return swapInNextForm(p.nextFormId, p.prefill || {});<br />
							}<br />
							if (p.confirmationType === &#8216;redirect&#8217; &amp;&amp; p.confirmationRedirectUrl) {<br />
								window.location.href = p.confirmationRedirectUrl;<br />
							} else {<br />
								form.style.display = &#8216;none';<br />
								msg.className = &#8216;crm-message success';<br />
								msg.innerHTML = p.confirmationMessage || &#8216;Thank you for your submission.';<br />
								msg.style.display = &#8216;block';<br />
							}<br />
						} else {<br />
							throw new Error((p &amp;&amp; p.error) || &#8216;Submission failed.&#8217;);<br />
						}<br />
					});<br />
			}</p>
<p>			// Replace this whole form widget with another form, rendered server-side<br />
			// with the carried-over values seeded in. Inline  injected via<br />
			// innerHTML won&#8217;t run, so we re-create each script node to execute it<br />
			// (this is what wires up the new form&#8217;s submit / conditional logic).<br />
			function swapInNextForm(nextFormId, prefill) {<br />
				var rbody = new FormData();<br />
				rbody.append(&#8216;action&#8217;,  &#8216;p118_crm_render_form&#8217;);<br />
				rbody.append(&#8216;form_id&#8217;, nextFormId);<br />
				rbody.append(&#8216;prefill&#8217;, JSON.stringify(prefill || {}));<br />
				return fetch(&#8220;https://www.property118.com/wp-admin/admin-ajax.php&#8221;, { method: &#8216;POST&#8217;, body: rbody, credentials: &#8216;same-origin&#8217; })<br />
					.then(function(r){ return r.json(); })<br />
					.then(function(res2){<br />
						var pd = res2.data || res2;<br />
						if (!pd || !pd.html) { throw new Error((pd &amp;&amp; pd.error) || &#8216;Could not load the next form.&#8217;); }<br />
						var frag   = document.createElement(&#8216;div&#8217;);<br />
						frag.innerHTML = pd.html;<br />
						var parent = wrap.parentNode;<br />
						var nodes  = [];<br />
						while (frag.firstChild) {<br />
							var node = frag.firstChild;<br />
							parent.insertBefore(node, wrap);<br />
							nodes.push(node);<br />
						}<br />
						parent.removeChild(wrap);<br />
						function reexec(old) {<br />
							var s = document.createElement(&#8216;script&#8217;);<br />
							for (var a = 0; a &lt; old.attributes.length; a++) {<br />
								s.setAttribute(old.attributes[a].name, old.attributes[a].value);<br />
							}<br />
							if (!old.src) { s.textContent = old.textContent; }<br />
							old.parentNode.replaceChild(s, old);<br />
						}<br />
						nodes.forEach(function(n){<br />
							if (n.tagName === &#039;SCRIPT&#039;) { reexec(n); }<br />
							else if (n.querySelectorAll) {<br />
								var scripts = n.querySelectorAll(&#039;script&#039;);<br />
								for (var k = 0; k &lt; scripts.length; k++) { reexec(scripts[k]); }<br />
							}<br />
						});<br />
						var first = nodes[0];<br />
						try { if (first &amp;&amp; first.scrollIntoView) first.scrollIntoView({ behavior: &#039;smooth&#039;, block: &#039;start&#039; }); } catch (e) {}<br />
					});<br />
			}</p>
<p>			form.addEventListener(&#039;submit&#039;, function(e){<br />
				e.preventDefault();<br />
				// Validate required fields before submitting. Next only guards the pages<br />
				// before it, so the final page (and single-page forms) are checked here;<br />
				// jump to the first page that has a problem.<br />
								var vbad0 = crmFirstInvalid(null);<br />
				if (vbad0) { crmReportInvalid(vbad0); return; }<br />
								var data = collectFormData();<br />
				if (submitBtn) { submitBtn.disabled = true; submitBtn.textContent = &#039;Processing…&#039;; }<br />
				msg.style.display = &#039;none&#039;;</p>
<p>								// Standard form (no payment)<br />
				uploadFiles(data)<br />
					.then(function(d) { return submitFormData(d); })<br />
					.catch(function(err){<br />
					if (submitBtn) { submitBtn.disabled = false; submitBtn.textContent = btnText; }<br />
					msg.className = &#039;crm-message error&#039;;<br />
					msg.textContent = err.message;<br />
					msg.style.display = &#039;block&#039;;<br />
				});<br />
							});</p>
<p>			// ── Repeater fields (add / remove rows) ──────────────────────────<br />
			form.querySelectorAll( &#039;.crm-repeater&#039; ).forEach( function ( rep ) {<br />
				var rowsWrap = rep.querySelector( &#039;.crm-repeater-rows&#039; );<br />
				var tpl      = rep.querySelector( &#039;.crm-repeater-template&#039; );<br />
				var addBtn   = rep.querySelector( &#039;.crm-repeater-add&#039; );<br />
				if ( addBtn &amp;&amp; tpl &amp;&amp; rowsWrap ) {<br />
					addBtn.addEventListener( &#039;click&#039;, function () {<br />
						var idx = parseInt( rep.getAttribute( &#039;data-next-index&#039; ) || &#039;1&#039;, 10 );<br />
						var tmp = document.createElement( &#039;div&#039; );<br />
						tmp.innerHTML = tpl.innerHTML.split( &#039;__ROW__&#039; ).join( idx );<br />
						var row = tmp.firstElementChild;<br />
						if ( ! row ) { return; }<br />
						row.setAttribute( &#039;data-row&#039;, idx );<br />
						rowsWrap.appendChild( row );<br />
						rep.setAttribute( &#039;data-next-index&#039;, idx + 1 );<br />
						rep.dispatchEvent( new CustomEvent( &#039;crm-repeater-change&#039;, { bubbles: true } ) );<br />
					} );<br />
				}<br />
				if ( rowsWrap ) {<br />
					rowsWrap.addEventListener( &#039;click&#039;, function ( e ) {<br />
						var btn = e.target.closest ? e.target.closest( &#039;.crm-repeater-remove&#039; ) : null;<br />
						if ( ! btn ) { return; }<br />
						if ( rowsWrap.querySelectorAll( &#039;.crm-repeater-row&#039; ).length &lt;= 1 ) { return; }<br />
						var r = btn.closest( &#039;.crm-repeater-row&#039; );<br />
						if ( r ) { r.remove(); }<br />
						rep.dispatchEvent( new CustomEvent( &#039;crm-repeater-change&#039;, { bubbles: true } ) );<br />
					} );<br />
				}<br />
			} );<br />
		})();</p>
<p>The post <a rel="nofollow" href="https://www.property118.com/selling-your-property-portfolio-doesnt-need-to-be-a-headache/">Selling your property portfolio doesn’t need to be a headache</a> appeared first on <a rel="nofollow" href="https://www.property118.com">Property118</a>.</p>
<p>View Full Article: <a href="https://www.property118.com/selling-your-property-portfolio-doesnt-need-to-be-a-headache/" target="_blank">Selling your property portfolio doesn’t need to be a headache</a></p>
<p>The post <a rel="nofollow" href="http://lettinglinks.com/blog/selling-your-property-portfolio-doesnt-need-to-be-a-headache.html">Selling your property portfolio doesn’t need to be a headache</a> appeared first on <a rel="nofollow" href="http://lettinglinks.com/blog">LettingLinks - Connecting Landlords &amp; Tenants</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://lettinglinks.com/blog/selling-your-property-portfolio-doesnt-need-to-be-a-headache.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Rents hit record high as property supply falls</title>
		<link>http://lettinglinks.com/blog/rents-hit-record-high-as-property-supply-falls.html</link>
		<comments>http://lettinglinks.com/blog/rents-hit-record-high-as-property-supply-falls.html#comments</comments>
		<pubDate>Wed, 15 Jul 2026 23:01:54 +0000</pubDate>
		<dc:creator><![CDATA[admin]]></dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[agents]]></category>

		<guid isPermaLink="false">https://lettinglinks.com/blog/rents-hit-record-high-as-property-supply-falls.html</guid>
		<description><![CDATA[<p>Property118 Rents hit record high as property supply falls Advertised rents have reached record highs in London and the rest of Great Britain after the number of available homes fell below last year&#8217;s level for the first time since 2022. Rightmove says the average advertised rent outside the capital rose by 1.9% during the second [&#8230;]</p>
<p>The post <a rel="nofollow" href="http://lettinglinks.com/blog/rents-hit-record-high-as-property-supply-falls.html">Rents hit record high as property supply falls</a> appeared first on <a rel="nofollow" href="http://lettinglinks.com/blog">LettingLinks - Connecting Landlords &amp; Tenants</a>.</p>
]]></description>
				<content:encoded><![CDATA[<p><a rel="nofollow" href="https://www.property118.com">Property118</a><br />
<img src="https://www.property118.com/wp-content/uploads/2026/07/ChatGPT-Image-Jul-15-2026-11_14_19-AM.png" style="margin: 1em auto"><br />
<a rel="nofollow" href="https://www.property118.com/rents-hit-record-high-as-property-supply-falls/">Rents hit record high as property supply falls</a></p>
<p><strong>Advertised <a href="https://www.property118.com/renters-face-rising-costs-as-rents-climb-again/" target="_blank" rel="noopener">rents have reached record highs</a> in London and the rest of Great Britain after the number of available homes fell below last year&#8217;s level for the first time since 2022.</strong></p>
<p>Rightmove says the average advertised rent outside the capital rose by 1.9% during the second quarter to £1,397 a month, the first quarterly record since the third quarter of 2025.</p>
<p>The figure is 2.3% higher than a year ago, compared with annual growth of 1.6% during the previous quarter.</p>
<p>London rents increased by 2% over the quarter to a record £2,791 a month.</p>
<p>It was the capital&#8217;s largest quarterly rise since 2023, driven by increases in inner London, while annual growth reached 2.9%.</p>
<h2>Average rent record</h2>
<p>The platform&#8217;s property expert, Colleen Babcock, said: &#8220;We&#8217;re seeing new record average rents advertised in both London and Great Britain outside of the capital, however overall, we&#8217;re seeing rents return to more familiar seasonal patterns and stable growth.</p>
<p>&#8220;Even though supply is no longer increasing, the market remains much more balanced than it was at the peak of competition in 2022.&#8221;</p>
<p>She added: &#8220;Regional trends also continue to vary significantly across the country, with more affordable northern areas still seeing some of the strongest rental growth.</p>
<p>&#8220;London has seen a notable increase in rents this quarter, and also the largest drop in available rental supply, underlining how local supply and demand dynamics continue to shape rental pricing.&#8221;</p>
<h2>Rental home supply falls</h2>
<p>The number of homes available to rent nationally was 1% lower than a year earlier during the quarter, ending a period of annual supply growth that began in 2022.</p>
<p>Rightmove attributed the decline to fewer newly listed properties, rather than homes being taken off the market more quickly.</p>
<p>A typical available home for rent received 10 enquiries, down from 11 a year ago and 22 at the height of tenant competition in 2022.</p>
<p>Before the pandemic, the average was five enquiries for each property.</p>
<h2>Tenant enquiries rise</h2>
<p>Annual advertised <a href="https://www.rightmove.co.uk/news/rental-price-tracker" target="_blank" rel="noopener">rent growth</a> reached 4.1% in both the North East and North West, compared with 1.5% in the East Midlands and East of England.</p>
<p>London recorded an average of eight enquiries for each available home, the lowest figure among the regions measured.</p>
<p>The North West had the highest, at 14 enquiries for each property.</p>
<p>Its daily buy to let mortgage tracker put the average mortgage rate at 5.55%, down from 5.67% a month earlier but above the 5.20% recorded a year ago.</p>
<p>Annual wage growth eased to 4.4%, with the platform reporting that tenants were becoming more price-conscious, particularly in more expensive areas.</p>
<p>The post <a rel="nofollow" href="https://www.property118.com/rents-hit-record-high-as-property-supply-falls/">Rents hit record high as property supply falls</a> appeared first on <a rel="nofollow" href="https://www.property118.com">Property118</a>.</p>
<p>View Full Article: <a href="https://www.property118.com/rents-hit-record-high-as-property-supply-falls/" target="_blank">Rents hit record high as property supply falls</a></p>
<p>The post <a rel="nofollow" href="http://lettinglinks.com/blog/rents-hit-record-high-as-property-supply-falls.html">Rents hit record high as property supply falls</a> appeared first on <a rel="nofollow" href="http://lettinglinks.com/blog">LettingLinks - Connecting Landlords &amp; Tenants</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://lettinglinks.com/blog/rents-hit-record-high-as-property-supply-falls.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Landlords could face monthly HMRC tax bills</title>
		<link>http://lettinglinks.com/blog/landlords-could-face-monthly-hmrc-tax-bills.html</link>
		<comments>http://lettinglinks.com/blog/landlords-could-face-monthly-hmrc-tax-bills.html#comments</comments>
		<pubDate>Wed, 15 Jul 2026 08:03:55 +0000</pubDate>
		<dc:creator><![CDATA[admin]]></dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[agents]]></category>

		<guid isPermaLink="false">http://lettinglinks.com/blog/landlords-could-face-monthly-hmrc-tax-bills.html</guid>
		<description><![CDATA[<p>Property118 Landlords could face monthly HMRC tax bills Landlords could be required to pay tax every month under Treasury proposals that would calculate deductions using income declared in the previous year, the Daily Telegraph reports. The move comes after the controversial Making Tax Digital (MTD) is already forcing thousands of property owners into a new [&#8230;]</p>
<p>The post <a rel="nofollow" href="http://lettinglinks.com/blog/landlords-could-face-monthly-hmrc-tax-bills.html">Landlords could face monthly HMRC tax bills</a> appeared first on <a rel="nofollow" href="http://lettinglinks.com/blog">LettingLinks - Connecting Landlords &amp; Tenants</a>.</p>
]]></description>
				<content:encoded><![CDATA[<p><a rel="nofollow" href="https://www.property118.com">Property118</a><br />
<img src="https://www.property118.com/wp-content/uploads/2026/07/ChatGPT-Image-Jul-14-2026-04_30_27-PM.png" style="margin: 1em auto"><br />
<a rel="nofollow" href="https://www.property118.com/landlords-could-face-monthly-hmrc-tax-bills/">Landlords could face monthly HMRC tax bills</a></p>
<p><strong>Landlords could be <a href="https://www.property118.com/government-defends-landlord-tax-hikes-as-fairer-system/" target="_blank" rel="noopener">required to pay tax every month</a> under Treasury proposals that would calculate deductions using income declared in the previous year, the Daily Telegraph reports.</strong></p>
<p>The move comes after the controversial Making Tax Digital (MTD) is already forcing thousands of property owners into a new quarterly reporting regime.</p>
<p>The government is consulting on plans that could allow HMRC to collect tax before some landlords and self-employed workers have received the income needed to pay it.</p>
<p>Monthly deductions would be based on the taxpayer&#8217;s previous annual return, with the resulting forecast liability divided into 12 payments.</p>
<p>Someone whose last return showed earnings of £30,000 could, for example, face deductions of £290 a month.</p>
<h2>Planned for 2030</h2>
<p>The system would apply to people earning above a threshold that has not yet been decided.</p>
<p>Labour plans to introduce the monthly payment regime from April 2030.</p>
<p>For landlords, the proposal could create problems where income changes sharply between tax years or varies during the year.</p>
<p>Voids, repairs, mortgage costs and late rent payments can all affect a landlord&#8217;s cashflow in any month.</p>
<h2>Paying tax in poor cashflow</h2>
<p>Zena Hanks, of accountancy firm Saffery, <a href="https://www.telegraph.co.uk/money/tax/news/labour-plots-monthly-tax-bills-for-self-employed-workers/" target="_blank" rel="noopener">told the Telegraph</a>: &#8220;For the self-employed, this is going to cause huge disruption to cashflow.</p>
<p>&#8220;The principles are sound, ensuring tax is paid closer to income being received, but you can&#8217;t predict future income easily.&#8221;</p>
<p>Self-employed taxpayers currently make payments on account twice a year, normally in January and July, based on their previous tax return.</p>
<p>Ms Hanks added: &#8220;It&#8217;s all very well HMRC issuing refunds, but taxpayers could have to pay more tax at a time when their business is under pressure.&#8221;</p>
<h2>Making Tax Digital</h2>
<p>The proposal follows the introduction of Making Tax Digital for Income Tax in April.</p>
<p>Eligible landlords and self-employed workers must now use HMRC-approved software and submit financial information four times a year.</p>
<p>The regime currently applies where qualifying income exceeds £50,000.</p>
<p>The threshold will fall to £30,000 next year and £20,000 from 2028.</p>
<h2>Want landlord views</h2>
<p>However, while quarterly submissions do not replace the annual tax return process, they do add another layer of record-keeping for landlords.</p>
<p>Making Tax Digital was delayed four times and ran £1bn over budget.</p>
<p>Its rollout has also prompted concern about whether HMRC could manage another major change to the way tax is reported and collected.</p>
<p>An HMRC spokesman told the newspaper: &#8220;Spreading tax payments more evenly through the year could help taxpayers avoid unexpected lump-sum bills and reduce the risk of falling into tax debt.</p>
<p>&#8220;We recognise that self-employed people and landlords can have fluctuating incomes, which is why we are consulting widely as we want to hear views on how potential reforms could work in practice.&#8221;</p>
<p>The post <a rel="nofollow" href="https://www.property118.com/landlords-could-face-monthly-hmrc-tax-bills/">Landlords could face monthly HMRC tax bills</a> appeared first on <a rel="nofollow" href="https://www.property118.com">Property118</a>.</p>
<p>View Full Article: <a href="https://www.property118.com/landlords-could-face-monthly-hmrc-tax-bills/" target="_blank">Landlords could face monthly HMRC tax bills</a></p>
<p>The post <a rel="nofollow" href="http://lettinglinks.com/blog/landlords-could-face-monthly-hmrc-tax-bills.html">Landlords could face monthly HMRC tax bills</a> appeared first on <a rel="nofollow" href="http://lettinglinks.com/blog">LettingLinks - Connecting Landlords &amp; Tenants</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://lettinglinks.com/blog/landlords-could-face-monthly-hmrc-tax-bills.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Government expands Awaab’s law for social housing landlords</title>
		<link>http://lettinglinks.com/blog/government-expands-awaabs-law-for-social-housing-landlords.html</link>
		<comments>http://lettinglinks.com/blog/government-expands-awaabs-law-for-social-housing-landlords.html#comments</comments>
		<pubDate>Tue, 14 Jul 2026 23:01:58 +0000</pubDate>
		<dc:creator><![CDATA[admin]]></dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[agents]]></category>

		<guid isPermaLink="false">http://lettinglinks.com/blog/government-expands-awaabs-law-for-social-housing-landlords.html</guid>
		<description><![CDATA[<p>Property118 Government expands Awaab’s law for social housing landlords The government has announced stricter rules for social landlords under phase two of Awaab’s Law. Coming into force on 30 November 2026, social housing landlords will now be required to fix more dangers like electrical faults, pest infestations and unsafe stairs to quicker timeframes. Under the [&#8230;]</p>
<p>The post <a rel="nofollow" href="http://lettinglinks.com/blog/government-expands-awaabs-law-for-social-housing-landlords.html">Government expands Awaab’s law for social housing landlords</a> appeared first on <a rel="nofollow" href="http://lettinglinks.com/blog">LettingLinks - Connecting Landlords &amp; Tenants</a>.</p>
]]></description>
				<content:encoded><![CDATA[<p><a rel="nofollow" href="https://www.property118.com">Property118</a><br />
<img src="https://www.property118.com/wp-content/uploads/2026/07/ChatGPT-Image-Jul-13-2026-03_15_51-PM.png" style="margin: 1em auto"><br />
<a rel="nofollow" href="https://www.property118.com/government-expands-awaabs-law-for-social-housing-landlords/">Government expands Awaab’s law for social housing landlords</a></p>
<p><strong>The government has announced stricter rules for social landlords under phase two of Awaab’s Law. </strong></p>
<p>Coming into force on 30 November 2026, social housing landlords will now be required to fix more dangers like electrical faults, pest infestations and unsafe stairs to quicker timeframes.</p>
<p>Under the Renters’ Rights Act, Awaab’s law <a href="https://www.property118.com/tenants-will-be-able-to-challenge-landlords-over-awaabs-law-and-could-win-compensation/" target="_blank" rel="noopener">will be extended</a> to the private rented sector.</p>
<h2>Seven types of hazards covered by Awaab’s Law</h2>
<p>Under the rules, seven types of hazards will now be covered by phase two of Awaab’s which include:</p>
<ul>
<li>Risks from falling (e.g. unsafe stairs or broken balcony railings)</li>
<li>Structural problems (e.g. unsafe walls or ceilings)</li>
<li>Electrical faults</li>
<li>Hygiene issues (e.g. pests, drainage or sanitation problems)</li>
<li>Excess cold and heat (e.g. heating failure or broken windows)</li>
<li>Fire risks</li>
</ul>
<p>For dangerous problems, social housing landlords will need to investigate and make the problem safe within 24 hours.</p>
<p>For serious but non-immediate risks, landlords must investigate within 10 working days, provide a written action summary within 3 working days, complete urgent safety work within 5 working days of the investigation, and begin longer-term repairs within 12 weeks.</p>
<h2>Reaction to phase two of Awaab’s Law</h2>
<p>Housing Secretary Steve Reed said: “Awaab’s Law sends a clear message that tenants’ health and safety can never be compromised.</p>
<p>“This action will mean dangers have to be dealt with quickly by law, protecting tenants’ rights to a safe and decent home.”</p>
<p>Gavin Smart, chief executive of the Chartered Institute of Housing (CIH) said: “Extending Awaab&#8217;s Law to these hazards is an important step towards safer, healthier homes, and we welcome the collaborative approach the government has taken.</p>
<p>“This is about more than compliance; it is a culture of listening to residents and acting on their concerns, and that is the change we want to help the sector deliver. CIH will support our members in delivering these duties and in continuing to feedback throughout the test-and-learn phase.”</p>
<p>Kate Henderson, chief executive of the National Housing Federation, said: “The safety of homes is housing associations’ top priority. We welcome the publication of this guidance, which gives housing associations more clarity over the next phase of Awaab&#8217;s Law and time to prepare for its implementation.</p>
<p>“We and our members have engaged with the government throughout the development of Awaab&#8217;s Law to ensure it achieves the best outcomes for residents and is deliverable for housing associations, and we will continue to work with the government on these important measures.”</p>
<h2>Fix dangerous damp and mould</h2>
<p>Phase One of Awaab’s Law has been in place since last year, requiring social housing landlords to address dangerous damp and mould within strict timeframes.</p>
<p>The government has confirmed that only hazards posing an immediate danger must be made safe within 24 hours.</p>
<p>Other serious issues will still need to be dealt with within set deadlines, but these will allow slightly longer timescales.</p>
<p>The post <a rel="nofollow" href="https://www.property118.com/government-expands-awaabs-law-for-social-housing-landlords/">Government expands Awaab’s law for social housing landlords</a> appeared first on <a rel="nofollow" href="https://www.property118.com">Property118</a>.</p>
<p>View Full Article: <a href="https://www.property118.com/government-expands-awaabs-law-for-social-housing-landlords/" target="_blank">Government expands Awaab’s law for social housing landlords</a></p>
<p>The post <a rel="nofollow" href="http://lettinglinks.com/blog/government-expands-awaabs-law-for-social-housing-landlords.html">Government expands Awaab’s law for social housing landlords</a> appeared first on <a rel="nofollow" href="http://lettinglinks.com/blog">LettingLinks - Connecting Landlords &amp; Tenants</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://lettinglinks.com/blog/government-expands-awaabs-law-for-social-housing-landlords.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Landlords face higher court costs as possession claim fees increase</title>
		<link>http://lettinglinks.com/blog/landlords-face-higher-court-costs-as-possession-claim-fees-increase.html</link>
		<comments>http://lettinglinks.com/blog/landlords-face-higher-court-costs-as-possession-claim-fees-increase.html#comments</comments>
		<pubDate>Tue, 14 Jul 2026 07:01:26 +0000</pubDate>
		<dc:creator><![CDATA[admin]]></dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[agents]]></category>

		<guid isPermaLink="false">http://lettinglinks.com/blog/landlords-face-higher-court-costs-as-possession-claim-fees-increase.html</guid>
		<description><![CDATA[<p>Property118 Landlords face higher court costs as possession claim fees increase The government has announced that court fees for landlords will rise this week. However, fees for tenants to challenge a rent increase will remain frozen at £47. The news comes as the government claims the justice system &#8220;is well prepared&#8221; to handle the Renters&#8217; [&#8230;]</p>
<p>The post <a rel="nofollow" href="http://lettinglinks.com/blog/landlords-face-higher-court-costs-as-possession-claim-fees-increase.html">Landlords face higher court costs as possession claim fees increase</a> appeared first on <a rel="nofollow" href="http://lettinglinks.com/blog">LettingLinks - Connecting Landlords &amp; Tenants</a>.</p>
]]></description>
				<content:encoded><![CDATA[<p><a rel="nofollow" href="https://www.property118.com">Property118</a><br />
<img src="https://www.property118.com/wp-content/uploads/2026/07/ChatGPT-Image-Jul-13-2026-11_32_39-AM.png" style="margin: 1em auto"><br />
<a rel="nofollow" href="https://www.property118.com/landlords-face-higher-court-costs-as-possession-claim-fees-increase/">Landlords face higher court costs as possession claim fees increase</a></p>
<p><strong>The government has announced that court fees for landlords will rise this week.</strong></p>
<p>However, fees for tenants to challenge a rent increase will remain frozen at £47.</p>
<p>The news comes as the government claims the justice system <a href="https://www.property118.com/government-defends-court-readiness-amid-warnings-over-renters-rights-act-strain/" target="_blank" rel="noopener">&#8220;is well prepared&#8221;</a> to handle the Renters&#8217; Rights Act.</p>
<h2>Rise due to inflation</h2>
<p>Annual price rises linked to inflation mean that, from this week, charges for possession claims will increase from £404 to £415, while bailiff fees will rise from £148 to £152.</p>
<p>The government says the increases to court and tribunal fees are part of annual price rises linked to inflation.</p>
<p>The National Residential Landlords Association (NRLA) <a href="https://www.nrla.org.uk/news/landlord-court-fees-rising-july-2026" target="_blank" rel="noopener">writes on its website</a> that the government claims the money raised from the increases will &#8220;be used to fund the improvements to the justice system pledged by the Government as part of the Renters&#8217; Rights Act, which has promised end-to-end digitisation of the courts by spring next year&#8221;.</p>
<p>It adds: “In all, 80 fees across the Residential Property Division of the Property Chamber of the First-tier Tribunal will increase, including those for leasehold cases and most residential property cases.”</p>
<h2>Deep concerns about readiness of court system</h2>
<p>The news comes as industry experts warn the Renters’ Rights Act could overwhelm the court system.</p>
<p><a href="https://www.property118.com/government-claims-renters-rights-act-will-ease-court-demand-but-experts-warn-of-court-chaos/" target="_blank" rel="noopener">As previously reported by Property118</a>,  Propertymark warn the court system is not ready to handle the surge in claims as landlords are already waiting months to regain possession.</p>
<p>Megan Eighteen, President of ARLA Propertymark (Association of Residential Letting Agents), told Property118: “We recognise ambition behind the Renters’ Rights Act, but there remain deep concerns about the readiness of the court system to cope with the anticipated rise in possession and eviction cases.</p>
<p>“Removing “no-fault” evictions under Section 21 will shift many cases into contested hearings under Section 8, placing an increased burden on a system already stretched beyond capacity. Recent data shows that, in many parts of England, the time between claim and hearing now routinely stretches to 29 weeks, and in London that wait can extend to as long as 40 weeks.”</p>
<p>The post <a rel="nofollow" href="https://www.property118.com/landlords-face-higher-court-costs-as-possession-claim-fees-increase/">Landlords face higher court costs as possession claim fees increase</a> appeared first on <a rel="nofollow" href="https://www.property118.com">Property118</a>.</p>
<p>View Full Article: <a href="https://www.property118.com/landlords-face-higher-court-costs-as-possession-claim-fees-increase/" target="_blank">Landlords face higher court costs as possession claim fees increase</a></p>
<p>The post <a rel="nofollow" href="http://lettinglinks.com/blog/landlords-face-higher-court-costs-as-possession-claim-fees-increase.html">Landlords face higher court costs as possession claim fees increase</a> appeared first on <a rel="nofollow" href="http://lettinglinks.com/blog">LettingLinks - Connecting Landlords &amp; Tenants</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://lettinglinks.com/blog/landlords-face-higher-court-costs-as-possession-claim-fees-increase.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Greens welcome claim that rent controls could save tenants £2,400 a year</title>
		<link>http://lettinglinks.com/blog/greens-welcome-claim-that-rent-controls-could-save-tenants-2400-a-year.html</link>
		<comments>http://lettinglinks.com/blog/greens-welcome-claim-that-rent-controls-could-save-tenants-2400-a-year.html#comments</comments>
		<pubDate>Mon, 13 Jul 2026 23:01:40 +0000</pubDate>
		<dc:creator><![CDATA[admin]]></dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[agents]]></category>

		<guid isPermaLink="false">https://lettinglinks.com/blog/greens-welcome-claim-that-rent-controls-could-save-tenants-2400-a-year.html</guid>
		<description><![CDATA[<p>Property118 Greens welcome claim that rent controls could save tenants £2,400 a year Rent controls could save the average private tenant in England £2,400 a year, according to a report welcomed by Green Party leader Zack Polanski. The report, published by the UCL Institute for Innovation and Public Purpose, argues that controlling rents could reduce [&#8230;]</p>
<p>The post <a rel="nofollow" href="http://lettinglinks.com/blog/greens-welcome-claim-that-rent-controls-could-save-tenants-2400-a-year.html">Greens welcome claim that rent controls could save tenants £2,400 a year</a> appeared first on <a rel="nofollow" href="http://lettinglinks.com/blog">LettingLinks - Connecting Landlords &amp; Tenants</a>.</p>
]]></description>
				<content:encoded><![CDATA[<p><a rel="nofollow" href="https://www.property118.com">Property118</a><br />
<img src="https://www.property118.com/wp-content/uploads/2026/07/ChatGPT-Image-Jul-13-2026-02_14_02-PM.png" style="margin: 1em auto"><br />
<a rel="nofollow" href="https://www.property118.com/greens-welcome-claim-that-rent-controls-could-save-tenants-2400-a-year/">Greens welcome claim that rent controls could save tenants £2,400 a year</a></p>
<p><strong>Rent controls could save the average private tenant in England £2,400 a year, according to a report welcomed by Green Party leader Zack Polanski.</strong></p>
<p>The report, published by the UCL Institute for Innovation and Public Purpose, argues that <a href="https://www.property118.com/why-rent-controls-are-the-wrong-answer-to-a-housing-shortage/" target="_blank" rel="noopener">controlling rents</a> could reduce housing benefit spending while improving affordability for lower-income households.</p>
<p>It was written by Dr Beth Stratford, an honorary research fellow at the institute, and Dr Joe Beswick of the Rosa Luxemburg Foundation.</p>
<p>Researchers calculated that, had rents been frozen in November 2022, the government could have restored housing support to cover the cheapest 30% of local rents and still be spending £2 billion less each year on housing benefit.</p>
<p>Combining the freeze with increased housing support would now be saving the average renting household £2,400 annually, the report claims.</p>
<p>Also, disposable income among renters in the poorest fifth of households would be 22% higher.</p>
<h2>Bring in rent controls</h2>
<p>Mr Polanski welcomed the findings, saying on social media: &#8220;Great to see how well the new report into rent controls has landed!</p>
<p>&#8220;It saves renters money and it saves government money.</p>
<p>&#8220;And some of that money should be used on building new social housing stock, too!</p>
<p>&#8220;Win/win all around!&#8221;</p>
<p>He has previously promoted the report by saying it was time to &#8220;take back control of rents&#8221;.</p>
<h2>Help cost-of-living</h2>
<p>The Green Party has already called for rent controls as part of its response to the cost-of-living crisis.</p>
<p>During its 2026 local election campaign, it said councils should be given powers to restrict rent increases.</p>
<p>The Wales Green Party proposed a one-year freeze as a longer-term system was developed.</p>
<p>The <a href="https://www.ucl.ac.uk/bartlett/publications/2026/jul/taking-back-of-control-rents" target="_blank" rel="noopener">new analysis</a> also challenges claims that substantial rent reductions would make large numbers of landlords financially unviable.</p>
<h2>Landlord profits cut</h2>
<p>Using HM Revenue &amp; Customs data, the researchers estimated that a 20% reduction would cut the mean pre-tax profit margin among mortgaged landlords from 70% to 64%.</p>
<p>That margin, they said, would still be 4.5 times the average pre-tax margin recorded by businesses across the economy.</p>
<p>However, the calculation excludes capital gains arising from house price growth.</p>
<p>Unmortgaged landlords, who account for 58% of unincorporated landlords in the report&#8217;s analysis, would retain higher margins.</p>
<p>A 10% rent reduction would make an estimated 2.3% of landlords unprofitable.</p>
<h2>Controls will lead to sell off</h2>
<p>The authors accept that controls would prompt some landlords to sell, including to councils and housing associations.</p>
<p>Savings generated by a 20% reduction could, within 10 years, support the purchase of at least 48% of the properties made unprofitable by the policy, the report estimates.</p>
<p>Half of those acquired homes could then be converted to social rent.</p>
<p>The proportion that could be purchased would rise to at least 56% with changes to council financing, according to the calculations.</p>
<p>The post <a rel="nofollow" href="https://www.property118.com/greens-welcome-claim-that-rent-controls-could-save-tenants-2400-a-year/">Greens welcome claim that rent controls could save tenants £2,400 a year</a> appeared first on <a rel="nofollow" href="https://www.property118.com">Property118</a>.</p>
<p>View Full Article: <a href="https://www.property118.com/greens-welcome-claim-that-rent-controls-could-save-tenants-2400-a-year/" target="_blank">Greens welcome claim that rent controls could save tenants £2,400 a year</a></p>
<p>The post <a rel="nofollow" href="http://lettinglinks.com/blog/greens-welcome-claim-that-rent-controls-could-save-tenants-2400-a-year.html">Greens welcome claim that rent controls could save tenants £2,400 a year</a> appeared first on <a rel="nofollow" href="http://lettinglinks.com/blog">LettingLinks - Connecting Landlords &amp; Tenants</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://lettinglinks.com/blog/greens-welcome-claim-that-rent-controls-could-save-tenants-2400-a-year.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Is compensation culture coming to the PRS?</title>
		<link>http://lettinglinks.com/blog/is-compensation-culture-coming-to-the-prs.html</link>
		<comments>http://lettinglinks.com/blog/is-compensation-culture-coming-to-the-prs.html#comments</comments>
		<pubDate>Mon, 13 Jul 2026 07:53:05 +0000</pubDate>
		<dc:creator><![CDATA[admin]]></dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[agents]]></category>

		<guid isPermaLink="false">http://lettinglinks.com/blog/is-compensation-culture-coming-to-the-prs.html</guid>
		<description><![CDATA[<p>Property118 Is compensation culture coming to the PRS? Landlords have grown used to bad news under the Renters’ Rights Act, but the suggestion that tenants could be awarded up to £25,000 through the new Private Rented Sector Ombudsman scheme appears to have touched a particular nerve. It is not just the size of the potential [&#8230;]</p>
<p>The post <a rel="nofollow" href="http://lettinglinks.com/blog/is-compensation-culture-coming-to-the-prs.html">Is compensation culture coming to the PRS?</a> appeared first on <a rel="nofollow" href="http://lettinglinks.com/blog">LettingLinks - Connecting Landlords &amp; Tenants</a>.</p>
]]></description>
				<content:encoded><![CDATA[<p><a rel="nofollow" href="https://www.property118.com">Property118</a><br />
<img src="https://www.property118.com/wp-content/uploads/2026/07/compensation-culture.png" style="margin: 1em auto"><br />
<a rel="nofollow" href="https://www.property118.com/is-compensation-culture-coming-to-the-prs/">Is compensation culture coming to the PRS?</a></p>
<p>Landlords have grown used to bad news under the Renters’ Rights Act, but the suggestion that <a href="https://www.property118.https:/www.property118.com/tenants-could-claim-25000-in-compensation-under-prs-ombudsman-scheme/tenants-could-claim-25000-in-compensation-under-prs-ombudsman-scheme/" target="_blank" rel="noopener">tenants could be awarded up to £25,000 through the new Private Rented Sector Ombudsman scheme</a> appears to have touched a particular nerve.</p>
<p>It is not just the size of the potential award that has caused alarm. It is what the proposal symbolises. For many landlords, it feels like <strong>the latest sign that the private rented sector is being pushed further towards a compensation culture</strong> in which every dispute carries the threat of a financial claim, while the landlord remains the obvious party to pursue.</p>
<p>The government’s position is that the PRS Ombudsman will provide a quick, fair, impartial and binding route for resolving complaints. On paper, that sounds reasonable enough. Most landlords would accept that tenants need an accessible route to challenge genuinely poor practice. But what has worried many in the sector is the direction of travel.</p>
<p><strong>During a House of Lords debate, Baroness Taylor of Stevenage suggested that the £25,000 cap was designed to align with other redress schemes, but also made clear that tenants who believe they deserve more could still pursue a higher award through the courts.</strong></p>
<p>That combination is what has prompted the sharp reaction. <strong>A £25,000 ombudsman award is already a very significant sum for the average buy-to-let landlord.</strong> The suggestion that it could merely be the starting point, with court action available on top, risks creating the impression that complaints are no longer simply about resolving problems but about opening another route to compensation.</p>
<p>That fear is not emerging in a vacuum. It is landing after months of new duties, fresh fines, compliance deadlines and warnings about what landlords may face if they get things wrong. Let or advertise a property without first registering it on the new PRS database when it is launched and the civil penalty can be up to £7,000. Provide fraudulent information and the fine can rise to £40,000.</p>
<p>Against that backdrop, <strong>it is not hard to see why some landlords are asking whether</strong> the private rented sector is drifting into a system where they are expected to absorb ever more risk, cost and scrutiny, while <strong>tenants are increasingly encouraged to view problems through the lens of redress and compensation</strong>.</p>
<p>That anxiety came through clearly in the reaction from landlords. One described it bluntly as “compensation culture now moving into the PRS”, saying the system risks creating a queue not just of genuine applicants for housing, but of people looking to “make a quick buck”.</p>
<p>Another landlord questioned how these figures are arrived at in the first place, asking whether they are simply “plucked out of the air” and pointing out that while ministers and peers may speak casually about £25,000 or £40,000, most landlords do not have that sort of money sitting in the bank ready to absorb a dispute.</p>
<p>One commenter, <strong>a landlord of more than 35 years, said he had already decided to keep seven of his ten rental dwellings empty rather than expose himself to the new regime</strong>.</p>
<p>Another argued that if the Ombudsman is supposed to be quick, fair and impartial, there should be some equivalent mechanism for dealing with serious tenant misconduct and damage, rather than a one-way process in which landlords face the prospect of fines, claims and penalties while rogue tenants face little meaningful sanction.</p>
<p>In principle, an ombudsman should resolve disputes fairly. In practice, landlords worry that “fair and impartial” may not feel especially fair if every reform appears to start from the assumption that the landlord is the problem, the landlord is the one who must prove compliance, and the landlord is the one with the deepest pocket.</p>
<p>When viewed alongside the abolition of Section 21, tougher possession rules, the PRS database, the Ombudsman, financial penalties, the threat of Rent Repayment Orders, aggressive local authority enforcement / inspection and fines of up to £7,000 just for not making sure your tenants know the options available to them, <strong>it’s no wonder so many landlords see this as just another attack in a long line of landlord bashing and opportunist money grabbing.</strong></p>
<p>There is a growing sense reflected in the comments, that private landlords are being regulated not as housing providers, but <strong>as the easiest people in the room to make pay</strong>.</p>
<p>When landlords say they are keeping their properties empty rather than re-letting, policy makers need to take note because the outcome will not be a more stable private rented sector. It will be fewer homes available to rent, more landlords planning their exit, and more pressure on the tenants the reforms are supposed to protect.</p>
<p>Faced with rising compliance costs, tougher regulation and the prospect of large compensation awards on top, and a clear and obvious bias towards tenants concerns, smaller landlords in particular may conclude that the risk-reward equation no longer works.</p>
<p>A landlord commented: “I’ve had the tenant from hell who destroyed my property then launched a dilapidation claim against me because I didn’t agree the repair claims were bona fide (was her dad producing fake invoices using struck off companies!</p>
<p>“No matter how you dress it up its horrendous cost, stress and expense so why the F isn’t there a rogue tenant database that we can use.</p>
<p>“Fair and impartial aren’t words I would use ….</p>
<p><strong>Is compensation culture coming to the PRS?</strong> On the evidence of their reaction to the latest news, <strong>it’s clear many landlords believe it is already here</strong>.</p>
<p>Whether that fear proves justified may depend on how the Ombudsman scheme operates in practice, how proportionate its awards are, and whether the government shows any willingness to balance tenant redress with recognition that most landlords are not large institutions with limitless resources.</p>
<p>If that growing sense of exposure is already making you question whether it is time to sell, it helps to have someone on your side who understands exactly why landlords are feeling this way and know what they need to do to protect your business from resentment and retaliation if you decide to sell.</p>
<p><strong>In a market where many landlords feel they are becoming an easy target, the right support is not just about finding a buyer. It is about helping you move on with clarity, confidence and as little additional risk as possible.</strong></p>
<p>Founded by landlords for landlords, we know exactly what it takes to sell buy-to-let portfolios fast and we have the network to do it. Whether it’s your whole portfolio, or part of your portfolio, Landlord Sales Agency can sell with or without tenants, and in most cases we’re able to sell no matter what the condition.</p>
<p>If your mind is already made up about the direction the PRS is taking and you want to sell, get in touch. We will help you make it happen sooner rather than later.</p>
<div class="p118-crm-form" id="crm-form-ba09a29b">
<div class="crm-page">
<div class="crm-field"><label for="crm-field-c364951b-ecb0-4a12-bfa4-9dbe564310e8">Name<span class="crm-required">*</span></label>
<div></div>
</div>
<div class="crm-field"><label for="crm-field-910107df-b8a8-4541-879f-541cef9449e4">Email<span class="crm-required">*</span></label></div>
<div class="crm-field"><label for="crm-field-3b317ed9-d327-4fe2-b92e-67efede67e6d">Phone<span class="crm-required">*</span></label></div>
<div class="crm-field"><label for="crm-field-c6fae2f0-c335-452b-aa03-2cc066163d71">Please give us details of how we can help and the properties in question<span class="crm-required">*</span></label><textarea id="crm-field-c6fae2f0-c335-452b-aa03-2cc066163d71" name="c6fae2f0-c335-452b-aa03-2cc066163d71"></textarea></div>
<div class="crm-field"><label for="crm-field-34c27d9f-b3d1-4a6d-b720-24000e9fa468">Privacy Policy<span class="crm-required">*</span></label>
<div class="crm-choices"><label> I have read and accept Property118’s <a href="/privacy-policy/">Privacy Policy</a></label></div>
</div>
<div class="crm-field crm-turnstile">
<div id="ts-607776b5-3f7b-431c-b5cc-fc304603fee3" class="cf-turnstile"></div>
</div>
<p>(function(){var el=document.getElementById(&#8220;ts-607776b5-3f7b-431c-b5cc-fc304603fee3&#8243;);if(!el)return;var b=document.body,h=document.documentElement;var dark=b.classList.contains(&#8220;dark-mode&#8221;)||b.classList.contains(&#8220;dark&#8221;)||b.classList.contains(&#8220;night-mode&#8221;)||h.classList.contains(&#8220;dark&#8221;);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)&lt;128;}el.setAttribute(&quot;data-theme&quot;,dark?&quot;dark&quot;:&quot;light&quot;);if(window.turnstile&amp;&amp;el.childElementCount===0){try{window.turnstile.render(el,{sitekey:el.getAttribute(&quot;data-sitekey&quot;),theme:el.getAttribute(&quot;data-theme&quot;)});}catch(e){}}})();									</p></div>
<div class="crm-submit">
					<button type="submit">Submit</button>
				</div>
<div class="crm-message"></div>
</p></div>
<p>		(function(){<br />
			var uid     = &#8220;crm-form-ba09a29b&#8221;;<br />
			var form    = document.getElementById(uid + &#8216;-form&#8217;);<br />
			var wrap    = document.getElementById(uid);<br />
			var msg     = wrap.querySelector(&#8216;.crm-message&#8217;);<br />
			var totalPages = 1;<br />
			var curPage = 0;</p>
<p>			// ── Conditional logic ────────────────────────────────────────────────<br />
			var condMap = {};</p>
<p>			function getFieldValue(fieldId) {<br />
				var els = form.querySelectorAll(&#8216;[name=&#8221;&#8216; + fieldId + &#8216;&#8221;], [name=&#8221;&#8216; + fieldId + &#8216;[]&#8221;]&#8217;);<br />
				if (!els.length) return &#8221;;<br />
				var first = els[0];<br />
				if (first.type === &#8216;checkbox&#8217; || first.type === &#8216;radio&#8217;) {<br />
					var checked = [];<br />
					els.forEach(function(el){ if (el.checked) checked.push(el.value); });<br />
					return checked.join(&#8216;,&#8217;);<br />
				}<br />
				return first.value;<br />
			}</p>
<p>			function evalRule(rule) {<br />
				var val = getFieldValue(rule.fieldId);<br />
				var cmp = rule.value;<br />
				switch (rule.operator) {<br />
					case &#8216;is': return val === cmp;<br />
					case &#8216;isnot': return val !== cmp;<br />
					case &#8216;greaterthan': return parseFloat(val) &gt; parseFloat(cmp);<br />
					case &#8216;lessthan': return parseFloat(val) &lt; parseFloat(cmp);<br />
					case &#039;contains&#039;: return val.indexOf(cmp) !== -1;<br />
					case &#039;startswith&#039;: return val.indexOf(cmp) === 0;<br />
					case &#039;endswith&#039;: return val.slice(-cmp.length) === cmp;<br />
					default: return false; // fail closed — mirror the CRM shared matcher<br />
				}<br />
			}</p>
<p>			function applyConditionals() {<br />
				Object.keys(condMap).forEach(function(fieldId) {<br />
					var cond = condMap[fieldId];<br />
					var rules = cond.rules || [];<br />
					var match = cond.logicType === &#039;any&#039;<br />
						? rules.some(evalRule)<br />
						: rules.every(evalRule);<br />
					var show = cond.actionType === &#039;show&#039; ? match : !match;<br />
					var wrapper = form.querySelector(&#039;[data-field-id=&quot;&#039; + fieldId + &#039;&quot;]&#039;);<br />
					if (!wrapper) {<br />
						var el = form.querySelector(&#039;[name=&quot;&#039; + fieldId + &#039;&quot;], [name=&quot;&#039; + fieldId + &#039;[]&quot;]&#039;);<br />
						if (el) wrapper = el.closest(&#039;.crm-field, .crm-half&#039;);<br />
					}<br />
					if (wrapper) wrapper.style.display = show ? &#039;&#039; : &#039;none&#039;;<br />
				});<br />
			}</p>
<p>			form.addEventListener(&#039;change&#039;, applyConditionals);<br />
			form.addEventListener(&#039;input&#039;, applyConditionals);<br />
			applyConditionals();</p>
<p>			// ── Required-field validation (Next + Submit) ────────────────────────<br />
			// Validate from the form&#039;s field config (id + type), NOT the [required]<br />
			// HTML attribute: a checkbox group can&#039;t carry a meaningful `required`<br />
			// (native means &quot;tick every box&quot;), so attribute checks skip it — which is<br />
			// why empty checkbox questions slipped past Next straight to submit.<br />
			var crmRequired = [{&quot;id&quot;:&quot;c364951b-ecb0-4a12-bfa4-9dbe564310e8&quot;,&quot;type&quot;:&quot;name&quot;,&quot;label&quot;:&quot;Name&quot;},{&quot;id&quot;:&quot;910107df-b8a8-4541-879f-541cef9449e4&quot;,&quot;type&quot;:&quot;email&quot;,&quot;label&quot;:&quot;Email&quot;},{&quot;id&quot;:&quot;3b317ed9-d327-4fe2-b92e-67efede67e6d&quot;,&quot;type&quot;:&quot;phone&quot;,&quot;label&quot;:&quot;Phone&quot;},{&quot;id&quot;:&quot;c6fae2f0-c335-452b-aa03-2cc066163d71&quot;,&quot;type&quot;:&quot;textarea&quot;,&quot;label&quot;:&quot;Please give us details of how we can help and the properties in question&quot;},{&quot;id&quot;:&quot;34c27d9f-b3d1-4a6d-b720-24000e9fa468&quot;,&quot;type&quot;:&quot;checkbox&quot;,&quot;label&quot;:&quot;Privacy Policy&quot;}];<br />
			function crmWrapper(id) {<br />
				var w = form.querySelector(&#039;[data-field-id=&quot;&#039; + id + &#039;&quot;]&#039;);<br />
				if (!w) { var el = form.querySelector(&#039;[name=&quot;&#039; + id + &#039;&quot;], [name=&quot;&#039; + id + &#039;[]&quot;]&#039;); if (el) w = el.closest(&#039;.crm-field, .crm-half&#039;); }<br />
				return w;<br />
			}<br />
			function crmFilled(fld) {<br />
				var els = form.querySelectorAll(&#039;[name=&quot;&#039; + fld.id + &#039;&quot;], [name=&quot;&#039; + fld.id + &#039;[]&quot;]&#039;);<br />
				if (!els.length) return true;<br />
				if ([&#039;checkbox&#039;,&#039;radio&#039;,&#039;product&#039;,&#039;consent&#039;].indexOf(fld.type) !== -1) { return Array.prototype.some.call(els, function(el){ return el.checked; }); }<br />
				return (els[0].value || &#039;&#039;).trim() !== &#039;&#039;;<br />
			}<br />
			function crmFirstInvalid(pageIdx) {<br />
				for (var i = 0; i &lt; crmRequired.length; i++) {<br />
					var fld = crmRequired[i]; var w = crmWrapper(fld.id);<br />
					if (!w) continue;<br />
					if (w.style.display === &#039;none&#039;) continue;<br />
					if (pageIdx != null) { var pd = w.closest(&#039;[data-page]&#039;); if (!pd || parseInt(pd.getAttribute(&#039;data-page&#039;)) !== pageIdx) continue; }<br />
					if (!crmFilled(fld)) return fld;<br />
				}<br />
				return null;<br />
			}<br />
			// Shows the error in a red box UNDER the field, matching the form&#039;s own<br />
			// .crm-message error styling, and scrolls to it.<br />
			function crmMarkError(w, text) {<br />
				if (!w) return;<br />
				var e = w.querySelector(&#039;.crm-inline-error&#039;);<br />
				if (!e) { e = document.createElement(&#039;div&#039;); e.className = &#039;crm-inline-error&#039;; w.appendChild(e); }<br />
				e.style.cssText = &#039;background:#fee2e2;color:#991b1b;padding:.55rem .75rem;border-radius:4px;margin-top:.4rem;font-size:.9rem&#039;;<br />
				e.textContent = text || &#039;Please answer this before continuing.&#039;;<br />
			}<br />
			function crmClearError(w) { if (!w) return; var e = w.querySelector(&#039;.crm-inline-error&#039;); if (e) e.parentNode.removeChild(e); }<br />
			function crmReportInvalid(fld) {<br />
				var w = crmWrapper(fld.id);<br />
				var t = ([&#039;checkbox&#039;,&#039;product&#039;].indexOf(fld.type) !== -1) ? &#039;Please select at least one option.&#039; : (fld.type === &#039;radio&#039; ? &#039;Please choose an option.&#039; : &#039;Please fill this in.&#039;);<br />
				crmMarkError(w, t);<br />
				if (w &amp;&amp; w.scrollIntoView) w.scrollIntoView({ behavior: &#039;smooth&#039;, block: &#039;center&#039; });<br />
			}<br />
			form.addEventListener(&#039;change&#039;, function(e){ var w = e.target &amp;&amp; e.target.closest ? e.target.closest(&#039;.crm-field, .crm-half, [data-field-id]&#039;) : null; if (w) crmClearError(w); });<br />
			form.addEventListener(&#039;input&#039;, function(e){ var w = e.target &amp;&amp; e.target.closest ? e.target.closest(&#039;.crm-field, .crm-half, [data-field-id]&#039;) : null; if (w) crmClearError(w); });</p>
<p>			// ── Multi-page navigation ────────────────────────────────────────────</p>
<p>			// ── Submit ────────────────────────────────────────────────────────────<br />
			var submitBtn = form.querySelector(&#039;button[type=submit]&#039;);<br />
			var btnText   = submitBtn ? submitBtn.textContent : &#039;Submit&#039;;</p>
<p>			var crmApiUrl = &quot;https://p118-crm-api.accent.sh&quot;;</p>
<p>			function collectFormData() {<br />
				var data = {};<br />
				for (var j = 0; j &lt; form.elements.length; j++) {<br />
					var el = form.elements[j];<br />
					if (!el.name) continue;<br />
					if (el.type === &#039;file&#039;) continue; // handled by uploadFiles()<br />
					if (el.type === &#039;radio&#039; &amp;&amp; !el.checked) continue;<br />
					if (el.type === &#039;checkbox&#039;) {<br />
						if (!el.checked) continue;<br />
						var k = el.name.replace(&#039;[]&#039;,&#039;&#039;);<br />
						data[k] = data[k] ? data[k].concat([el.value]) : [el.value];<br />
					} else {<br />
						data[el.name] = el.value;<br />
					}<br />
				}<br />
				// Repeater fields: sub-inputs are named &quot;[][]&#8221;.<br />
				// Group those flat keys into an array of row objects under the repeater<br />
				// id. Plain fields, checkbox &#8220;[]&#8221; arrays and single-bracket composites<br />
				// (name[first], address[city]) don&#8217;t match the double-bracket pattern, so<br />
				// ordinary submissions are unchanged.<br />
				var _repRe = /^(.+?)[(d+)][(.+)]$/;<br />
				var _repIds = {};<br />
				Object.keys( data ).forEach( function ( key ) {<br />
					var m = key.match( _repRe );<br />
					if ( ! m ) { return; }<br />
					var rid = m[1], row = parseInt( m[2], 10 ), sub = m[3];<br />
					_repIds[ rid ] = true;<br />
					if ( ! Array.isArray( data[ rid ] ) ) { data[ rid ] = []; }<br />
					if ( ! data[ rid ][ row ] || typeof data[ rid ][ row ] !== &#8216;object&#8217; ) { data[ rid ][ row ] = {}; }<br />
					data[ rid ][ row ][ sub ] = data[ key ];<br />
					delete data[ key ];<br />
				} );<br />
				Object.keys( _repIds ).forEach( function ( rid ) {<br />
					if ( Array.isArray( data[ rid ] ) ) {<br />
						data[ rid ] = data[ rid ].filter( function ( r ) { return r &amp;&amp; typeof r === &#8216;object'; } );<br />
					}<br />
				} );<br />
				// GF auto-substituted {user_agent} / {referer} on hidden fields<br />
				// at render time. We do the equivalent right before submit so<br />
				// fields whose default value carries these placeholders<br />
				// resolve to the browser&#8217;s actual values rather than being<br />
				// stored as literal &#8220;{user_agent}&#8221; / &#8220;{referer}&#8221; strings.<br />
				// The last ARTICLE the visitor read (set client-side on post views by<br />
				// P118_Article_Views). Used to attribute the enquiry to the article<br />
				// even after navigating away or with a stripped/absent referer.<br />
				var lastPost = &#8221;;<br />
				try {<br />
					var lpm = document.cookie.match(/(?:^|;s*)p118_last_post=([^;]+)/);<br />
					if (lpm) lastPost = decodeURIComponent(lpm[1]);<br />
				} catch (e) {}<br />
				var subs = {<br />
					&#8216;{user_agent}':  navigator.userAgent || &#8221;,<br />
					// Prefer the last article read; fall back to the (lossy) HTTP referer.<br />
					&#8216;{referer}':     lastPost || document.referrer || &#8221;,<br />
					&#8216;{last_post}':   lastPost || &#8221;,<br />
					&#8216;{embed_url}':   window.location.href || &#8221;,<br />
				};<br />
				for (var name in data) {<br />
					if (!data.hasOwnProperty(name)) continue;<br />
					var v = data[name];<br />
					if (typeof v !== &#8216;string&#8217;) continue;<br />
					for (var tag in subs) {<br />
						if (v.indexOf(tag) !== -1) v = v.split(tag).join(subs[tag]);<br />
					}<br />
					data[name] = v;<br />
				}<br />
				// Agent/BDM attribution — read LIVE so it works even on a fully cached<br />
				// page (the browser always sees the real URL + cookie). URL ?ataid=/?cid=<br />
				// first, then the 30-day agent_id/cid cookies set by atat-tracking.php.<br />
				var _qp = new URLSearchParams(window.location.search);<br />
				var _ataid = _qp.get(&#8216;ataid&#8217;) || (document.cookie.match(/(?:^|;s*)agent_id=([^;]+)/) || [])[1] || &#8221;;<br />
				var _cid   = _qp.get(&#8216;cid&#8217;)   || (document.cookie.match(/(?:^|;s*)cid=([^;]+)/)      || [])[1] || &#8221;;<br />
				if (_ataid) data.agent_id = decodeURIComponent(_ataid);<br />
				if (_cid)   data.bdm_id   = decodeURIComponent(_cid);<br />
				return data;<br />
			}</p>
<p>			function uploadFiles(data) {<br />
				var fileInputs = form.querySelectorAll(&#8216;input[type=file][data-crm-file-field]&#8217;);<br />
				var uploads = [];<br />
				fileInputs.forEach(function(el) {<br />
					if (!el.files || !el.files[0]) return;<br />
					var fd = new FormData();<br />
					fd.append(&#8216;file&#8217;, el.files[0]);<br />
					var fieldName = el.name;<br />
					uploads.push(<br />
						fetch(crmApiUrl + &#8216;/public/forms/&#8217; + &#8220;08ceeaae-4809-444e-ba0f-88da5836c463&#8243; + &#8216;/upload&#8217;, { method: &#8216;POST&#8217;, body: fd })<br />
							.then(function(r) {<br />
								if (!r.ok) throw new Error(&#8216;File upload failed (&#8216; + r.status + &#8216;)&#8217;);<br />
								return r.json();<br />
							})<br />
							.then(function(res) {<br />
								if (res.path) data[fieldName] = res.path;<br />
								else throw new Error(res.error || &#8216;File upload failed&#8217;);<br />
							})<br />
					);<br />
				});<br />
				return Promise.all(uploads).then(function() { return data; });<br />
			}</p>
<p>			function submitFormData(data) {<br />
				var body = new FormData();<br />
				body.append(&#8216;action&#8217;,  &#8216;p118_crm_submit&#8217;);<br />
				body.append(&#8216;form_id&#8217;, &#8220;08ceeaae-4809-444e-ba0f-88da5836c463&#8243;);<br />
				body.append(&#8216;data&#8217;,    JSON.stringify(data));<br />
				// Embed-page context for GF-style merge tags ({embed_url},<br />
				// {embed_post:post_title}, {embed_post:ID}). Captured PHP-side<br />
				// at render time, then echoed to JS so the submit fetch can<br />
				// forward to V2 as request headers.<br />
				body.append(&#8216;embed_url&#8217;,        &#8220;&#8221;);<br />
				body.append(&#8216;embed_post_id&#8217;,    &#8220;0&#8221;);<br />
				body.append(&#8216;embed_post_title&#8217;, &#8220;&#8221;);</p>
<p>				return fetch(&#8220;https://www.property118.com/wp-admin/admin-ajax.php&#8221;, { method: &#8216;POST&#8217;, body: body, credentials: &#8216;same-origin&#8217; })<br />
					.then(function(r){ return r.json(); })<br />
					.then(function(res){<br />
						var p = res.data || res;<br />
						if (p &amp;&amp; p.success) {<br />
							if (p.confirmationType === &#8216;form&#8217; &amp;&amp; p.nextFormId) {<br />
								return swapInNextForm(p.nextFormId, p.prefill || {});<br />
							}<br />
							if (p.confirmationType === &#8216;redirect&#8217; &amp;&amp; p.confirmationRedirectUrl) {<br />
								window.location.href = p.confirmationRedirectUrl;<br />
							} else {<br />
								form.style.display = &#8216;none';<br />
								msg.className = &#8216;crm-message success';<br />
								msg.innerHTML = p.confirmationMessage || &#8216;Thank you for your submission.';<br />
								msg.style.display = &#8216;block';<br />
							}<br />
						} else {<br />
							throw new Error((p &amp;&amp; p.error) || &#8216;Submission failed.&#8217;);<br />
						}<br />
					});<br />
			}</p>
<p>			// Replace this whole form widget with another form, rendered server-side<br />
			// with the carried-over values seeded in. Inline  injected via<br />
			// innerHTML won&#8217;t run, so we re-create each script node to execute it<br />
			// (this is what wires up the new form&#8217;s submit / conditional logic).<br />
			function swapInNextForm(nextFormId, prefill) {<br />
				var rbody = new FormData();<br />
				rbody.append(&#8216;action&#8217;,  &#8216;p118_crm_render_form&#8217;);<br />
				rbody.append(&#8216;form_id&#8217;, nextFormId);<br />
				rbody.append(&#8216;prefill&#8217;, JSON.stringify(prefill || {}));<br />
				return fetch(&#8220;https://www.property118.com/wp-admin/admin-ajax.php&#8221;, { method: &#8216;POST&#8217;, body: rbody, credentials: &#8216;same-origin&#8217; })<br />
					.then(function(r){ return r.json(); })<br />
					.then(function(res2){<br />
						var pd = res2.data || res2;<br />
						if (!pd || !pd.html) { throw new Error((pd &amp;&amp; pd.error) || &#8216;Could not load the next form.&#8217;); }<br />
						var frag   = document.createElement(&#8216;div&#8217;);<br />
						frag.innerHTML = pd.html;<br />
						var parent = wrap.parentNode;<br />
						var nodes  = [];<br />
						while (frag.firstChild) {<br />
							var node = frag.firstChild;<br />
							parent.insertBefore(node, wrap);<br />
							nodes.push(node);<br />
						}<br />
						parent.removeChild(wrap);<br />
						function reexec(old) {<br />
							var s = document.createElement(&#8216;script&#8217;);<br />
							for (var a = 0; a &lt; old.attributes.length; a++) {<br />
								s.setAttribute(old.attributes[a].name, old.attributes[a].value);<br />
							}<br />
							if (!old.src) { s.textContent = old.textContent; }<br />
							old.parentNode.replaceChild(s, old);<br />
						}<br />
						nodes.forEach(function(n){<br />
							if (n.tagName === &#039;SCRIPT&#039;) { reexec(n); }<br />
							else if (n.querySelectorAll) {<br />
								var scripts = n.querySelectorAll(&#039;script&#039;);<br />
								for (var k = 0; k &lt; scripts.length; k++) { reexec(scripts[k]); }<br />
							}<br />
						});<br />
						var first = nodes[0];<br />
						try { if (first &amp;&amp; first.scrollIntoView) first.scrollIntoView({ behavior: &#039;smooth&#039;, block: &#039;start&#039; }); } catch (e) {}<br />
					});<br />
			}</p>
<p>			form.addEventListener(&#039;submit&#039;, function(e){<br />
				e.preventDefault();<br />
				// Validate required fields before submitting. Next only guards the pages<br />
				// before it, so the final page (and single-page forms) are checked here;<br />
				// jump to the first page that has a problem.<br />
								var vbad0 = crmFirstInvalid(null);<br />
				if (vbad0) { crmReportInvalid(vbad0); return; }<br />
								var data = collectFormData();<br />
				if (submitBtn) { submitBtn.disabled = true; submitBtn.textContent = &#039;Processing…&#039;; }<br />
				msg.style.display = &#039;none&#039;;</p>
<p>								// Standard form (no payment)<br />
				uploadFiles(data)<br />
					.then(function(d) { return submitFormData(d); })<br />
					.catch(function(err){<br />
					if (submitBtn) { submitBtn.disabled = false; submitBtn.textContent = btnText; }<br />
					msg.className = &#039;crm-message error&#039;;<br />
					msg.textContent = err.message;<br />
					msg.style.display = &#039;block&#039;;<br />
				});<br />
							});</p>
<p>			// ── Repeater fields (add / remove rows) ──────────────────────────<br />
			form.querySelectorAll( &#039;.crm-repeater&#039; ).forEach( function ( rep ) {<br />
				var rowsWrap = rep.querySelector( &#039;.crm-repeater-rows&#039; );<br />
				var tpl      = rep.querySelector( &#039;.crm-repeater-template&#039; );<br />
				var addBtn   = rep.querySelector( &#039;.crm-repeater-add&#039; );<br />
				if ( addBtn &amp;&amp; tpl &amp;&amp; rowsWrap ) {<br />
					addBtn.addEventListener( &#039;click&#039;, function () {<br />
						var idx = parseInt( rep.getAttribute( &#039;data-next-index&#039; ) || &#039;1&#039;, 10 );<br />
						var tmp = document.createElement( &#039;div&#039; );<br />
						tmp.innerHTML = tpl.innerHTML.split( &#039;__ROW__&#039; ).join( idx );<br />
						var row = tmp.firstElementChild;<br />
						if ( ! row ) { return; }<br />
						row.setAttribute( &#039;data-row&#039;, idx );<br />
						rowsWrap.appendChild( row );<br />
						rep.setAttribute( &#039;data-next-index&#039;, idx + 1 );<br />
						rep.dispatchEvent( new CustomEvent( &#039;crm-repeater-change&#039;, { bubbles: true } ) );<br />
					} );<br />
				}<br />
				if ( rowsWrap ) {<br />
					rowsWrap.addEventListener( &#039;click&#039;, function ( e ) {<br />
						var btn = e.target.closest ? e.target.closest( &#039;.crm-repeater-remove&#039; ) : null;<br />
						if ( ! btn ) { return; }<br />
						if ( rowsWrap.querySelectorAll( &#039;.crm-repeater-row&#039; ).length &lt;= 1 ) { return; }<br />
						var r = btn.closest( &#039;.crm-repeater-row&#039; );<br />
						if ( r ) { r.remove(); }<br />
						rep.dispatchEvent( new CustomEvent( &#039;crm-repeater-change&#039;, { bubbles: true } ) );<br />
					} );<br />
				}<br />
			} );<br />
		})();</p>
<p>The post <a rel="nofollow" href="https://www.property118.com/is-compensation-culture-coming-to-the-prs/">Is compensation culture coming to the PRS?</a> appeared first on <a rel="nofollow" href="https://www.property118.com">Property118</a>.</p>
<p>View Full Article: <a href="https://www.property118.com/is-compensation-culture-coming-to-the-prs/" target="_blank">Is compensation culture coming to the PRS?</a></p>
<p>The post <a rel="nofollow" href="http://lettinglinks.com/blog/is-compensation-culture-coming-to-the-prs.html">Is compensation culture coming to the PRS?</a> appeared first on <a rel="nofollow" href="http://lettinglinks.com/blog">LettingLinks - Connecting Landlords &amp; Tenants</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://lettinglinks.com/blog/is-compensation-culture-coming-to-the-prs.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
