Company ID joins: use effective intervals, not tickers
A company identifier join needs a validity interval and a relationship type. Matching a ticker in two tables can connect different securities or different historical entities. Before AI combines filings, prices or operating data, create a dated crosswalk that preserves the distinction between the reporting company and the instrument being observed.
SEC submissions documentation describes CIK-keyed filing histories and metadata including current and former names, tickers and exchanges. That metadata is useful evidence, but it does not automatically provide every historical ticker-validity interval. Establish the missing dates from appropriate underlying records.
Define the join objects
Create separate keys for the research entity, legal reporting entity and security. A company can issue multiple classes, while a merger can connect predecessor and successor entities without making their full histories interchangeable. Record the relationship explicitly rather than storing every association as an alias.
For each mapping, keep valid-from and valid-to dates, the source establishing the boundary, and unresolved precision. Choose a clear interval convention, such as including the start and excluding the end. A vague year should not be silently transformed into a precise trading-day boundary.
Require the observation date to fall within the mapping interval. Also require compatible market and security class where those affect identity. An entity-level financial fact can join to several securities legitimately, but the resulting multiplication must be intentional and should not duplicate the company’s revenue in an aggregate.
Hypothetical recycled ticker
Assume fictional company Elm uses ticker ABC through June 30. A different company, Slate, starts using ABC on September 1. An annual current-ticker lookup maps ABC to Slate. Joining all historical ABC prices to that lookup would incorrectly attach Elm’s earlier observations to Slate.
A dated crosswalk routes pre-July observations to Elm, September onward observations to Slate, and the gap to an unresolved or inactive status under the evidence. It does not fill the summer gap by nearest-name matching. All dates, entities and tickers are hypothetical.
Now suppose Elm had two classes during the first interval. An entity-level filing row may be relevant to both classes, but a class-specific price must retain its own key. After joining, count entity-period facts separately from security-period observations so the shared filing does not become two independent companies.
Temporal crosswalk worksheet
| Field | Validation rule |
|---|---|
| Research entity key | Stable internal object with documented continuity |
| Reporting entity ID | Verified issuer or filer relationship |
| Security key | Market and class retained |
| Display symbol | Time-varying label, never sole identity |
| Valid interval | Source-backed boundaries and precision |
| Relationship type | Same entity, predecessor, successor or unresolved |
Test for overlapping intervals within the intended unique mapping. More than one valid match can be legitimate for different classes, but it should fail a supposedly one-to-one join. Record unmatched observations rather than dropping them in an inner join and declaring the remaining dataset complete.
Review before synthesis
Ask AI to propose candidates, not finalize identity. Review weak matches using original issuer documents and relevant market records. Similar names, websites and logos can help locate evidence but should not override a contradictory identifier or class description.
Compare row counts and aggregate totals before and after the join. A clean company name column is not proof of a correct mapping. The final packet should retain the crosswalk version, interval logic, ambiguous matches and excluded rows. This makes errors inspectable and prevents an apparently fluent company history from stitching together unrelated economic objects.
FAQ
Is a CIK the same thing as a traded security?
No. It anchors a filing entity; security class, market and historical relationship still need their own fields.
Should unmatched old tickers be filled by today’s closest name?
No. Preserve the unresolved row and seek evidence. A convenient guess can create a false historical company series.