---
title: "Trade publication"
slug: "trade-publication-framework"
tags: ["trade publication framework"]
updated: 2026-05-06T10:41:14Z
published: 2026-05-06T10:41:14Z
canonical: "support.lusid.com/trade-publication-framework"
---

> ## Documentation Index
> Fetch the complete documentation index at: https://support.lusid.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Trade publication

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:

1. Retrieves the transaction and instrument data from LUSID.
2. Applies your configured filters to determine whether to publish the transaction.
3. Enriches and transforms the data according to your configured column mappings.
4. 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.

> [!WARNING]
> Prerequisites
> 
> Before getting started, ensure you have:
> 
> - [x] [Contacted your FINBOURNE representative](/v1/docs/how-do-i-use-the-support-centre) to enable the integration in your LUSID domain
> - [x] Your SFTP credentials (if you intend to output files via SFTP)

1. Navigate to **Integrations > Dashboard**.
2. Click **Create instance** and select **Trade publication framework** from the available integrations. ![](https://cdn.document360.io/d575ad81-c0ed-4980-bbd1-d59ac5c3de82/Images/Documentation/image-ZG5R4FSD.png)
3. Specify the following in the **Integration details** tab:

![](https://cdn.document360.io/d575ad81-c0ed-4980-bbd1-d59ac5c3de82/Images/Documentation/image-GUHXF34M.png)
  - **Name**: A friendly name for this integration instance
  - **Description**: A detailed description of the instance
4. 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](/v1/docs/trade-publication-framework#appendix-a-supported-token-values)
  - **Export Header**: Text to prepend to the top of the output file; [supports dynamic tokens](/v1/docs/trade-publication-framework#appendix-a-supported-token-values)
  - **Export Footer**: Text to append to the bottom of the output file; [supports dynamic tokens](/v1/docs/trade-publication-framework#appendix-a-supported-token-values)
  - **Time Zone**: The timezone to use for date/time tokens in the file name, header, and footer ![](https://cdn.document360.io/d575ad81-c0ed-4980-bbd1-d59ac5c3de82/Images/Documentation/image-3F99E9NI.png)
  - 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](/v1/docs/using-calendars-in-lusid) to use when calculating the next business day
  - **Transaction Filter**: A [LUSID filtering syntax expression](/v1/docs/filtering-information-retrieved-from-lusid) that restricts the transactions the integration includes in the output file, for example to only publish equity transactions:

```plaintext
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:

![](https://cdn.document360.io/d575ad81-c0ed-4980-bbd1-d59ac5c3de82/Images/Documentation/image-04L7GJ9Q.png)
    - **LUSID Value Source**: A [LUSID filtering syntax expression](/v1/docs/filtering-information-retrieved-from-lusid) that defines where in LUSID the data for this column should come from

> [!NOTE]
> Filtering by transaction publication status
> 
> In addition to the standard instrument and transaction fields available for filtering on, you can filter for `PublicationStatus` which reflects the lifecycle of transactions (including instrument-driven events) in the context of files output by this integration instance.
> 
> 
> 
> `PublicationStatus` can be any of the following values:
> 
> - `New`: This `transactionId` is new since the last run of this integration instance.
> - `Amended`: Previous runs of this integration instance have seen this `transactionId` and there has been an update to the transaction.
> - `Cancelled`: Previous runs of this integration instance have seen this `transactionId` but 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](/v1/docs/handling-instrument-events-for-repurchase-agreements).
> - `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](/v1/docs/handling-instrument-events-for-repurchase-agreements).
    - **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](https://learn.microsoft.com/en-us/dotnet/standard/base-types/standard-numeric-format-strings) and [.NET date-time format strings](https://learn.microsoft.com/en-us/dotnet/standard/base-types/standard-date-and-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
5. 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
6. 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](/v1/docs/setting-up-an-integration#running-an-integration). 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.

> [!NOTE]
> 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:

![](https://cdn.document360.io/d575ad81-c0ed-4980-bbd1-d59ac5c3de82/Images/Documentation/image-ZRQEUU7N.png)

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`) from `9.79` to `10.00`
- You 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:

```plaintext
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.](/v1/docs/setting-up-an-integration#monitoring-integration-runs)

> [!NOTE]
> 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](/v1/docs/trade-publication-framework#setting-up-the-integration) 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}` | Day of the month (01-31) |
| `{month}` | Month (01-12) |
| `{year}` | Four-digit year |
| `{hour}` | Hour in 24-hour format (00-23) |
| `{hour12}` | Hour in 12-hour format (01-12) |
| `{minute}` | Minute (00-59) |
| `{second}` | Second (00-59) |
| `{millisecond}` | Millisecond (000-999) |
| `{meridiem}` | AM or PM |
| `{rowcount}` | Number of data rows in the generated file |
| `{domain}` | Your LUSID domain name |

## Related

- [JPMorgan Equity Prime Brokerage](/jpmorgan-equity-prime-brokerage.md)
- [SS&C Lighthouse Custodian](/lighthouse-custodian.md)
- [JPMorgan Fixed Income Prime Brokerage](/jpmorgan-fixed-income-prime-brokerage.md)
- [Handling bond coupon, principal and maturity instrument lifecycle events](/handling-bond-coupon-principal-and-maturity-instrument-lifecycle-events.md)
- [Handling instrument events for interest rate swaps](/handling-instrument-events-for-interest-rate-swaps.md)
- [Handling premium, credit and maturity events for CDX instruments](/handling-premium-and-credit-events-for-cdx-instruments.md)
- [Handling instrument events for FxForwards](/handling-fxforward-settlement-and-maturity-instrument-lifecycle-events.md)
- [Handling instrument events for repurchase agreements (repos)](/handling-instrument-events-for-repurchase-agreements.md)
- [Citco Fund Administration](/citco-fund-administration.md)
