Browse the notebookAPI design

How to Choose a Real Estate Data API for Your Application

By RealtyCrawl team10 min read

Evaluate real estate APIs by workflow, source availability, identity, freshness, response quality, and the cost of a complete integration.

Editorial illustration accompanying How to Choose a Real Estate Data API for Your Application

Choosing a real estate API begins with the job your application needs to do. A listing search, a verified transaction lookup, a rental comparison, and a property identity service may all be described as “property data,” but they need different evidence. A broad source catalog cannot answer those questions on its own.

This guide provides a practical evaluation process for a public-listing integration. It follows the same sequence you should use in a migration: define the workflow, check supported operations, inspect representative responses, measure the complete request path, and test recovery. RealtyCrawl examples show how to apply the checklist without assuming that every documented operation is enabled.

Write down the product workflow first

Describe the user action and the output you intend to show. For example, a research screen may need a bounded sale-listing search, a source URL, a displayed asking price, and a saved observation time. A transaction-analysis product needs different evidence and should not substitute public asking prices for recorded sales.

List the essential fields and acceptable unknowns. A map needs usable geometry; an area-based comparison needs a known measurement basis; a listing card may still be useful when media is missing. These requirements determine which responses count as usable, not merely whether the server returned HTTP 200.

Separate launch requirements from later possibilities. If your first version only needs one country and one source, evaluate that slice deeply before prioritizing catalog breadth. A smaller integration with a clear failure path can be easier to operate than a broader one whose unsupported cases are discovered by end users.

Match a product question to the required evidence
WorkflowMinimum evidenceDo not substitute
Listing discoverySource publication, query scope, observation timeA claim of complete inventory
Asking-price monitoringComparable observations of the same publicationRepeated reads of one saved response
Property matchingUnit-aware identity evidenceAddress similarity alone
Transaction researchVerified transaction records appropriate to the taskSource-reported asking-price history

Evaluate coverage per operation and market

Ask for availability at the level of platform, country, operation, and selector. A provider may support search in a country without supporting detail lookup, rental inventory, history, or native-ID resolution. A documented route is useful as a contract, but it is not proof that its underlying source is active.

RealtyCrawl exposes public capabilities so a client can inspect status, required selectors, supported filters, supported sorts, and geographies. In the current implementation, verified search adapters cover a subset of the researched platform inventory. Deployment configuration, provider credentials, and runtime source conditions still affect whether requests can complete.

Save a capability response with your evaluation notes and check it again before launch. Record which exact operation you exercised rather than writing “platform supported.” If an essential feature is in research or unavailable, treat it as a gap in the present workflow, even if a future implementation would fit the published schema.

curl --get 'https://realtycrawl.dev/v1/meta/capabilities' \
  --data-urlencode 'platform=zillow' \
  --data-urlencode 'country=US'

Compare selectors before comparing result counts

Two APIs can accept a city name and select different areas. One may search a portal-defined region while another resolves the text to a bounding box. A postal code, map window, and municipality boundary are not automatically equivalent. Document the selector actually sent to each provider.

RealtyCrawl’s implemented source adapters illustrate this difference: Zillow uses a bounding box, Redfin uses a US postal-code selector, and the Realtor.com, Rightmove, and Idealista adapters use source-specific text locations in their verified markets. These details must be checked against current capabilities when preparing requests.

Do not send one universal body to every source unless those sources support that exact input. For a representative comparison, choose compatible geographical scopes and explain any residual differences. A larger result count can reflect a broader search area or different ordering rather than better data quality.

Inspect identity, money, and uncertainty

Download the response schema and inspect real samples against it. Ask whether listing and physical-property identities are separate, whether native IDs remain available, and whether every observation carries source provenance. These fields determine how safely you can reconcile results later.

Check money and area representations before computing summary values. Currency, price kind, payment period, area unit, and measurement basis should survive normalization. Unknown values should remain unknown. An API that consistently fills missing values with guesses can appear complete while making your downstream calculations less trustworthy.

Look for the relationship between the schema and actual responses. A field that exists in a contract may be null for your source or market. Measure missingness on the examples that match your workload, and decide which omissions your product can handle. Do not infer data availability from an attractive example response alone.

  • Can every displayed value be traced to a source and observation time?
  • Are listing IDs distinct from verified property identity?
  • Are decimal amounts, currency, area units, and basis preserved?
  • Can the client distinguish unknown, empty, failed, and unavailable outcomes?

Determine exactly what a read acquires

Ask whether an endpoint performs a fresh source request, reads a saved observation, returns a provider cache, or combines these behaviors. Those choices affect latency, cost, and the freshness promise you can make to users. An HTTP response timestamp is not necessarily a source observation timestamp.

For RealtyCrawl’s current listing reads, the resource is an account-owned saved observation retained for 24 hours. That behavior is useful for retrieving a collected record, but a monitoring application needs a supported acquisition operation to obtain newer evidence. Save your own history if you need to compare observations beyond the resource-retention window.

