BuyRentKenya Scraper: Kenya Property for Sale & Rent avatar

BuyRentKenya Scraper: Kenya Property for Sale & Rent

Pricing

from $0.10 / 1,000 listing results

Go to Apify Store
BuyRentKenya Scraper: Kenya Property for Sale & Rent

BuyRentKenya Scraper: Kenya Property for Sale & Rent

$0.2/1K listings | Extract BuyRentKenya houses, flats, land and commercial property for sale or rent in bulk: price with its currency, location, type and link. Filter by location, price, bedrooms and area. No login. Not affiliated with BuyRentKenya.

Pricing

from $0.10 / 1,000 listing results

Rating

0.0

(0)

Developer

Nomad.Devs

Nomad.Devs

Maintained by Community

Actor stats

0

Bookmarked

11

Total users

4

Monthly active users

3 days ago

Last modified

Categories

Share

BuyRentKenya Property Scraper (No Login) + Sale & Rent

$0.2/1K listings | Extract BuyRentKenya houses, flats, land and commercial property for sale or rent in bulk: price with its currency, location, type and link. Filter by location, price, bedrooms and area. No login. Not affiliated with BuyRentKenya.

BuyRentKenya Property Bulk Scraper

Our scraper collects public property listings from BuyRentKenya, for sale or for rent, and lets you filter by location, property type, price, bedrooms, bathrooms and area. Every row is one flat record with the price in the listing's own currency (KES or USD, never converted), the location, the property type and a direct link. It is ideal for Kenya property-market research, rental-yield and valuation models, neighbourhood inventory tracking and real-estate apps or newsletters.

Key Benefits

  • No login: it reads public listing pages only, so there is nothing to connect and no account at risk.
  • Low pricing: $0.20 per 1,000 listings, with lower rates on Scale and Business plans ($0.15 and $0.1 per 1,000), plus a $0.00005 start fee per run.
  • Prices you can trust: each row keeps the source currency in currency, so KES and USD listings are never silently mixed.
  • Sale and rent, every category: houses, flats and apartments, land, commercial property and bedsitters, in one Actor.
  • Optional detail pass: turn on fetchDetails to add bathrooms, photos, amenities, the full description and the exact posting date. It is slower, with one extra request per listing.

How It Works

  1. Choose buy or rent in searchType, and a propertyType (houses, flats-apartments, land, commercial, bedsitters or all).
  2. Provide your search:
    • (optional) location as a path slug (e.g., nairobi, mombasa, nairobi/westlands). Empty means all of Kenya.
    • (optional) minPrice and maxPrice, compared with the listing's own currency without conversion. 0 means no bound.
    • (optional) minBedrooms, minBathrooms, minAreaSqm, maxAreaSqm, furnished. 0 or off means no filter.
    • (optional) listingUrls to scrape specific https://www.buyrentkenya.com/listings/... pages instead of searching.
  3. Click Start. The form opens with rent listings in nairobi, one results page per category and 15 listings, so a first run returns real rows in about one to two minutes.

More settings:

  • maxItems - Hard cap on total listings returned. Default is 100; 0 means no cap and the maximum is 1000.
  • maxPages - Result pages per category, 25 listings each. Default is 3 and the maximum is 10.
  • fetchDetails - Visit each listing page. Default is off. Setting minBathrooms or furnished turns it on for you.
  • concurrency - Parallel workers for detail fetches. Default is 4.

BuyRentKenya sometimes answers with a bot challenge. A page that still shows one is skipped, so a run can return fewer listings than exist. In our three test runs, two returned 10 listings and one (buy in nairobi) returned none; a run with no listings charges only the $0.00005 start fee.

The site only allows result pages 2 to 10 to be crawled, so one category returns at most 250 listings per search. Narrow by location or property type to see more.

Price, bedroom, bathroom and area filters are applied after the page is fetched, and a listing with an unknown value is dropped once you set a minimum.

Search cards are thin for some listing types. In our rent test in nairobi (mostly commercial space), bedrooms, bathrooms, agency and posting dates were empty on all 10 rows; the same test in mombasa had bedrooms and bathrooms on all 10, and the dates and agency stayed empty. The extra fields come with fetchDetails.

Data You'll Receive

  • Listing: id, title, direct URL, property type, and whether it is for sale or rent.
  • Price: numeric price and its source currency (KES or USD), plus price per square metre when the area is known.
  • Location: the combined location string, with county, city and area where the site gives them.
  • Rooms and size: bedrooms and area in square metres where the search card shows them.
  • With fetchDetails: bathrooms, furnished flag, photo count and URLs, amenities, full description, exact posting date and agent phone.

Sample output data

Here is an example listing from a test run of this Actor (rent, nairobi):

