Back to Work Samples
SEC EDGARPrivate serverDeepSeek V4-proGit-backed record

SEC Filing Monitor

Important SEC filings reach a useful shortlist instead of disappearing in a flood of routine updates. A dedicated private server runs the live monitor throughout the day, while GitHub Actions keeps the separate weekday highlights digest on schedule.

It reads SEC EDGAR, filters what is worth attention, checks the source evidence, and asks DeepSeek V4-pro for a concise explanation only when the filing is relevant.

At a glance

Monitoring tuned for useful signals

10

filing types watched

Seven core forms, two late-filing notices, and Form 4 through its own intake path.

30 min

median gap between data commits

Measured across 237 monitor-written data commits from 27 July to 7 August 2026.

2x

weekday highlights runs

The digest still runs on GitHub Actions at 07:30 and 13:30 UTC on weekdays.

6 / 10

minimum relevance score

Only analysis that clears the defined usefulness threshold enters the curated feed.

The problem

The filing that matters is rarely the easiest one to spot.

A person has to identify the company, understand the form, locate the source document, and judge whether the timing changes the story. Repeating that work by hand is slow, inconsistent, and easy to interrupt.

The answer

Let the rules decide what deserves attention before AI explains it.

This workflow collects politely, remembers what it saw, applies clear relevance rules, and uses deduplication before it produces a short explanation. It is selective by design, not an expensive summary machine.

How it works

Seven decisions turn a filing stream into a useful alert

The system does not automate judgment away. It reserves attention and AI spending for the items that meet clear, inspectable rules.

01

Keep watch on a dedicated server

The live filing monitor runs on a small private server every hour, with a second pass at half past the hour. GitHub Actions still runs the separate Daily SEC Highlights digest twice each weekday.

What your team gets

The main collection work has dependable, always-on capacity while the daily briefing keeps its visible GitHub Actions run history.

If something goes wrong

Each monitor run resets to the latest main branch and takes a lock, so overlapping runs wait their turn rather than collide.

02

Read the latest filings with care

The system checks the official SEC source for recent activity, using a short one-day window so it catches new items without repeatedly digging through old history.

What your team gets

Each candidate arrives with the company, filing type, filing identifier, and a route back to the original document.

If something goes wrong

A temporary source problem retries carefully and then skips safely instead of turning one issue into a broken monitoring day.

03

Remove obvious noise before it costs money

Rules sort the incoming filings before any AI analysis begins. The system favors the forms and companies that are more likely to matter to the reader.

What your team gets

The queue is smaller, more useful, and easier to explain than a raw stream of regulatory submissions.

If something goes wrong

A Form 4 must represent at least $50,000 in transaction value, and a temporary price-data issue can send a late filing back for a later check.

04

Remember what was seen and what needs another look

The monitor records a filing after it finds it. It does not repeat work, but it can revisit a filing that was intentionally held for better timing.

What your team gets

The repository holds a clear record of when the system first found a material filing and what happened next.

If something goes wrong

Missing documents and temporary analysis problems remain visible as exceptions instead of being mistaken for completed work.

05

Pull the evidence that actually explains the filing

Before summarizing, the monitor finds the important document sections and relevant financial facts. It avoids sending every page of every document to an AI model.

What your team gets

The explanation is tied to filing evidence, with room for market context when it is available.

If something goes wrong

When source text or price context is missing, the monitor says so rather than inventing a confident story.

06

Write a concise analysis and keep the old path ready

DeepSeek V4-pro receives a prepared evidence packet through the Vercel AI Gateway and returns a structured, reader-facing explanation.

What your team gets

Readers get a score, direction, tags, risks, and concise sections that are consistent enough to scan.

If something goes wrong

A kill switch can return analysis to the prior Claude Sonnet/Haiku routing, while sampled filings compare old and new output before the new model is trusted.

07

Store the result, then let delivery read it

