How to automate client portfolio reporting from custodian data

Published

TLDR

Build client reports from reconciled holdings, prices, cash, and flows, with a stable snapshot and a replayable return calculation.

New event
Sync API
Sync tool
Sync data
Learn
Dashboards
Deliver
Customer
An illustrative workflow syncs financial systems, learns business context, models data, updates dashboards and delivers results to a customer. Timing is accelerated for this illustration.

Build client reports from a dated snapshot of reconciled holdings, cash, prices, and flows. Freeze the same snapshot for calculation, review, and delivery so an advisor can explain the exact inputs behind a reported value or return.

Define the report before you connect the feed

Agree on the reporting period, account and household scope, cutoffs, base currency, approved valuation and return methods, benchmarks, and treatment of fees. A holdings report and a performance report use related inputs, but performance also needs the timing and treatment of external cash flows. The CFA Institute's GIPS handbook describes why valuations around external flows matter for time-weighted returns, and its client-reporting guidance distinguishes individual client reporting from composite or pooled-fund reporting. Schwab documents daily positions, balances, transactions, and profile files as one example of the source data an advisor can receive. GIPS handbook · GIPS client reporting guidance · Schwab daily data files

Build one report package per household and period

StepWhat the team does todayHow to automate itAccepted result
Collect closing filesAn operations analyst waits for positions, cash, transactions, and prices.Require a source manifest for each custodian and as-of date, with checksums and version IDs.Complete files or a missing-feed task.
Resolve accounts and securitiesOperations checks household membership, security IDs, and exceptions.Join to effective-dated account and security maps. Send unknown IDs to reference-data owners before aggregating.One authorized household and security ID per applicable row.
Reconcile and valueThe analyst ties holdings and cash to source controls and resolves stale prices.Reconcile quantities and cash in source currency, then apply approved prices and dated FX rates. Preserve stale or missing-price indicators.Signed-off valuation snapshot and unresolved breaks.
Calculate performancePerformance staff identify external flows, apply fees and benchmarks, then check returns.Compute returns with versioned code and the approved methodology. Capture the flow treatment and benchmark date used.Reproducible value and return with source lineage.
Review and releaseAn advisor or reporting reviewer checks discrepancies and approves the package.Validate entitlements, render from the frozen snapshot, and stage a draft. AI may summarize reconciled drivers with references.One approved revision published to the authorized client destination.

What to automate

Collect closing files

Make a dated manifest for each custodian listing expected holdings, balances, transactions and price inputs. The reporting job starts at the agreed cutoff, saves file checksums and reports missing inputs by account and date. Keep affected accounts in a draft hold state. Operations approves any supported carry-forward and records the previous file date and reason in the release package.

Resolve accounts and securities

Join custody account keys to the authorized household roster and securities to the approved identifier map as of the report date. Check that each record has exactly one applicable match and retain both input and mapped IDs. When there are multiple matches or a gap, send the source row to the reference-data owner. Keep already issued versions frozen if the roster changes later.

Reconcile and value

Before converting currency, tie positions and cash to the native-currency source controls. Use the price and FX policy to select dated observations and keep the observation date, source and any staleness flag. Hold materially affected valuations for the reviewer. Save a snapshot that ties each displayed value to quantity, price, exchange rate and approved exception status.

Calculate performance

Have the performance owner write down the return method and the treatment of contributions, withdrawals, fees and benchmarks. In code, classify flows by the approved event types and calculate from the frozen valuation snapshot. Where the approved method uses subperiods, validate both boundary values and link the subperiod returns. Route unresolved flow classification or missing boundary valuations to performance staff.

Review and release

Render a draft for each authorized household from the approved data snapshot. Compare household coverage, exceptions and significant changes with the last release. Give AI only approved aggregates and source IDs to draft an explanation. Require the reviewer to approve the snapshot and check recipients before delivery. Record the issued version and use a new revision for corrections.

Test external cash flows and account moves

Use a synthetic account worth $100 at the start of the first subperiod. It is worth $110 immediately before a $50 deposit, then closes the second subperiod at $176. With valuations at the flow boundary, each subperiod returns 10%, and the linked time-weighted return is 21%. The report should show the $50 contribution and $176 ending value separately. Confirm a replay produces the same results, a missing price opens an exception, and a later household transfer does not change an already approved report. Compare results to the incumbent through a full reporting period and measure unresolved breaks, reissues, and on-time release.

Implement a release manifest per portfolio report

Build a normalized position table at tenant × account × instrument × as_of × revision and a cash table at tenant × account × currency × as_of × revision. Store instrument identifiers as qualified IDs and resolve corporate-action, cash-flow and price versions before you calculate. Keep source snapshots and reviewer evidence access-controlled by tenant.

  1. Require the expected account set from the approved entitlement roster. Compare the positions, cash and activity manifests with the same business date and freshness thresholds. A missing file must never become a zero account or be filled with another client’s position.
  2. Freeze the valuation policy: base currency, price fallback, FX cutoff, treatment of accrued income and corporate actions. Compute local and reporting values separately. Route a missing price or rate to the team that owns it.
  3. Reconcile account totals to the source controls and any approved composite. Generate reports from the accepted data snapshot. Human reviewers approve performance commentary and the list of destinations. Log send receipts with report hash and recipient authorization reference.
  4. When a statement is corrected, make a new revision with changed accounts and metrics. Re-run affected controls and retain the previous report and dispatch receipts. Do not substitute latest data when reproducing an older report.
