FINBOURNE's Trade Publication Framework allows you to automatically push transaction and instrument changes from LUSID to downstream systems as enriched CSV files.
When LUSID creates, updates, or deletes a transaction in a monitored portfolio, the trade publication framework captures that event and publishes a formatted file to LUSID Drive or an SFTP server. You can then push that trade data to fund administrators, prime brokers, or internal systems that require a structured file feed.
How it works
The integration monitors a portfolio for transaction and instrument changes. When it detects a change, the integration:
Retrieves the transaction and instrument data from LUSID.
Applies your configured filters to determine whether to publish the transaction.
Enriches and transforms the data according to your configured column mappings.
Writes the output to a CSV file which it delivers to your specified destination (SFTP and/or LUSID Drive).
Setting up the integration
An integration instance is a configuration of data points to export to LUSID Drive or an external SFTP.
Prerequisites
Before getting started, ensure you have:
Contacted your FINBOURNE representative to enable the integration in your LUSID domain
Your SFTP credentials (if you intend to output files via SFTP)
Navigate to Integrations > Dashboard.
Click Create instance and select Trade publication framework from the available integrations.

Specify the following in the Integration details tab:
Name: A friendly name for this integration instance
Description: A detailed description of the instance

Go to the Integration settings tab and specify the following:
Portfolio Scope and Portfolio Code: The scope and code of the portfolio or portfolios to monitor. You can monitor transactions from one or more portfolios in a single integration instance using any of the following approaches:
Specific portfolios: Specify one or more Portfolio Scope and Portfolio Code pairs to monitor particular portfolios.
All portfolios in a scope: Specify a Portfolio Scope and leave the code blank to monitor all portfolios within that scope.
File Name: A name for the CSV the integration outputs; supports dynamic tokens
Export Header: Text to prepend to the top of the output file; supports dynamic tokens
Export Footer: Text to append to the bottom of the output file; supports dynamic tokens
Time Zone: The timezone to use for date/time tokens in the file name, header, and footer

Optionally, you can configure cut-off times to control how the integration dates late-arriving transactions; if you configure any of the following fields, all three are required:
End of Day Cut Label: The integration assigns the next business day as the transaction date for transactions processed after this cut label
Start of Day Cut Label: Sets the timestamp for transactions moved to the next business day
Holiday Calendars: One or more LUSID calendars to use when calculating the next business day
Transaction Filter: A LUSID filtering syntax expression that restricts the transactions the integration includes in the output file, for example to only publish equity transactions:
instrument.instrumentDefinition.instrumentType eq 'Equity'Trade Publication Framework Mapping: Specify one or more column mappings to define the structure and content of the output file; only columns you define here will appear in the output file. Each item corresponds to one column in the output file, and each item should contain the following:
LUSID Value Source: A LUSID filtering syntax expression that defines where in LUSID the data for this column should come from
Filtering by transaction publication status
In addition to the standard instrument and transaction fields available for filtering on, you can filter for
PublicationStatuswhich reflects the lifecycle of transactions (including instrument-driven events) in the context of files output by this integration instance.PublicationStatuscan be any of the following values:New: ThistransactionIdis new since the last run of this integration instance.Amended: Previous runs of this integration instance have seen thistransactionIdand there has been an update to the transaction.Cancelled: Previous runs of this integration instance have seen thistransactionIdbut the transaction has now been deleted in LUSID.InstrumentMatured: The instrument reaches its maturity date today. The Trade Publication Framework runs instrument maturity checks automatically once per hour.InstrumentPartialClosure: A portion of an instrument has been closed before its maturity date. The framework processes related events according to their relevant transaction type - for example, read more on how LUSID handles repo instrument events.InstrumentFullClosure: An instrument has been fully closed before its maturity date, or an open repo has been stopped. The framework processes related events according to their relevant transaction type - for example, read more on how LUSID handles repo instrument events.
Output Column Name: A name for the column in the output file
Aggregation Mode: How the integration should aggregate values if multiple rows contribute to it
Value Format: A format string for dates and decimals; overrides the Default number format/Default date format

Default number format and Default date format: The data type to use for numbers and dates in the output file (unless overridden in the column mapping configuration); see .NET standard numeric format strings and .NET date-time format strings
SFTP credentials: If you intend to send output files to an SFTP, specify the required details:
Host Name
Port
Username
Password
Private Key
Passphrase
Base Path
Encryption Key: Optionally, supply your public PGP key to encrypt the output file before delivering it to your SFTP; the integration encrypts and signs the file before upload
Drive path: If you intend to send output files to LUSID Drive, specify an existing folder path; note that you must create the folder path before running the integration instance
Go to the Execution settings tab and specify the following:
Enable integration: Whether to enable scheduled runs of the integration upon saving the instance
Schedule and Schedule timezone: A cron expression and timezone that defines when the integration should run
Click Save to create the integration instance.
Running the integration
LUSID runs the integration instance automatically according to your specified schedule, or you can run the instance manually on demand. If the integration finds one or more trade updates matching your transaction filter, you can find the output file in your specified LUSID Drive or SFTP location.
Important
Remember to create the folder path in LUSID Drive before the schedule runs. If the folder path does not exist, the integration run will fail.
For example, let's imagine you create an integration instance with the following configuration that you choose to output to Drive at 6pm each day:

Now let's say the following events occur for your Equities portfolio on the 27th Mar 2026 between 9am and 5pm:
You update the price of a BP purchase (
Txn01) from9.79to10.00You receive confirmation of a purchase of Microsoft shares (
Txn02)
When the trade publication integration next runs at 6pm, the output CSV file looks like this:
Equity txns for 27-03-2026
TxnID,Type,Security,Units,Price,Status
Txn01,BuyWithAutomaticAmountCalcs,BP,1011.00,10.00,Amended
Txn02,BuyWithAutomaticAmountCalcs,Microsoft,2002.00,16.00,New
Acme co.Monitoring and troubleshooting integration runs
See how to monitor integrations and troubleshoot general issues.
Note
Instrument maturity and interest payment checks run automatically once per hour. If an expected event is missing from the output file, check that the relevant integration run has completed (Integrations > Runs) and allow up to an hour for the next check to run.
Appendix A: Supported token values
You can use the tokens listed in this section to generate dynamic values at the time of file creation for the following fields:
File Name
Export Header
Export Footer
Drive Path
For example, to dynamically produce the file name trades_20240115_1430.csv, you might specify the following configuration value: trades_{year}{month}{day}_{hour}{minute}.
The following table lists all supported token values:
Token | Description |
|---|---|
| Day of the month (01-31) |
| Month (01-12) |
| Four-digit year |
| Hour in 24-hour format (00-23) |
| Hour in 12-hour format (01-12) |
| Minute (00-59) |
| Second (00-59) |
| Millisecond (000-999) |
| AM or PM |
| Number of data rows in the generated file |
| Your LUSID domain name |