The runners commit Markdown and JSON results directly to the repository. Separate services read those files: the dashboard sends alerts and digest emails, while a publishing service makes eligible public posts.

What your team gets

Collection stays focused on accurate research, while each delivery service stays focused on its own audience.

If something goes wrong

Empty, low-relevance, or unusable runs finish quietly; the highlights path has a fallback when its model response is not usable.

What actually runs, and whereReal data
Filing monitorLivePrivate server

Hourly, plus a second pass at half past

The main job. Checks EDGAR for new filings, analyses anything material, and commits the results.

Daily highlightsLiveGitHub Actions

07:30 and 13:30 UTC, weekdays

Rolls the day's filings into one ranked digest with an executive summary at the top.

Earnings fast-lane graderLivePrivate server

09:20 UTC, daily

Grades yesterday's experimental earnings-detection runs and commits a dated report card.

Earnings fast-lane raceLivePrivate server

Continuous service

A long-running experiment that races several sources to see which reports earnings first.

Legacy monitor workflowStandbyGitHub Actions

Retained, switched off

The original hosting for the filing monitor. Kept in place, disabled, as a one-command way back if the server ever fails.

The live production arrangement. The filing monitor moved off GitHub Actions onto a dedicated server; the daily highlights digest still runs on GitHub Actions. The original workflow was disabled rather than deleted so the move can be reversed with a single command.
The actual schedule and run controlsshow

The live filing monitor runs on a dedicated private server every hour, with a second pass at half past the hour. The separate daily-highlights.yml workflow still runs on GitHub Actions at 0 7,13 * * 1-5, twice each weekday.

The earlier sec-monitor.yml workflow is disabled, not deleted: it is deliberately retained as a one-command rollback path if the server fails. On the server, each run resets hard to the latest main branch and takes a lock file, so overlapping runs queue rather than collide.

A second server cron grades the previous day's experimental earnings-detection runs at 09:20 UTC and commits a dated report card. A long-running systemd service runs the earnings fast-lane race in shadow mode: it measures which source reports earnings first, but does not drive production.

How the SEC intake stays bounded and respectfulshow

The monitor reads current feeds and full-text search with an identifiable User-Agent, request pacing, a one-day lookback, and in-run issuer-submission caching. Each form search stops at 30 pages of 100 results, so pagination cannot expand without limit.

Request failures use retry and backoff. A failed issuer-submission lookup returns an empty result for that item instead of crashing the whole run.

The form rules, state file, and timing logicshow

The core allowlist is 10-K, 10-Q, 8-K, 13D,13G, S-1, S-4, NT 10-K, and NT 10-Q. Form 4 enters through a dedicated search path. Fund, ETF, trust, and similar issuer patterns can be removed; the monitor resolves CIK-to-ticker context; and CIK-aware watchlist items receive a verified priority boost that can bypass broad market-cap filtering.

processed_filings.json stores filing IDs, statuses, first-seen and last-checked timestamps, scores, and selected context. It uses write-and-replace updates so a partial state file is not left behind. Terminal items stay out of the next queue, while deferred items return after the 15-minute market-reaction hold. A document that cannot be retrieved is recorded as failed; transient analysis-provider problems remain retryable for a later scheduled run.

Form 4 needs a transaction value of at least $50,000 before analysis, and significant buys receive a higher priority. A non-priority late filing is deferred instead of discarded when price context is temporarily unavailable.

What reaches each model and how the change is controlledshow

The evidence step locates a primary document, selects relevant earnings exhibits, removes noisy HTML, detects 8-K item signals, and extracts authoritative inline XBRL facts where present. It budgets long documents before analysis and will not create a speculative summary without document content. When price data is unavailable, the prompt requires that explicit state rather than an inferred reaction.

Filing analysis uses the pinned DeepSeek V4-pro model through the Vercel AI Gateway. An environment-variable kill switch returns it to the previous Claude Sonnet/Haiku routing, and a sampling rate can run both paths side by side to measure output quality before the switch is trusted. Model IDs are pinned constants rather than runtime aliases, so a provider cannot silently change the output model.

