{"slug": "i-built-an-agent-that-reads-sec-filings-so-i-don-t-have-to", "title": "I built an agent that reads SEC filings so I don't have to", "summary": "An engineer built EDGAR Sentinel, an autonomous agent on Google Cloud that scans SEC EDGAR filings for a 30-company watchlist, analyzes them with a two-model pipeline, and emails daily alerts on material changes. The agent, developed for the All Things Agentic Hackathon, uses Gemini 3.5 and Gemma for analysis, and includes a delta engine that flags significant shifts in filing health scores. It has processed 58 filings, issued 8 alerts, and runs unattended for about a dollar a day in cloud costs.", "body_md": "Every public company's story is hiding in plain sight — in 10-Ks and 10-Qs that\n\nalmost nobody reads end-to-end. The good stuff is specific: a gross margin\n\ninflecting, risk-factor language that wasn't there last quarter, a going-concern\n\nsentence buried on page 60. I wanted that surfaced to me every morning without\n\nme doing the reading.\n\nSo for the **All Things Agentic Hackathon** I built **EDGAR Sentinel**: an\n\nautonomous agent on Google Cloud that wakes up at 6:30 every morning, scans SEC\n\nEDGAR for new filings across a 30-company watchlist, reads them with a\n\ntwo-model pipeline, remembers every prior filing, and emails me what changed —\n\nwith a public dashboard for everything it knows.\n\nCloud Scheduler → Cloud Run Job → an **ADK orchestrator agent** (Gemini 3.5)\n\nwhose tools are the pipeline stages → SEC EDGAR (politely: declared User-Agent,\n\nthrottled) → raw filings archived to Cloud Storage → a section parser →\n\n**Gemma** (on its own Cloud Run service, via Ollama) writes triage notes →\n\n**Gemini 3.5 on Vertex AI** scores the filing against a five-pillar \"Filing\n\nHealth Score\" with schema-enforced JSON → Firestore stores it → a **delta\nengine** compares against the company's prior filing and fires deterministic\n\nOne design rule shaped everything: **agentic control flow, deterministic\nexecution**. The LLM decides\n\nGemini 3.5 Flash does the deep reading: five pillar scores with cited\n\nrationale, extracted metrics, three decision-relevant highlights. Temperature\n\nzero, pydantic schema enforced, composite recomputed in code so config — not\n\nthe model's arithmetic — is authoritative.\n\nGemma's job is deliberately smaller: read the risk-factors section and produce\n\na dozen terse triage bullets — red flags, notable changes, tone — that ride\n\nalong to Gemini as a second opinion. It runs scale-to-zero on CPU. My first\n\ndesign had Gemma *rewriting* filing text; that was wrong in an instructive way\n\n(below).\n\n`done_reason: length`\n\n— the model spent its whole output budget on\nhidden reasoning and never wrote the answer. One `think: false`\n\nlater,\n33-second useful triage notes.`RIS K FACTORS`\n\n, and repeats \"Item 1A\" as a page header through\nthe whole section — my \"take the last heading match\" heuristic found\nnothing. Fix: match headings with optional intra-word whitespace and take\nthe match with the `make_client().models.generate_content(...)`\n\n) let the client get\ngarbage-collected mid-request; its finalizer closed the HTTP pool:\n`Cannot send a request, as the client has been closed.`\n\nCached singleton.`constraints/vertexai.allowedModels`\n\n) and strips default service-account\ngrants — both showed up as cryptic 400s/403s. Both fixed with scoped,\nleast-privilege IAM rather than hammer-sized grants.Every one of these would have detonated during a live demo. Finding them on day\n\none and day four instead is most of what \"production-minded\" means.\n\nThe delta engine is the feature I'd defend in a knife fight. Because every\n\nanalysis persists in Firestore, each new filing is compared with the company's\n\nprior one — pillar by pillar — and a deterministic rule (≥10-point move, band\n\nchange, or risk-pillar collapse) decides whether to alert. On the full\n\nbackfill it flagged, among others: Plug Power sliding **Caution → Distress**\n\n(cash down to $161.9M), Salesforce and Meta dropping out of Strong, and\n\nCoinbase and AMC genuinely recovering. It also caught Apple's management going\n\ncautious on component costs a quarter before it showed up anywhere else in the\n\nfiling — a 10-point management-signal drop while the composite barely moved.\n\n30 companies · 58 filings analyzed · 8 live alerts · running unattended every\n\nmorning since August 14 · ~1 minute per filing · 20 unit tests · roughly a\n\ndollar a day in cloud costs while idle-scaling to zero.\n\nOne last production note: even the demo video is Google AI — narration by\n\nCloud Text-to-Speech (Chirp3-HD), soundtrack generated with Lyria 2 on\n\nVertex AI, and the screen captured while the real daily job ran live on\n\nCloud Run.\n\n*I created this piece of content for the purposes of entering the All Things\nAgentic Hackathon.* EDGAR Sentinel produces automated research summaries", "url": "https://wpnews.pro/news/i-built-an-agent-that-reads-sec-filings-so-i-don-t-have-to", "canonical_source": "https://dev.to/brian_myers_asi/i-built-an-agent-that-reads-sec-filings-so-i-dont-have-to-kn3", "published_at": "2026-08-28 16:57:15+00:00", "updated_at": "2026-08-28 17:20:26.146477+00:00", "lang": "en", "topics": ["artificial-intelligence", "ai-agents", "ai-infrastructure", "developer-tools"], "entities": ["EDGAR Sentinel", "Google Cloud", "SEC EDGAR", "Gemini 3.5", "Gemma", "Vertex AI", "Firestore", "All Things Agentic Hackathon"], "alternates": {"html": "https://wpnews.pro/news/i-built-an-agent-that-reads-sec-filings-so-i-don-t-have-to", "markdown": "https://wpnews.pro/news/i-built-an-agent-that-reads-sec-filings-so-i-don-t-have-to.md", "text": "https://wpnews.pro/news/i-built-an-agent-that-reads-sec-filings-so-i-don-t-have-to.txt", "jsonld": "https://wpnews.pro/news/i-built-an-agent-that-reads-sec-filings-so-i-don-t-have-to.jsonld"}}