{
"id": "3932737",
"url": "https://www.buyrentkenya.com/listings/office-for-rent-westlands-area-3932737",
"title": "3700 Sqft Fitted And Furnished Office - Westlands",
"price": 600880,
"currency": "KES",
"location": "Westlands Area, Westlands",
"county": null,
"city": null,
"area": null,
"bedrooms": null,
"bathrooms": null,
"areaSqm": null,
"propertyType": "office",
"listingType": "rent",
"agency": null,
"sellerType": null,
"daysOnMarket": null,
"postedAt": null,
"imagesCount": null,
"source": "buyrentkenya",
"searchType": "rent",
"pricePerSqm": null
}

BuyRentKenya Property API

Results are stored in a dataset that you can export as CSV, JSON, Excel, HTML or RSS, or read through the Apify API. Connect it to Make, n8n or Zapier, or let an agent call it through the Apify MCP server.

Support and Feedback

We improve these scrapers from your feedback. If something breaks or you need a filter:

  • Open an issue on the Actor's Issues tab.
  • If this Actor saved you time, a short review on the Store helps other people find it.

Run evidence

Start with one input and output

An Apify account is required. Use your Apify API token when calling the API; Console runs do not need that token pasted into the input. No user API-key field is required by this input schema.

Free-tier event rates checked 2026-10-04: result $0.0002; actor-start $0.00005.

Cost: Total = Actor event charges + platform usage if separately billed + any BYO-provider charges. See “Current costs” for your event rates, plan tiers and a calculation. A sample does not promise future billable volume.

Input and output below were read from the same successful run eAdZ1CTmevYeLdOam (2026-10-04, immutable build R7gWQod7okWSHAIpQ). This is an observed example, not a guarantee that repeating it returns this row. It used the selected build at capture time.

Input JSON

{
"searchType": "buy",
"propertyType": "all",
"location": "nairobi",
"minPrice": 0,
"maxPrice": 0,
"minAreaSqm": 0,
"maxAreaSqm": 0,
"minBedrooms": 0,
"minBathrooms": 0,
"furnished": false,
"maxPages": 3,
"maxItems": 100,
"fetchDetails": false,
"concurrency": 4,
"proxyConfiguration": {
"useApifyProxy": true,
"apifyProxyGroups": [
"RESIDENTIAL"
]
}
}

Matching output excerpt

Long strings and arrays are shortened for display; this is not a complete dataset fixture.

{
"id": "10002799",
"url": "https://www.buyrentkenya.com/listings/residential-land-for-sale-kitisuru-10002799",
"title": "4 Acres For Sale in Kitisuru",
"price": 85000000,
"currency": "KES",
"location": "Kitisuru, Westlands",
"county": null,
"city": null,
"area": null,
"bedrooms": null,
"bathrooms": null,
"areaSqm": null,
"propertyType": "residential-land",
"listingType": "sale",
"agency": null,
"sellerType": null,
"daysOnMarket": null,
"postedAt": null,
"imagesCount": null,
"source": "buyrentkenya",
"searchType": "buy",
"pricePerSqm": null
}

Claude / Codex skill to describe and setup this actor: SKILL.md

Extract public property listings from BuyRentKenya.com. Search houses, flats & apartments, land and commercial property for sale or rent by location, and get structured JSON with the listing's source currency. The Actor reads public pages and can use a browser fallback when direct requests are blocked. No login needed.

What BuyRentKenya data does this scraper extract?

One flat JSON record per listing:

