Compare Periods is Live in Plainview, Plus a Tour of the Full Filings Kit

10 min read Oisin Maher
#Announcement #Plainview #Filings #Product #SEC #AI #Research

Bollwerk Plainview is our publicly accessible risk detection platform. It covers research and risk triage, red-flag detection, intelligent monitors, trade-idea generation, spreadsheet research, short-side data, watchlists, filings analysis, and the workspace canvas that ties them together. A lot has shipped across those surfaces over the past few months, and the one with the biggest push has been the filings side. This post is a walk through what landed there.

At the centre is a new period-over-period comparison tool. Around it we've written up the rest of the filings kit — the inline reader, bookmarks and comments, AI chat with real citations, the red flag agent, trade ideas, deep links, exports, structured-data panes, and semantic search — and previewed what ships next. Filing comparison is the biggest single addition to this area since AI chat, so we'll start there.

Overview

  1. What's new: periodic-report comparison
  2. Viewing a filing
  3. Bookmarks and comments
  4. AI chat, with real citations
  5. Watch the agent think: red flag detection
  6. Trade ideas from filings
  7. Deep links and sharing
  8. Exporting
  9. Structured data: XBRL, insiders, offerings
  10. Discovery: semantic search and the filings index
  11. Coming next: watchlist keyword alerts

What's new: periodic-report comparison

Every quarterly filing is a difference with the one before it. Risk factors reshuffle. The going-concern paragraph tightens or loosens. Customer-concentration footnotes grow or shrink by a sentence or two that matters. The value is almost always in the delta, not the disclosure itself — and until now, surfacing that delta meant two PDFs in two tabs and a lot of Ctrl-F.

Compare Periods does that work for you. It lives on every 10-K and 10-Q detail page, and clicking it (or selecting it from the overflow menu on mobile) takes you to a side-by-side view keyed on the filing pair: /filings/compare/:sourceId/:targetId?.

Compare Periods— Northwind Industries (NWND)
Target
10-QMar 2024
Source
10-QMar 2025
Revenue
$412M$487M
+18.2%
Net Income
$46M$61M
+32.6%
EPS
$1.24$1.61
+29.8%
Cash Position
$208M$245M
+17.8%
  • Risk Factors
    38% changed
  • Management's Discussion and Analysis
    12% changed
  • Legal Proceedings
    new section
Compare Periods: filing pair header, deterministic metric deltas, and the section-change list with change-percent bars

How the target is chosen

We pick a sensible default automatically and let you override it. For a 10-K that's roughly 365 days prior — the previous annual report. For a 10-Q it's roughly 90 days prior — the matching quarter one year back would be a different comparison, and we wanted the linear-time one. You can swap the default for any of up to ten prior candidates from a dropdown, each labelled with its form type, period of report ("Mar 2023"), and filed date. Changing the target updates the URL, so every comparison you land on is one link away from being shared.

What the comparison shows

The comparison is deterministic first. Before any language model gets involved, we've done the work you can trust not to hallucinate:

  • Financial metrics — revenue, net income, EPS, and cash position, each with an absolute value for both periods, a numeric delta, a percentage change, and a small bar chart.
  • Risk-state transitions — explicit alerts when the going-concern signal changes state ("None" → "Substantial Doubt" renders in red; "Substantial Doubt" → "Mitigated" in amber), and when a material weakness appears or is resolved. If nothing moved, we say so: a green "No risk-state change" banner rather than silence.
  • Section-by-section status — every canonical section (twenty-two for a 10-K, eleven for a 10-Q, covering Risk Factors, MD&A, Liquidity, Legal Proceedings, Quantitative and Qualitative Disclosures, and the rest) gets a badge: modified, added, removed, unchanged, or unavailable. Each modified section carries a percentage-change bar, colour-coded by magnitude — amber under 5%, orange between 5% and 20%, red above 20%.
  • Inline text diffs — expand a section and you get a word-level diff with green-background additions and red-background deletions. No HTML injection, just the diff conventions you know from Git.

AI analysis, on top

Appending ?ai=true to the URL or hitting Generate Analysis streams an investor-focused narrative above the deterministic diff:

  • Executive summary — two to four sentences identifying the single most important change.
  • Key insights — ranked findings with a severity rating (high, medium, or low), a confidence score, a "why it matters" line, and evidence anchors pointing at the exact excerpts on both sides.
  • Watch items — red flags worth closer attention: new risk factors, auditor changes, fresh litigation disclosures.
  • Section-level summaries — for each materially changed section, a classification (substantive, disclosure update, boilerplate, numerical, or uncertain), a rationale, and a business-relevant summary. We describe the substance of the change rather than the text mechanics: "the company disclosed a new customer concentration in its top five" beats "text was added".

Trivial changes get filtered out so the model concentrates on material ones — specifically, deltas under 2%, without flagged keywords, and without any numeric move over 5%. If the token budget forces us to omit lower-ranked sections, the UI says so explicitly. Partial analysis is always signalled; it's never hidden.

