Rightmove UK Property Listings & Market Leads
Pricing
from $2.55 / 1,000 listing founds
Rightmove UK Property Listings & Market Leads
Collect bounded Rightmove sale or rental listings with asking price, area, price per square meter, freshness, evidence confidence, data gaps, and a review-ready action for property research workflows.
Pricing
from $2.55 / 1,000 listing founds
Rating
5.0
(3)
Developer
Tim Zinin
Maintained by CommunityActor stats
0
Bookmarked
4
Total users
3
Monthly active users
15 days ago
Last modified
Categories
Share
Rightmove UK Property Listings (London and beyond)
Pull live for-sale and to-rent property listings straight from Rightmove.co.uk — the UK's biggest property portal — for London or any other Rightmove location code. No login, no API key, no browser needed on your side.

What you get
- Title, price (normalized to a single comparable figure — monthly for rentals), currency, bedrooms, floor area, full address, coordinates, a short description, photos and the direct listing URL for every property found.
- Filter by for-sale or to-rent, and any Rightmove location code (defaults to London).
- Full ISO posting date for every listing (Rightmove prints an exact date, unlike some portals that only show a relative "3 days ago" stamp).
- Runs on Apify: schedule it, monitor it, call it from the API, export to JSON/CSV/Excel or push straight into your own pipeline.

