Skip to Content
GuidesFinancial Insights

Financial Insights

Bliss generates AI-powered financial reports that analyze your patterns across four cadences — monthly, quarterly, annual, and portfolio-specific.

How it works

Sixteen financial lenses organized into six categories (Spending, Income, Savings, Portfolio, Debt, Net Worth) examine your transaction and portfolio data. Each insight is generated by your configured LLM provider and persisted additively — old insights are kept for historical context, not replaced. A data-completeness check runs before every generation so partial periods are never compared to full ones.

The prompt sent to the LLM is built in four cacheable layers (identity, tier addendum, lens-specific rubrics, few-shot examples) so providers like Anthropic and Gemini can serve repeat runs from cache. Before the call, a deterministic JS pre-pass computes the heavy lifting — month-over-month deltas, top movers, top-category share vs the user’s own 6-month baseline, anomalies (categories above 2σ from their own mean), savings-rate decomposition, and net-worth split between contributions and market change. The model writes prose about pre-computed signals rather than recomputing arithmetic, which is the single biggest reason output quality is high and consistent across providers.

Output is structured: each provider validates the response server-side (Anthropic via forced tool use, OpenAI via strict response_format: json_schema, Gemini via responseSchema). When the model genuinely has nothing to report — completeness gate fails, no active lenses, or it returns an empty array — the page surfaces a “No insights for this period yet — try regenerating in a few minutes” message instead of fabricating filler.

The four tiers

Monthly (2nd of each month)

A month-over-month and year-over-year health check. Covers spending velocity, category concentration, income stability, savings rate, and net worth trajectory for the previous month.

Quarterly (3 days after quarter close)

Seasonal trend analysis across a full quarter. Identifies patterns that monthly snapshots miss — holiday spending spikes, quarterly income cycles, and longer-term drift. Includes a passive income outlook (see below) and how much of the quarter’s income was passive.

Annual (January 3rd)

A comprehensive year-in-review covering all six categories. Compares the full year against the prior year and highlights the biggest shifts in your financial profile.

Portfolio (every Monday)

Equity-specific intelligence powered by the SecurityMaster reference table. Analyzes the portfolio’s asset-class mix (stocks, index / sector / bond ETFs, REITs, funds, government and corporate bonds, real estate, crypto — the same classes as Equity Analysis) with a fixed-income summary, sector + industry concentration, and dividends. Sector concentration is measured against your whole equity book: individual stocks and REITs count by their sector, and broad ETFs count as diversified exposure — part of the total, never flagged as a sector — so a portfolio that is mostly a world ETF plus a few tech stocks doesn’t read as “100% Technology”. Bonds, property and crypto are never flagged as a sector either. (When ETF composition data is available, an ETF is split across the sectors it holds.) The dividend figure is Bliss’s own 12-month projection for your stocks and ETFs (see Passive Income), not an estimate from yields. Weighted P/E vs the broader market is included as context only; third-party fundamentals data is approximate and the lens is intentionally tuned not to alarm. Holdings whose Twelve Data fundamentals are flagged as untrusted (see the Maintenance guide) are silently excluded from the insight rather than fed to the model with potentially-wrong numbers — wrong data is worse than missing data here.

Passive income outlook

The Portfolio, Quarterly and Annual tiers include a Passive income outlook whenever you hold something that produces income or have an income stream. It uses the numbers from the Passive Income projection: the next 12 months of income (investment income and other streams like allowances shown separately), what actually arrived over the last 12 months, the share of your essential spending it covers, the largest sources, and income that stops within the year (a bond maturing, a lease ending).

  • Warning when 20% or more of projected income ends within 12 months, or one holding or stream is more than half of it.
  • Positive when essential-spending coverage crosses 25%, 50%, 75% or 100% since the previous insight of the same tier.
  • Figures are always described as gross (before tax); floating-rate and inflation-linked income is flagged as based on the rates you assumed; allowance and welfare streams are never called investment income.
  • When fewer than 80% of your holdings have income terms, the insight says the projection is incomplete, names what’s missing, and shows a Set up income terms link to the Passive Income page.

Enabling insights

Insights use the same LLM provider you configured for transaction classification. Pick one in .env:

LLM_PROVIDER=gemini # or openai, or anthropic GEMINI_API_KEY=your_api_key

See Choosing Your External Services for full provider setup details.

The insights tier uses whichever model is configured for your provider (per-provider defaults are documented in Choosing Your External Services). You can override via env var:

INSIGHT_MODEL=gpt-4.1 # override the active provider's default insight model

A daily cron job at 6 AM UTC acts as a scheduling heartbeat — it checks each tier’s calendar window and only triggers generation when the window is open. The portfolio tier runs on its own cron at 5 AM UTC every Monday.

Without a configured LLM provider, the insights page remains accessible but empty.

Using the insights page

Insights page with category tabs, tier badges, and severity filters

The insights page organizes your reports into browsable categories:

  • Category tabs — Filter by Spending, Income, Savings, Portfolio, Debt, or Net Worth
  • Severity chips — Focus on what matters: Positive, Info, Warning, or Critical
  • Tier badges — Each insight shows which cadence generated it (Monthly, Quarterly, Annual, Portfolio)
  • Period selector — Browse insights from any past period
  • Manual refresh — Pick a tier and period, then generate on demand. Use the force option to bypass the completeness check for partial periods
  • Dismiss and restore — Hide insights you’ve acted on. Dismissed state persists even when the same period is regenerated

Deduplication

Insights are deduplicated by (tier, periodKey, dataHash). If your underlying data hasn’t changed since the last generation, regenerating a period is a no-op — no duplicate insights are created.

Retention

Each tier has a different retention window:

TierRetention
Monthly2 years
Quarterly5 years
AnnualForever
Portfolio1 year

Expired insights are cleaned up via the TTL retention service.

Next steps