FilingTasks
Description
FilingTasks trains agents to convert SEC filings into structured data products: multi-year financial time series, quarterly series with derived fourth quarters, ratio sheets, peer-comparison tables, balance-sheet snapshots, per-share histories, and segment revenue breakdowns. The agent researches a company's 10-K/10-Q filings through OpenReward's backdated SEC filing archive (point-in-time, gated at each task's as_of date), extracts figures across one or more filings, and delivers a spreadsheet (xlsx) or CSV that follows an exact output contract. Grading is fully deterministic against ground truth derived from EDGAR XBRL company facts — no LLM judge at runtime.
Capabilities
- Point-in-time research over an SEC filing archive (search + full-text fetch)
- Locating figures inside very large documents (10-Ks strip to 300k–1M+ characters) with grep/Python rather than paging
- Multi-document synthesis: one time series usually spans several filings, using comparative columns to reach years before the archive window
- Financial-calendar reasoning: fiscal year ends, 52/53-week calendars, deriving Q4 as FY minus the three reported quarters
- Spreadsheet construction to a strict contract (sheet name, exact headers, keyed rows, units), with formulas recalculated before grading
Compute Requirements
Agents get a 1 CPU / 2 GB network-blocked Linux sandbox (generalreasoning/python-ds:3.12-tools); the two research tools are the only information channel.
License
MIT
Tasks
There are 1,095 tasks — 1,035 in the train split and 60 in a company-disjoint test split — across seven families:
annual_series(210): annual income/cash-flow line items across consecutive 10-Ks (3–5 fiscal years, reaching back through comparative columns).quarterly_series(190): quarterly revenue/income series across 10-Qs and 10-Ks (6–9 quarters), with fiscal fourth quarters derived as FY minus the three reported quarters.derived_metrics(175): margin, effective-tax-rate, R&D-intensity and free-cash-flow sheets computed from reported figures.capital_structure(170): fiscal year-end balance-sheet snapshots (assets, liabilities, equity, cash, debt, working-capital items).per_share_returns(170): EPS, dividends per share, share counts, buybacks and dividends paid.cross_company(76): the same metrics across 3–5 same-sector peers with differing fiscal calendars, one row per company per fiscal year.segment_breakdown(104): revenue by reportable business segment or geographic area, one row per segment per fiscal year.
Each task fixes a company (or peer group), an as_of date sampled shortly after the newest required filing, a deliverable format (~80% xlsx / 20% CSV), and an output contract: file path, sheet name Data, exact column names, one row per key (period end date, ticker × period end, or segment × period end), and units (USD millions, per-share USD, ratios as fractions or percent).
Reward Structure
Dense and fully deterministic: the reward is the fraction of expected value cells matched in the delivered table (header and key cells earn nothing). Rows are located by normalised keys (dates in any standard format, Excel serials, case-insensitive labels), and values are compared with kind-aware tolerance: ~0.1% relative for monetary cells with forgiveness for exact-ratio unit slips (thousands/dollars/billions instead of millions), percent-vs-fraction forgiveness for ratios, and restated XBRL figures accepted as alternates. xlsx deliverables are recalculated with LibreOffice first, so formula-built sheets grade correctly. Submitting is terminal; a missing or contract-violating file scores 0.
We do not use LLM graders in this environment.
Data
Ground truth comes from the SEC EDGAR XBRL company-facts API for six families; segment tables (which are dimensional and absent from company facts) are extracted at datagen time from two consecutive 10-Ks independently and kept only where the extractions agree exactly and the segment sum reconciles to XBRL total revenue. Every expected cell passes a solvability gate: some filing available in the backdated archive on or before the task's as_of reports that figure (comparative columns included), so every task is answerable from what the agent can actually read. Every shipped task also passes an oracle replay (a deliverable synthesised from the expected table scores exactly 1.0, an empty file 0.0). The task universe is 265 large NYSE/Nasdaq issuers (drawn from a 500-company harvest; companies referenced by common finance eval sets are excluded), backed by 4,940 archive-verified filings, and train/test companies are disjoint.
Tools
search_filings(query): point-in-time search over the SEC filing archive (primary 10-K/10-Q documents, indexed as "COMPANY FORM-TYPE PERIOD-END-DATE").save_filing(url, path): fetch a filing's complete text (financial tables preserved as markdown) into the sandbox for local inspection.- CLI toolset (
bash,read,write,edit,glob,grep,ls) and Excel toolset (excel_*) for analysis and workbook construction; Python 3 with openpyxl and pandas is available in the sandbox. submit(): grade the deliverable and end the rollout.
Time Horizon
Multi-step research-and-build tasks: a typical rollout searches the archive, saves one to several filings, greps out the relevant statements, builds the table, and submits once. In initial live gpt-5.2 test rollouts, tasks completed in roughly 19–26 tool calls, scoring 1.0, 1.0 and 0.917 (the single miss was a genuine derivation error on a fiscal fourth quarter).
Other Environment Requirements
No external API keys are required: the research tools authenticate with the platform key, EDGAR-derived ground truth is baked into the dataset, and grading is deterministic.
Safety
Tasks are read-only research over public regulatory filings inside a network-blocked sandbox; the archive is point-in-time gated, so agents cannot see post-as_of information. The environment teaches faithful extraction and reconciliation of reported figures, with no trading, advice-giving, or interaction with external parties.
Citations
@dataset{GRFilingTasks,
author = {General Reasoning Inc. Team},
title = {FilingTasks},
year = {2026},
publisher = {OpenReward},
url = {https://openreward.ai/GeneralReasoning/FilingTasks}
}