Complete Guide

Transactions & Actuals

Learn how to track real fund performance by uploading transactions from capital statements, blend actuals with projections, and perform powerful variance analysis to understand plan vs actual.

01What Are Transactions?

Transactions (also called "actuals") are the real cashflow events that have occurred in your funds—capital calls, distributions, management fees, and other fund expenses. These are typically extracted from quarterly capital statements sent by your fund managers.

Key Concept: Actuals vs Projections

Actuals are historical facts—what actually happened. Projections are forecasts—what you expect to happen in the future. Nagare seamlessly blends both to give you a complete view of your fund's lifecycle: past, present, and future.

Transaction Example

Here's what a typical capital statement transaction looks like:

Example: Capital Call Transaction
{
  "transactionId": "TXN-2024-Q1-001",
  "fundId": "ACME-GROWTH-I",
  "transactionDate": "2024-03-15",
  "quarter": 9,
  "type": "CAPITAL_CALL",
  "amount": 5000000,
  "currency": "USD",
  "description": "Q1 2024 capital call for new investments",
  "source": "Q1 2024 Capital Statement"
}

02Why Track Actuals?

Tracking actuals is critical for portfolio management. Here's why:

Accurate Reporting

Know exactly where you stand today. Actuals replace projections for historical periods, giving you precise performance metrics.

Variance Analysis

Compare actual performance vs your forecasts. Understand why you're ahead or behind plan (deployment, returns, exits, fees, FX).

Improved Forecasts

Learn from actual pacing and returns to refine future projections. Nagare's forecast drift detection shows you how your predictions evolve over time.

Time-Travel Analysis

Answer questions like "What did we forecast in Q3 2023?" by comparing historical projections with what actually happened.

Pro Tip: Quarterly Upload Cadence

Most LPs receive capital statements quarterly (within 45-60 days after quarter-end). Establish a routine to upload transactions as soon as statements arrive. This keeps your portfolio view current and enables timely variance analysis.

03Transaction Types

Nagare supports multiple transaction types to capture all fund cashflows:

CAPITAL_CALL

Capital Call

Investor contributions to the fund. These are draws on committed capital used to make new investments or pay fees/expenses.

Direction: Inflow (from LPs to fund)
DISTRIBUTION

Distribution

Cash returned to investors from exits, dividends, or interest income. Distributions can be classified as return of capital or return on capital.

Direction: Outflow (from fund to LPs)
MANAGEMENT_FEE

Management Fee

Periodic fees paid to the GP for managing the fund (typically 1.5-2% annually). Usually paid quarterly.

Direction: Outflow (fee expense)
CARRIED_INTEREST

Carried Interest

Performance fees paid to GP (typically 20% of profits above hurdle rate). Usually paid after clearing preferred return.

Direction: Outflow (performance fee)
OTHER_EXPENSE

Other Expense

Fund-level expenses such as legal fees, audit fees, administrative costs, or organizational expenses.

Direction: Outflow (expense)
NAV_ADJUSTMENT

NAV Adjustment

Non-cash adjustments to fund NAV (e.g., unrealized gains/losses, fair value mark-to-market).

Direction: N/A (valuation adjustment)

04Uploading Transactions

You can upload transactions one at a time or in bulk via CSV/Excel import.

Via Web Interface (Single Transaction)

1

Navigate to the fund details page

2

Click the "Transactions" tab

3

Click "Add Transaction" button

4

Fill out the transaction form:

  • • Transaction Date
  • • Transaction Type (Capital Call, Distribution, etc.)
  • • Amount (in fund currency)
  • • Quarter (auto-calculated from date)
  • • Description (optional but recommended)
5

Click "Save Transaction"

Via API (Single Transaction)