from decimal import Decimal
positions = [(20, Decimal("50"), Decimal("1.10")),
             (10, Decimal("25"), Decimal("1.00"))]
base_cash = Decimal("125")
portfolio_value = base_cash + sum(qty * price * fx for qty, price, fx in positions)
assert portfolio_value == Decimal("1475.00")

This fixture checks valuation only. A separate acceptance case must reject a mismatched base currency, a missing price, and an extra unauthorized account before a report can be published.

Implement the work step by step

The head of client reporting decides whether to release an accurate report at close or hold it when an account, price or entitlement is uncertain. The workflow begins at reporting cutoff with authorized account roster. Ends when the client-ready revision is delivered or a named exception is held. Excludes advice and trading.

Collect and stage

  • Lock reporting roster and entitlement. Snapshot entitlement by effective date and verify destination membership. Read CRM, custody account roster, reporting calendar. Record Authorized account-to-household roster to operations. Owner Client reporting analyst. Approve ambiguous relationship changes. Check Block cross-household or expired account access.
  • Confirm closing feed coverage. Validate expected file types and checksum, archive versions. Read Custodian holdings, balance, transactions and price files. Record Validated source inventory to analyst. Owner Portfolio ops. Investigate quarantined delivery. Check Do not count shared feed onboarding effort again.

Value and calculate

  • Resolve instrument and household keys. Join approved as-of keys. Isolate uncertain matches. AI can suggest candidate aliases with supporting reference. Read Security master and effective-dated account map. Record Mapped holdings to pricing. Owner Portfolio ops. Authorize map updates. Check Unmapped assets remain exceptions, not zero-value positions.
  • Reconcile positions and value assets. Decimal valuation and native-currency controls. Apply as-of policy. Read Custody balances, pricing, FX, valuation policy. Record Reconciled holdings snapshot to performance. Owner Portfolio ops. Approve overrides on pricing exception. Check Stale quote follows separate approved policy.
  • Calculate and compare returns. Classify known event codes, calculate link and benchmark by date. Read Cash flows, fees, benchmarks and valuation dates. Record Method version and return to advisor. Owner Performance analyst. Confirm unusual flow treatment. Check Test synthetic external contribution and compare tolerance.
  • Resolve a held valuation or flow. Route per household, attach source snapshots and enforce recheck. AI can summarize candidate source evidence. Read Price exception, corporate action data, issue tracker. Record Exception disposition to reviewer. Owner Performance analyst. Approve exceptional treatment or keep on hold. Check Timestamp and signer required for any override.

Review and deliver

  • Review client package. Render from frozen data with variance links and scope checks. AI can draft commentary on approved aggregates only. Read Frozen report preview and client roster. Record Approved or held package to delivery. Owner Advisor. Confirm release and applicable communications review. Check Approve exact revision and delivery destination.
  • Publish and reconcile receipts. Use idempotent household/period/revision key and reconcile portal receipts. Read Portal delivery log, approved report. Record Report and receipt to client service. Owner Client reporting analyst. Correct rejected deliveries and follow controlled reissue. Check No duplicate publishes on retry.

Parallel run. Parallel-run two report cycles against the incumbent. Require approved methods, household scope, entitlements and sample tie-outs. Exercise a contribution, stale quote and household transfer.

Build it yourself with AI

Create synthetic holdings.csv, flows.csv and household_map.csv for one household. Keep the calculation method in reporting_policy.md and ask the coding assistant for a local draft generator. Use the same dated snapshot for the numbers, checks and preview.

  1. Turn the reporting policy into a build plan

    Propose a file manifest and data contract for these sample holdings, flows and account mappings. Identify effective-date joins and validation checks for quantities, currencies, account entitlements and stale prices. List questions for the performance owner rather than choosing a methodology.

  2. Implement the approved calculation

    Given the approved subperiod method, write a local Python report. Use synthetic values 100 at start, 110 before a contribution of 50, and 176 at period end. Assert that the linked return is 21%, ending value is 176 and the contribution is displayed separately. Add cases for a missing price and a household change effective after the report date.

  3. Prepare a source-linked reviewer draft

    Use only the reconciled snapshot and break register. Describe the computed change in value, external flows and material unresolved inputs. Reference the row IDs. Flag claims requiring source confirmation and output a draft for the reporting reviewer.

Run one complete reporting period alongside the current process. Compare account coverage, valuation totals, performance and exception status. Check that the delivery export has only the approved destinations and that a later household move produces no change to the frozen revision. The reporting owner authorizes issuance.

Need help automating this?

See how Mage prepares recurring client reports from agreed financial sources and retains the inputs and approvals behind each release. See Mage's recurring client reporting solution.

AuthorsMage Team