we-promise/sure · warning · Provider::Realie::Error
Realie did not return a valuation for this property.
Error message
Realie did not return a valuation for this property.
What it means
Raised in Provider::Realie#fetch_property_valuation after a record matched the address: neither record["modelValue"] nor record["totalMarketValue"] was present AND positive. Realie deliberately returns modelValue: 0 when its AVM cannot produce an estimate, so zero counts as absent and the assessed totalMarketValue is the fallback; when both are 0/blank the provider gives up with the I18n no_valuation message.
Source
Thrown at app/models/provider/realie.rb:74
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"],
area_unit: "sqft"
)
end
end
private
attr_reader :api_key
# The address lookup matches on street + state only (filtering by city
# additionally requires a county, which isn't collected), so a common
# street name can resolve to properties in other cities. A candidateView on GitHub (pinned to e69894adb9)
Solutions
- Treat as expected data absence: fall back to another valuation provider or prompt the user to enter a manual valuation.
- Retry after the next county assessment cycle if the property is new (no code change helps until data exists).
- Inspect the raw record once (log record["modelValue"], record["totalMarketValue"]) to confirm both are truly 0/blank rather than formatted oddly (e.g. '$450,000' or '450K' strings would to_d to 0 — if seen, normalize strings before the check in your own wrapper).
- Gate the 'estimated value' UI affordance on valuation presence so users are not promised a number the county cannot supply.
Example fix
# before
valuation = realie.fetch_property_valuation(line1:, locality:, region:, postal_code:)
# after
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_valuation")
valuation = rentcast.fetch_property_valuation(line1:, locality:, region:, postal_code:) # alternate AVM
end Defensive patterns
Strategy: fallback
Validate before calling
# cheap pre-check on any locally cached record copy (the live check lives in the provider)
has_value = ->(v) { v.present? && v.to_d.positive? }
# nothing to validate pre-call for a first lookup — the data lives server-side 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_valuation")
valuation = rentcast.fetch_property_valuation(line1:, locality:, region:, postal_code:)
end Prevention
- Design the valuation flow as provider-chained: Realie absent value -> alternate AVM -> manual entry prompt.
- Do not promise an AVM number in the UI until a provider returns one.
- If string-formatted values ('$450,000') ever appear in feeds, normalize before the positive? check in your wrapper.
When it happens
Trigger: A matched property whose AVM model has no estimate (0 modelValue) AND no assessed totalMarketValue in the county data (new construction, recently split parcels, counties with sparse assessment feeds); records where both fields are null strings; values returned as negative or non-numeric strings that to_d evaluates to 0.
Common situations: Newly built homes ahead of the first tax assessment; rural counties with minimal data; older records where only land value is assessed and market fields are empty; users expecting a valuation where public data simply does not have one yet.
Related errors
- Realie did not return a property for this address.
- Realie matched a property in a different city or ZIP code. P
- providers.rentcast.errors.no_valuation
- Couldn't find exchange rate from #{from_currency} to #{to_cu
AI-assisted analysis of we-promise/sure@e69894adb9 (2026-08-21).
Data as JSON: /api/errors/8fe12403c660051a.
Report an issue: GitHub.