Internal tool

Universe import

Export your master universe spreadsheet as CSV and drop it here. Nothing is written until you review the preview and press import. Existing companies, signals, briefs and analytical cores are never overwritten — matched companies only have empty identity fields filled in.

Expected columns

Column order does not matter and unknown columns are ignored. Any column named report_url_YYYY is detected automatically, so adding 2025 or 2026 needs no code change.

company_nametickerisinsectorgics_sector_codemain_gics_sectorsubsectorcountrycountry_of_listingexchangeir_urlreport_typereport_url_2014report_url_2015report_url_2016report_url_2017report_url_2018report_url_2019report_url_2020report_url_2021report_url_2022report_url_2023report_url_2024report_url_2025
1 · Load data
Or paste CSV/TSV as a fallback
Automation roadmap

The spreadsheet is a bootstrap and override source, not the long-term workflow. Every report record already carries origin, provider, canonical URL, discovery and publication dates, period, and separate validation / fetch / parse states — so an automated discovery job can add a newly published filing to the same registry without any spreadsheet edit and without changing the company model. Rows imported here are stored as source_origin = manual_registry; future feeds will write their own origin against the same identity key (company + document type + year + period).

  1. 1DiscoverLive

    Manual workbook import. Planned: issuer IR pages, RSS/announcement feeds, exchange and regulatory filing feeds, ESEF/xHTML report indexes.

  2. 2ValidateField exists, worker not built

    Check that each canonical URL resolves and points at the right issuer, year and period. Malformed URLs are already registered as invalid rather than blocking the import.

  3. 3FetchField exists, worker not built

    Retrieve the document, store a content hash, and record when it was last checked so re-publication is detectable.

  4. 4ParseField exists, worker not built

    Extract readable text and structure per document type: annual report, interim report, presentation, earnings release, transcript.

  5. 5AnalyzeLive for a small set, manual

    Claims, signals and briefs. No expensive batch LLM run happens on import.

  6. 6Re-evaluate hypothesesNot built

    When a new filing lands for a company that already has an analytical core, re-test existing hypotheses and watch items against the new evidence.

Nothing above fetches or reads documents today. Registered reports sit at status = registered, fetch_status = pending, parse_status = pending until a worker picks them up.