FieldMeaning
idBuyRentKenya listing id
titleListing title as posted
priceNumeric price in the listing's source currency; no currency conversion
currencySource currency, including KES or USD
pricePerSqmDerived price ÷ areaSqm (null when either is missing)
locationCombined area, city, county string
county / city / areaLocation parts
bedrooms / bathroomsRoom counts (bathrooms need fetchDetails)
areaSqmSearch-card area only when the source explicitly gives a metric unit; acreage and missing units stay null.
furnishedtrue/false from the detail-page amenities (needs fetchDetails)
propertyTypee.g. Townhouses for sale, Other Apartments for rent
listingTypesale or rent
agencyListing agency / seller name
agentPhoneAgent WhatsApp/phone number (needs fetchDetails)
sellerTypeagency / individual where provided
daysOnMarketDays since posting
postedAtPosting date (exact with fetchDetails, else derived)
imagesCountGallery photo count (needs fetchDetails)
imagesGallery image URLs (needs fetchDetails)
amenitiesFeature chips e.g. Furnished, Parking, Swimming Pool (needs fetchDetails)
descriptionComplete public listing description (needs fetchDetails; prefers the page's full rendered listing body over a schema.org excerpt)
urlDirect link to the listing

Input

NameTypeDefaultDescription
searchTypestring (buy|rent)buySearch listings for sale or for rent.
propertyTypestringallCategory to search: houses, flats-apartments, land, commercial, bedsitters, or all.
locationstringnairobiLocation path slug (nairobi, mombasa, nairobi/westlands, …). Empty = all of Kenya.
minPriceinteger0Numeric minimum compared with search-card prices in their source currency, without conversion. Mixed KES/USD values are compared as supplied. 0 = no minimum. Search mode only; applied before detail fetches.
maxPriceinteger0Numeric maximum compared with search-card prices in their source currency, without conversion. Mixed KES/USD values are compared as supplied. 0 = no maximum. Search mode only; applied before detail fetches.
minAreaSqminteger0Drop listings whose search-card area is below this (sqm). Only explicit metric units are parsed; acreage and missing units remain unknown and are excluded when an area bound is set. 0 = no minimum. Search mode only; applied before detail fetches.
maxAreaSqminteger0Drop listings whose surface area is above this (sqm). 0 = no maximum. Search mode only.
minBedroomsinteger0Drop listings with fewer bedrooms than this. Free from the search-page card; no fetchDetails needed. Search mode only.
minBathroomsinteger0Drop listings with fewer bathrooms than this. Bathrooms are detail-page-only, so this auto-enables fetchDetails if it's off. Search mode only.
furnishedbooleanfalseOnly return furnished listings. Furnished is a detail-page amenity, so this auto-enables fetchDetails if it's off. Search mode only.
maxPagesinteger3Search-result pages to crawl per category (25 listings/page). Hard cap 10 (robots.txt).
maxItemsinteger100Hard cap on total listings returned. 0 = no cap. Max 1000. Billed per listing — see the Pricing tab.
fetchDetailsbooleanfalseVisit each listing's detail page for bathrooms, image count, full description and exact publish date. One extra request per listing.
listingUrlsarray of strings[]Scrape these specific https://www.buyrentkenya.com/listings/... URLs instead of running a search (detail mode).
concurrencyinteger4(Advanced) Parallel workers for detail-page fetches. Max 8.

How to scrape BuyRentKenya with this Actor

  1. Pick buy or rent and a property type (or all).
  2. Set location to a URL path slug: nairobi, mombasa, kiambu, nairobi/westlands, nairobi/kilimani… Leave empty for all of Kenya.
  3. Optionally set a numeric price range, minBedrooms / minBathrooms, maxPages (25 listings/page, max 10 pages per the site's robots.txt) and fetchDetails for bathrooms, photos, description and exact posting date. Price bounds compare source values without converting KES and USD; check each result's currency before comparing prices.
  4. Run and export JSON, CSV or Excel — or call it over the API:
from apify_client import ApifyClient
client = ApifyClient("<YOUR_APIFY_TOKEN>")
run = client.actor("nomad-agent/buyrentkenya-scraper").call(run_input={
"searchType": "rent",
"propertyType": "flats-apartments",
"location": "nairobi/westlands",
"maxPrice": 150000,
"fetchDetails": True,
})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
print(item["title"], "|", item["price"], item["currency"], item["url"])
curl -X POST \
"https://api.apify.com/v2/acts/nomad-agent~buyrentkenya-scraper/run-sync-get-dataset-items?token=<YOUR_APIFY_TOKEN>" \
-H "Content-Type: application/json" \
-d '{"searchType": "buy", "propertyType": "houses", "location": "nairobi", "maxPages": 3}'

Detail mode: pass listingUrls (full https://www.buyrentkenya.com/listings/... URLs) to scrape specific listings instead of searching.

Bedroom/bathroom filters: minBedrooms and minBathrooms are applied as a final pass after search + optional fetchDetails enrichment, and — like minPrice/maxPrice — a listing with an unknown value for the filtered field is dropped once a minimum is set. minBathrooms needs detail-page data, so setting it above 0 silently (and loudly, via a log line) turns fetchDetails on for you even if you left it unchecked; without that auto-enable, bathrooms would always be null and the filter would drop every listing. Like the price filters, both bed/bath filters only apply to search mode, not to explicit listingUrls.

Output example

{
"id": "4007805",
"title": "5 Bed Townhouse with En Suite in Lavington",
"price": 75000000,
"currency": "KES",
"pricePerSqm": 187500,
"location": "Lavington, Nairobi",
"county": "Nairobi",
"city": "Lavington",
"area": "Lavington",
"bedrooms": 5,
"bathrooms": 6,
"areaSqm": 400,
"furnished": false,
"propertyType": "Townhouses for sale",
"listingType": "sale",
"agency": "SRG Properties",
"agentPhone": "+254720000000",
"daysOnMarket": 20,
"postedAt": "2026-06-11",
"imagesCount": 20,
"images": ["https://i.roamcdn.net/prop/brk/..."],
"amenities": ["En Suite", "Parking", "Swimming Pool", "Backup Generator"],
"url": "https://www.buyrentkenya.com/listings/5-bedroom-townhouse-for-sale-lavington-4007805",
"source": "buyrentkenya",
"searchType": "buy"
}

Integrations

Export results as JSON, CSV, Excel (XLSX), HTML or RSS straight from the Apify Console, or wire the dataset into Make, Zapier, n8n and other Apify integrations. For code, use run-sync-get-dataset-items (shown above) for a single synchronous call, the apify-client SDKs, or the Apify MCP server to drive this Actor from an LLM/agent tool loop.

Pricing

Pay per event: a small one-time Actor-start fee plus a fee per listing returned — current rates are on this Actor's Pricing tab. No subscription — pay only for what you fetch.

Monitor new listings on a schedule

Create an Apify Schedule (for example, daily) and compare each full current snapshot downstream to detect listings that appeared since the previous run.

{
"searchType": "rent",
"propertyType": "flats-apartments",
"location": "nairobi/westlands",
"maxPages": 10,
"fetchDetails": true
}

Wire the dataset into an email/Slack/webhook integration and you have a new-listing alert feed for any location on the site.

Use cases

  • Kenya property market research: price levels by county, city and area
  • Track new sale/rent inventory in specific neighbourhoods (Westlands, Kilimani, Karen…)
  • Feed valuation models and rental-yield dashboards with source prices and their currencies
  • Monitor agency activity and days-on-market trends
  • Aggregate listings into your own real-estate app or newsletter

FAQ

Does it need a browser or proxies? The Actor first parses public HTML and embedded structured data. If direct requests are blocked, it can use a browser fallback and a configured Apify proxy. A page that still presents a challenge is skipped, so coverage can be partial.

Why is pagination capped at 10 pages? The site's robots.txt only permits ?page=2–?page=10. The Actor respects that; narrow by location/category to cover more inventory.

Why filter price (and bedrooms/bathrooms) client-side? Filter query params (price=, bedrooms=, …) are disallowed by the site's robots.txt, so the Actor fetches the plain category pages it may crawl and filters minPrice/maxPrice/minBedrooms/minBathrooms in-Actor, after the page is fetched.

Why do minBathrooms / furnished turn on fetchDetails for me? Bathroom counts and the furnished flag only exist on a listing's detail page — the search-page card never has them. Silently applying either filter without fetchDetails would see every listing's value as unknown and drop everything, which is a worse failure mode than a slower, slightly pricier run that actually honors the filter you asked for. The Actor logs an info line whenever it does this auto-enable.

Is it legal to scrape BuyRentKenya? The Actor reads the same public, unauthenticated pages any visitor sees and follows the site's robots.txt. Review the site's terms for your use case.

Fast setup and source code

Public repository · Agent setup skill.

Use the Actor’s current input form for filters, or start with its documented API example. Select the latest build. Read the dataset together with the run summary: a successful status alone does not show that every source was reached.

Restrictive filters or repeat-delivery suppression can produce zero results.

Observed output example

Selected fields from a real source record inspected on 2026-10-03; consult the output schema for the full contract. Values change with the source.

{
"id": "10008382",
"url": "https://www.buyrentkenya.com/listings/1-bedroom-apartment-for-sale-westlands-area-10008382",
"title": "1-Bedroom Apartment for Sale in Westlands",
"price": 6500000,
"currency": "KES",
"location": "Westlands Area, Westlands",
"county": null,
"city": null,
"area": null,
"bedrooms": 1,
"bathrooms": 1,
"areaSqm": null,
"propertyType": "apartment",
"listingType": "sale",
"agency": null,
"sellerType": null,
"daysOnMarket": null,
"postedAt": null,
"imagesCount": null,
"source": "buyrentkenya",
"searchType": "buy",
"pricePerSqm": null
}

Current costs

Current Actor event rates, checked 2026-10-16. USD; use the Pricing tab for your plan and later changes.

EventFreeBronzeSilverGoldPlatinumDiamond
Listing result (result)$0.0002$0.0002$0.00015$0.0001$0.0001$0.0001
Actor start (actor-start)$0.00005$0.00005$0.00005$0.00005$0.00005$0.00005

For example, 100 × result, 1 × actor-start totals $0.02005 in Actor event charges on Free. This is an arithmetic example, before any waiver; actual charged events depend on the run and selected options. It is not a promise of output or a charge for simply setting an item cap.

Your total is the charged Actor events, plus platform usage only if this Actor’s Pricing tab bills it separately, plus any external provider you use with your own key. Do not add platform usage twice when it is included. Apify credits and plan discounts affect your invoice. Set a run cost limit in Console before starting.


Independent tool. We built and run this Actor ourselves. BuyRentKenya does not operate, sponsor or endorse it, and its name is used only to say which service the data comes from.