How to run it
- Click Try for free — no card needed on the free plan.
- Leave Location identifier as the default for London, or paste in another Rightmove location code (see the Input section below for how to find one).
- Pick Deal type — for sale or to rent.
- Hit Start and pull the results from the dataset (UI, API or webhook).
Pricing
Pay-per-event: $0.005 per run start + $0.003 per result. No monthly seat, no minimum. 100 listings found cost about $0.30 (the one-time start fee plus 100 result rows). Rows where the source returned nothing (an unrecognized location, a query with zero matching listings, or a request that failed) are returned for transparency but are never charged for.
简体中文说明
直接从英国最大的房产门户 Rightmove.co.uk 抓取在售/在租房源,默认覆盖伦敦,也可以传入 Rightmove 自己的地区代码查询其他地区。价格已统一换算成同一口径(出租房源统一按月租展示,即使 Rightmove 内部记录的是周租),并给出精确到秒的 ISO 发布时间——不像有些门户只显示"3 天前"这类相对时间。
location_identifier 是 Rightmove 自己的不透明地区代码,格式为 TYPE^NUMBER(伦敦对应 REGION^87490);Rightmove 官方并未公开"地名对代码"的查询表,查询其他地区需要先在 rightmove.co.uk 上手动搜索该地区,再从结果页网址里复制 locationIdentifier 参数。price 为空表示该房源未公开报价(常见于高端商业地产和顶级豪宅,即"面议"),本 Actor 不会替你编造一个数字;area_sqm 为空则是因为源站本身没有公布面积(伦敦房源中相当常见,不是抓取遗漏)。
只提取搜索结果列表卡片上展示的信息,不会抓取完整图集、平面图或经纪人电话,也不维护"城市名对代码"的查询表。
计费为按事件付费:每次运行 $0.005,每条房源结果 $0.003。100 条房源约 $0.30(含一次性启动费);无法识别的地区代码、零匹配或请求失败的记录会返回说明,但不计费。
Input
| Field | Required | What it does |
|---|---|---|
location_identifier | yes | Rightmove's own opaque location code, format TYPE^NUMBER (e.g. REGION^87490 for London). Rightmove does not publish a name-to-code lookup table — to find the code for another area, search that area on rightmove.co.uk and copy the locationIdentifier query parameter from the results page URL. |
deal_type | yes | sale for properties for sale, rent for properties to rent. |
max_items | no | Total row cap for this run (default 100). |
max_pages | no | How many result pages (24 listings per page) to walk before stopping (default 3). |
{"location_identifier": "REGION^87490","deal_type": "sale","max_items": 5,"max_pages": 1}
Output
Real row from a live run on the platform (2026-08-01):
{"location_identifier": "REGION^87490","deal_type": "sale","found": true,"url": "https://www.rightmove.co.uk/properties/166896110#/?channel=RES_BUY","title": "1 bedroom apartment for sale — Cashmere House, Leman Street, E1","price": 800000,"currency": "GBP","property_type": "Apartment","rooms": 1,"area_sqm": null,"location": "Cashmere House, Leman Street, E1","lat": 51.51373,"lng": -0.070178,"posted_date": "2025-09-11T17:32:28Z","description": "Regent are proud to present this spectacular one-bedroom apartment with amazing view over the City in the heart of Cashmere House, part of the Goodman's Field development, E1. The property boasts 903 sq. ft and comprises a spacious double bedroom with a private en-suite...","images": ["https://media.rightmove.co.uk:443/dir/crop/10:9-16:9/property-photo/36f551317/166896110/36f551317fd23d7243757894728a14a4_max_476x317.jpeg","https://media.rightmove.co.uk:443/dir/crop/10:9-16:9/property-photo/9a9b25b9b/166896110/9a9b25b9b76d38b7b9e5d2ef30b85b01_max_476x317.jpeg","https://media.rightmove.co.uk:443/dir/crop/10:9-16:9/property-photo/f7eadec92/166896110/f7eadec92821a03b4b8695279755d031_max_476x317.jpeg","https://media.rightmove.co.uk:443/dir/crop/10:9-16:9/property-photo/4c4ce0ae1/166896110/4c4ce0ae15c3d1803f6e138d8b92beef_max_476x317.jpeg","https://media.rightmove.co.uk:443/dir/crop/10:9-16:9/property-photo/09e1cdbdd/166896110/09e1cdbddbf64b44bc4b8d113c11eeca_max_476x317.jpeg"],"source_portal": "rightmove-london","scraped_at": "2026-08-01T05:10:56.822Z","partial": true,"partial_reason": "stopped after 1 page(s), 5 item(s) collected — reached this run's own max_pages/max_items limit before the source confirmed (via confirmedEnd) that there is nothing more; there may be additional matching listings beyond what was collected"}
| Field | Meaning |
|---|---|
found | true for a real listing row, false for a not-found/error row. |
price | The headline price shown on the listing card. For rentals this is always the per calendar month figure, even when Rightmove's own internal record is weekly — so every rental row in your dataset is on the same, comparable unit. null when the listing has no public price ("POA" / price on application). |
area_sqm | Floor area converted from Rightmove's own square feet to square meters. null when the listing doesn't publish a size at all — this is common (roughly a third of London listings in spot checks), not a parsing gap. |
location | The display address as shown on the listing card. |
posted_date | Full ISO timestamp of when the listing first went live — Rightmove publishes an exact date, not just a relative stamp. |
lat / lng | Coordinates as published on the search-results page (no need to open the listing itself). |
images | Photos as listed on the search-results card. |
partial | true when this run stopped without Rightmove itself confirming there is nothing more — either max_pages/max_items was reached, or an unconfirmed empty page came back. false (and omitted by a clean=true Dataset read) once the source's own response confirmed a resolved result. Carried on every row, found or not. |
partial_reason | Plain-English reason when partial is true; null/omitted otherwise. |
A not-found row looks like:
{"location_identifier": "REGION^99999999","deal_type": "sale","found": false,"partial": true,"partial_reason": "page 1 returned 0 rows with no independent confirmation that the source actually has zero matches — could be a genuine empty result, or an unrecognized/broken page shape","note": "Rightmove did not confirm zero listings for this location_identifier/deal_type — page 1 returned 0 rows with no independent confirmation that the source actually has zero matches — could be a genuine empty result, or an unrecognized/broken page shape","scraped_at": "2026-08-01T05:11:01.840Z"}
API
Start a run with a bearer token and explicit JSON input:
curl -sS -X POST 'https://api.apify.com/v2/acts/zinin~rightmove-london/runs?waitForFinish=60' \-H "Authorization: Bearer $APIFY_TOKEN" \-H 'Content-Type: application/json' \--data '{"location_identifier":"REGION^87490","deal_type":"sale","max_items":5,"max_pages":1}'
Read Dataset rows using the returned defaultDatasetId:
curl -sS "https://api.apify.com/v2/datasets/$DEFAULT_DATASET_ID/items?clean=true&format=json" \-H "Authorization: Bearer $APIFY_TOKEN"
MCP
For an Apify MCP client exposing the standard call-actor tool, send this exact payload:
{"name": "call-actor","arguments": {"actor": "zinin/rightmove-london","input": {"location_identifier": "REGION^87490","deal_type": "sale","max_items": 5,"max_pages": 1}}}
Related tools
Related tools for adjacent workflows in real estate listings and monitoring.
| Actor | What it does |
|---|---|
| Imovirtual Portugal Real Estate Listings | Pair it in the real estate listings and monitoring workflow: Pull live apartment and house listings straight from Imovirtual.com — Portugal's biggest real-estate... |
| Krisha.kz Kazakhstan Real Estate Listings | Pair it in the real estate listings and monitoring workflow: Pull live apartment and house listings straight from Krisha.kz — Kazakhstan's biggest real-estate... |
| Otodom Poland Real Estate Listings | Pair it in the real estate listings and monitoring workflow: Pull live apartment and house listings straight from Otodom.pl — Poland's biggest real-estate classifieds... |
| Storia Romania Real Estate Listings | Pair it in the real estate listings and monitoring workflow: Pull live apartment and house listings straight from Storia.ro — Romania's biggest real-estate classifieds... |
| Willhaben Vienna Real Estate Listings | Pair it in the real estate listings and monitoring workflow: Pull live apartment rental and sale listings straight from Willhaben.at — Austria's biggest classifieds... |
FAQ / Limitations
Does this need a Rightmove account or API key? No — it reads the same public search pages a visitor sees, no login.
Why is price sometimes null on a row? The listing has no public asking
price ("POA" — price on application, common for very high-end commercial and
trophy residential listings). We don't invent a number for these.
Why is area_sqm sometimes null? Rightmove simply doesn't publish a floor
area for every listing — we report exactly what the source gives us, no guessing.
What this is NOT. This does not fetch the full photo gallery, floorplans, the
agent's phone number, or anything from the listing's own detail page — only what's
shown on the search-results list. It does not maintain a city-name-to-code lookup
table (Rightmove's locationIdentifier codes are not documented publicly) — you
supply the code you want, or use the London default.
Found a bug or need a custom variant (a different country's property portal, extra fields)? Open an issue on the Actor page.
Machine use
The Actor is callable through the Apify API, SDK, and Apify MCP server. The input and Dataset row are the machine-facing contract; price/area_sqm are null exactly when Rightmove itself doesn't publish a value (never a guess), and partial/partial_reason mark whenever a row's completeness wasn't independently confirmed by the source — an agent treating a run's results as the full market should check partial first.
Commercial guide: Rightmove UK Property Listings — Decision-Ready Search Results
Collect bounded Rightmove sale or rental search results and turn each observed listing into an evidence-linked property review card.
This guide is written for buyers, operators, analysts, and automation builders. It explains what the Actor observes, how to turn the Dataset into a controlled workflow, and where human verification remains mandatory.
The decision this product supports
Which currently observed listings deserve human review, and how complete and fresh is the evidence behind that shortlist?
The Actor reduces collection and first-pass triage work. It does not remove responsibility for source verification or authorize an external business action. The commercial value comes from a structured, repeatable evidence layer: stable identity, observation time, source evidence, confidence, gaps, recommended action, and failure semantics travel with the raw facts.
Who uses it
| User | Value |
|---|---|
| Property sourcing teams | Build a review queue from a specific Rightmove geography without copying listing cards by hand. |
| Estate agency analysts | Compare asking prices, published floor area, bedrooms, property type, freshness, and location in a clean table. |
| Buy-to-let and acquisition analysts | Filter observed rental or sale inventory before performing valuation, yield, legal, and physical due diligence elsewhere. |
| Relocation and research teams | Create a bounded snapshot for a client brief while retaining direct links to the original listing evidence. |
| Proptech builders | Use a stable row contract as an ingestion layer for prototypes, internal dashboards, alerts, and human-review workflows. |
| Market researchers | Observe a defined search slice repeatedly while keeping query limits and partial-result warnings explicit. |
Input contract
| Input field | How to use it |
|---|---|
| location_identifier | Required Rightmove opaque location token such as REGION^87490. It is supplied by the user; the Actor does not invent a name-to-code mapping. |
| deal_type | Required sale or rent mode. Rental headline prices are normalized to a monthly comparable amount where the source provides the necessary figure. |
| max_items | A hard output cap from 1 to 2,000. A low prefill makes the first run cheap and inspectable. |
| max_pages | A hard traversal cap from 1 to 50. Reaching the cap before source-confirmed exhaustion makes the result set partial. |
Recommended first Input
{"location_identifier": "REGION^87490","deal_type": "sale","max_items": 5,"max_pages": 1}
Start with this bounded example, inspect every Dataset field, and only then expand the scope. Input limits are product controls, not inconveniences: they make cost, completeness, and error handling visible.
Field dictionary
| Field or group | Meaning |
|---|---|
| entityId | Stable listing identity derived from the direct Rightmove property URL. |
| title, location, property_type, rooms | Observed card facts used for search, grouping, and review. |
| price, currency, area_sqm, pricePerSqm | Published numeric facts and a derived ratio only when both price and area are usable. Missing source values stay null. |
| posted_date, observedAt, freshness | Source publication time where present, Actor observation time, and an explicit freshness classification. |
| lat, lng, images, url | Source-provided coordinates, card images, and direct evidence link. |
| partial, partial_reason | Completeness warning when configured bounds or an unconfirmed source response prevent a full-set claim. |
| confidenceScore, confidenceBand | Evidence confidence, kept separate from price attractiveness or investment merit. |
| recommendedAction, actionPriority, actionReason | A bounded human-review recommendation based on evidence completeness and freshness. |
| sourceEvidence, negativeSignals, safeToAutomate | Traceability, gaps, and a guard against blind downstream decisions. |
Common decision fields
| Field | Operational meaning |
|---|---|
| recordType | The semantic row family. Use it to distinguish a business result from an advisory or terminal record. |
| schemaVersion | Version of the additive decision-intelligence contract. Pin or validate it in strict consumers. |
| entityId | Stable entity identity for deduplication and joins. It is not necessarily a legal identifier. |
| inputRef | The relevant submitted input reference after normalization. |
| observedAt | When the Actor observed or finalized the evidence. It is not necessarily the source publication time. |
| firstSeenAt and lastSeenAt | Always-emitted observation boundaries. Stateful monitors use the compatible baseline/current boundary. Stateless rows set both equal to observedAt for the current run; that equality does not establish historical tenure. |
| freshness | A structured statement about evidence age or availability, not a prediction. Its basis and age unit follow the source-specific field definition. |
| eventId | For monitors, the stable identity of one observed transition or monitor outcome. It is distinct from entityId. |
| before and after | For monitors, the bounded comparable snapshots used for the decision. Null means that side of a comparison was not honestly available. |
| changedFields and changeFlags | Machine-readable monitor deltas and normalized change labels. Empty arrays mean no supported changed field was established, not that every possible real-world fact stayed constant. |
| materialityScore and materialityBand | Magnitude of an observed monitor change when the Actor can calculate it. Materiality is separate from evidence confidence and may be unknown when the source lacks the required facts. |
| confidenceScore | Evidence support on a 0–100 scale. It is separate from materiality, lead score, or business value. |
| confidenceBand | Readable high/medium/low/unknown grouping of evidence support. |
| confidenceReasons | Observed facts that raise confidence. |
| confidenceRisks | Missing, partial, ambiguous, inferred, or conflicting aspects that reduce confidence. |
| confidenceConflict | Explicit consistency warning when structured evidence does not reconcile. |
| sourceEvidence | Source-linked observations supporting the row. Preserve this during export. |
| dataGaps | Important evidence the Actor did not observe or cannot establish. Keep these gaps visible in CRM, spreadsheet, and automation exports. |
| negativeSignals | Machine-readable risks or gaps. A negative signal is not automatically a negative business outcome. |
| recommendedAction | Bounded review label produced from the available evidence. |
| actionPriority | Suggested queue priority, not urgency guaranteed by the source. |
| actionReason | Plain-language explanation for the recommended action. |
| safeToAutomate | Whether the narrow recommended action is deterministic enough for automation. Organizational policy still applies. |
| failureType | Normalized terminal or partial failure classification. Null means no classified failure. |
| retryable | Whether a later retry may legitimately change an operationally incomplete result. |
| recommendation | Human-readable handling guidance, especially for terminal rows. |
Evidence, confidence, and honest boundaries
What the evidence supports
- A listing row exists because a Rightmove search-result card passed the runtime row validation.
- The listing URL is retained as the primary source reference.
- pricePerSqm is calculated only when both a positive published price and positive published area are present.
- freshness describes the age of the published source date; it is not a prediction of availability.
- A partial run remains useful as a bounded sample, but the Dataset must not be represented as the complete market.
What this Actor never claims
- The Actor does not claim a property is still available after observation time.
- It does not provide a valuation, investment recommendation, yield forecast, legal opinion, survey, or mortgage advice.
- It does not infer unpublished floor area, asking price, agent identity, owner identity, or transaction outcome.
- It does not claim geographic completeness when max_pages or max_items stopped collection early.
- It does not replace the listing detail page, agent confirmation, title checks, or physical inspection.
Reading data gaps correctly
A data gap is part of the result. Nulls, partial flags, confidence risks, source failures, and unavailable fields must survive export. Removing these fields makes the remaining facts look more complete than they are. When two sources conflict or a required identity cannot be proven, lower confidence and keep safeToAutomate=false.
Source evidence is not permission
A public source proves only that a value or statement was observable at the recorded time and URL. It does not establish consent, contractual rights, legal status, accuracy after observation, or authorization for a downstream action. Your organization remains responsible for source terms, privacy rules, outreach policy, retention, and human review.
Decision policy and action routing
| Action | How to use it |
|---|---|
| REVIEW_LISTING | Open the source URL, confirm availability and full details, then perform domain-specific due diligence. |
| REVIEW_PARTIAL_LISTING | Use the row as a lead but rerun with larger bounds before making any completeness statement. |
| REVIEW_RUN | Inspect terminal advice, query token, source response, and retry guidance before interpreting an empty Dataset. |
Confidence is not attractiveness
confidenceScore answers “how strongly does the available evidence support this factual classification?” It does not answer “how valuable is this lead, property, account, or address?” A high-confidence negative fact may be commercially uninteresting; a low-confidence positive signal may deserve research but not action. Keep the concepts separate in dashboards, exports, and CRM fields.
Why safeToAutomate is conservative
safeToAutomate is intentionally false whenever the next step could amplify an uncertain inference. It may be true only for narrow deterministic actions explicitly supported by the row, such as suppressing an email with invalid syntax. A true value does not waive legal, privacy, consent, contractual, or organizational rules.
Retry policy
- Retry when
retryable=trueand the failure is operational, such as a temporary source or DNS problem. - Do not endlessly retry deterministic invalid input, policy refusal, or confirmed absence.
- A retry must preserve the original input reference and must not create duplicate downstream actions.
- Budget exhaustion is not negative evidence about the entity. Resume only the unprocessed scope with an authorized budget.
- A failed Actor run is an operational event. Never transform it into “no listing,” “no contact,” “bad lead,” or “invalid email.”
Commercial use-case playbooks
1. Daily new-listing review
Goal. Schedule a bounded query each morning, keep rows whose freshness status is fresh, deduplicate on entityId, and send the shortlist to an analyst. Do not equate repeated absence with a delisting unless a dedicated stateful monitor establishes that transition.
Recommended runbook.
- Define the submitted cohort and write down why it is in scope.
- Start with the smallest useful Input and preserve the exact run ID.
- Inspect the Dataset overview before exporting anything.
- Check
failureType,retryable, completeness indicators, andconfidenceBand. - Open the relevant
sourceEvidenceor source URL for material rows. - Apply the recommended action as a review label, not as an instruction to contact, buy, delete, accuse, or publish.
- Record the analyst's final disposition in the destination system.
Do not skip. A found row is a validated observation of one search-result card. It becomes a decision lead, never an automatic buy, valuation, or availability claim.
2. Comparable asking-price table
Goal. Export rows with non-null price and area_sqm, calculate medians in a downstream model, and preserve partial flags. Asking-price comparisons are descriptive source observations, not valuations or achieved-sale evidence.
Recommended runbook.
- Define the submitted cohort and write down why it is in scope.
- Start with the smallest useful Input and preserve the exact run ID.
- Inspect the Dataset overview before exporting anything.
- Check
failureType,retryable, completeness indicators, andconfidenceBand. - Open the relevant
sourceEvidenceor source URL for material rows. - Apply the recommended action as a review label, not as an instruction to contact, buy, delete, accuse, or publish.
- Record the analyst's final disposition in the destination system.
Do not skip. A found row is a validated observation of one search-result card. It becomes a decision lead, never an automatic buy, valuation, or availability claim.
3. Rental shortlist for relocation
Goal. Run rent mode for the client geography, filter bedrooms and price downstream, then manually confirm tenancy terms and availability from the source listing.
Recommended runbook.
- Define the submitted cohort and write down why it is in scope.
- Start with the smallest useful Input and preserve the exact run ID.
- Inspect the Dataset overview before exporting anything.
- Check
failureType,retryable, completeness indicators, andconfidenceBand. - Open the relevant
sourceEvidenceor source URL for material rows. - Apply the recommended action as a review label, not as an instruction to contact, buy, delete, accuse, or publish.
- Record the analyst's final disposition in the destination system.
Do not skip. A found row is a validated observation of one search-result card. It becomes a decision lead, never an automatic buy, valuation, or availability claim.
4. Acquisition research sample
Goal. Collect a bounded market slice, use pricePerSqm as one screening feature, and route candidates into a separate underwriting workflow.
Recommended runbook.
- Define the submitted cohort and write down why it is in scope.
- Start with the smallest useful Input and preserve the exact run ID.
- Inspect the Dataset overview before exporting anything.
- Check
failureType,retryable, completeness indicators, andconfidenceBand. - Open the relevant
sourceEvidenceor source URL for material rows. - Apply the recommended action as a review label, not as an instruction to contact, buy, delete, accuse, or publish.
- Record the analyst's final disposition in the destination system.
Do not skip. A found row is a validated observation of one search-result card. It becomes a decision lead, never an automatic buy, valuation, or availability claim.
5. Estate agency competitor snapshot
Goal. Observe current cards in a territory, group by property type and price band, and retain source URLs for manual validation.
Recommended runbook.
- Define the submitted cohort and write down why it is in scope.
- Start with the smallest useful Input and preserve the exact run ID.
- Inspect the Dataset overview before exporting anything.
- Check
failureType,retryable, completeness indicators, andconfidenceBand. - Open the relevant
sourceEvidenceor source URL for material rows. - Apply the recommended action as a review label, not as an instruction to contact, buy, delete, accuse, or publish.
- Record the analyst's final disposition in the destination system.
Do not skip. A found row is a validated observation of one search-result card. It becomes a decision lead, never an automatic buy, valuation, or availability claim.
6. Proptech prototype ingestion
Goal. Map entityId to the application record key, store raw facts and decision metadata separately, and never overwrite null source facts with generated estimates.
Recommended runbook.
- Define the submitted cohort and write down why it is in scope.
- Start with the smallest useful Input and preserve the exact run ID.
- Inspect the Dataset overview before exporting anything.
- Check
failureType,retryable, completeness indicators, andconfidenceBand. - Open the relevant
sourceEvidenceor source URL for material rows. - Apply the recommended action as a review label, not as an instruction to contact, buy, delete, accuse, or publish.
- Record the analyst's final disposition in the destination system.
Do not skip. A found row is a validated observation of one search-result card. It becomes a decision lead, never an automatic buy, valuation, or availability claim.
7. Client market brief
Goal. Use Dataset exports to create a sourced appendix. State the exact location_identifier, deal_type, run time, and configured limits in the brief.
Recommended runbook.
- Define the submitted cohort and write down why it is in scope.
- Start with the smallest useful Input and preserve the exact run ID.
- Inspect the Dataset overview before exporting anything.
- Check
failureType,retryable, completeness indicators, andconfidenceBand. - Open the relevant
sourceEvidenceor source URL for material rows. - Apply the recommended action as a review label, not as an instruction to contact, buy, delete, accuse, or publish.
- Record the analyst's final disposition in the destination system.
Do not skip. A found row is a validated observation of one search-result card. It becomes a decision lead, never an automatic buy, valuation, or availability claim.
8. Data-quality audit
Goal. Filter partial=true, low confidence, missing area, and missing publication date into an exceptions view before using the rest of the rows.
Recommended runbook.
- Define the submitted cohort and write down why it is in scope.
- Start with the smallest useful Input and preserve the exact run ID.
- Inspect the Dataset overview before exporting anything.
- Check
failureType,retryable, completeness indicators, andconfidenceBand. - Open the relevant
sourceEvidenceor source URL for material rows. - Apply the recommended action as a review label, not as an instruction to contact, buy, delete, accuse, or publish.
- Record the analyst's final disposition in the destination system.
Do not skip. A found row is a validated observation of one search-result card. It becomes a decision lead, never an automatic buy, valuation, or availability claim.
Integration recipes
All examples use placeholders. Keep the Apify token in a secret manager and never write it into a Dataset, README, screenshot, or client-side application.
cURL: start a run and wait briefly
curl -sS -X POST 'https://api.apify.com/v2/acts/zinin~rightmove-london/runs?waitForFinish=60' \-H "Authorization: Bearer $APIFY_TOKEN" \-H 'Content-Type: application/json' \--data '{"location_identifier":"REGION^87490","deal_type":"sale","max_items":5,"max_pages":1}'
The run response includes defaultDatasetId. Read clean JSON rows with:
curl -sS "https://api.apify.com/v2/datasets/$DEFAULT_DATASET_ID/items?clean=true&format=json" \-H "Authorization: Bearer $APIFY_TOKEN"
JavaScript with apify-client
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: process.env.APIFY_TOKEN });const input = {"location_identifier": "REGION^87490","deal_type": "sale","max_items": 5,"max_pages": 1};const run = await client.actor('zinin/rightmove-london').call(input);const { items } = await client.dataset(run.defaultDatasetId).listItems({ clean: true });for (const row of items) {console.log({entityId: row.entityId,confidenceBand: row.confidenceBand,recommendedAction: row.recommendedAction,safeToAutomate: row.safeToAutomate,failureType: row.failureType,});}
Python with apify-client
import osfrom apify_client import ApifyClientclient = ApifyClient(os.environ["APIFY_TOKEN"])run = client.actor("zinin/rightmove-london").call(run_input={"location_identifier": "REGION^87490","deal_type": "sale","max_items": 5,"max_pages": 1})for row in client.dataset(run["defaultDatasetId"]).iterate_items(clean=True):print({"entityId": row.get("entityId"),"confidenceBand": row.get("confidenceBand"),"recommendedAction": row.get("recommendedAction"),"safeToAutomate": row.get("safeToAutomate"),"failureType": row.get("failureType"),})
Apify MCP call
{"name": "call-actor","arguments": {"actor": "zinin/rightmove-london","input": {"location_identifier": "REGION^87490","deal_type": "sale","max_items": 5,"max_pages": 1}}}
Generic webhook consumer policy
- Trigger on a terminal Actor run event.
- Confirm the run status is
SUCCEEDEDbefore reading business rows. - Retrieve rows from
defaultDatasetId. - Reject or quarantine rows whose
failureTypeis non-null unless your policy explicitly handles that failure. - Send
safeToAutomate=falserows to a human-review queue. - Store
entityId,observedAt,sourceEvidence, confidence, action, and the Apify run ID together. - Make retries idempotent by keying the destination on the stable entity ID plus the intended observation or event identity.
Where this fits in a practical stack
| Destination | Recommended pattern |
|---|---|
| Apify Console | Use the visual Input form, start the run, then open the default Dataset overview. This is the fastest path for a one-off review and the best place to inspect evidence before automating anything. |
| Apify API | POST JSON input to the Actor run endpoint, wait or poll for completion, then read the default Dataset through the URL returned by the run object. |
| JavaScript client | Use apify-client from a Node.js service, pass the same JSON object as the Console Input, and preserve the returned run and Dataset IDs in your own audit log. |
| Python client | Use apify-client in a Python enrichment job, iterate Dataset items, and route rows by recommendedAction, confidenceBand, failureType, and retryable. |
| Make | Start the Actor from a scenario, wait for the run, retrieve Dataset items, filter unsafe or low-confidence rows, then insert review-ready rows into the destination application. |
| Zapier | Use an Apify run action or webhook trigger, fetch Dataset items, apply a Filter step, and send only review-approved fields into the next sales or operations step. |
| n8n | Use HTTP Request or Apify nodes, branch on failureType and retryable, keep a manual-review lane for safeToAutomate=false, and write sourceEvidence together with the business fields. |
| Google Sheets | Export the Dataset directly or append rows from an automation. Keep stable entityId as a hidden key so reruns update the correct record instead of creating ambiguous duplicates. |
| Airtable | Map entityId to a primary or deduplication field, store confidence and evidence in separate columns, and expose recommendedAction as the triage view. |
| Webhook | Configure an Apify webhook for terminal run states, retrieve the Dataset after SUCCEEDED, and treat FAILED or TIMED-OUT runs as operational events rather than negative business evidence. |
A safe automation shape
The Actor is a collection and decision-support component. A production workflow should keep raw evidence, decision metadata, and business action in distinct layers:
- Collect: run the Actor with explicit bounded input.
- Validate: require a successful run and schema-valid Dataset rows.
- Triage: branch on
failureType,retryable,confidenceBand, andsafeToAutomate. - Review: open source evidence for rows that may affect a person, campaign, investment, compliance decision, or customer record.
- Act: execute only the action approved by your own policy and authorized operator.
- Audit: retain run ID, Dataset ID, observation time, input reference, source evidence, and the final human decision.
This separation prevents a common automation error: turning “data was observed” into “a business action is justified.”
Operating guide
Before the first production run
- Write the business question in one sentence: Which currently observed listings deserve human review, and how complete and fresh is the evidence behind that shortlist?
- Confirm every submitted input is within your authorized scope.
- Use the prefilled small example and review all returned row types.
- Map stable identifiers, confidence, evidence, actions, gaps, failure, and retry fields into the destination.
- Establish a human owner for review exceptions.
- Set a run budget and output bound appropriate to the test.
- Verify that secrets are stored only in the platform or workflow secret manager.
After every scheduled run
- Check terminal run status and logs.
- Compare the number of submitted entities, produced business rows, and advisory rows.
- Review partial, unknown, conflict, and low-confidence buckets.
- Inspect a sample of source evidence, including at least one positive and one negative result.
- Confirm the destination deduplicated on the intended stable key.
- Verify that no downstream action was triggered from an error row.
- Track cost per useful reviewed row rather than cost per raw request alone.
Production monitoring signals
Monitor source-unavailable rate, partial-row rate, low-confidence share, missing evidence, retry volume, run duration, Dataset row count, and spend. A sudden shift may indicate source drift, input drift, or an upstream outage. Stop automation and investigate before accepting a new pattern as business truth.
Cost control
Start with max_items=5 and max_pages=1. Inspect row quality and partial status, then increase only the bound needed for the business question. The live Apify pricing panel is authoritative for current event prices.
Use maxTotalChargeUsd when calling a monetized Actor if your workflow supports it. Treat a buyer-set cap as a hard safety boundary. If the cap stops work, the unfinished items remain unprocessed; they do not become negative results.
Review templates and quality reporting
Row-review worksheet
For every material row, an analyst should be able to answer the following without relying on memory or an unstated assumption:
- What submitted entity or query does this row refer to?
- Is it a business result, a baseline/advisory row, a partial observation, or a failure?
- Which exact source evidence supports the headline fact?
- When was the evidence observed, and is there a different source publication time?
- Which fields are direct observations, which are normalized, and which are deterministic derivations?
- What important evidence is null, missing, partial, ambiguous, or conflicting?
- Does confidence describe evidence support only, or has someone incorrectly treated it as business value?
- What recommended action is present, and what additional verification does its reason require?
- Is the narrow action marked safe to automate? If yes, does organizational policy also permit it?
- What final human disposition was made, by whom, and from which run and Dataset item?
Field-group review prompts
1. entityId
Contract meaning: Stable listing identity derived from the direct Rightmove property URL.
Reviewer prompts: Is the value present? Does its type match the schema? Is it supported by sourceEvidence or a documented deterministic transformation? Is any null being silently converted into a default? Would the value still mean the same thing after CSV export? Does the destination preserve the related confidence and gap fields?
2. title, location, property_type, rooms
Contract meaning: Observed card facts used for search, grouping, and review.
Reviewer prompts: Is the value present? Does its type match the schema? Is it supported by sourceEvidence or a documented deterministic transformation? Is any null being silently converted into a default? Would the value still mean the same thing after CSV export? Does the destination preserve the related confidence and gap fields?
3. price, currency, area_sqm, pricePerSqm
Contract meaning: Published numeric facts and a derived ratio only when both price and area are usable. Missing source values stay null.
Reviewer prompts: Is the value present? Does its type match the schema? Is it supported by sourceEvidence or a documented deterministic transformation? Is any null being silently converted into a default? Would the value still mean the same thing after CSV export? Does the destination preserve the related confidence and gap fields?
4. posted_date, observedAt, freshness
Contract meaning: Source publication time where present, Actor observation time, and an explicit freshness classification.
Reviewer prompts: Is the value present? Does its type match the schema? Is it supported by sourceEvidence or a documented deterministic transformation? Is any null being silently converted into a default? Would the value still mean the same thing after CSV export? Does the destination preserve the related confidence and gap fields?
5. lat, lng, images, url
Contract meaning: Source-provided coordinates, card images, and direct evidence link.
Reviewer prompts: Is the value present? Does its type match the schema? Is it supported by sourceEvidence or a documented deterministic transformation? Is any null being silently converted into a default? Would the value still mean the same thing after CSV export? Does the destination preserve the related confidence and gap fields?
6. partial, partial_reason
Contract meaning: Completeness warning when configured bounds or an unconfirmed source response prevent a full-set claim.
Reviewer prompts: Is the value present? Does its type match the schema? Is it supported by sourceEvidence or a documented deterministic transformation? Is any null being silently converted into a default? Would the value still mean the same thing after CSV export? Does the destination preserve the related confidence and gap fields?
7. confidenceScore, confidenceBand
Contract meaning: Evidence confidence, kept separate from price attractiveness or investment merit.
Reviewer prompts: Is the value present? Does its type match the schema? Is it supported by sourceEvidence or a documented deterministic transformation? Is any null being silently converted into a default? Would the value still mean the same thing after CSV export? Does the destination preserve the related confidence and gap fields?
8. recommendedAction, actionPriority, actionReason
Contract meaning: A bounded human-review recommendation based on evidence completeness and freshness.
Reviewer prompts: Is the value present? Does its type match the schema? Is it supported by sourceEvidence or a documented deterministic transformation? Is any null being silently converted into a default? Would the value still mean the same thing after CSV export? Does the destination preserve the related confidence and gap fields?
9. sourceEvidence, negativeSignals, safeToAutomate
Contract meaning: Traceability, gaps, and a guard against blind downstream decisions.
Reviewer prompts: Is the value present? Does its type match the schema? Is it supported by sourceEvidence or a documented deterministic transformation? Is any null being silently converted into a default? Would the value still mean the same thing after CSV export? Does the destination preserve the related confidence and gap fields?
Weekly quality report
Create a recurring internal report with these measures. The report is about pipeline health, not market demand unless the source contract explicitly measures demand.
| Metric | Why it matters | Investigate when |
|---|---|---|
| Submitted inputs | Defines the actual denominator and scope of the run. | The count differs from the approved batch or schedule. |
| Business result rows | Shows how many usable observations were produced. | The rate changes sharply without an input explanation. |
| Advisory/failure rows | Prevents operational failures from disappearing in a results-only dashboard. | Any terminal class grows or is unmapped. |
| Partial-result rate | Measures incomplete source coverage or configured truncation. | It rises, or analysts stop seeing the partial warning. |
| Low-confidence rate | Shows the share of rows requiring more evidence. | It rises by source, cohort, or input pattern. |
| Retryable failure rate | Distinguishes temporary operational issues from deterministic outcomes. | Retries repeat without improving evidence. |
| Evidence-link coverage | Confirms material facts remain traceable after export. | Links or evidence objects are missing from delivered records. |
| Safe-automation share | Shows how little or much of the workflow can be deterministic. | A mapping change makes unsafe actions appear safe. |
| Manual-review backlog | Measures whether human verification capacity matches collection volume. | Rows age beyond the campaign or decision window. |
| Duplicate destination writes | Tests idempotency and stable identity mapping. | The same entity/run creates multiple external actions. |
| Cost per reviewed useful row | Relates platform spend to approved, decision-useful output. | Raw volume rises but reviewed utility falls. |
| Source-drift exceptions | Detects changed markup, response shape, policy, or source availability. | A new unknown pattern survives more than one bounded check. |
Client-facing delivery note template
Use a note like this when delivering exports to a client or another team:
This Dataset contains bounded public-source observations produced by the Apify Actor for the submitted Input. Each row includes observation time, evidence confidence, recommended review action, and explicit gaps where available. A positive row is not proof of buyer intent, permission, legal status, future outcome, or any fact listed in the Actor's “never claims” section. Partial and failure rows are included so coverage is not overstated. Validate material rows at their source before acting.
Add the Actor URL, run URL, Dataset URL, build/version, exact Input scope, observation window, pricing model observed for the run, reviewer name, and date of approval.
CRM disposition vocabulary
Keep collection results and sales dispositions separate. A practical downstream vocabulary is:
needs_evidence_review: useful signal exists but a reviewer has not approved it.needs_identity_review: entity or ownership association is not sufficiently proven.needs_policy_review: contact, privacy, suppression, legal, or contractual policy must be checked.approved_for_research: an analyst may perform more research; this is not approval for outreach.approved_for_authorized_action: a named operator approved one specific action under the organization's policy.retry_operational_failure: the source or infrastructure failed and a bounded retry is appropriate.closed_no_supported_signal: the completed bounded check found no supported signal; this is not a universal negative fact.closed_out_of_scope: the input should not have entered this workflow.
Never overwrite recommendedAction with the CRM disposition. The first is Actor-produced decision support; the second is your organization's accountable decision.
Sampling plan
For a new workflow, review every row in the first small run. When the contract is understood, sample all failure and partial rows plus a representative set of high-, medium-, and low-confidence results. Re-expand to full review whenever the source changes, the schema version changes, a new input cohort is introduced, the error distribution shifts, or a downstream user reports an unexplained result.
Change-management record
When you change field mappings or automation policy, record:
- Previous mapping or rule.
- New mapping or rule.
- Actor build/version and schemaVersion used for validation.
- Test run and Dataset URLs.
- Positive, negative, partial, retry, and budget fixtures inspected.
- Security and privacy review outcome.
- Approver and activation time.
- Rollback condition and responsible operator.
This makes a commercial data workflow supportable. Without the record, a later operator cannot distinguish a real source change from an undocumented mapping change.
Delivery patterns for marketing and small-business teams
One-off research
Run the Actor in Console, inspect the overview table, open evidence for each material row, and export only the approved subset. Record the run URL in the client or campaign notes.
Recurring watch or hygiene job
Use an Apify schedule. Write rows into a staging table keyed by entityId. Compare current and previous observations only when the Actor supplies valid state or your own pipeline implements an explicit comparable baseline. Never infer a change from a failed run.
Agency client delivery
Deliver three views: business results, evidence/quality exceptions, and operational failures. Include the run URL, observation time, configured scope, and a plain-language statement of what the Actor does not prove. This makes the deliverable auditable and reduces disputes caused by overclaiming.
CRM enrichment
Write into staging fields first. A human or approved policy promotes values into canonical CRM fields. Keep raw source values separate from normalized and decision fields, and do not replace a verified value with a lower-confidence observation.
AI-assisted review
An LLM can summarize rows, but it must receive the evidence, confidence risks, negative signals, and limitations. Require citations to sourceEvidence and prohibit invented identity, intent, legal, funding, mailbox, valuation, or availability facts.
Buyer and operator acceptance checklist
Use this checklist before calling the workflow production-ready.
Product fit
- The business question matches: Which currently observed listings deserve human review, and how complete and fresh is the evidence behind that shortlist?
- The submitted entities were selected through an authorized process.
- A human owner understands the positive, negative, partial, and failure row types.
- The team accepts the boundaries listed in “What this Actor never claims.”
- The destination keeps evidence confidence separate from business scoring.
Input and run controls
-
location_identifieris explicitly reviewed and bounded. -
deal_typeis explicitly reviewed and bounded. -
max_itemsis explicitly reviewed and bounded. -
max_pagesis explicitly reviewed and bounded. - The first production-like run uses a small representative sample.
- A maximum charge or internal spend alert is configured where appropriate.
- The workflow records Actor ID, build/version, run ID, Dataset ID, and input hash.
Data handling
-
entityIdis mapped to an idempotent destination key. -
observedAtand source-specific time fields remain distinct. -
sourceEvidence, gaps, and nulls are preserved. - Advisory and failure rows cannot enter the positive-results lane.
- Low-confidence and partial rows have a visible manual-review view.
- Retention and deletion rules match the type of data collected.
Action safety
-
recommendedActionis treated as a review label. -
safeToAutomate=falseblocks automatic external action. - Consent, suppression, legal, contractual, and platform rules are evaluated downstream.
- A reviewer can trace a material action back to source evidence and run metadata.
- Retry logic cannot duplicate a downstream action.
Ongoing quality
- The team monitors failure, retry, partial, low-confidence, and empty-result rates.
- A source-drift threshold pauses the workflow for inspection.
- Sample evidence is manually reviewed on a recurring basis.
- Cost per useful reviewed row is measured.
- Documentation and field mappings are updated when schemaVersion changes.
Frequently asked questions
Is this a database?
No. It is an on-demand observation tool. Each run collects or evaluates the submitted scope and records evidence at that time.
Does a found row prove commercial interest?
No. A found row proves only the factual observation described by its fields. Buyer intent is never inferred.
Can I automatically contact every result?
No. Use recommendedAction as triage, verify the evidence and identity, and apply your own consent, privacy, suppression, and outreach rules.
Why is safeToAutomate often false?
Because a useful observation can still require identity, context, legal, or source verification before action. Conservative routing prevents false certainty from scaling.
What should I do with low confidence?
Open confidenceRisks and sourceEvidence, close the important gap, or keep the row in a manual queue. Do not hide the confidence field.
What does partial mean?
The Actor obtained some usable evidence but could not support a complete observation of the configured scope. Partial is not the same as empty.
What is a confirmed zero?
Only an explicit source or deterministic rule can support a confirmed absence. An outage, truncation, or unreadable response is not a zero.
Should I retry every failure?
No. Retry only when retryable is true. Invalid input, policy refusal, or deterministic classification should be corrected or handled, not looped.
Can I delete failure rows?
You can exclude them from a business-results view, but retain them in operational logs so Dataset completeness and retry decisions stay explainable.
How should I deduplicate?
Use entityId for the entity and, for stateful monitors, eventId for the observed transition. Also retain the Apify run ID.
Can I treat confidence as conversion probability?
No. Confidence measures evidence support, not purchase probability, revenue, suitability, or expected return.
Can I change the recommended action?
Yes. It is an explainable default. Your downstream policy can be stricter, and should encode organization-specific authorization and risk tolerance.
How do I estimate cost?
Run the smallest representative input, inspect live event prices and run usage in Apify, then model the number of billable result events. The live pricing panel is authoritative.
Why use a small prefill?
It produces a cheap, fast, inspectable first run and reduces the chance of scaling a wrong input or workflow assumption.
Can I schedule it?
Yes. Use an Apify schedule, but make the destination idempotent and review changes in failure, partial, and confidence rates.
Can I export CSV or Excel?
Yes. Apify Datasets support common export formats. JSON is recommended when you need nested evidence and decision fields.
Can I send results to Sheets or Airtable?
Yes. Preserve entityId, confidence, evidence, gaps, actions, and failure fields instead of mapping only the headline value.
Can I use it from Make, Zapier, or n8n?
Yes. Start the Actor, wait for a successful terminal state, read Dataset items, then branch on decision and failure fields.
Can an LLM consume the output?
Yes, but pass the structured evidence and limitations together. Instruct the model not to invent missing facts and to cite sourceEvidence.
What happens when a source changes?
The run may become partial, unavailable, or fail validation. Monitor these rates and inspect logs before treating changed output as a real-world shift.
Does public mean unrestricted?
No. Public visibility does not remove source terms, privacy obligations, retention rules, or the need for a legitimate downstream purpose.
Is a source URL permanent?
Not necessarily. Store observation time and material facts because web content can change or disappear.
Can I rely on one row for a high-stakes decision?
No. High-stakes legal, financial, employment, compliance, safety, or personal decisions require appropriate primary evidence and qualified review.
How do I report a suspected parsing issue?
Provide the Actor run ID, a redacted input, affected field, expected source evidence, and whether the issue reproduces. Never include tokens or private data.
What does success mean?
A found row is a validated observation of one search-result card. It becomes a decision lead, never an automatic buy, valuation, or availability claim.
Support information to include with an issue
Provide the public Actor name, Apify run ID, Dataset item index or stable entity ID, a redacted Input, the relevant source URL, expected behavior, observed behavior, and whether retrying produced the same result. Do not include an Apify token, API key, private customer record, or unnecessary personal data.
Final interpretation rule
A found row is a validated observation of one search-result card. It becomes a decision lead, never an automatic buy, valuation, or availability claim.