Skip to main content
Sure uses market data providers to fetch security prices, search for securities, and display portfolio holdings. You can enable multiple providers simultaneously, and each security can be assigned to a specific provider.

Available providers

Configuring providers

You can enable and configure market data providers from Settings > Self-Hosting in the Sure UI. Select the providers you want to use and enter API keys where required.

Environment variables

You can also configure providers through environment variables. Add these to your .env file or Docker Compose configuration:
When you set SECURITIES_PROVIDERS as an environment variable, it takes precedence over the UI setting. To manage providers from the UI only, leave the environment variable unset.

Multiple providers

You can enable multiple securities providers at the same time. When searching for securities, Sure queries the active provider and assigns each security to the provider that found it. This lets you use different providers for different asset types — for example, Yahoo Finance for US stocks and MFAPI for Indian mutual funds. If you disable a provider that has securities assigned to it, those securities are marked offline until the provider is re-enabled.

Provider details

Yahoo Finance

Yahoo Finance is the default provider and requires no API key. It offers broad global coverage for stocks, ETFs, indices, and cryptocurrencies.
  • Rate limits: No strict API key limits, but subject to Yahoo’s usage policies
  • Coverage: Global stocks, ETFs, mutual funds, indices, crypto
  • API key: Not required

Searching for securities with exchange suffixes

Yahoo Finance’s search index has gaps for some instruments — notably non-US managed funds such as Australian APIR-coded funds (e.g. VAN0111AU.AX). When the search index returns no results for a query that looks like a fully qualified symbol (contains a . exchange suffix, such as .AX for ASX or .L for LSE), Sure retries the query directly against the Yahoo Finance chart endpoint and synthesizes a result from the returned metadata. This means you can add these instruments by pasting the full symbol exactly as shown on Yahoo Finance’s own quote page URL — for example, VAN0111AU.AX rather than just VAN0111AU. A bare ticker without an exchange suffix does not trigger the fallback, since bare tickers already resolve through Yahoo’s normal search index.
If you experience connection issues with Yahoo Finance, some IPv6 networks may have trouble reaching Yahoo’s servers. Try setting YAHOO_FINANCE_IPV6=false in your environment variables to force IPv4 connections.

Twelve Data

Twelve Data provides real-time and historical market data for global equities and forex. It also serves as the default exchange rate provider.
  • Rate limits: 800 API requests per day (free tier), 8 per minute
  • Coverage: Global stocks, ETFs, forex, crypto
  • API key: Required — get one at twelvedata.com

Tiingo

Tiingo provides end-of-day and intraday price data for US and international equities.
  • Rate limits: 500 requests per hour (free tier)
  • Coverage: US stocks, international equities, ETFs, mutual funds
  • API key: Required — get one at tiingo.com

EODHD

EODHD (End of Day Historical Data) provides end-of-day prices across 70+ global exchanges.
  • Rate limits: 20 API requests per day (free tier)
  • Coverage: 70+ exchanges worldwide, stocks, ETFs, mutual funds, bonds
  • API key: Required — get one at eodhd.com

Alpha Vantage

Alpha Vantage provides free stock, ETF, and technical data for global markets.
  • Rate limits: 25 API requests per day (free tier), with a minimum 1-second interval between requests
  • Coverage: Global stocks, ETFs, technical indicators
  • API key: Required — get one at alphavantage.co
  • History: Free tier returns approximately 100 trading days of historical data

MFAPI

MFAPI is a free, open-source API for Indian mutual fund NAV (Net Asset Value) data. It requires no API key.
  • Rate limits: No strict limits
  • Coverage: Indian mutual funds only (BSE-listed schemes)
  • API key: Not required

MOEX

MOEX (Moscow Exchange) is a free provider for Russian-listed securities via the ISS public API. It requires no API key.
  • Rate limits: No strict limits
  • Coverage: Russian stocks, ETFs, BPIFs (mutual funds), and bonds on the Moscow Exchange; also provides RUB exchange rates
  • API key: Not required

T-Invest (T-Bank)

T-Invest is T-Bank’s (formerly Tinkoff) invest API. It serves two purposes in Sure:
  1. Securities pricing — when enabled as a provider, it prices Russian stocks, funds, and bonds listed on MOEX and SPB Exchange.
  2. Brand logos — when a read-only token is configured, Sure uses T-Invest’s CDN to fetch instrument brand logos for all securities, regardless of which provider handles pricing. This means MOEX-priced holdings still get real logos if a T-Invest token is present.
Because of the brand logo role, the T-Invest settings block in Settings > Self-Hosting remains visible whenever a token is already configured, even if T-Invest is not checked as a price provider.
  • Rate limits: Generous per-minute limits (hundreds of requests per minute)
  • Coverage: Russian stocks, funds (incl. БПИФs), and bonds on MOEX and SPB Exchange; brand logos for any security
  • API key: Required — create a read-only token in T-Bank investments under Settings > API tokens (requires an open T-Bank brokerage account)

Price freshness

When Sure cannot fetch a real price for a given date (for example, on weekends or market holidays when providers return no data), it carries the last known price forward to fill the gap. These gap-filled prices are marked as provisional. Provisional prices are automatically replaced the next time a sync runs and the provider returns a real value for that date. Sure re-checks provisional prices within a 7-day rolling window, so a Friday price carried forward over a weekend is corrected as soon as Monday’s data is available. Prices older than 7 days that were gap-filled are kept as-is and are not re-fetched. Prices you edit manually are never marked provisional and are not overwritten by syncs.