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

  1. Wait for the 24-hour window to roll over before re-syncing this item
  2. Catch RateLimitedError separately and mark the sync as rate-limited rather than failed, then reschedule with jittered delay
  3. Persist last_refreshed_at per item and skip imports inside the window (guard before calling import)
  4. 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

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.