Only a valid analysis scoring at least 6 joins the filing feed. The twice-daily weekday highlights workflow calls Claude Haiku directly for synthesis and keeps a one-hour prompt cache. It deduplicates same-issuer entries, groups them by urgency, and keeps only a bounded recent generated digest history.

What this looks like in practice

You get a live system that watches continuously, ignores most of the noise, and brings forward the filings that deserve a closer look. It keeps the original evidence close to the explanation, so the output is useful without becoming a black box.

Input and output

From raw filing to a finding you can act on

A filing arrives as thousands of characters of boilerplate with nothing that says whether it matters. The output is a scored, tagged, one-sentence finding that makes the next reading decision faster.

These are two separate real examples: a public Costco filing as it arrives, and a real day's digest. This personal research tool is not investment advice; the underlying filings remain the authoritative source.

What arrives from EDGARReal data

Index metadata

company_nameCOSTCO WHOLESALE CORPORATION
tickerCOST
form_type8-K
filing_date2026-04-15
cik0000909832
accepted_datetime2026-04-15T20:16:27+00:00
detected_items["8.01", "9.01"]

Document text

2,924 characters
cost-20260415 UNITED STATES SECURITIES AND
EXCHANGE COMMISSION Washington, D.C. 20549
FORM 8-K CURRENT REPORT Pursuant to Section 13
or 15(d) of the Securities Exchange Act of 1934
Date of Report (Date of Earliest Event
Reported): April 15, 2026 COSTCO WHOLESALE
CORPORATION (Exact name of registrant as
specified in its charter) Washington 0-20355
91-1223280 (State or other jurisdiction of
incorporation) (Commission File No.) (I.R.S.
Employer Identification No.) 999 Lake Drive
Issaquah , WA 98027 (Address of principal
executive offices and zip code) Registrant's
telephone number, including area code:
425 - 313-8100 Check the appropriate box below
if the Form 8-K filing is intended to si...
A real Costco 8-K, excerpted from the project's own regression fixture. SEC filings are public record. The structured fields on the left are what the filing index gives you; the text on the right is the document itself, boilerplate and all. Note what is missing: nothing here tells you whether the filing matters.
What comes out — Daily SEC Highlights, 7 August 2026Real data
156 filings analysedGenerated 09:31 ET

Executive summary

FOX announced a $96/share plus 0.9693 FOX shares deal to acquire Roku, backed by $12B bridge financing, capping record Roku profitability. Cloud/AI infrastructure players diverged sharply: Cloudflare restructured for AI-first operations while Datadog's 35.6% revenue growth was overshadowed by a 19% stock plunge on thin margins.

Ranked entries

$FOXFox Corp10-K
10/10BullishM&ADebt issuance

Fox Corp agreed to acquire Roku for $96.00 cash plus 0.9693 FOX Class A shares per Roku share, backed by $12.0 billion in bridge financing commitments.

$DDOGDatadog, Inc.10-Q
10/10BearishEarnings miss

Datadog Q2 revenue grew 35.6% YoY to $1.121B and swung to $44.6M net income, but the stock plunged 19% as a 0.5% operating margin and $220.3M in quarterly stock-based compensation signaled severe profitability compression.

$NETCloudflare, Inc.10-Q + 8-K
10/10MixedOther

Cloudflare recorded a $150.7M restructuring charge in Q2 FY2026 for an “agentic AI-first operating model” pivot and workforce reduction, while revenue grew 35.9% YoY to $696.1M.

A genuine excerpt of the digest generated on 7 August 2026 from 156 filings. Every figure was written by the pipeline, not by hand. Shown for illustration of the output format only; this is not investment advice and the underlying filings are the authoritative source.

Automated public posting

Publishing in public

The monitor stops after it writes a result to Git. Two entirely separate applications then read that record: one turns it into email, and one turns eligible findings into public posts. Neither needs to know the other exists.

