← Quantery Blog

How to build a custom stock universe

October 7, 2026 · 8 min readscreeninguniversesworkflow

A custom stock universe is a named list of companies that sets the boundary for a screen before any scoring rules run. Build one when the same research set needs to be reused across theses, scans, backtests, or data jobs. In Quantery, you name the list once, add its symbols, then select it in a thesis's universe block.

That separation matters. The universe decides which companies may enter the calculation. Your features, criteria, and gate decide which members survive it. A custom list won't make the thesis better by itself, but it will make the scope explicit and reusable.

When does a custom stock universe help?

Use a custom universe when the research question starts with a known group that an exchange or index can't describe. You might be studying companies exposed to one supply chain, a set of recent corporate separations, or businesses you've already identified from filings. The list holds that group while the thesis tests a measurable claim inside it.

Suppose you're following a set of manufacturers whose annual reports describe the same input shortage. The shortage mention got them onto the research list. A thesis can then ask whether cash conversion and margins separate resilient operators from the rest. If you bury the symbols directly inside that thesis, the list is harder to reuse and easier to lose. Give the group a name and several theses can examine it without copying ticker blocks around.

A custom universe is less useful when a durable rule can define the group. “US-listed companies above my tradability floor” belongs in the thesis universe filters. “Companies I found while reading this month's filings” needs a stored list because the reason for inclusion lives outside the structured fields.

The guide to choosing a screening universe covers exchange scope, sector exclusions, and market-cap floors. Those choices still matter. A named list adds an outer research boundary; it doesn't replace the filters that make the arithmetic sensible.

How should you choose the members?

Write the admission rule before entering symbols. One sentence is enough:

Add a company when its own filing describes material exposure to the research question, and record the filing that justified inclusion.

The sentence will change with the project. What matters is that a future you can apply it without remembering today's enthusiasm. Keep the evidence beside the list in a research log because the universe itself stores symbols, not your reason for choosing them.

Don't build a historical test from companies you know succeeded. A hand-picked list of today's admired operators carries the outcome in its construction. The backtest may tell you how a rule behaves within that list, but it can't establish that the same rule would have found those companies before they became admired. Selection happened before the engine saw the data.

The same problem appears in event research. If you make a list from memorable winners after an industry shock, the forgotten failures never enter the test. Start from a contemporaneous record such as filings or an announced event roster, then preserve the source and collection date. The list has to exist independently of the result you're hoping to see.

Names also change. Mergers happen, tickers move, and a company can stop fitting the original question. Decide whether your list represents a fixed cohort or a living watchlist. A fixed cohort keeps its original members for a specific study. A living list changes as new evidence arrives. Both are useful, but mixing them makes comparisons hard to interpret.

How do you create and reuse the list in Quantery?

Open the Universes page and start a new custom universe. Give it a name that describes the research set without predicting the conclusion. companies-to-follow is weak but neutral; future-winners has already put a thumb on the scale.

Add symbols through the company search or paste a batch separated by commas, spaces, or line breaks. Review the normalized list before saving. A typo that resolves to another valid symbol is worse than a rejected symbol because the wrong company can pass through the whole workflow without an obvious error.

The Universes page keeps standard market universes separate from named custom lists, which can be created once and reused by a thesis.
The Universes page keeps standard market universes separate from named custom lists, which can be created once and reused by a thesis.

After saving, open the thesis you want to test and select the named list in its universe block. The thesis now refers to the list by name. Scans and data jobs can use that same named set, so you can refresh the relevant companies without pasting the symbols again. The Quantery documentation covers universe setup alongside thesis and data workflows.

There's one operational catch: renaming a custom universe doesn't rewrite the theses that refer to its old name. Those theses will stop resolving until you point them at the new name. Treat the name like a file path. Choose it carefully, and if you change it, update the dependants deliberately.

What happens when list membership meets thesis filters?

Selecting a custom universe doesn't give every member a free pass. The engine resolves the named list, then applies the rest of the thesis universe definition. A member can still fall outside the exchange scope, sit below the market-cap floor, belong to an excluded sector, or fail because required data are unavailable.

