portfolIQ
Documentation

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:

  1. Legal compliance — individual source ToS prohibit redistribution of raw data. The consensus derivative is portfolIQ's own computed output.
  2. 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 remainingMethodis_consensus_valid
3 or moreVolume-weighted average price (VWAP), with a 50% cap per source to prevent any single source from dominatingtrue
2 sourcesArithmetic average of closing pricestrue
1 sourceSingle source price — no cross-validation possiblefalse

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:

ComponentDescription
base_scoreDetermined by source_count (see table below)
penalty_deviationProportional to cross-source price spread — higher spread = lower score
penalty_single_sourceApplied when source_count = 1 (fallback mode)

Base scores by source count:

Source countBase score
4 or more sources1.00
3 sources0.90
2 sources0.75
1 source (fallback)0.40

Interpreting the confidence score:

Score rangeInterpretationRecommended use
0.71.0High confidenceSuitable for analytical and production use
0.50.69Partial validationUse with caution — flag in your application
Below 0.5Single-source fallbackis_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 classRefresh timeTrigger
US stocksDaily at 21:30 UTC30 min after NYSE close (16:00 ET)
UK stocksDaily at 18:00 UTC30 min after LSE close (16:30 GMT)
FR stocks (events)Daily at 18:30 UTC30 min after Euronext Paris close

The meta.computed_at timestamp in each API response reflects the exact ingestion run time.

Coverage

Asset classCoverageSource basis
US StocksS&P 500 (500 tickers)Multiple independent free sources — Tier 1 fusion
UK StocksFTSE All-Share top 2,000LSE Delayed Market Data (MiFIR 2024 — free redistribution)
FR Corporate EventsEuronext Paris top 800AMF info-financière (Etalab 2.0 — free redistribution)
Commodities11 symbols (XAU, XAG, CL, BZ, NG, HG, ZW, ZC, KC, SB, CC)FRED (public domain) + metals.dev

Limitations

LimitationDetail
Source names not disclosedIndividual provider identities are not surfaced per ToS. Only source_count is public.
Historical backfillSingle-source only — confidence_score = 0.40, is_consensus_valid: false for all backfilled data points.
EU stocks OHLCVNot yet available. UCITS ETF and EU equity price consensus: Sprint 32+.
Microcap equitiesCompanies with market cap below $100M USD are not covered in Phase 1.
Intraday pricingNot available — daily EOD (end-of-day) only.
Real-time dataNot 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.


Not financial advice. Methodology versioned and updated at portfoliq.io/methodology/stock-consensus-v1.0. portfolIQ is not a registered investment advisor.