DEV Community

Russell Yapp
Russell Yapp

Posted on

Rental yield by outcode from current asking prices

If you want a quick read on rental yield for a UK outcode, you can build it from two things that are already public: what homes are advertised for sale, and what similar homes are advertised to rent. This post shows a ready-made way to do that with an Apify Actor I publish, what it returned for one outcode, and what it costs.

Everything below is asking prices: advertised figures, not advice. They are not sold prices and not achieved rents.

The Actor is Rightmove Scraper: UK Property Listings, Sold Prices, Yield, published by Yappman Data: https://apify.com/yappman/uk-property-listings

The example Task is Rental yield for one outcode (LS6): https://apify.com/yappman/uk-property-listings/examples/rental-yield-for-an-outcode

What the Task does

It searches LS6 on Rightmove for sale and then to rent, 200 listings in all. It then saves a free SUMMARY record in the run's key-value store: median asking rent per month, median asking price and gross asking yield, by number of bedrooms. To use your own outcode, change LS6.

The input is:

{
  "summary": "rentalYield",
  "locations": ["LS6"],
  "portals": ["rightmove"],
  "maxItems": 200
}
Enter fullscreen mode Exit fullscreen mode

Run options are the latest build, 1,024 MB and a 600 second timeout. The run I describe below took 37.7 seconds.

What it returned

On 5 Nov 2026 I ran the Task once. It returned 200 listing rows. 192 were used for the summary and 8 were left out because of their property type. Gross asking yield by bedrooms, with the number of advertised rents and advertised sales behind each figure:

Bedrooms Gross asking yield Rents Sales
2 5.4% 6 5
3 5.6% 7 20
4 7.5% 18 28
5 or more 11.3% 61 44

Rows too thin to show were suppressed, including 1-bed in LS6. These are advertised asking figures from one day, not advice.

Read it with the counts beside it. The 2-bed row rests on 6 rents and 5 sales, so I would not lean on it. The yield rises with bedroom count in this run, and I have not looked into why.

What "gross asking yield" means here

Gross means no costs are taken off: nothing for management, repairs, voids or tax. Asking means both sides come from adverts. A landlord may accept less than the advertised rent and a seller may accept less than the asking price. Neither figure is a sale or a signed tenancy. The yield figures are gross asking yields from one day's listings, and nothing here is investment advice.

What it costs

Pay per event. At Free plan prices a listing is $0.00125 and the run start is $0.005, so 200 listings come to about $0.26 a run. The SUMMARY record itself is free. Paid Apify plans pay less per listing. A run that returns nothing, for example a blocked one, is not charged.

The three test Tasks I ran on 5 Nov used under a cent of platform usage in total.

Use Apify's maximum charge per run setting if you want a hard ceiling on any run.

How to run it

  1. Replace LS6 in locations with your outcode.
  2. Start the run, then open the run's key-value store and read the SUMMARY record.
  3. To track change, add the Task to a schedule: in the Console open Schedules, add the task and pick a time.

The same Actor does the underlying search directly if you want the 200 rows rather than the summary. Each row has the price, address, bedrooms, property type, agent as a business and the listing URL.

Limits

  • One portal by default: Rightmove. The Task uses Rightmove only.
  • A run returns at most 1,000 rows, and a Rightmove search ends at about 1,000 results.
  • Medians over a handful of listings are weak. The counts are there so you can judge.
  • Listings can be let or sold after your run. Each row carries a scrapedAt time.
  • Data-quality figures for our data are published on data.yappman.com.

This is an independent tool. Not affiliated with or endorsed by Rightmove, Zoopla or OnTheMarket.

Top comments (0)