Stock Price Consensus Methodology — v1.0
How portfolIQ computes a derived consensus price from multiple independent sources, what the confidence_score means, and what the current coverage limitations are.
Stock Price Consensus Methodology — v1.0
Disclaimer: Data provided by portfolIQ is factual and for analytical and research purposes only. It does not constitute financial advice, investment recommendations, or guidance on buying, selling, or holding any financial instrument. Not financial advice. Methodology versioned and updated at this URL. portfoliq.io/methodology/stock-consensus-v1.0
Overview
portfolIQ computes a derived consensus price for each stock ticker from multiple independent free public data sources. No single raw source price is ever exposed via the API — only the derived consensus value and its associated quality metadata.
This approach serves two purposes:
- Legal compliance — individual source ToS prohibit redistribution of raw data. The consensus derivative is portfolIQ's own computed output.
- Data quality — cross-source validation detects anomalies that any single source alone cannot catch.
The methodology identifier exposed in each API response is data_methodology: "stock_consensus_v1".
Algorithm
1. Data Collection
For each ticker/date pair, portfolIQ queries multiple independent data sources. All sources are free-tier providers with public availability. Individual source identities are not disclosed per their Terms of Service — only source_count (an integer) is surfaced in the API response.
2. Outlier Detection
Before any aggregation, portfolIQ filters unreliable readings:
- The cross-source median closing price is computed across all available sources for that ticker/date.
- Any source whose closing price deviates by more than 5% from this median is excluded from the consensus calculation.
- The filtered set is used for all subsequent steps.
3. Consensus Price Calculation
The aggregation method depends on how many sources survive outlier detection:
| Sources remaining | Method | is_consensus_valid |
|---|---|---|
| 3 or more | Volume-weighted average price (VWAP), with a 50% cap per source to prevent any single source from dominating | true |
| 2 sources | Arithmetic average of closing prices | true |
| 1 source | Single source price — no cross-validation possible | false |
The 50% weight cap on individual sources means that even with exactly 3 sources, no single provider can account for more than half the derived price. This prevents data quality issues at any one provider from skewing the consensus.
4. Confidence Score
Each API response includes a confidence_score (range: 0.0 to 1.0) reflecting the overall quality of the consensus for that data point.
The score is computed as:
confidence_score = base_score × penalty_deviation × penalty_single_source
Where:
| Component | Description |
|---|---|
base_score | Determined by source_count (see table below) |
penalty_deviation | Proportional to cross-source price spread — higher spread = lower score |
penalty_single_source | Applied when source_count = 1 (fallback mode) |
Base scores by source count:
| Source count | Base score |
|---|---|
| 4 or more sources | 1.00 |
| 3 sources | 0.90 |
| 2 sources | 0.75 |
| 1 source (fallback) | 0.40 |
Interpreting the confidence score:
| Score range | Interpretation | Recommended use |
|---|---|---|
0.7 – 1.0 | High confidence | Suitable for analytical and production use |
0.5 – 0.69 | Partial validation | Use with caution — flag in your application |
Below 0.5 | Single-source fallback | is_consensus_valid: false — not recommended for production |
When confidence_score < 0.5, the response also sets is_consensus_valid: false. This is the primary signal your application should check before treating a data point as validated.
5. Data Refresh Cadence
| Asset class | Refresh time | Trigger |
|---|---|---|
| US stocks | Daily at 21:30 UTC | 30 min after NYSE close (16:00 ET) |
| UK stocks | Daily at 18:00 UTC | 30 min after LSE close (16:30 GMT) |
| FR stocks (events) | Daily at 18:30 UTC | 30 min after Euronext Paris close |
The meta.computed_at timestamp in each API response reflects the exact ingestion run time.
Coverage
| Asset class | Coverage | Source basis |
|---|---|---|
| US Stocks | S&P 500 (500 tickers) | Multiple independent free sources — Tier 1 fusion |
| UK Stocks | FTSE All-Share top 2,000 | LSE Delayed Market Data (MiFIR 2024 — free redistribution) |
| FR Corporate Events | Euronext Paris top 800 | AMF info-financière (Etalab 2.0 — free redistribution) |
| Commodities | 11 symbols (XAU, XAG, CL, BZ, NG, HG, ZW, ZC, KC, SB, CC) | FRED (public domain) + metals.dev |
Limitations
| Limitation | Detail |
|---|---|
| Source names not disclosed | Individual provider identities are not surfaced per ToS. Only source_count is public. |
| Historical backfill | Single-source only — confidence_score = 0.40, is_consensus_valid: false for all backfilled data points. |
| EU stocks OHLCV | Not yet available. UCITS ETF and EU equity price consensus: Sprint 32+. |
| Microcap equities | Companies with market cap below $100M USD are not covered in Phase 1. |
| Intraday pricing | Not available — daily EOD (end-of-day) only. |
| Real-time data | Not available — minimum latency is 30 minutes post-market-close. |
What the API exposes
The following fields are present in every /prices response:
{
"meta": {
"data_methodology": "stock_consensus_v1",
"confidence_score": 0.92,
"source_count": 3,
"is_consensus_valid": true,
"licensed_for_commercial_use": true,
"computed_at": "2026-05-21T21:30:00Z",
"methodology_url": "https://portfoliq.io/methodology/stock-consensus-v1.0"
}
}
licensed_for_commercial_use is true only when source_count >= 2 and data_methodology = stock_consensus_v1. Single-source fallback responses return licensed_for_commercial_use: false.
Related pages
- Multi-tier data sourcing — Tier 0 / Tier 1 / Tier 2 licensing framework and redistribution rights
- Stock metadata consensus — How EDGAR-derived metadata fields are computed
- Cross-asset correlations — Rolling Pearson correlations built on top of these consensus series
- API reference — Full endpoint schema for
/v1/stocks/{ticker}/prices,/v1/etf/{ticker}/prices,/v1/commodities/{symbol}/prices
Not financial advice. Methodology versioned and updated at portfoliq.io/methodology/stock-consensus-v1.0. portfolIQ is not a registered investment advisor.