Hoe bouw je een beleggingsonderzoeksagent: markten, fundamentals, SEC en economische data in één API

Een beleggingsonderzoeksagent heeft vijf verschillende datalagen nodig — koersen, fundamentals, filings, macro en nieuws — elk normaal gesproken een aparte leverancier, sleutel en schema. Zo koppel je alle vijf achter één set endpoints, met werkende code en de kostenrekensom.
TL;DR
- •Een bruikbare financiële agent heeft vijf datalagen nodig: realtime markten (koersen), bedrijfsfundamentals (jaarrekeningen), SEC-filings, economische indicatoren en nieuws. Aan elkaar genaaid uit aparte leveranciers zijn dat 5 contracten, 5 sleutels en 5 schema's.
- •API Pick stelt alle vijf beschikbaar als consistente JSON-zoek-endpoints — /search/markets, /search/financials, /search/sec, /search/economic, /search/news — plus /extract voor volledige documenten. Eén sleutel, vooraf gevormd voor LLM-tool-calling.
- •Het agentpatroon: draai de relevante endpoints parallel als tools, voeg de JSON samen, en laat het model redeneren over gegronde data in plaats van cijfers te hallucineren.
- •Creditprijs is alleen-bij-succes: markets 120, financials 200, sec 120, economic 50, news 15 per call. Een typische multi-tool-onderzoeksbeurt kost ruim onder de $0.01–$0.10, afhankelijk van de diepte.
- •Build-vs-buy: zelf Polygon + een fundamentals-leverancier + SEC EDGAR + FRED + een nieuws-API in elkaar zetten kost weken integratie en 5 maandelijkse facturen; de single-endpoint-route is een dag.
Het vijflagenprobleem
Vraag een LLM "is NVIDIA nu duur?" en hij verzint vol overtuiging een koers-winstverhouding. De oplossing is geen groter model — het is grounding. Een onderzoeksagent die vertrouwen verdient, moet live, geciteerde data uit vijf lagen halen en er vervolgens over redeneren:
- Markten — de huidige koers, de marktkapitalisatie en hoe die is bewogen. Crypto, forex, ETF's en de grootste bewegers van de dag wanneer relevant.
- Fundamentals — balans, winst-en-verliesrekening, kasstroom, dividenden en insidertransacties. De laag van "is het bedrijf echt gezond".
- SEC-filings — risicofactoren uit de 10-K, detail uit de 10-Q, 8-K-gebeurtenissen, taal van earnings calls. De kwalitatieve dimensie die de cijfers missen.
- Economische indicatoren — rentes, inflatie, werkgelegenheid, bbp van FRED, BLS, de Wereldbank en het IMF. De macro-achtergrond waarin elke these zit.
- Nieuws — de tijdige katalysator: een afwaardering, een productlancering, een toezichtsmaatregel.
Aan elkaar genaaid uit aparte leveranciers zijn dat vijf contracten, vijf API-sleutels, vijf rate-limit-regimes en vijf responsschema's die je moet normaliseren voordat een model ze kan aanraken. De integratie is waar projecten met financiële agents vastlopen.
Eén set endpoints, vijf lagen
API Pick stelt elke laag beschikbaar als een consistent JSON-zoek-endpoint, zodat de agent praat met één sleutel en één responsvorm:
- Markets Search — wereldwijde en Amerikaanse aandelen, crypto, forex, ETF's, fondsen, grondstoffen en de grootste bewegers op de Amerikaanse markt.
- Financials Search — balansen, winst-en-verliesrekeningen, kasstroom, dividenden, insidertransacties.
- SEC Filings Search — 10-K/10-Q/8-K, earnings-transcripts, equity-statistieken.
- Economic Data Search — FRED, BLS, Wereldbank, IMF, USAspending, Destatis.
- News Search — op datum gefilterd nieuws van grote media.
- Extract — haal een volledige filing of artikel naar schone markdown wanneer een fragment niet volstaat.
De agentarchitectuur
Registreer elk endpoint als een tool. Wanneer er een vraag binnenkomt, beslist de agent welke lagen hij nodig heeft, roept ze parallel aan, voegt de JSON samen en redeneert over het gegronde resultaat. Een vraag over een ticker raakt markets + fundamentals + nieuws; een vraag "hoe staat de sector ervoor" raakt economic + nieuws + een paar vergelijkbare bedrijven.
import asyncio, httpx, os
API = "https://api.apipick.com/v1"
HEADERS = {"x-api-key": os.environ["APIPICK_KEY"], "Content-Type": "application/json"}
async def search(client, path, query, **kw):
r = await client.post(f"{API}/{path}", headers=HEADERS,
json={"query": query, **kw})
r.raise_for_status()
return r.json()["results"]
async def research(ticker: str):
async with httpx.AsyncClient(timeout=30) as c:
markets, fundamentals, filings, macro, news = await asyncio.gather(
search(c, "search/markets", f"{ticker} price and market cap"),
search(c, "search/financials", f"{ticker} latest balance sheet and cash flow"),
search(c, "search/sec", f"{ticker} 10-K risk factors", end_date="2026-06-16"),
search(c, "search/economic", "US interest rates and inflation latest"),
search(c, "search/news", f"{ticker} latest news", end_date="2026-06-16"),
)
return {"markets": markets, "fundamentals": fundamentals,
"filings": filings, "macro": macro, "news": news}
# Feed the merged JSON back to your LLM as grounding, with the source URLs,
# and ask it to synthesize — never to recall numbers.
context = asyncio.run(research("NVDA"))Elk resultaat draagt een source-URL. Geef die door tot in het uiteindelijke antwoord zodat een mens elke bewering kan controleren — en zodat de output van de agent citeerbaar is, wat hem bruikbaar maakt in een echte workflow.
Build vs. buy
| Zelf in elkaar zetten | API Pick | |
|---|---|---|
| Leveranciers / sleutels | ~5 (Polygon, fundamentals, EDGAR, FRED, nieuws) | 1 |
| Responsvormen | 5 te normaliseren | 1 JSON-vorm |
| Tijd tot eerste agent | Weken integratie | Eén dag |
| Facturatie | 5 maandelijkse abonnementen | Per call, alleen bij succes |
| LLM-klaar | Je vormt elk zelf voor | Voorgevormde fragmenten + bron-URL's |
Voor één datatype is rechtstreeks gaan redelijk. Voor een agent die alle vijf nodig heeft en onvoorspelbaar verkent, gaat de single-endpoint-route in een dag in productie en factureert alleen wanneer een call slaagt.
Wat dit ontsluit
Dezelfde vijf tools voeden veel meer dan ticker-lookups: briefingagents voor het cijferseizoen, sectorscreens gegrond in fundamentals, macrobewust portefeuillecommentaar en due-diligence-assistenten die de echte 10-K lezen via Extract. Het patroon is altijd hetzelfde — gegronde tool-calls, parallel ophalen, synthese over echte data met de bronnen erbij.
Begin met een gratis sleutel (100 credits, geen kaart) en koppel de vijf tools aan het agentframework van jouw keuze. Vanaf daar is het prompt-engineering, geen loodgieterswerk.
Veelgestelde vragen
Welke data heeft een beleggingsonderzoeksagent eigenlijk nodig?
Vijf lagen. (1) Realtime markten — koersen, crypto, forex, ETF's, grootste bewegers, voor de vraag 'wat doet het nu'. (2) Fundamentals — balans, winst-en-verliesrekening, kasstroom, dividenden, insidertransacties. (3) SEC-filings — tekst van 10-K/10-Q/8-K en earnings-transcripts voor kwalitatieve signalen. (4) Economische indicatoren — FRED, BLS, Wereldbank, IMF voor de macro-achtergrond. (5) Nieuws — tijdige katalysatoren. De meeste agents falen omdat ze koersen hebben maar geen fundamentals, of fundamentals maar geen macrocontext.
Waarom niet gewoon Polygon, FRED en SEC EDGAR rechtstreeks aanroepen?
Dat kan — en voor één datatype is dat prima. De pijn is dat de agent alle vijf nodig heeft: dat zijn vijf leveranciers, vijf authenticatieschema's, vijf rate-limit-regimes, vijf responsvormen die je moet normaliseren voordat de LLM ze kan gebruiken, en vijf facturen. De single-endpoint-aanpak ruilt een kleine toeslag per call in voor één sleutel, één JSON-vorm en facturatie alleen-bij-succes — wat voor een agent die exploratieve multi-tool-calls doet meestal het goedkopere en veel snellere pad naar productie is.
Hoe voorkom ik dat de LLM financiële cijfers hallucineert?
Laat het model nooit cijfers uit het geheugen produceren. Maak van elke databron een tool, dwing de agent die aan te roepen, en geef de teruggekeerde JSON terug als grounding. De taak van het model is redeneren en synthetiseren over opgehaalde waarden, niet ze herinneren. Citeer de bron-URL van elk resultaat zodat de output controleerbaar is — dat is ook wat het antwoord betrouwbaar maakt voor een menselijke reviewer.
Is de output geschikt voor echt handelen of advies?
Nee. De output van een retrieval-API is informatief. Het grondt de redenering van een analist of agent in echte data; het is geen beleggingsadvies en mag niet worden gebruikt als geautomatiseerd handelssignaal zonder een gekwalificeerd mens en passende risicocontroles. Behandel de agent als een onderzoeksversneller, niet als beslisser.
Hoeveel kost een onderzoeksbeurt?
Facturatie is per geslaagde call: markets 120 credits, financials 200, sec 120, economic 50, news 15 (1000 credits ≈ $1). Een gerichte beurt die markets + fundamentals + nieuws raakt is ~335 credits (~$0.34); een lichtere macro+nieuws-beurt is ~65 credits. Je betaalt alleen bij HTTP 200, dus mislukte of lege calls kosten niets — wat ertoe doet wanneer een agent verkent.
API's gebruikt in dit artikel
Sarah Choy is de CEO van API Pick. Ze schrijft over het bouwen van productieklare API's voor AI-agents en LLM-workflows.