- SECTIONS
The FactSet Fundamentals Report Builder API returns standardized income statement, balance sheet, and cash flow tables as endpoints. These endpoints return row labels, fiscal period headers, and corresponding values in one single API request, saving developers the burden of needing to individually request and format the hundreds of individual line items that we incorporate in our standardized statements.
The FactSet Fundamentals Report Builder API is tailor-made for application development so you can create your own financial statement visualization. Save time and money leveraging these valuable features:
- Dynamic Industry-Specific Statement – receive a dynamic template for 4 different industries (banks, financial, insurance, commercial) so you display relevant and balanced statement data. Line items and data are returned based on the company identifier, so you don’t need to identify the industry and determine the line items before you request data.
- Hierarchy of Line Items – provides the parent/child relationship between line items so data can be properly indented, collapsed, or suppressed per your display requirements.
- Flags for Main Line Items – automatically flags those line items that are most important to the statement (Sales, Net Income, Total Assets). This reserves you the freedom to style or highlight those items as you see fit without needing to identify those items yourself.
- Formatted Dates – fiscal period dates are returned in a display-friendly format and a raw date format. Utilize the formatted dates for display purposes and raw dates for any programmatic process or charting needs, preventing any additional post-process date formatting.
- Data Scaling – indicates the units different line items are returned in. With currency, shares, and per share values returning different units (i.e. billions, millions, actual), you can properly format data and notate your display without needing to manually map those line items.
- Flag for Restated Fiscal Periods – when viewing historical periods, automatically get a flag when prior fiscal periods have been retroactively restated based on M&A or accounting changes. With this flag, you can notate these periods in your display without needing to request separately and stitch this information together. You also have the option to request all non-restated data with a single report parameter.
- Data Updates – as details and coverage improve or change, you will automatically receive new line items and updated labeling, limiting the need to do any work on the consumer end.
FactSet Fundamentals Data
FactSet Fundamentals database provides current, comprehensive, and comparative information on securities in worldwide developed and emerging markets. Composed of annual and interim/quarterly data and detailed historical financial statement content, FactSet Fundamentals provides you with the information you need for a global investment perspective.
If you are also interested in data modeling or quantitative analysis, the FactSet Fundamentals Data API enables you to request data for individual line items with a unique metric parameter. If you want to utilize the Report Builder API and Data API together, the unique metric used as a parameter for the Data API is also returned as metadata on every row from the Report Builder API.
Technical Specs
The FactSet Fundamentals Report Builder API delivers data in a format that conforms to the row organized STACH 2.0 schema with a restriction on the metadata entries. Refer to STACH's documentation for more information about STACH, and the MetadataEntry schema in the schemas portion in the API definition for more information about the metadata restrictions.
This API is rate-limited to 20 requests/second per user.
const axios = require('axios');
const username = 'your_username';
const serial = 'your_serial';
const apiKey = 'your_API_key';
// E.g. https://api.factset.com/report/entity/v1/tree-table?id=FDS
const uri = 'your_api_uri';
axios.get(uri, {
auth: {
username: `${username}-${serial}`,
password: apiKey,
},
}).then(function(response) {
console.log('Success:', response.data);
}).catch(function (error) {
console.error('Error:', error);
});
/**
* The purpose of this class is to provide a sample snippet of converting a row organized STACH 2.0 formatted data
* to a simple 2D array table where hidden headers and columns are stripped off.
* Assumes that data is a valid row organized STACH 2.0 formatted data.
*
* Usage:
* const stachExtension = new StachExtension(data);
* console.table(stachExtension.tables[0]); // Assuming tables has at least one entry
*/
class StachExtension {
tables = [];
constructor(stachData) {
const tableEntries = stachData.data.tables;
const tableKeys = Object.keys(tableEntries);
tableKeys.forEach(key => {
this.tables.push(this.generateTable(tableEntries[key]));
});
}
generateTable(tableEntry) {
const table = [];
const rows = tableEntry.data.rows;
const columnDefinitions = tableEntry.definition.columns;
const headersDefinitions = tableEntry.headersDefinition.columns;
for (let rowIndex = 0; rowIndex < rows.length; rowIndex++) {
const row = [];
const cells = rows[rowIndex].cells;
// Skip hidden header rows
if (this.isHeaderRow(rows[rowIndex]) && this.isHidden(headersDefinitions[rowIndex])) {
continue;
}
for (let colIndex = 0; colIndex < cells.length; colIndex++) {
// Only push non-hidden column cells
if (!this.isHidden(columnDefinitions[colIndex])) {
row.push(cells[colIndex]);
}
}
table.push(row);
}
return table;
}
isHeaderRow(row) {
return row.rowType === 'Header';
}
isHidden(columnDefinition) {
return columnDefinition.isHidden;
}
}
v1
Summary
Initial release of the FactSet Fundamentals Report Builder API
Functionality Additions
- added income statement, balance sheet, and cash flow tables
Use these APIs to build similar application views in your websites or portals! The APIs give you the necessary business/display logic to replicate, though you will maintain the ability to enhance the stylization/interactions!
Below are some examples of Application views you can build. Click the link if you are entitled to a web workstation to view the full report!