we-promise/sure · warning · Property::AvmImport::Error
Please provide a name and a complete US address (street, cit
Error message
Please provide a name and a complete US address (street, city, state, and ZIP code).
What it means
RateLimitedError raised in SimplefinItem::Importer when the SimpleFIN API's error messages include 'make fewer requests', 'only refreshed once every 24 hours', or 'rate limit' (case-insensitive). SimpleFIN refreshes an account's data at most once per 24 hours, so aggressive re-syncing is rejected server-side. The importer specifically classifies this as RateLimitedError (and emits a simplefin.rate_limited notification) so callers can back off instead of treating it as a fatal API error, which would take the :api_error path below.
Source
Thrown at app/models/property/avm_import.rb:84
end
account.auto_share_with_family! if family.share_all_by_default?
account
rescue ActiveRecord::RecordInvalid => e
raise Error.new(e.record.errors.full_messages.to_sentence.presence || e.message)
end
private
attr_reader :family, :owner, :provider_key, :name, :address_attributes
# The form marks these required, but a forged or JS-less submission can
# bypass that — validate locally before spending a monthly-budget request
# on a lookup that can't produce a property.
def validate_inputs!
missing = name.blank? ||
%i[line1 locality region postal_code].any? { |field| address_attributes[field].blank? }
raise Error.new(I18n.t("providers.property_valuation.missing_fields")) if missing
end
end
View on GitHub (pinned to e69894adb9)
Solutions
- Wait for the 24-hour window to roll over before re-syncing this item
- Catch RateLimitedError separately and mark the sync as rate-limited rather than failed, then reschedule with jittered delay
- Persist last_refreshed_at per item and skip imports inside the window (guard before calling import)
- Space out scheduled jobs so each item syncs at most once daily
Example fix
# before SimplefinItem.find(id).import_latest_data(sync: sync) # after begin SimplefinItem.find(id).import_latest_data(sync: sync) rescue Provider::Simplefin::RateLimitedError sync.update!(status_text: "Rate limited by SimpleFIN (24h refresh); retrying tomorrow") SimplefinItem::ImportJob.set(wait: 24.hours).perform_later(id) end
Defensive patterns
Strategy: retry
Validate before calling
last = item.last_synced_at # or your persisted refresh timestamp
if last && last > 23.hours.ago
Rails.logger.info("SimpleFIN 24h window active for item #{item.id}; skipping")
return
end Try / catch
begin item.import_latest_data(sync: sync) rescue Provider::Simplefin::RateLimitedError sync.update!(status_text: "Rate limited by SimpleFIN; retrying after 24h refresh window") ImportJob.set(wait: 24.hours).perform_later(item.id) end
Prevention
- Track last-refresh per SimpleFIN item and skip imports inside the 24h window
- Schedule each item at most once daily with jitter
- Rescue RateLimitedError separately from generic SimplefinError — it is recoverable by waiting, not by retrying now
- Debounce user-triggered 'refresh now' buttons
When it happens
Trigger: Triggering two imports for the same SimpleFIN item within the refresh window; a user clicking 'refresh' repeatedly; scheduled jobs and manual syncs racing; retry storms after partial failures re-hitting the accounts endpoint.
Common situations: Impatient users re-syncing right after a sync; cron schedules set tighter than 24h per item; multi-worker setups both picking the same item; testing against production SimpleFIN bridges.
Related errors
AI-assisted analysis of we-promise/sure@e69894adb9 (2026-08-21).
Data as JSON: /api/errors/177e0f618ee9d5e7.
Report an issue: GitHub.