Ownership structure explorer for family office teams

By General Input

See who actually owns what across nested trusts, LLCs and holding companies, with ownership percentage and look-through value at every level.

Integrations

  • Addepar
  • Google Sheets

Type

App

Categories

  • Finance
  • Operations

Build me an ownership structure explorer that my family office team opens to answer who actually owns what across nested trusts, LLCs and holding companies. Everything comes from Addepar, and I want to be able to correct the structure without leaving the app.

The landing screen is a search over families and clients. Use Addepar List Entities to populate it, with a text filter on entity name and a filter by entity type sourced from List Entity Types. Show each result with its name, entity type and a short line of context so I can tell two similarly named trusts apart. Selecting a result opens that entity as the top level owner of the ownership tree.

The main view is the ownership tree. Starting from the selected top level owner, walk Addepar List Positions to find every entity it owns, then repeat down through each intermediate entity until you reach the assets at the bottom. Render this as an expandable tree. Every node shows the entity name, its entity type, the ownership percentage on the position that links it to its parent, and its look-through market value. Get the market values from Query Portfolio Data, and use List Attributes first to discover the exact column and grouping attributes the firm has available rather than assuming attribute names. Look-through value at a node means the value attributable to it after applying ownership percentages at every level above it, so compute the effective percentage down each path and multiply through.

Selecting a node opens a side panel for that entity. Show its full attributes from Get Entity, and list its direct holdings, meaning the entities one level beneath it with each ownership percentage and value. Include a breadcrumb of the ownership path from the top level owner down to this node, since in a deep structure it is easy to lose track of where you are.

The app should flag problems as I browse. Flag any position that has no ownership percentage recorded, because that quietly breaks every roll up above it. Flag any entity that is missing an attribute its entity type requires, comparing the entity's attributes from Get Entity against the required attributes that List Entity Types returns for that type. Show these flags as a badge on the affected node in the tree and as a running issues list I can work through, so nobody has to hunt for them node by node.

Let me fix problems in place. From the node panel I should be able to edit an entity's attributes and save them back with Update Entity. When I find a missing ownership link, let me create it with Create Position, choosing the owner entity, the owned entity and the ownership percentage. After a successful write, refresh the affected branch and clear the flag so the issues list stays honest. Use Get Position when I need the full detail of a single ownership link before changing anything around it.

Include a total exposure roll up. Across the whole tree for the selected family, group by the underlying asset and sum the look-through value contributed by every entity that holds it, so I can see aggregate exposure to a single asset even when it is reached through five different entities. Show each asset with its total look-through value, its share of the family total, and the list of entities that hold it with each one's contribution. This is the number I most often need and cannot get by looking at any single entity.

Add an export that flattens the tree into rows and sends them to Google Sheets with Append Values, so I can hand it to the tax or estate team. One row per ownership path, with the full path from top level owner down, the entity name and type at each level, the ownership percentage at each step, the effective look-through percentage, and the look-through market value. Let me pick the target spreadsheet and tab before exporting.

Two things to get right in how the data is fetched. Addepar rate limits are per firm at 50 requests per 15 minute window and 1,000 per 24 hours, so do not fetch positions one node at a time. Pull positions in batched pages using cursor pagination with page[limit] up to 2000 and page[after], following the links.next URL verbatim, then assemble the tree client side from the batched results and cache it for the session so expanding a node costs nothing. Second, guard the walk: track visited entities so a circular ownership loop cannot spin forever, and cap the recursion depth with a clear message when a structure goes deeper than the cap. If a portfolio query is large enough to risk the 60 second request timeout, submit it as an async portfolio job and poll for the result instead of blocking the screen.

Keep the interface dense and readable. This is a working tool for a small team who live in it, so favour a tree that shows many levels at once over big cards, and always show percentages and values on the same line as the entity name.

Related prompts

Explore more prompts
Call overdue Xero customers with an AI collections agentLocal listing health board for every location you manageLet support send one-off Loops emails without an engineerStop cold emails to anyone with a live deal in PipedriveiMessage campaign console with pre-flight checks and delivery boardLinkedIn Ads budget pacing dashboard for every client accountFront desk appointment confirmation board for the next 3 daysGive your team Looker numbers without buying more seatsBuild audience segments from product usage and push to LoopsTurn the people who engage with your posts into Pipedrive leads