PE Tracker
PE Tracker is a personal project for making the ownership behind a familiar brand easier to check. Search for a brand, follow its parent companies, and see the dated sources behind each connection, including links to private equity and other investment firms.
The name on a product or storefront often tells you very little about who controls the business. I wanted to make those relationships easier to follow, using an automated data pipeline rather than a list of companies I would have to maintain by hand.
Data engineering & full-stack development
2026 – present
- With
- Personal project
- Stack
- Python, JavaScript, CSS
- source
- In development
(sections)
Following ownership chains
A brand can belong to a company that belongs to another company, with an investment firm several steps further up. The application follows those relationships through an ownership graph and presents the chain alongside the sources supporting it.
Results distinguish private-equity ownership, other investment-firm ownership, corporate ownership, and cases where no ownership signals were found. Ownership history is kept separately from current control, so a previous acquisition does not automatically describe who owns the business now.
Reconciling public records
The Python pipeline collects claims from Wikipedia, Wikidata, OpenStreetMap's Name Suggestion Index, USDA FoodData Central, SEC filings, and FTC notices. Each source has its own collector, with shared records for entities, ownership claims, dates, and provenance.
The difficult part is deciding when records refer to the same business and what a source actually establishes. A shared identifier can join records; without one, a name match needs corroboration. Similar names and redirects are insufficient. A reported transaction or a minority stake also needs to stay distinct from evidence of current control.
Keeping uncertainty visible
Every ownership link carries its evidence and dates. The graph retains earlier claims when a source changes, and conflicting parent relationships remain visible in the result rather than being silently discarded.
Missing data is treated carefully. “No ownership signals found” means the available sources did not establish a relationship. It does not establish that a business is independently owned. The aim is to make the evidence inspectable without making the conclusion stronger than the records support.
A pipeline behind a static site
The frontend is plain JavaScript and CSS. The pipeline produces static result data and a search index, split into small files so a lookup can load the relevant records without downloading the whole graph or querying every upstream source.
Before publishing, the build checks known reference cases, unexpected changes in claim counts, and large shifts in ownership classifications. A failed check blocks publication. If an individual collector fails, the pipeline keeps that source's previous records and reports the failure.
GitHub Actions and GitHub Pages provide the scheduled-build and hosting setup. The graph's history is designed to live in a separate data branch, making changes between runs reviewable.
Ongoing work
The first ownership-graph implementation is built around national brands and their parent companies. Public deployment and automated refresh setup are still pending.
Later work includes local businesses and a separate evidence layer for changes after an acquisition. Ownership alone cannot establish that an owner changed a product's quality, price, or service; that question needs its own evidence.