That distinction explains a common surprise: the saved list and the evaluated set don't have to match. The saved list answers “who belongs to this research project?” The evaluated set answers “who could this thesis assess under today's data and eligibility rules?” Read missing members as a coverage or scope question before calling them a failed signal.

The data-coverage preflight for backtests shows how to inspect price depth, filing gaps, and null policies. It applies just as much to a custom list. Hand selection doesn't repair missing cash-flow history or create a price series that your data plan doesn't hold.

The thesis shape below is illustrative, and the bundled templates are the reference for exact fields. The custom list is only the starting boundary; the rest of the spec still declares its own filters and calculations.

meta:
  name: durable-research-list
  label: Durable Research List
  description: Quality and cash checks inside a named research universe.
  scale: { min: 0, max: 2 }

universe:
  list: companies-to-follow
  exchanges: [NYSE, NASDAQ, AMEX]
  min_market_cap: 500000000
  exclude_sectors: [Financial Services]

quality:
  stale_months: 9
  required:
    price: no_price
    fcf_ttm: no_fcf

features:
  fcf_ttm: ttm(free_cash_flow)
  net_income_ttm: ttm(net_income)
  fcf_yield: if(market_cap > 0, fcf_ttm / market_cap, null)
  cash_conversion: if(net_income_ttm > 0, fcf_ttm / net_income_ttm, null)

criteria:
  cash_yield:
    rules:
      - { when: "is_null(fcf_yield)", score: 0, flag: no_fcf_yield }
      - { when: "fcf_yield >= 0.08", score: 2 }
      - { when: "fcf_yield >= 0.04", score: 1 }
      - { else: 0 }
  conversion:
    rules:
      - { when: "is_null(cash_conversion)", score: 0, flag: no_conversion }
      - { when: "cash_conversion >= 1", score: 2 }
      - { when: "cash_conversion >= 0.7", score: 1 }
      - { else: 0 }

gate:
  mode: strict

Change the list while leaving this thesis fixed and you changed the opportunity set. Change the thesis while leaving the list fixed and you changed the test. Keep those experiments separate so the result has an intelligible cause.

Can you backtest a custom universe fairly?

You can backtest a thesis against a custom universe, but Quantery applies the list's current stored membership to past dates. It doesn't keep a point-in-time history of edits to custom lists. If the membership changed after the period being tested, the engine can't reconstruct what the list contained then.

That limitation is decisive for some questions. A fixed cohort assembled from contemporaneous evidence can support an event study, provided you explain how the cohort was formed and avoid information that arrived later. A living watchlist is useful for current research, but replaying its latest membership backward can leak today's knowledge into yesterday's test.

Index universes solve a different problem because their membership changes are recorded and replayed where the stored history reaches. Use an index when the claim is about constituents at each historical date. Use a custom list when the claim genuinely begins with your named cohort, then state what that cohort can and can't prove. What makes a backtest trustworthy explains why membership timing belongs beside filing timing and price timing.

Every backtest result remains hypothetical and excludes costs. With a custom universe, add one more reading step: ask whether the list itself could have been known at the time. A clean calculation over a hindsight-built list is still a hindsight-built result.

How do you keep the universe from drifting?

Before editing the members, save the current list in your research notes with the date and admission rule. Then record each addition or removal with its evidence. Quantery stores the latest list, so your log is what preserves the reasoning behind earlier versions.

When a scan changes, don't edit the list and the thesis in the same pass. Compare runs under the same thesis and membership first. If you revise the universe, label that as a new experiment. The workflow in comparing two screen runs is most useful when you can say which boundary stayed fixed.

A custom universe is a small object with a large effect. It turns a pile of tickers into a declared research scope, then lets you aim different rules at the same set. Keep the admission rule outside the outcome, keep list changes visible, and let the thesis do the judging. The list is yours. So is the burden of explaining why every member got in.

Want to try this on your own rules? Quantery is free for 14 days: the full app, no card required.

← All articles