A screener sorts numbers and prints a list. A broker either has the instrument or it does not. Between those two facts sits every hard problem in systematic investing.
Building a European stock screener sounds simple at the start. Pull the companies. Pull the financials. Calculate the ratios. Sort by score. Buy the top names. That was the plan going in.
It did not survive contact with the first order.
The model we started with:
European stocks
↓
fundamentals
↓
ranking
↓
top 30
The model that turned out to be true:
Company
↓
Security
↓
Exchange
↓
Currency
↓
Financial statement
↓
Filing date
↓
Point-in-time eligibility
↓
Ranking
↓
Broker availability
↓
Order
↓
Execution
Each arrow is its own failure point. The first stock the system selected, did not trade right away. That single stall exposed most of the problems below.
AI can build faster. Can your team decide better?
AI can draft the PRD and prototype the idea. Jira Product Discovery helps teams decide whether it belongs on the roadmap. Bring feedback and ideas together, prioritize as a team, and keep your roadmap connected to delivery in Jira.
A company is not a security. One company can have several share classes, several listings, an ADR, and several currencies attached to the same underlying business. A screener that treats a ticker as the company will eventually rank the wrong instrument, or the right company through the wrong wrapper. The data model needs a company record with securities attached to it, not a flat list of tickers standing in for companies.
Point-in-time is not optional. A backtest that pulls 2025 earnings and applies them to a 2025 decision is answering the wrong question. The real question is when the market actually had that number. Filing date has to sit inside the dataset next to the figure itself, or the backtest is quietly using information from the future.
A ranking is a hypothesis, not a portfolio. Koyfin produced a proxy ranking. That ranking then had to be checked by hand. Statements were reviewed. Return on capital was checked again. Free cash flow was checked again. One name, RBW, was removed after review. Another, SLP, stayed flagged as doubtful rather than approved. Only after that filtering did the list become something worth acting on.
Availability is not liquidity, and liquidity is not execution. The path from ranked name to filled order runs through the broker, not around it.
Eligible
↓
Ranked
↓
Available on the broker
↓
Order submitted
↓
Pending
First buy cleared every step up to the order and then sat pending. Being on the ranked list and being tradeable are two different facts, and the system has to track both.
Broker also flagged several of these instruments for volatility before the order went through. That warning was not part of the selection logic. It was not a reason to skip the trade or take it. It is execution and risk metadata, produced by the broker at the moment of the order, and it gets stored alongside the trade, not folded into the ranking.
A research system does not end when it prints a ranking. That is closer to where the real work starts. What it has to preserve is what was known, when it was known, which specific security was meant, whether that security could actually be bought, and what happened the moment the order was sent.
The screener was the easy part. Everything after the ranking is where a research idea turns into an actual position, or does not.
The agentic era needs a different CRM. That’s Attio.
Teams like Parallel, Turbopuffer, and Wordsmith are already setting the pace on Attio. Get an always-on revenue engine, with agents and workflows that build pipeline, chase every buying signal, and move deals forward with your team. Whether you're working in your browser, inbox, or favorite agent, connect to your customer data in real-time through Attio's web app, MCP, API, and SDK.