POST /api/v1/funds/:fundId/transactionsBRONZE
curl -X POST https://api.nagarehq.com/api/v1/funds/ACME-GROWTH-I/transactions \
  -H "Authorization: Bearer fnd_live_YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "transactionDate": "2024-03-15",
    "type": "CAPITAL_CALL",
    "amount": 5000000,
    "description": "Q1 2024 capital call",
    "source": "Q1 2024 Capital Statement"
  }'

The API will auto-calculate the quarter from the transaction date and validate the transaction:

Response: 201 Created
{
  "transactionId": "TXN-1710518400000-ABC123",
  "fundId": "ACME-GROWTH-I",
  "transactionDate": "2024-03-15",
  "quarter": 9,
  "type": "CAPITAL_CALL",
  "amount": 5000000,
  "currency": "USD",
  "description": "Q1 2024 capital call",
  "source": "Q1 2024 Capital Statement",
  "tenantId": "your-tenant",
  "createdAt": "2024-03-16T10:30:00Z"
}

05Bulk Import from CSV

For uploading multiple transactions at once (e.g., entire capital statement history), use the bulk import API:

POST /api/v1/funds/:fundId/transactions/bulkBRONZE
curl -X POST https://api.nagarehq.com/api/v1/funds/ACME-GROWTH-I/transactions/bulk \
  -H "Authorization: Bearer fnd_live_YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "transactions": [
      {
        "transactionDate": "2024-01-15",
        "type": "CAPITAL_CALL",
        "amount": 3000000,
        "description": "Initial capital call"
      },
      {
        "transactionDate": "2024-02-20",
        "type": "MANAGEMENT_FEE",
        "amount": 125000,
        "description": "Q1 2024 management fee"
      },
      {
        "transactionDate": "2024-03-15",
        "type": "CAPITAL_CALL",
        "amount": 5000000,
        "description": "Q1 2024 capital call"
      },
      {
        "transactionDate": "2024-06-30",
        "type": "DISTRIBUTION",
        "amount": 2000000,
        "description": "Distribution from Exit A"
      }
    ]
  }'

Bulk import response includes success/failure status for each transaction:

Response: 200 OK (Partial Success)
{
  "success": true,
  "created": 4,
  "failed": 0,
  "results": [
    {
      "index": 0,
      "status": "created",
      "transactionId": "TXN-1705329600000-XYZ"
    },
    {
      "index": 1,
      "status": "created",
      "transactionId": "TXN-1708444800000-ABC"
    },
    {
      "index": 2,
      "status": "created",
      "transactionId": "TXN-1710518400000-DEF"
    },
    {
      "index": 3,
      "status": "created",
      "transactionId": "TXN-1719792000000-GHI"
    }
  ]
}

Pro Tip: CSV Parsing Script

Build a simple script to parse capital statement CSVs and format them for bulk import. Most capital statements follow a consistent format, so you can automate 90% of the data entry work.

06Validation Rules

Nagare validates all transactions to ensure data integrity. Here are the key validation rules:

Capital Calls Cannot Precede Commitment Date

For PE funds, the first capital call must be on or after the fund's commitment date. You can't call capital before the fund legally exists.

Error: "transactionDate must be >= commitmentDate"

Total Capital Calls Cannot Exceed Commitment

The sum of all CAPITAL_CALL transactions cannot exceed the fund's totalCommitment (though Nagare allows a 5% buffer for rounding/fees).

Warning: "Total calls ($52M) approaching commitment ($50M)"

Transaction Dates Must Be Valid

Transaction dates must be valid ISO 8601 dates (YYYY-MM-DD). Future dates are allowed (for planned calls), but dates more than 1 year in the future trigger a warning.

Amounts Must Be Positive

All transaction amounts must be positive numbers. The transaction type determines whether it's an inflow or outflow, not the sign of the amount.

Currency Must Match Fund Currency

Transactions are automatically recorded in the fund's base currency. If you provide a currency field, it must match the fund's currency (no cross-currency transactions at transaction level).

07Blended Actuals + Projections

Nagare's most powerful feature is the blended view—a seamless combination of historical actuals (what happened) and future projections (what you expect to happen).

