Data sources
oneapi.finance aggregates publicly available financial data from a small
number of upstream sources. We prefer disclosure over obfuscation: this page
lists every source, the data it covers, the refresh cadence, and the
behavior on failure.
If you require a vendor with exchange-licensed real-time feeds and SLA-backed direct exchange relationships, this is not that vendor. Read delayed data for the rationale and economics.
Source list
| Source | Domain | Coverage | Update cadence | Notes |
|---|---|---|---|---|
yahoo_query1 | query1.finance.yahoo.com | Quotes, time-series, statistics, dividends, splits, profile (global) | ~15 min during market hours | Primary for retail tickers. Sometimes flaky; we fail over to yahoo_query2. |
yahoo_query2 | query2.finance.yahoo.com | Same as yahoo_query1 | Same | Failover partner. |
stockanalysis | stockanalysis.com | Statistics, fundamentals, profile (global) | Daily | Strong on non-US listings. Used for multi-source corroboration. |
sec_edgar | data.sec.gov | XBRL filings (income, balance, cash flow), CIK, ISIN | Filing day, ~2 hour ingest delay | Authoritative for US issuers. |
coingecko | coingecko.com | Crypto spot prices and market caps | ~1 min | Used only for BTC-USD, ETH-EUR, etc. Not for equities. |
exchangerate_host | exchangerate.host | FX daily closes | Daily | Free fixings sourced from ECB and other central banks. |
internal_cache | (us) | Anything | n/a | When we serve from cache, the upstream source is preserved in the database but meta.source becomes internal_cache. |
This list is the wire-level truth: any value you see in meta.source other
than these is a bug — file a report.
Refresh cadence by data type
| Data | Cadence | Trigger |
|---|---|---|
| Quotes (popular US tickers) | ~15 minutes | Polling job, 60s heartbeat, with stale-while-revalidate cache. |
| Quotes (less popular tickers) | On request, with 5-minute cache | First request after expiry refetches. |
| Daily OHLCV bars | Once per session close, 02:00 UTC | Scheduled job. |
| Intraday OHLCV bars | Every 5-15 minutes during the relevant session | Scheduled job per region. |
| Statistics (price-derived) | With each quote refresh | Recomputed in-place. |
| Statistics (filing-derived) | On filing acceptance, ~2 hour ingest | EDGAR webhook poll. |
| Profile | Weekly | Scheduled job. |
| Dividends and splits | Weekly + on event | Scheduled job + corp-action listener. |
| FX | Daily | 18:00 UTC. |
| Crypto | Every 60 seconds | CoinGecko free-tier rate limit. |
Failover behavior
When we fetch a piece of data, we try sources in priority order. The order is data-specific:
- US equity quotes:
yahoo_query1→yahoo_query2→stockanalysis. - Non-US equity quotes:
yahoo_query1→yahoo_query2→stockanalysis. - Statistics:
sec_edgar(US only, for filed numbers) →stockanalysis→yahoo_query1. - Profile:
stockanalysis→yahoo_query1→sec_edgar(US only). - Dividends/splits:
yahoo_query1→stockanalysis. - FX:
exchangerate_host→yahoo_query1.
If every source in the chain fails for a given symbol within our timeout, we
return 502 upstream_failure with details.sources_tried listing what we
attempted.
What we do not source
- Real-time exchange tape. Requires SIP and exchange licensing fees in the high four to low five figures per month. Not in scope at our price point.
- Level 2 / order book data. Same licensing constraints.
- Options chains. Roadmap.
- Bond / credit / fixed-income. Roadmap; will start with US Treasuries.
- Insider transactions (Form 4). Roadmap.
- Institutional holdings (13F). Roadmap.
- Analyst price targets. Lower priority; the data quality is poor.
- Credit ratings. Licensed and expensive.
Robots and terms-of-service
We are courteous citizens. Our scraping fetches:
- Stay within published rate limits where the source has them.
- Identify a reasonable User-Agent (
oneapi.finance fetcher/1.x; ops@oneapi.finance). - Cache aggressively to avoid duplicate fetches.
- Stop and back off on
429,503, or sustained5xxfrom a source.
If you operate a source on this list and want us to stop, email
abuse@oneapi.finance and we will turn off ingestion within 24 hours.
Source health
We publish an internal source_health table per upstream (state, error
counters, cooldown). The aggregated state is exposed at
status.oneapi.finance. When a source goes
into a degraded or dead state, our gateway automatically routes around it.