Adding public posting meant changing none of the monitor's code. Each piece can fail, be rewritten, or be switched off without disturbing the others.

Eligible filings appear as long-form, single posts rather than reply threads: one filing, one readable update. The account is clearly labelled as automated, so posting can happen without a human approval step. The author's personal account follows a different standard: its posts are drafted for manual review.

That difference matches automation to accountability. The bot also uses its own separateX application, so a mistake or compromise in one account cannot post as the other.

This labelled automated filings account posts public-record filings. It is not investment advice.

This shows how one automated filing update is structured for a reader scanning the public feed.

Anatomy of an automated postIllustration
SF
SEC Filings BotAutomated
posts on its own credentials
📄Header$EXMPL · Q3 results filed - Example Industries
The takeRevenue beat but guidance came down, and the margin line is doing the talking.
📊FiguresRevenue $4.10B vs $3.95B est · EPS $1.62 vs $1.48 est
VerdictBeat on both lines
🔷Key pointsOperating margin compressed 180bps year over year
🔷Full-year outlook trimmed to the low end of prior range
🔻Market reactionShares down 6% after hours
👀WatchWhether the margin pressure is pricing or input costs on the call

SEC filing: link to the original document
Full analysis: link to the dashboard page

Illustration. The field order and structure are taken from the publishing service's composer, but the company and figures are invented. Numbers lead deliberately: a post that says only that a company filed an 8-K is not a market update.

The publishing service checks its eligibility rules every 15 minutes. This visual shows the full checklist before anything is allowed to post.

What has to be true before anything postsIllustration
1

Materiality

Only filings scored 6 or higher out of 10 are eligible. Everything else is stored but never posted.

2

Recency

Nothing older than 24 hours. This stops a backlog from being dumped as if it were news.

3

Volume cap

At most 5 posts per run, so an unusually busy filing hour cannot turn into a flood.

4

One event, one post

A company often splits one earnings release across several filings. Only the highest-scoring one posts.

5

But not over-merged

Five executives each filing an insider trade on the same day stay five separate posts, because they are five real events.

6

No dead links

If the analysis page is not live yet, a fresh filing waits one cycle; after that it posts without the link rather than going silent.

7

Never twice

Every published filing is recorded, so a repeated run cannot repost the same thing.

Illustration of the real rules enforced in the publishing service. Each one exists because of something that actually went wrong or could.

One event is not always one filing

The most important judgment is deliberately asymmetric. An issuer may split one earnings release across several filings, such as a press release followed by a separate slide deck. In that case, only the highest-scoring filing for that company and quarter posts, so the same result is not announced twice from thinner source material.

Insider transactions are treated differently. If five officers file on the same day, those are five genuine events, not one duplicate. Combining them would look safe but would silently drop four real posts. Deduplication only works after deciding what counts as one event.

Never a dead link, never silence

A post links to its dashboard analysis only when that page is live. A brand-new filing can arrive before the separate dashboard has made its page, so a missing page waits one cycle while the filing is fresh. After that, the post goes out without the link rather than disappearing.

A timeout, server error, or rate limit does not prove the page is missing, so the service posts rather than guessing. The plain rule is simple: never tweet a dead link, but never go silent either.

How the publishing service keeps posting independent and safeshow

Every 15 minutes, the publishing service reads generated_posts.md from the Git repository over HTTPS. It does not contact the monitor's server. Git is the delivery bus: the monitor writes the record and stops, while the email and public-post services independently decide how to read it.

Eligible updates are composed as one long-form X post, up to 4,000 characters, rather than a reply thread. The labelled automated filings account has its own credentials and its own X application, separate from the author's personal account. Its publication state lives in a key-value store for about three days, deliberately longer than the 24-hour eligibility window, so a rerun cannot repost a filing.