How It Works

Blended View Logic

For past quarters: Use ACTUAL data from transactions

For current quarter: Blend actuals + remaining projected cashflows

For future quarters: Use FORECAST projections

→ Result: Complete lifecycle view from inception to liquidation

Accessing the Blended View

GET /api/v1/funds/:fundId/blendedSAGE
curl -X GET https://api.nagarehq.com/api/v1/funds/ACME-GROWTH-I/blended \
  -H "Authorization: Bearer fnd_live_YOUR_API_KEY"

The response includes a dataSource field for each quarter:

Response: Blended View
{
  "fundId": "ACME-GROWTH-I",
  "currency": "USD",
  "quarterlyData": [
    {
      "quarter": 1,
      "year": 2024,
      "capitalCall": 3000000,
      "distribution": 0,
      "nav": 2850000,
      "dataSource": "ACTUAL"  // ← From transactions
    },
    {
      "quarter": 2,
      "year": 2024,
      "capitalCall": 5000000,
      "distribution": 2000000,
      "nav": 6500000,
      "dataSource": "ACTUAL"  // ← From transactions
    },
    {
      "quarter": 3,
      "year": 2024,
      "capitalCall": 4000000,
      "distribution": 0,
      "nav": 10200000,
      "dataSource": "FORECAST"  // ← From projections
    },
    ...
  ]
}

UI Integration

In the Nagare UI, the Actuals tab shows the blended view by default. Charts automatically highlight the transition point between actuals and projections with a vertical line or color change.

08Data Waterfall Priority

When calculating projections, Nagare uses a data waterfall to determine which data source takes precedence. This ensures actuals always override projections.

Data Waterfall Priority

1

ACTUAL (Transactions)

Real historical data from transactions. Always wins. Immutable source of truth.

2

FORECAST (Fund-Specific)

Custom fund-level projections (e.g., "This fund deploys $5M/quarter for next 4 quarters").

3

MASTER (Baseline)

Default fund parameters (commitment, target TVPI, standard curves). Foundation for all funds.

4

SCENARIO (What-If)

Portfolio-wide scenario assumptions (e.g., "Bear case: -20% returns across all funds").

Example: If Q5 has an ACTUAL transaction, it uses that data, even if there's a FORECAST or SCENARIO override defined. Actuals always win.

09Variance Analysis

Once you have actuals uploaded, you can perform variance analysis to understand why your portfolio is performing differently than planned.

Types of Variance

Deployment Variance

Are you deploying faster or slower than planned? This impacts how much capital is at work.

Example: Planned Q1-Q4 deployment: $20M, Actual: $15M → Behind pace

Return Variance

Are your investments growing faster or slower than targeted growth rates?

Example: Target 40% growth, Actual 55% → Outperforming

Exit Variance

Are exits happening earlier or later than expected? This affects distribution timing.

Example: Planned exit Q12, Actual exit Q10 → Early realization

Fee Variance

Are actual fees different from projected fees? Management fee changes, carry timing.

Example: Expected 2% mgmt fee, Actual 1.75% → Fee reduction

FX Variance

For multi-currency portfolios, currency fluctuations can impact returns significantly.

Example: EUR fund, USD reporting → EUR weakened 10% vs plan

Total Variance

Sum of all variance components. Net effect on portfolio NAV/TVPI vs plan.

Example: Planned NAV $50M, Actual $55M → +$5M favorable

Accessing Variance Analysis

Navigate to the fund's Analysis tab to see variance breakdowns, or use the API:

Coming Soon: Variance API Endpoint
GET /api/v1/funds/:fundId/variance?asOfDate=2024-06-30

// Returns variance attribution for all past quarters

10Best Practices

Upload Transactions Promptly

As soon as you receive a capital statement (typically 45-60 days after quarter-end), upload the transactions. Fresh data enables timely variance analysis and better decision-making.

Use Bulk Import for Historical Data

