we-promise/sure · error · Provider::YahooFinance::Error
No security info found for #{symbol}
Error message
No security info found for #{symbol} What it means
Provider::YahooFinance::Error raised in fetch_security_info when the quoteSummary response contains no result entry — the API answered successfully (auth passed) but returned an empty/absent quoteSummary.result array for the normalized symbol.
Source
Thrown at app/models/provider/yahoo_finance.rb:265
# Check for auth errors in response body
if data.dig("quoteSummary", "error", "code") == "Unauthorized"
# Clear cached crumb and retry once
clear_crumb_cache
cookie, crumb = fetch_cookie_and_crumb
response = authenticated_client(cookie).get("#{base_url}/v10/finance/quoteSummary/#{symbol}") do |req|
req.params["modules"] = "assetProfile,price,quoteType"
req.params["crumb"] = crumb
end
data = JSON.parse(response.body)
if data.dig("quoteSummary", "error", "code") == "Unauthorized"
raise AuthenticationError, "Yahoo Finance authentication failed after crumb refresh"
end
end
result = data.dig("quoteSummary", "result", 0)
raise Error, "No security info found for #{symbol}" unless result
asset_profile = result["assetProfile"] || {}
price_info = result["price"] || {}
quote_type = result["quoteType"] || {}
security_info = SecurityInfo.new(
symbol: symbol,
name: price_info["longName"] || price_info["shortName"] || quote_type["longName"] || quote_type["shortName"],
links: asset_profile["website"],
logo_url: nil, # Yahoo doesn't provide reliable logo URLs
description: asset_profile["longBusinessSummary"],
kind: map_security_type(quote_type["quoteType"]),
exchange_operating_mic: exchange_operating_mic
)
security_info
rescue JSON::ParserError => e
raise Error, "Invalid response format: #{e.message}"View on GitHub (pinned to e69894adb9)
Solutions
- Search the symbol via search_securities to see Yahoo's canonical form and use that exact symbol
- Confirm the ticker still exists on finance.yahoo.com — delisted symbols return empty results
- Check normalize_symbol behavior for the given mic — pass the correct exchange_operating_mic so suffixes are applied properly
- Rescue this error and mark the security as 'info unavailable' instead of failing the whole sync
Example fix
// before
info = provider.fetch_security_info(symbol: symbol, exchange_operating_mic: mic)
// after
begin
info = provider.fetch_security_info(symbol: symbol, exchange_operating_mic: mic)
rescue Provider::YahooFinance::Error => e
raise unless e.message.include?("No security info found")
matches = provider.search_securities(symbol)
canonical = matches.first
info = canonical ? provider.fetch_security_info(symbol: canonical.symbol, exchange_operating_mic: canonical.exchange_operating_mic) : nil
end Defensive patterns
Strategy: try-catch
Try / catch
begin
provider.fetch_security_info(symbol:, exchange_operating_mic:)
rescue Provider::YahooFinance::Error => e
raise unless e.message.include?("No security info found")
match = provider.search_securities(symbol).first
match ? provider.fetch_security_info(symbol: match.symbol, exchange_operating_mic: match.exchange_operating_mic) : nil
end Prevention
- Resolve symbols through search_securities first and store Yahoo-canonical forms
- Periodically revalidate stored symbols (renames/delistions) during syncs
- Treat missing info as 'unavailable' rather than a hard sync failure
When it happens
Trigger: Requesting info for an unknown, delisted, or renamed symbol; a symbol valid on one exchange but normalized to a Yahoo form that has no quoteSummary (suffix/prefix mismatches like 'ASML.AS' vs 'ASML'); symbols for asset types the endpoint doesn't summarize.
Common situations: Stored security symbols going stale after delisting/rename; symbols imported from another provider (Trading 212, Twelve Data) not matching Yahoo's format; OTC or thinly-traded tickers lacking quoteSummary modules.
Related errors
- Failed to fetch exchange rates: #{rates_response.error.messa
- Failed to fetch security prices: #{prices_response.error.mes
- bad_request
- No metadata returned for symbol #{av_symbol}
- Trading 212 authentication failed (#{response.code}). Check
AI-assisted analysis of we-promise/sure@e69894adb9 (2026-08-21).
Data as JSON: /api/errors/83cf0da2ca062848.
Report an issue: GitHub.