Skip to main content

Overview

Topograph’s extract financial data automatically from company annual statements. We analyze PDF documents and extracts key financial metrics into a structured, machine-readable format.

How It Works

When a financial statement document is processed:
  1. Document Classification - The AI first determines if the document is a financial statement
  2. Data Extraction - If identified as a financial statement, key metrics are extracted
  3. Structured Output - Data is returned in the extractedData.financialData field
Non-financial documents will not have the extractedData field populated.

Data Model

The structure for extracted data covers all major components of financial statements as presented below.

Top-Level Structure

{
  extractedData: {
    financialData: {
      // Metadata
      fiscalYear: FiscalYear;
      approvalDate: string | null;
      currency: string | null;
      accountingStandard: AccountingStandard;
      statementType: StatementType;

      // Financial sections
      incomeStatement: IncomeStatement;
      balanceSheet: BalanceSheet;
    }
  }
}

Metadata Fields

Fiscal Year

fiscalYear: {
  startDate: string; // Format: "YYYY-MM-DD"
  endDate: string; // Format: "YYYY-MM-DD"
}

Accounting Standard

  • "IFRS" - International Financial Reporting Standards
  • "French GAAP" - French Generally Accepted Accounting Principles
  • "US GAAP" - United States GAAP
  • "Swiss GAAP" - Swiss GAAP
  • "Lux GAAP" - Luxembourg GAAP
  • "Other" - Other accounting standards

Statement Type

  • "consolidated" - Group/consolidated financial statements
  • "simplified" - Individual/standalone statements

Income Statement

incomeStatement: {
  revenue: {
    amount: number | null; // Current period
    previousAmount: number | null; // Prior period
    localName: string; // Original term from document
  }
  depreciationAndAmortization: {
    amount: number | null;
    previousAmount: number | null;
    localName: string;
  }
  operatingIncome: {
    amount: number | null;
    previousAmount: number | null;
    localName: string;
    standardDefinition: string | null; // How it's calculated
    notes: string | null; // Additional context
  }
  netIncome: {
    amount: number | null;
    previousAmount: number | null;
    localName: string;
  }
}

Balance Sheet

The balance sheet is organized into two main sections.

Assets

assets: {
  fixedAssets: {
    total: {
      amount: number | null;
      previousAmount: number | null;
    }
    components: {
      tangible: {
        // Property, plant, equipment
        amount: number | null;
        previousAmount: number | null;
        localName: string;
      }
      intangible: {
        // Goodwill, patents, software
        amount: number | null;
        previousAmount: number | null;
        localName: string;
      }
      financialAssets: {
        // Long-term investments
        amount: number | null;
        previousAmount: number | null;
        localName: string;
      }
    }
  }
  currentAssets: {
    total: {
      amount: number | null;
      previousAmount: number | null;
    }
    components: {
      cashAndEquivalents: {
        amount: number | null;
        previousAmount: number | null;
        localName: string;
      }
      tradeReceivables: {
        // Accounts receivable
        amount: number | null;
        previousAmount: number | null;
        localName: string;
      }
      inventory: {
        amount: number | null;
        previousAmount: number | null;
        localName: string;
      }
      otherCurrentAssets: {
        amount: number | null;
        previousAmount: number | null;
        localName: string;
      }
    }
  }
}

Equity and Liabilities

equityAndLiabilities: {
  equity: {
    total: {
      amount: number | null;
      previousAmount: number | null;
    }
    components: {
      shareCapital: {
        amount: number | null;
        previousAmount: number | null;
        localName: string;
      }
      retainedEarnings: {
        amount: number | null;
        previousAmount: number | null;
        localName: string;
      }
      otherReserves: {
        amount: number | null;
        previousAmount: number | null;
        localName: string;
      }
    }
  }
  liabilities: {
    nonCurrent: {
      // Long-term (> 1 year)
      total: {
        amount: number | null;
        previousAmount: number | null;
      }
      components: {
        financialDebt: {
          amount: number | null;
          previousAmount: number | null;
          localName: string;
        }
        otherNonCurrentLiabilities: {
          amount: number | null;
          previousAmount: number | null;
          localName: string;
        }
      }
    }
    current: {
      // Short-term (< 1 year)
      total: {
        amount: number | null;
        previousAmount: number | null;
      }
      components: {
        tradePayables: {
          amount: number | null;
          previousAmount: number | null;
          localName: string;
        }
        currentFinancialDebt: {
          amount: number | null;
          previousAmount: number | null;
          localName: string;
        }
        otherCurrentLiabilities: {
          amount: number | null;
          previousAmount: number | null;
          localName: string;
        }
      }
    }
  }
}

AI Financial Analysis

In addition to extracting raw financial data, Topograph provides AI-powered analysis that includes insights, ratios, trends, and risk assessments.