What it replaces

The old workflow: two tabs, Ctrl-F for "going concern", squint at risk factors, try to remember what the MD&A looked like last quarter. The new one: one page, one URL.

We put a few deliberate limits in. Compare Periods is a Plainview Pro feature. It supports periodic reports only — 10-K against 10-K, 10-Q against 10-Q, same issuer, no amendments. Trusts, REITs, and certain pre-2002 filings occasionally don't have a standard MD&A or Risk Factors section; when they don't, we show "Section unavailable" rather than extract content we can't verify.

Viewing a filing

The detail page renders the document inline, so there's no downloading and no external PDF viewer breaking your flow. Paragraphs are numbered so you can cite them precisely. The header carries the metadata you need to verify what you're looking at: ticker and company name, market cap, SEC accession number, CIK, form type, filed date, period of report, and file size. Accession numbers and CIKs copy to the clipboard with one click.

Multi-document filings — the ones with exhibits, EX-10.1 material contracts, press releases, consent letters — surface every attached piece with type, title, and file size. Clicking an exhibit swaps the viewer to that document. No new tab, no loss of context.

Amendments are linked explicitly. A 10-K/A ties back to the 10-K it amends through our filing knowledge graph. You shouldn't read an original in isolation when there's an amendment on top of it, and now you don't have to remember to check.

Bookmarks and comments

We have two kinds of annotation because they serve different workflows.

Bookmarks are quick markers. Click a paragraph number or select a text range, pick a colour (yellow, green, blue, pink, or purple), optionally add a note, save. The bookmarks side panel lists every one in the filing, sortable by position or by document, and clicking an entry scrolls you straight to it. Think of bookmarks as your navigation layer.

Comments are for reasoning. Two variants: text-level comments anchored to a specific selection, and document-level comments attached to the filing as a whole. Either can be public or private, both show author and timestamp, and both are editable inline. Where bookmarks help you find things, comments help you remember why they matter.

AI chat, with real citations

The three buttons at the top of every filing are the fastest way in. Summarize gives you a structured overview. Spot Red Flags returns a formatted list of risk indicators. Chat with Filing opens a conversation scoped to the document. Everything streams in real time.

Chat handles free-text questions — "describe executive compensation", "what are the material customer concentrations", "summarise the going concern language". We pull the relevant sections and summarise them. For multi-document filings, you pick which exhibits are in the AI's context: main filing only, a specific exhibit, or any combination.

Every citation is verifiable. Each reference is a numbered pop-over ([1], [2], [3]). Hover it and you see the form type, accession number, section or exhibit, and a block-quoted excerpt of the exact passage the model is drawing on. Click it and the viewer scrolls there. If a passage can't be cited, we don't assert it — that discipline is what makes chat output good enough to ship into a memo.

Answers can be tables, not just prose. Ask for "a table of every mentioned customer with its percentage of revenue" and you get an interactive table artifact: sortable columns, global filter, one-click copy, one-click CSV. Structured questions get structured answers, and you skip a spreadsheet round-trip.

Watch the agent think: red flag detection

Every filing gets scanned for risk signals across three categories: financial distress (going-concern language, accounting irregularities, covenant issues), legal and regulatory exposure (litigation, SEC enforcement, subpoenas), and operational risk (management departures, internal-control weaknesses, auditor changes). Each red flag carries an importance score from one to ten, structured evidence extracted directly from the filing, and a source link that jumps you to the originating passage. Nothing is unsupported.

The unusual part is what we do during detection: we show our work. A live reasoning panel streams each step as it happens — the section being read, the tool being used, the finding just surfaced, the hypothesis just ruled out. Expand a step for full context; collapse it to one line. Instead of the traditional opaque spinner, you can watch the work happening. If the agent heads off in a wrong direction, you notice before the final output.

Red Flag DetectionStep 3 of 4
  1. ReadRisk Factors
    Finding: Going-concern language
    "conditions raise substantial doubt about the Company's ability to continue..."
  2. ReadMD&A — Liquidity
    Finding: Covenant at risk
    "may not satisfy the minimum fixed-charge coverage ratio in the next quarter..."
  3. Cross-checkFinancial notes
    Finding: Auditor change
    "the Audit Committee dismissed the prior independent auditor on February 4, 2025..."
Red flag detection streams each step and its source-linked finding as they happen

Each finding streams into the UI in real time with a source-linked excerpt attached. Findings are recorded as they're established, not synthesised after the fact.

Any finding can be bookmarked to an evidence library with your own note, so a diligence project keeps an organised record of the flags you're tracking. The full red flag set for a filing also exports as a markdown report you can paste into a memo.

Trade ideas from filings

Generate Trade Ideas turns filing analysis into structured, institutional-format ideas. Each one specifies a position (long or short), an asset type, entry, stop, and target prices, a thesis grounded in evidence from the filing, and an explicit list of risks. The ideas collect in a dedicated Trade Ideas section where they can be upvoted, downvoted, and discussed in comments.

