Data Sources
Where every input to the Corporate Integrity Score comes from, and what that implies for the signals it produces. We state limitations plainly — the score is only as honest as the data beneath it.
For how the score is calculated from these inputs, see Scoring Methodology.
Annual financial statement data is fetched from Yahoo Finance using the open-source yfinance library. Fields collected: revenue, net income, operating cash flow, free cash flow, total debt, total assets, accounts receivable, and gross margin. Data is cached for 12 hours.
Critical limitation: restated, not as-filed
Yahoo Finance serves the current, restated view of a company's financial history — not the figures as originally filed with the SEC. When a company restates a prior period, Yahoo's historical series updates retroactively. The headline Integrity Score is computed from this restated view. (Where SEC EDGAR coverage exists, a separate as-filed score is also computed — see the next section.)
This matters specifically for fraud forensics: a restatement is itself one of the strongest fraud signals that exists — it is an admission that previously published numbers were wrong. If a company's aggressive original figures were later corrected, the divergence patterns that would have flagged the original manipulation may no longer be visible in the restated data. Read forensic scores as: "Does this company's financial history, as Yahoo Finance reports it today, show signs of aggressive accounting?" — not as a verdict on originally-filed figures.
For companies with U.S. SEC XBRL coverage, SentinelIQ also pulls each company's full historical filing record directly from SEC EDGAR's public, keyless API — no vendor, no cost. This serves two purposes: detecting restatements (a company quietly revising a previously reported figure — itself a meaningful fraud signal, surfaced as a flag) and computing a separate as-filed forensic score, built from the figures as they stood on each filing's original date, not the restated view above.
A parallel signal, not a replacement
The as-filed score is computed and shown alongside the headline Integrity Score — it does not change it. Coverage is also not universal: foreign private issuers filing Form 20-F, and any company without SEC XBRL data, have no EDGAR coverage and fall back to the yfinance-only path above. Where coverage exists, the divergence between the as-filed and restated scores is itself a signal worth reading.
News data is fetched from public RSS feeds using the open-source feedparser library — no paid news API. Three distinct pipelines use news for different purposes:
| Purpose | Cache |
|---|---|
| Governance event extraction (fed to Gemini) | Not cached |
| News Sentiment scoring (keyword analysis) | 2 hours |
| Narrative Consistency (tone analysis) | 2 hours |
Headlines, not transcripts
Everything SentinelIQ calls "governance evidence" or "narrative" is derived from news headlines — not from earnings call transcripts, management prepared remarks, or SEC filings (10-K/10-Q MD&A, proxy statements). Governance scoring evaluates what journalists reported; narrative measures press-coverage tone consistency. These are real signals, but different ones than management narrative analysis would produce. This is why Narrative Consistency is labeled "experimental" and carries zero weight in the Integrity Score.
Two modules — Governance Risk and Narrative Consistency — use Google Gemini 2.5 Flash (free tier). Both run at temperature=0 with a pinned model version for reproducibility. The exact prompt and raw API response are persisted per analysis, so every AI-influenced score can be traced back to its exact inputs.
For governance events specifically: every event Gemini extracts must include a verbatim source quote from the input news text. Events that fail this grounding check are dropped before scoring — this prevents fabricated governance findings from becoming persisted risk labels on real companies.
Each Gemini call has a 30-second timeout. A per-process daily cap of 200 requests (well below Gemini's 1,500/day free limit) guards against runaway loops. When the cap is reached or a call times out, the affected module returns a neutral score and the analysis continues normally.
To set expectations explicitly, the following are not part of the current pipeline:
- —Earnings call or investor-day transcripts
- —Any paid or real-time financial data provider
- —Insider trading / Form 4 data
- —Social media or analyst-estimate data
- —Alternative data (satellite imagery, credit card data, web traffic)
| Data | Source | Point-in-time? |
|---|---|---|
| Financial statements | yfinance (Yahoo Finance) | No — restated |
| As-filed verification | SEC EDGAR XBRL (data.sec.gov) | Yes — where covered |
| News headlines | Google News / Yahoo Finance / Reuters RSS | Yes (publish date) |
| AI extraction | Google Gemini 2.5 Flash | N/A |