we-promise/sure · warning · Provider::Realie::Error
Realie did not return a property for this address.
Error message
Realie did not return a property for this address.
What it means
Raised in Provider::Realie#fetch_property_valuation when the address lookup (GET /api/public/property/address/ with address + state params) succeeded but returned no usable records: parsed["property"] was nil, an empty array, or contained only blank entries. The user-facing copy comes from I18n providers.realie.errors.no_property, so this is an expected 'no data' outcome, not an integration bug.
Source
Thrown at app/models/provider/realie.rb:63
# Realie model (AVM) value, so no separate valuation request is needed.
def fetch_property_valuation(line1:, locality: nil, region: nil, postal_code: nil)
with_provider_response do
throttle_request
record_monthly_request!
# The address lookup endpoint accepts only the street address and
# 2-letter state code — filtering by city additionally requires a
# county, which the property address form doesn't collect.
response = client.get("#{base_url}/api/public/property/address/") do |req|
req.params["address"] = line1.to_s.strip
req.params["state"] = region.to_s.strip.upcase
end
parsed = JSON.parse(response.body)
records = parsed["property"]
records = [ records ] unless records.is_a?(Array)
records = records.reject(&:blank?)
raise Error.new(I18n.t("providers.realie.errors.no_property")) if records.empty?
# A street+state query can return several candidates across different
# cities; pick the first one consistent with the entered city/ZIP.
record = records.find { |candidate| location_match?(candidate, locality: locality, postal_code: postal_code) }
raise Error.new(I18n.t("providers.realie.errors.location_mismatch")) if record.nil?
# Realie returns modelValue: 0 when it couldn't produce an AVM
# estimate, so zero counts as absent and falls back to the assessed
# total market value.
valuation = [ record["modelValue"], record["totalMarketValue"] ].find { |value| value.present? && value.to_d.positive? }
raise Error.new(I18n.t("providers.realie.errors.no_valuation")) if valuation.nil?
PropertyValuation.new(
valuation: BigDecimal(valuation.to_s),
currency: "USD",
property_type: subtype_for_use_code(record["useCode"]),
year_built: record["yearBuilt"],
area_value: record["buildingArea"],View on GitHub (pinned to e69894adb9)
Solutions
- Normalize the inputs before calling: strip the street line, require a valid 2-letter state code, and keep the unit out of line1 if possible.
- Retry once with a simplified address variant (drop directional suffixes like 'Nw', remove unit designators).
- Fall back to another valuation provider or mark the property as manually appraisable when Realie has no coverage for the area.
- Check Realie docs/coverage notes for the state — if unsupported, gate the provider by state in the UI.
Example fix
# before valuation = realie.fetch_property_valuation( line1: "123 Main St Nw Apt 2B", region: "Washington" ) # -> no_property # after line1 = address.line1.strip.sub(/\b(?:apt|unit|ste)\s*\S+\b/i, "") region = States.abbreviation_for(address.region) # ensure 2-letter code raise ArgumentError, "state required" if region.blank? valuation = realie.fetch_property_valuation(line1: line1, region: region, locality: address.city, postal_code: address.zip)
Defensive patterns
Strategy: fallback
Validate before calling
line1 = line1.to_s.strip
region = region.to_s.strip.upcase
raise ArgumentError, "2-letter state required" unless region.match?(/\A[A-Z]{2}\z/)
raise ArgumentError, "street required" if line1.length < 5 Try / catch
begin
valuation = realie.fetch_property_valuation(line1:, locality:, region:, postal_code:)
rescue Provider::Realie::Error => e
raise unless e.message == I18n.t("providers.realie.errors.no_property")
valuation = rentcast.fetch_property_valuation(line1:, locality:, region:, postal_code:)
end Prevention
- Normalize the street line (strip unit designators, drop directionals on retry) before the call.
- Validate state is a 2-letter code and street is non-trivial client-side.
- Gate Realie by coverage per state and fall back to another AVM provider where coverage is thin.
When it happens
Trigger: Street address not present in Realie's coverage (sparse counties, rural parcels); malformed or abbreviated street line ('123 Main St Nw Apt 2' vs normalized form); wrong 2-letter state code; newly constructed address not yet in the dataset.
Common situations: Users typing free-text addresses with typos; coverage gaps for small towns; unit numbers confusing the matcher; state code lowercase or full name passed in (the code upcases region, but a full name like 'Washington' still fails since it must be 2 letters).
Related errors
- Realie matched a property in a different city or ZIP code. P
- Realie did not return a valuation for this property.
AI-assisted analysis of we-promise/sure@e69894adb9 (2026-08-21).
Data as JSON: /api/errors/1350feb3d1a873d2.
Report an issue: GitHub.