Earnings deduplication keys on company and quarter, retaining the highest-scoring filing. It is intentionally not applied to insider transactions. For a dashboard permalink, a 404 on a filing under two hours old delays publication by one cycle; after two hours it posts without the link. Other errors are inconclusive, so publication proceeds. The dashboard creates its analysis pages on its own five-minute schedule.

How the pieces fit together

A small operating footprint with a deep decision process

Each layer has one clear job. The result is simple for the business to operate and detailed enough to explain why a particular filing did or did not become a finding.

01Source

EDGAR

Public filings are pulled from the SEC, paced politely and identified honestly.

02Compute

Private server

A scheduled job filters the noise, sends only what looks material for analysis, and scores it.

03Storage

The Git repository

Results are committed straight into version control. The repository is the database and the hand-off point, so every change has an author, a timestamp and a full history.

Two independent readers, neither one knowing about the other

04Email

The dashboard product

Reads the committed files and sends every alert and digest email.

04Public posts

The publishing service

Reads the same files and posts the highest-scoring filings to a labelled automated X account.

Collection

Dedicated private server and Python 3.11

The live filing monitor runs on its own small, always-on machine, so collection does not depend on a hosted workflow window.

Source

SEC EDGAR feeds, search, submissions, and archives

The workflow starts with the authoritative public filing record and keeps a direct route back to it.

Context

Session-aware market-data adapter

Price movement is presented as available context, never guessed when the source cannot provide it.

Analysis

DeepSeek V4-pro through Vercel AI Gateway

The filing analysis produces predictable fields instead of an unstructured paragraph that a later system must decode.

Memory

Git as a data store: versioned JSON and Markdown

Both runners commit their results directly into the repository, preserving what they saw, what they decided, and a full history of each change.

Delivery

Separate dashboard product and publishing service

The monitor itself sends nothing: it commits results, then separate services turn them into emails and public posts.

Why this architecture matters

The monitor itself sends nothing. It writes a versioned research record, then independent services turn that record into email and public posts. That separation makes every part easier to inspect, change, and recover.

Automations and safeguards

The controls protect the source, your attention, and the budget

Good automation is not just a fast path. It should know when to wait, stop, retry, and avoid spending time on work that will not help the reader. Its saved state uses atomic replacement when it updates the filing memory.

Respect for the public source

The monitor identifies itself, pauses between requests, limits the search depth, and reuses company information already collected during the run.

No repeated analysis

A durable record stops the same filing from being analyzed over and over. Only intentionally deferred items return to the queue.

Cost gates before AI work

Form rules, issuer filters, priority checks, a Form 4 threshold, and a per-run cap reduce the queue before model spend begins.

Measured model changes

The previous Claude route stays warm behind a kill switch while sampled filings compare it with DeepSeek before a full cutover is trusted.

Independent failure detection

After each server run, a heartbeat reaches the separate dashboard. Its watchdog emails if the signal is stale for more than nine hours, so a different machine notices a silent failure.

Recoverable failures stay recoverable

The system distinguishes a known low-value item from a temporary provider or source problem, so it can skip one and revisit the other.

The filing monitor has its own measured production cadence: 237 data commits from 27 July to 7 August 2026, a median 31 minutes apart, around 23 per weekday and only two to three per weekend day. The quieter weekend pattern is intentional.

When the monitor actually wrote dataReal data
237
data commits in 12 days
31 min
median gap between runs
~23
runs per weekday
2–3
runs per weekend day
0
3
6
9
12
15
18
21
hour of day (UTC)
US market session outside the session
Measured from the repository's own commit history: 237 data commits written by the server between 27 July and 7 August 2026, bucketed by hour of the day in UTC. The tall block from 13:00 to 21:00 UTC is the US market session. Coverage thins overnight and drops to a few sweeps a day at weekends, which is the intended shape rather than a gap.

The GitHub Actions visual below is for Daily SEC Highlights specifically, not the filing monitor. From 8 June to 7 August 2026, the digest ran 92 scheduled times: 85 succeeded, for a 92.4% success rate. All seven failures clustered in its first two weeks while the new schedule was debugged, followed by a long clean stretch.

