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

How price fetching works

Sure fetches chart and price data from Yahoo Finance without sending authentication cookies or a crumb token. Yahoo rate-limits authenticated chart requests far more aggressively than anonymous ones, so skipping authentication reduces 429 rate-limit errors on price syncs. If Yahoo returns a 401 for a specific symbol (either a hard HTTP 401 or a 200 response with an Unauthorized error code), Sure automatically retries that request once with a fresh cookie and crumb. If the retry also fails with a 401, Sure raises an authentication error and stops retrying. Cookie and crumb authentication is still used for security detail lookups (the quoteSummary endpoint), which require it.

European and other non-US exchanges

Sure automatically appends Yahoo Finance’s required exchange suffix when fetching prices for securities listed on European and other international exchanges. The following venues are supported: London-listed securities are quoted in pence (GBp) by Yahoo Finance. Sure converts pence prices to GBP automatically. If a security’s exchange is not in the table above, its ticker is sent to Yahoo Finance without a suffix. You can still find and add such securities by searching with the full suffixed symbol as shown on Yahoo Finance’s quote page URL.

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

Warsaw Exchange (GPW) securities

Securities listed on the Warsaw Stock Exchange (XWAR/GPW) are priced in PLN. If you added Polish securities before this fix was released, their historical prices may have been stored as USD. Sure automatically corrects mis-tagged Warsaw prices on upgrade: USD prices are relabeled to PLN, duplicates are removed, and any affected accounts are queued for a sync so holdings revalue at the correct exchange rate.

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)

Mansa API

Mansa API provides current quote data for securities listed on the Nigerian Exchange (NGX). It is the only Sure provider with verified NGX coverage.
  • Rate limits: 100 API requests per day (free tier)
  • Coverage: NGX (Nigerian Exchange) only
  • API key: Required — get one at mansaapi.com
  • History: The free tier returns today’s quote only. Historical OHLCV data requires a paid Mansa Pro plan.
Because the free tier has no historical endpoint, NGX holdings sync with today’s price rather than building full price history. A date range that doesn’t include today will return an error rather than empty data.
See the Mansa API provider page for full setup instructions.

Price sync scope

Sure only fetches prices for the date range each account actually needs for a given security. The range starts with the earliest trade or positive holding for that security. For provider-synced holdings, it can extend back to the account start date. Its end depends on whether you still hold the position:
  • Open positions — prices are fetched through today.
  • Closed positions — prices are fetched through the later of the last quantity-changing trade and the last positive holding date. Once you sell or transfer out your full position, Sure stops requesting new prices for that security in that account.
If you reopen a position (by buying again, or by editing a trade that affects the net quantity), Sure detects the change and resumes fetching prices through today. This scoping applies to both account-level syncs and the daily market data import. The daily importer merges the required windows across accounts before importing each security’s prices. Account-level syncs use their own account’s window. The daily importer also checks security details for all online securities, even when their positions are closed. Details already present are normally reused rather than fetched again.

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.