Analysis Structure

analysis: {
  // Executive summary (2-3 sentences)
  summary: string;
  
  // Concise narrative analysis covering key points
  narrativeAnalysis: string;
  
  // Overall financial health score (1-10)
  healthScore: number;
  
  // Risk assessment
  overallRisk: "low" | "medium" | "high" | "critical";
  
  // Key financial ratios
  ratios: {
    currentRatio: number;     // Current Assets / Current Liabilities
    quickRatio: number;       // (Current Assets - Inventory) / Current Liabilities
    debtToEquity: number;     // Total Liabilities / Total Equity
    netProfitMargin: number;  // Net Income / Revenue (%)
    returnOnEquity: number;   // Net Income / Total Equity (%)
    revenueGrowth: number;    // YoY Revenue Change (%)
  }
  
  // Year-over-year trend directions
  trends: {
    revenueDirection: "increasing" | "stable" | "decreasing";
    profitabilityDirection: "improving" | "stable" | "declining";
    debtDirection: "increasing" | "stable" | "decreasing";
  }
  
  // Specific insights with risk levels
  insights: Array<{
    category: "liquidity" | "profitability" | "solvency" | "growth";
    title: string;
    description: string;
    riskLevel: "low" | "medium" | "high" | "critical";
    metricValue: string;
    recommendation?: string;
  }>
  
  // Key strengths identified
  strengths: string[];
  
  // Areas of concern
  concerns: string[];
}

Ratio Explanations

RatioFormulaGoodWatchRisk
Current RatioCurrent Assets / Current Liabilities> 1.51.0 - 1.5< 1.0
Quick Ratio(Current Assets - Inventory) / Current Liabilities> 1.00.5 - 1.0< 0.5
Debt to EquityTotal Liabilities / Total Equity< 1.01.0 - 2.0> 2.0
Net Profit MarginNet Income / Revenue> 10%5% - 10%< 5%
Return on EquityNet Income / Total Equity> 15%10% - 15%< 10%

Health Score

The health score ranges from 1 to 10:
  • 8-10: Excellent financial health
  • 6-7: Good, with some areas to monitor
  • 4-5: Fair, requires attention
  • 2-3: Weak financial position
  • 1: Critical condition

Important Notes

Data Quality

  • Null Values - Fields return null when data is missing, unclear, or not applicable
  • Numeric Values - All amounts are numeric values without currency symbols or thousand separators
  • Negative Values - Losses and deficits preserve the negative sign
  • Local Terms - The localName field presents the exact wording used in the source document

Multi-Language Support

The extraction works across multiple languages and accounting frameworks:
  • Recognizes financial terms in various languages
  • Maps local terminology to standardized fields
  • Preserves original terms in localName fields

Current Limits

  • Only processes PDF financial statements
  • Extraction accuracy depends on document quality and structure
  • Complex or non-standard formats may have reduced accuracy
  • Currently focuses on core financial metrics

Example Usage

When retrieving documents with financial statements:
POST https://api.topograph.co/v2/company
{
  "companyId": "your-company-id",
  "countryCode": "DE",
  "dataPoints": [],
  "documents": ["financial_statement_id"]
}
The response will include the extracted data and AI analysis:
{
  "documents": {
    "financialStatements": [
      {
        "id": "financial_statement_id",
        "extractedFinancialData": {
          "fiscalYear": {
            "startDate": "2023-01-01",
            "endDate": "2023-12-31"
          },
          "currency": "EUR",
          "accountingStandard": "IFRS",
          "statementType": "consolidated",
          "incomeStatement": { /* ... */ },
          "balanceSheet": { /* ... */ },
          "analysis": {
            "summary": "Company shows strong profitability with 15% revenue growth...",
            "healthScore": 7.5,
            "overallRisk": "low",
            "ratios": {
              "currentRatio": 1.52,
              "quickRatio": 1.17,
              "debtToEquity": 1.84,
              "netProfitMargin": 3.02,
              "returnOnEquity": 11.87,
              "revenueGrowth": 3.16
            },
            "trends": {
              "revenueDirection": "stable",
              "profitabilityDirection": "improving",
              "debtDirection": "decreasing"
            },
            "insights": [
              {
                "category": "profitability",
                "title": "Strong Profit Growth",
                "description": "Net income increased by 302% year-over-year...",
                "riskLevel": "low",
                "metricValue": "+302% YoY"
              }
            ],
            "strengths": [
              "Exceptional profitability growth",
              "Healthy liquidity position"
            ],
            "concerns": [
              "Trade receivables growing faster than revenue"
            ]
          }
        }
      }
    ]
  }
}

Feedback

This is a beta feature and we’re actively collecting feedback to improve extraction accuracy and expand coverage. Please share your experiences and suggestions on support channels or to your account manager.