Scheduled run history — Daily SEC HighlightsReal data
92
scheduled runs
85
succeeded
92.4%
success rate
succeeded failed (7)
Real run history read from the repository's GitHub Actions log, 8 June to 7 August 2026. Each square is one scheduled run, oldest at the left. The failures cluster in the first fortnight and then stop, which is what debugging a new schedule actually looks like.

The business safeguard

You do not pay for an AI summary of every filing, and you do not need to worry that a brief outage will silently turn into a broken process. The system has a record, a limit, and a next step for each outcome.

What it replaces

From reactive browsing to an accountable monitoring system

The value is not an invented alert count. It is a repeatable way to see a meaningful change once, with the right supporting evidence and without paying for irrelevant analysis.

Before

Opening EDGAR, searching issuers, reading long filings, and trying to remember what has already been reviewed.

After

A scheduled shortlist with source links, form-aware rules, and a durable record of every filing decision.

Before

An inbox of routine notices where material changes compete with everything else.

After

A filtered feed with urgency cues, watchlist priority, and a separate daily highlights layer.

Before

One broad AI prompt for every document, with unclear support for numbers or market commentary.

After

Evidence selection, financial-fact extraction, bounded analysis, and explicit unavailable states for missing context.

Before

One system trying to collect filings, decide what matters, and send every message.

After

A private server collects and commits research; separate services read that record to deliver emails and public posts.

What this means for your business

Your important external signals can be monitored with the same care

Supplier, competitor, regulatory, or grant watches that must separate urgent changes from updates that can wait.

Sales intelligence that tracks named accounts, ranks new signals, and gives a team only the items worth acting on.

Compliance and policy monitoring that remembers a notice has been delivered instead of repeating it every time a job runs.

Executive briefings that combine authoritative documents with focused AI explanations and clear links back to evidence.

Recurring research where a repository and GitHub Actions are a better fit than a new service to host and maintain.

Plain-language glossary

Every technical term used on this page, explained without jargon.

GitHub Actions
A repository service that can run scheduled tasks and keep a record of each run.
SEC EDGAR
The SEC public database of company filings and related filing documents.
DeepSeek V4-pro
The pinned AI model used for the filing-analysis step in this system.
AI gateway
A managed layer that sends an AI request to a chosen model and records how it was used.
Kill switch
A configuration control that immediately returns a system to its prior, known-good path.
Shadow mode
Running and measuring an experimental system without letting it control production decisions.
Heartbeat
A short success signal sent after a job runs, so another system can notice if it stops arriving.
systemd
The Linux service manager used here to keep the earnings experiment running continuously.
Git as a data store
Using version-controlled files as the durable record, with a timestamped history of each change.
Git delivery bus
Using committed files as the hand-off point between separate applications.
Labelled automated account
An account publicly marked as automated, so readers know posts are generated without review.
Key-value store
A small database that remembers one saved value for each unique item.
OAuth application
A separately registered connection that lets one application act through a specific account.
User-Agent
A request label that tells a public website which software is asking for information.
CIK
The SEC identifier used to reliably distinguish one filing company from another.
Form 4
A filing that reports certain insider buying or selling activity.
Deduplication
A check that prevents the same item from being handled more than once.
Atomic replacement
Saving a complete new record in one switch, so an interrupted update does not leave a half-written file.
Inline XBRL
Structured financial facts embedded in many SEC filings for more reliable number extraction.
Structured response
A predictable set of fields that software can validate and present consistently.
Retry with backoff
Trying a temporary failure again after a measured wait rather than sending requests repeatedly.

Automate the signal, not the noise

Need a monitoring workflow that explains what changed and why it matters?

I can design a low-maintenance monitoring system around your sources, watchlists, approval rules, and delivery channel without turning every update into an expensive AI request.

Discuss your monitoring project