When onboarding a mature fund with years of history, don't enter transactions one by one. Parse the capital statement CSV and use bulk import to upload all historical transactions at once.

Add Descriptions and Sources

Always include a description (e.g., "Q1 2024 capital call") and source reference (e.g., "Q1 2024 Capital Statement"). This makes auditing and reconciliation much easier.

Reconcile Regularly

Periodically compare Nagare's blended NAV with your fund administrators' reported NAV. Small discrepancies are normal (timing, fee accruals), but large gaps indicate missing transactions.

Don't Delete Transactions Lightly

Transactions represent historical facts. Only delete if you made a data entry error. If a capital statement was restated by the GP, update the transaction rather than deleting it.

Use Transaction Types Correctly

Distinguish between CAPITAL_CALL (new capital for investments) and OTHER_EXPENSE (fund-level costs). Proper categorization ensures accurate fee and expense analysis.

11API Examples

List All Transactions for a Fund

GET /api/v1/funds/:fundId/transactionsSAGE
curl -X GET "https://api.nagarehq.com/api/v1/funds/ACME-GROWTH-I/transactions?page=1&limit=50" \
  -H "Authorization: Bearer fnd_live_YOUR_API_KEY"

Filter Transactions by Date Range

Query Parameters: startDate, endDate
curl -X GET "https://api.nagarehq.com/api/v1/funds/ACME-GROWTH-I/transactions?startDate=2024-01-01&endDate=2024-06-30" \
  -H "Authorization: Bearer fnd_live_YOUR_API_KEY"

Filter Transactions by Type

Query Parameter: type
curl -X GET "https://api.nagarehq.com/api/v1/funds/ACME-GROWTH-I/transactions?type=DISTRIBUTION" \
  -H "Authorization: Bearer fnd_live_YOUR_API_KEY"

Update a Transaction

PUT /api/v1/funds/:fundId/transactions/:txnIdNAVY
curl -X PUT https://api.nagarehq.com/api/v1/funds/ACME-GROWTH-I/transactions/TXN-123 \
  -H "Authorization: Bearer fnd_live_YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "amount": 5100000,
    "description": "Q1 2024 capital call (restated)"
  }'

Delete a Transaction

DELETE /api/v1/funds/:fundId/transactions/:txnIdRED
curl -X DELETE https://api.nagarehq.com/api/v1/funds/ACME-GROWTH-I/transactions/TXN-123 \
  -H "Authorization: Bearer fnd_live_YOUR_API_KEY"

12Troubleshooting

Transaction rejected: date before commitment date

Cause: You're trying to add a capital call before the fund's commitment date.

Solution: Check the fund's commitment date (in MASTER parameters). Either adjust the transaction date or update the fund's commitment date if it was entered incorrectly.

Blended view shows gaps in data

Cause: Missing transactions for some quarters, or transactions entered with incorrect dates.

Solution: Review capital statements for all quarters. Check transaction dates for typos (2023 vs 2024). Use the quarter filter to identify which quarters are missing data.

NAV doesn't match capital statement

Common causes: Missing NAV_ADJUSTMENT transactions, fee accruals not captured, timing differences (as-of date mismatch).

Solution: Capital statements often include unrealized gains/losses. Add NAV_ADJUSTMENT transactions to capture these non-cash changes. Verify all fees are recorded.

Bulk import partially failed

Cause: Some transactions in the bulk upload failed validation (date errors, duplicate entries).

Solution: Check the bulk import response for error details. Fix the failing transactions and re-upload them individually or in a new bulk request.

Variance analysis shows incorrect attribution

Cause: Baseline forecast not set, or comparing against wrong scenario.

Solution: Variance analysis compares actuals vs a baseline. Ensure you've set the correct baseline scenario (usually your original forecast when the fund launched).

Ready to Track Real Performance?

Now that you understand transactions and actuals, explore scenario modeling to create what-if projections and Monte Carlo simulations for risk analysis.