This isn't a recommendation engine and we aren't going to pretend otherwise. It's a way to commit analysis to a specific, falsifiable claim — entry, stop, target — that you or a team can evaluate against what actually happens.

Every filing supports section-level permalinks. Select a range of text, copy the URL, and the paragraph location plus the highlighted selection ride along in the hash fragment. The recipient lands on the passage with the selection already highlighted. Two fragment conventions: #sel=… for a specific selection and #find=… for a text match.

This turns filings from a private reading exercise into a collaborative one. You can quote a sentence by direct reference instead of describing which paragraph you meant.

Comparison URLs are deep-linkable too. /filings/compare/:sourceId/:targetId?ai=true captures the filing pair and whether the AI narrative's already generated.

Exporting

  • Red flag reports — markdown, ready to paste into a memo.
  • Insider transactions and Form 144 notices — CSV, for spreadsheets.
  • Documents and exhibits — PDF or original format, with multi-select for batch download.

If you can see it in Plainview, you can get it out in a format you can use.

Structured data: XBRL, insiders, offerings

Filings are more than prose, and we parse the structured parts so you get signal without a full read.

XBRL charts. 10-K and 10-Q filings render historical quarterly and cumulative revenue and net-income charts from XBRL facts, with a toggle between quarterly and cumulative views. Values are currency-formatted; tooltips show exact figures.

Insider transactions (Form 3, 4, 5). Each Form 4 gets parsed into owner name, title, officer/director/10%-holder status, transaction code (with an in-UI tooltip that explains SEC codes — nobody remembers what "P-Open Market Purchase" means off the top of their head), share count, weighted-average price, total value, and net buy or sell position. The list view adds ownership-change percentage, post-transaction ownership, and colour-coded totals. The practical effect: you can tell at a glance whether an insider is buying or selling real size without opening the filing. Preset filters isolate the high-conviction events — CEO and CFO buys above $25k, insider sales above $100k — and a dedicated toggle excludes 10b5-1 pre-scheduled sales so you can separate discretionary trades from plan-driven ones.

Form 144 notices. Form 144 tells you what an insider intends to sell, before they sell it. We parse the seller, their relationship to the issuer, the proposed quantity, the aggregate market value, the implied price, and the approximate sale date. We also parse the acquisition lots (how the shares came in — option exercise, open-market buy, grant) and the prior three-month sales table that gives the proposed sale its context. It's a commonly overlooked form that, once surfaced properly, behaves like a short-dated early warning.

Offerings (S-1). IPO prospectuses are among the densest filings in the SEC corpus. The offerings tab pulls out the elements that actually drive the diligence decision: price per share (flagged red where anomalously low), offering size (flagged orange where unusually small), net proceeds, the underwriter syndicate (flagged when members appear on our list of repeat-offender underwriters), the auditor (flagged against a similar list), and employee headcount. It's optimised for a fast assessment of deal quality, not for comprehensive coverage of the underwriting agreement.

Discovery: semantic search and the filings index

Finding the right filing is as important as reading it. We index every filing through a vector-embeddings pipeline — the short version of which is that the search understands concepts, not just strings. A query like "companies warning about softening demand in their core segment" returns filings that express that idea even when none of the query terms appear verbatim.

The filings index complements search with structured filters:

  • Category tabs — Periodic Reports, Material Events (8-K), Insider Activity (3, 4, 5), Form 144 Notices, IPO Filings, Proxy Statements.
  • Ticker and company search.
  • Date-range and form-type filtering.
  • Sort by filed date.
  • Inline red-flag badges, so high-signal filings surface in the list itself, not after a click-through.

Dark mode runs throughout, with system-preference detection. (Yes, we noticed people were reading 10-Ks at 11pm.)

Coming next: watchlist keyword alerts

The natural extension of all of the above is: tell me when something I care about shows up in a filing I care about. That's the next release.

Watchlist alerts will let you attach keyword and phrase triggers to the tickers on a watchlist and get notified the moment a new filing comes in that matches. Patterns our early users have asked for:

  • A 10-Q from any watchlist issuer that contains "going concern".
  • An 8-K for a specific ticker that mentions "resignation", "restatement", or "material weakness".
  • A new S-1 that contains "recurring revenue" within 100 words of "declined".

Alerts fire on newly indexed filings, link straight to the matched passage using the same deep links we use for sharing, and go out by email at launch (webhooks and in-app to follow). You can attach multiple rules per watchlist entry, and we're shipping a set of pre-built templates — going concern, auditor change, management departure, material weakness — so common patterns don't have to be assembled from scratch.

We haven't committed to a public launch date yet; when it ships we'll post it here. If you have a specific trigger pattern you'd like in the template set, write to hello@bollwerk.ai.

Try it

If you already use Plainview, Compare Periods is on every recent 10-K and 10-Q detail page. New to us? Start at app.bollwerk.ai.

Our roadmap is shaped heavily by what users ask for. Compare Periods exists because enough of you asked for it, and the next releases will probably follow the same pattern.