Evaluate freshness with repeated calls only when you understand what those calls do. Replaying an idempotent request or reading the same saved resource may correctly return the same observation. Treat that as documented behavior, not proof that the source price has remained unchanged.

Build a representative evaluation set

Use a small set of cases chosen from your intended workflow: a dense search area, a sparse area, a listing with missing optional fields, a source-specific unsupported request, and a saved record that becomes unavailable. Include the countries and transaction types you actually plan to offer.

Define acceptance criteria before collecting results. These might include preservation of source identifiers, no cross-currency arithmetic, a clear failure message for unsupported selectors, and complete request-cost accounting. Set data-quality thresholds according to your product’s needs rather than borrowing an unexplained benchmark.

Review individual records as well as aggregate metrics. A high success rate can coexist with incorrect units, misleading status labels, or missing timestamps. Retain the inputs and raw outputs so failures can be investigated without spending another request or relying on a source page that has since changed.

Evaluation cases and what they reveal
CaseWhat to inspect
Dense source windowTruncation, ordering, duplicate publications
Sparse or empty searchSuccessful empty result versus source failure
Missing price or areaNull handling and calculation eligibility
Unsupported filterExplicit rejection instead of silent omission
Expired saved listingClear resource-availability behavior
Interrupted requestIdempotent recovery and accounting

Price the complete workflow

Count every operation required by a user action. A search followed by a stored listing read and a media read is a sequence of requests, even if the interface presents it as one click. Multi-source collection can have different cost behavior from a single-platform request.

Use current operation pricing and measure charges from response headers during a bounded evaluation. RealtyCrawl supports X-Max-Credits as a per-request authorization ceiling. A completed idempotent replay reports zero new charge in X-Credits-Used. Your job controller still needs a total budget across requests and attempts.

Compare useful outputs as well as raw call prices. A low-cost request that frequently lacks a field essential to your workflow may require more collection or manual review. Keep those operational costs visible, but avoid projecting a single successful sample into a reliability or performance guarantee. Measure the workload you will actually run.

Test failures as part of the product

A production integration needs decisions for authentication errors, unsupported inputs, rate limits, temporary source failures, and partial results. Evaluate whether the API exposes machine-readable error codes and request identifiers that let your support and engineering teams investigate the same event.

If you choose partial multi-source results, retain per-source outcomes and label the response accordingly. An unavailable source should not silently vanish from a comparison as if it had no listings. Decide whether your application should show the remaining observations, reuse older evidence with an age label, or stop the workflow.

Test retries under a strict attempt budget. Preserve logical request identity after uncertain outcomes, honor Retry-After, and distinguish a conflict from a temporary outage. Also test the user-facing message. A technically correct exception still needs a clear product state explaining whether the user should change input, wait, or contact support.

Use a scorecard with explicit pass conditions

Create one row per launch requirement and attach evidence to the evaluation result. For a listing-research screen, a row might require an active sale-search operation in the target market, preservation of currency, a usable source URL, and an observation timestamp. Another row might require an explicit error for unsupported filters.

Mark each requirement as demonstrated, failed, or not yet tested. A documentation statement can establish the intended contract, while a saved response demonstrates one exercised case. Keep those evidence types separate. An untested claim should not receive the same status as a successful representative test.

Weight requirements according to the product. If unit-aware area comparison is essential, an unavailable area basis can be a blocker even when other fields are excellent. If the feature only displays source-linked cards, the same omission may be acceptable. A scorecard should make that tradeoff visible rather than average a critical gap into a reassuring overall score.

Plan the checks that continue after selection

Source integrations change over time. Keep a small fixture suite for response interpretation and a bounded runtime check for the operations your product depends on. Fixtures catch client regressions without spending source requests; runtime checks reveal conditions that static examples cannot establish.

Assign an owner to review capability changes, unexpected null rates, and shifts in source errors. Define when to pause a feature rather than continuing with misleading results. Revisit request budgets when the application adds sources, changes collection frequency, or introduces additional detail reads.

Retain evaluation evidence as a dated baseline, not a permanent promise. When a provider or your own adapter changes, compare against that baseline and document the new behavior. The result is a maintainable integration decision that can evolve with the product while keeping its limitations visible.

Keep the integration reversible

Put provider-specific selectors and response interpretation behind a small adapter in your application. Preserve the raw provider response alongside your normalized application model during evaluation. This makes differences inspectable and reduces the temptation to force every source into unsupported assumptions.

If you are migrating, avoid changing the provider, matching algorithm, and reporting method simultaneously. Establish comparable behavior first, then introduce new interpretation rules as separate changes. Keep a rollback option and define the error, cost, or data-quality conditions that would trigger it.

Finish the evaluation with a written decision: supported workflow, unsupported requirements, observed limitations, request budget, and ownership of ongoing checks. That record is more useful than a generic ranking of APIs. It connects the integration choice to the exact experience your application can deliver.

References for your implementation

Use the source catalog to choose an operation and the API reference to check its inputs, response contract, and current availability.

Topics

#api-evaluation#coverage#integration