openapi: 3.0.0
info:
title: FactSet Quant Factor Library API
version: 1.0.1
description: >
The FactSet FactSet Quant Factor Library (QFL) API helps to detect
investment themes across global equity markets, incorporate ideas into your
portfolio construction process, and transform raw data into actionable
intelligence. Over 2000+ items spanning Factor Groups in-
* Classification and Reference Data - Asset Data, Country, Industry, and Size
* Market - Liquidity, Market Sensitivity, Momentum, Technical, Volatility
* Core Fundamentals - Efficiency, Growth, Management, Profitability, Quality, Solvency, Value
* Macro and Cross Asset - Commodity, FX Sensitivity, Debt, Economic
* Alternative - Analyst Sentiment, Corporate Governance, Crowding, Insider Activity.
termsOfService: http://www.factset.com/api/terms.html
contact:
name: FactSet Research Systems
email: [email protected]
url: http://www.factset.com/api
license:
name: License Information
url: http://www.factset.com/api/license.html
servers:
- url: https://api.factset.com/content
description: Production Server
security:
- BasicAuth: []
tags:
- name: Factset Quant Factor Library
paths:
/factset-quant-factor-library/v1/factors:
get:
summary: Factset Retrieves Quant Factors for a small list of ids.
description: >
Retrieves Quant Factors for a small list of ids. Request an array of
specific Factors, or fetch all factors within a Factor Group. Use the
`library` endpoint to return a full list of available Factors, Factor
Groups, and related meta data.
tags:
- Factset Quant Factor Library
operationId: getFactors
parameters:
- $ref: '#/components/parameters/ids'
- $ref: '#/components/parameters/factors'
- $ref: '#/components/parameters/factorGroups'
- $ref: '#/components/parameters/startDate'
- $ref: '#/components/parameters/endDate'
- $ref: '#/components/parameters/frequency'
responses:
'200':
description: Factor Response Object
content:
application/json:
schema:
$ref: '#/components/schemas/factorsResponse'
examples:
Specific Factors:
$ref: '#/components/examples/allMomentumFactors'
'400':
$ref: '#/components/responses/400'
'401':
$ref: '#/components/responses/401'
'403':
$ref: '#/components/responses/403'
'415':
$ref: '#/components/responses/415'
'500':
$ref: '#/components/responses/500'
post:
summary: Factset Retrieves Quant Factors for a large list of ids.
description: >
Retrieves Quant Factors for a large list of ids. Use the `library`
endpoint to return a full list of available Factors, Factor Groups, and
related meta data.
tags:
- Factset Quant Factor Library
operationId: getFactorsForList
requestBody:
description: Request Body for requesting a list or group of Factors and ids.
content:
application/json:
schema:
$ref: '#/components/schemas/factorsRequest'
required: true
responses:
'200':
description: Factor Response Object
content:
application/json:
schema:
$ref: '#/components/schemas/factorsResponse'
examples:
Specific Factors:
$ref: '#/components/examples/allMomentumFactors'
'400':
$ref: '#/components/responses/400'
'401':
$ref: '#/components/responses/401'
'403':
$ref: '#/components/responses/403'
'415':
$ref: '#/components/responses/415'
'500':
$ref: '#/components/responses/500'
/factset-quant-factor-library/v1/library:
get:
summary: Factset Retrieve a list of all available factors with relevant meta data.
description: |
Fetch the list of all available factors and related meta data.
tags:
- Factset Quant Factor Library
operationId: getFactorLibrary
parameters:
- $ref: '#/components/parameters/factorsLibrary'
- $ref: '#/components/parameters/factorGroups'
responses:
'200':
description: Available Factors and Related Meta Data
content:
application/json:
schema:
$ref: '#/components/schemas/libraryResponse'
examples:
Momentum Factor Library:
$ref: '#/components/examples/factorLibraryMomentum'
post:
summary: Factset Retrieves a list of all available factors with relevant meta data.
description: |
Fetch the list of all available factors and related meta data.
tags:
- Factset Quant Factor Library
operationId: getFactorLibraryList
requestBody:
description: Available Factors and Related Meta Data.
content:
application/json:
schema:
$ref: '#/components/schemas/libraryRequest'
required: true
responses:
'200':
description: Library Response Object
content:
application/json:
schema:
$ref: '#/components/schemas/libraryResponse'
examples:
Specific Factors:
$ref: '#/components/examples/factorLibraryMomentum'
components:
securitySchemes:
BasicAuth:
type: http
scheme: basic
parameters:
ids:
name: ids
in: query
required: true
schema:
type: array
items:
type: string
minItems: 1
maxItems: 3500
explode: false
description: >
Security or Entity identifiers. FactSet Identifiers, tickers, CUSIP and
SEDOL are accepted as inputs. **NOTE:** Fixed Income identifiers, ETFs,
and Options are not accepted in this endpoint. <p>***Maximum possible
ids limit** = 3500 per request*</p>
`NOTE:` *The maximum possible ids limit for a request will **decrease**
based on the size of the historical date range, the number of factors or
factorGroups requested.*
*<p> GET Method URL request lines are also limited to a total
length of 8192 bytes (8KB). In cases where the service allows for
thousands
of ids, which may lead to exceeding this request line limit of 8KB, its
advised for any requests with large request lines to be requested
through
the respective "POST" method.</p>*
examples:
oneId:
summary: Single id
value:
- FDS-US
multipleIds:
summary: Multiple ids
value:
- FDS-US
- IBM-US
- AAPL-US
factors:
name: factors
in: query
required: true
schema:
type: array
items:
type: string
minItems: 1
maxItems: 20
explode: false
description: >
Array of individual Factor Items requested. For a list of all available
factors and descriptions use the `/library` endpoint.***<p>factors
limit** = 20 individual factors per request*
example:
- rsi21D
- ulcer252D
- turbulence21D
factorsLibrary:
name: factors
in: query
required: false
schema:
type: array
items:
type: string
minItems: 1
maxItems: 20
explode: false
description: >
Array of individual Factor Items requested for the library endpoint. Use
the factorGroups parameter to pull for a full list of factors based off
the input group.
example:
- rsi21D
- ulcer252D
- turbulence21D
factorGroups:
name: factorGroups
in: query
required: false
schema:
type: array
items:
type: string
minItems: 1
maxItems: 5
description: >
Fetch a collection of Factors that fall within one of the below
"groups". For example, resting factorGroup=Momentum will return all
factors under the momentum group. To know which items are available in
each group use the /library endpoint.***<p>factor groups limit** = 5
factor groups per request*
### Classification and Reference
|Group|Descriptions|
|||
|Asset_Data|Easily input security-level metadata into your quantitative
research process. Common metrics used include Days Since Report, Days to
Report, ADR Flag, and Minimum Lot Size. Integrate variables from FactSet
Reference, FactSet Fundamentals, and FactSet Estimates databases to
impose portfolio constraints and access general reference data.|
|Country|Evaluate securities based on the countries in which they have
the highest exposure. Analyze company-level exposures across various
countries and measure how concentrated a firm’s business is within their
countries of operation. Metrics are derived from FactSet Reference and
FactSet Geographic Revenue Exposure (GeoRev) databases and include
Country Exposure, Country of Incorporation, and Country of Risk.|
|Industry|Classify securities based on the industries in which they
generate the majority of their revenues. Incorporate variables from the
FactSet Revere Business and Industry Classification System (RBICS)
database to measure how concentrated a firm’s business is within the
industries they operate and across various sub-sectors. Common metrics
include Industry Classifications, Industry Exposures, and Industry
Concentration.|
|Size|Assess how large or small a company is relative to industry peers.
Create size buckets and clarify the systematic portion of company
returns using variables from FactSet Prices, FactSet RBICS, FactSet
Fundamentals, and FactSet Estimates. Common metrics include Size
Classification, Enterprise Value, and Market Share.|
### Market Factors
|Group|Descriptions|
|||
|Liquidity|Assess how investible a security is, as well as the potential
market impact of a trade using signals built off pricing and volume data
from FactSet Prices. Integrate factors as components into your alpha
models to evaluate systematic risk or input them into your portfolio
construction models to dictate how much of an asset can be bought or
sold based on liquidity levels. Common metrics include Average Dollars
Traded, Share Turnover, and Bid Ask Spread.|
|Market Sensitivity|Clarify the common variations in stock returns
attributable to the performance of their local market indices. Leverage
regressions performed between security-level and market-index returns
across different return horizons and methodologies. Metrics are derived
from FactSet Prices and include Beta R-Squared, Up Market Beta, and Down
Market Beta.|
|Momentum|Analyze the historical momentum of a security and uncover how
each underlying data item, calculation, and horizon can be meaningful in
different situations. Metrics are derived from FactSet Prices and
include 52W Position, Return Momentum, and Velocity.|
|Technical|Forecast the direction of future price movements based on
historical market data and leverage heuristic or pattern-based signals
from FactSet Prices. Common metrics include Average True Range, Ulcer
Performance Index, and Money Flow Volume.|
|Volatility|Measure the uncertainty in asset price movements with
indicators from the FactSet Prices database. Capture various forms of
uncertainty by employing statistical calculations on security
performance data. Common metrics include Return Volatility,
Semivariance, and Turbulence.|
### Core Fundamentals
|Group|Descriptions|
|||
|Efficiency|Leverage core financial data to determine how effectively a
company uses its assets, collects payments, and operates its business.
Most variables are measured as turnover ratios and include changes over
time to provide transparency into the efficiency of each business
process. Metrics are derived from FactSet Fundamentals and FactSet
Estimates and include Asset Turnover, Receivables Turnover, and Cash
Conversion Cycle|
|Growth|Measure a company’s ability to grow faster than its peers.
Compare the future expected growth of a company with its historical
growth and view growth rates adjusted for stability. Integrate variables
from FactSet RBICS, FactSet Fundamentals, and FactSet Estimates to
analyze growth rates over multiple horizons including Market Share,
Sales, and EPS Growth|
|Management|Gain insight into how management finances their business and
the decisions they make that impact the core financial statements. These
choices are reflected in changes to total debt or equity, the overall
size of the balance sheet, and decisions around the accounting methods
used. Metrics are derived from FactSet Fundamentals and FactSet
Estimates and include Capital Expenditures (CAPEX) Growth, Equity
Buyback Ratio, and Depreciation & Amortization Variability|
|Profitability|Evaluate a company’s ability to generate income relative
to its revenue or balance sheet metrics. Identify lucrative businesses
relative to their industry, region, and size profile. Metrics are
derived from FactSet Fundamentals and FactSet Estimates and include
Return on Assets, Return on Invested Capital Change, and Return on Total
Equity
|Quality|Understand the overall financial health and quality of a
company’s business. Use historical data from FactSet Fundamentals to
analyze balance sheet health, stability of earnings and profit margins,
variability in cash flows, and trends that look beyond headline
financial metrics. Common metrics include Cash Earnings Ratio
Variability, Revenue Stability, and Accruals Ratios. Composite quality
scores (i.e., the Piotroski F-Score, Beneish M-Score, and Altman
Z-Score) and their underlying components are also available as
individual metrics.|
|Solvency|Measure a company’s ability to meet their short- and long-term
financial obligations and determine the degree of leverage employed to
run their business. Incorporate financial ratios from FactSet
Fundamentals and FactSet Estimates to quantify liability or debt
obligation relative to earnings, cash flows, equities, or items from the
asset side of the balance sheet. Common metrics include Current Ratio,
Current Asset Liquidity, and Debt to Equity Change.|
|Value|Quickly determine how cheap or expensive a company is based on
common security-level characteristics from FactSet Prices, FactSet
Fundamentals, and FactSet Estimates. Apply factors as an intersection
between other factors for a more customized analysis, such as finding
the cheapest stocks among the highest quality companies. Common metrics
include Earnings Yield, Book to Price, and Revenue to Enterprise Value.|
### Macro and Cross-Asset
|Group|Descriptions|
|||
|Commodity|Quantify the impact movements in the commodity markets have
on equity prices. Metrics are derived from FactSet Prices and allow you
to measure company-level exposure to commodities such as Gold, Crude
Oil, Coffee, and Live Cattle.|
|FX_Sensitivity| Analyze security-level sensitivity to fluctuations in
the currency markets. Metrics are derived from FactSet Prices and allow
you to identify company exposures to currencies such as USD, EUR, JPY,
and CNY.
|Debt|Uncover details related to company debt through issuer-level
factor exposures. Use the FactSet Fixed Income Prices & Derived
Analytics database to aggregate metrics at the company level. Common
metrics include Effective Duration, Option Adjusted Spread, and Yield to
Worst.|
|Economic|Capture daily security exposures to leading economic indicator
forecasts. Leverage the Quant Factor Library’s detailed country exposure
model to attribute economic measures to individual companies. Metrics
are derived from FactSet Economic Estimates and include Real GPD Growth,
Industrial Production Growth, Core CPI Inflation, and Policy Rates.
### Alternative
|Group|Descriptions|
|||
|Analyst_Sentiment|Analyze a security’s outlook from the perspective of
a sell-side research analyst. Leverage consensus estimates data from the
FactSet Estimates database to analyze the directional change in estimate
revisions for various financial statement items and time periods. Common
metrics include Sales Estimate Revisions, Free Cash Flow Estimate
Revisions, and Robust Estimate Revisions.|
|Corporate_Governance|Identify companies with strong corporate
governance. Analyze the profile of a company’s management and board
based on tenure, diversity, compensation incentives, and more factors
from the FactSet People database. Common metrics include Management -
Average Age, Board - Activist Member, and Executives - Average Bonus.|
|Crowding|Understand the degree to which investors own, purchase, or
sell a security. View characteristics of each investor’s profile and
characterize crowding from passive, active, institutional, ETF, and
hedge fund investors. Use metrics from FactSet Ownership, FactSet
Prices, and FactSet Fundamentals to help identify potential effects of
crowding such as whether certain investor types are acquiring or
divesting from a given security. Common metrics include Active Buyer
Percent of Portfolio Change, ETF Days to Liquidate, and Hedge Fund
Percent Outstanding.|
|Insider_Activity|Measure the degree to which insiders own, purchase, or
sell their company’s stock. Analyze the sentiment of those with access
to material non-public information or determine how the amount of
insider ownership may impact management’s key business decisions.
Metrics are derived from FactSet Ownership and include Insider Percent
Outstanding, Insider Number of Buys, and Insider Seller Position Change.
|ESG|Analyze Environmental, Social and Governance (ESG) behavior, which
are aggregated and categorized into continuously updated, material ESG
scores to uncover risks and opportunities from companies. Truvalue Labs
focuses on company ESG behavior from external sources and includes both
positive and negative events that go beyond traditional sources of ESG
risk data.
explode: false
example:
- Momentum
- Technical
- Volatility
startDate:
name: startDate
in: query
required: true
schema:
type: string
description: >
The start date requested for a given date range in **YYYY-MM-DD**
format. Future dates (T+1) are not accepted in this endpoint.
example: '2020-11-30'
endDate:
name: endDate
in: query
required: true
schema:
type: string
description: >
The end date requested for a given date range in **YYYY-MM-DD** format.
Future dates (T+1) are not accepted in this endpoint. **NOTE:** The
input endDate must come AFTER the input startDate.
example: '2021-11-30'
frequency:
name: frequency
in: query
schema:
type: string
enum:
- D
- W
- M
- AM
- CQ
- AY
- CY
- ''
default: M
description: |
Controls the display frequency of the data returned.
* **D** = Daily
* **W** = Weekly, based on the last day of the week of the start date.
* **M** = Monthly, based on the last trading day of the month.
* **AM** = Monthly, based on the start date (e.g., if the start date is June 16, data is displayed for June 16, May 16, April 16 etc.).
* **CQ** = Quarterly based on the last trading day of the calendar quarter (March, June, September, or December).
* **AY** = Actual Annual, based on the start date.
* **CY** = Calendar Annual, based on the last trading day of the calendar year.
example: M
schemas:
factorsRequest:
title: Factors Request Body
description: Request object for requesting factors.
type: object
properties:
ids:
$ref: '#/components/schemas/ids'
factors:
$ref: '#/components/schemas/factorsParam'
factorGroups:
$ref: '#/components/schemas/factorGroupsParam'
startDate:
$ref: '#/components/schemas/startDate'
endDate:
$ref: '#/components/schemas/endDate'
frequency:
$ref: '#/components/schemas/frequency'
required:
- ids
- factors
- startDate
- endDate
factorsResponse:
type: object
title: Factors Response Object
properties:
data:
description: Array of factors objects
type: array
items:
$ref: '#/components/schemas/factors'
factors:
title: Factors Object
type: object
properties:
requestId:
description: Identifier that was used for the request.
type: string
example: TSLA-US
fsymId:
description: >-
Factset Regional Security Identifier. Six alpha-numeric characters,
excluding vowels, with an -R suffix (XXXXXX-R). Identifies the
security’s best regional security data series per currency. For
equities, all primary listings per region and currency are allocated
a regional-level permanent identifier. The regional-level permanent
identifier will be available once a SEDOL representing the
region/currency has been allocated and the identifiers are on
FactSet.
type: string
example: HTM0LK-R
date:
description: The as of date of the factors in YYYY-MM-DD format.
type: integer
example: 20210204
additionalProperties:
type: object
properties:
integer:
description: >-
Factors with an Integer Data Type. These include commonly Flags or
Indicators.
type: integer
example:
adrFlag: 1
text:
description: >-
Factors with a String Data Type. These include reference and
classification fields.
type: string
example:
countryOfRisk: US
number:
description: >-
Factors with a Number/Double data type. This is the most common
factor type, encompassing the pre-calculated factor values.
type: number
format: double
example:
rsi21D: 12.34
required:
- requestId
- fsymId
- date
libraryRequest:
title: Factors Request Body
description: Request object for requesting factors.
type: object
properties:
factors:
$ref: '#/components/schemas/factorsParam'
factorGroups:
$ref: '#/components/schemas/factorGroupsParam'
libraryResponse:
type: object
title: Library Response Object
properties:
data:
description: Array of library objects
type: array
items:
$ref: '#/components/schemas/library'
library:
title: Library Object
type: object
properties:
factor:
description: The Factor field that can be requested in the factors endpoint.
type: string
example: rsi21D
name:
description: The Name or Description of the Factor
type: string
example: 21D Relative Strength Index
factorGroup:
description: The Factor Group associated to the Factor.
type: string
example: Momentum
sdfName:
description: The Standard DataFeed name of the factor for use of mapping.
type: string
example: RSI_21D
formula:
description: The FactSet formula associated to the factor
type: string
example: QFL_RSI(0,21D)
tags:
description: Associated Tags regarding the factor for enhanced searching.
type: string
example: momentum,prices
format:
description: The data type of the factor, including integer, double, or string.
type: string
example: double
ids:
type: array
items:
type: string
minItems: 1
maxItems: 3500
description: >
The requested list of security identifiers. Accepted ID types include
Market Tickers, SEDOL, ISINs, CUSIPs, or FactSet Permanent Ids. * Make
Note - id limit of 3000 for defaults, otherwise the service is limited
to a 30 second duration. This can be reached when increasing total
number of metrics requested and depth of history. *
example:
- FDS-US
factorsParam:
type: array
items:
type: string
minItems: 1
maxItems: 20
description: |
List of Factors.
example:
- rsi21D
- ulcer252D
factorGroupsParam:
type: array
items:
type: string
minItems: 1
maxItems: 5
description: |
List of Factor Groupings to return all factors within the group.
example:
- Momentum
- Technical
startDate:
type: string
description: >
The start date requested for a given date range in **YYYY-MM-DD**
format. Future dates (T+1) are not accepted in this endpoint.
example: '2019-01-01'
endDate:
type: string
description: >
The end date requested for a given date range in **YYYY-MM-DD** format.
Future dates (T+1) are not accepted in this endpoint. **NOTE:** The
input endDate must come AFTER the input startDate.
example: '2019-12-31'
frequency:
type: string
enum:
- D
- W
- M
- AM
- CQ
- AY
- CY
- ''
default: D
description: |
Controls the display frequency of the data returned.
* **D** = Daily
* **W** = Weekly, based on the last day of the week of the start date.
* **M** = Monthly, based on the last trading day of the month.
* **AM** = Monthly, based on the start date (e.g., if the start date is June 16, data is displayed for June 16, May 16, April 16 etc.).
* **CQ** = Quarterly based on the last trading day of the calendar quarter (March, June, September, or December).
* **AY** = Actual Annual, based on the start date.
* **CY** = Calendar Annual, based on the last trading day of the calendar year.
example: D
errorResponse:
type: object
title: Error Response
properties:
status:
description: status
type: string
example: Bad Request
timestamp:
description: timestamp in YYYY-MM-DD HH:MM:SS.SSS
type: string
example: '2019-11-01 11:09:41.918'
format: date-time
path:
description: The Endpoint path {package}/version/{endpoint}
type: string
example: /factset-quant-factor-library/v1/factors
message:
description: The plain text error message
type: string
example: Validation Error
subErrors:
description: subErrors related to the error message. Null if not applicable.
type: object
properties:
object:
description: the operation ID
type: string
field:
description: Parameter Field Name
type: string
message:
description: Error message
type: string
rejectedValue:
description: Rejected Values in an Array
type: array
items:
type: string
responses:
'400':
description: >-
Bad Request. This can occur for several reasons. Please review the
"message" for more details.
content:
application/json:
schema:
$ref: '#/components/schemas/errorResponse'
examples:
Bad Request - Date Format:
$ref: '#/components/examples/badRequestDateFormat'
Bad Request - Missing Required Parameter:
$ref: '#/components/examples/badRequestRequiredParameter'
Bad Request - Future Date:
$ref: '#/components/examples/badRequestFutureDate'
Bad Request - Invalid Parameter:
$ref: '#/components/examples/badRequestInvalidParameters'
Bad Request - Malformed JSON:
$ref: '#/components/examples/badRequestMalformedJSON'
Bad Request - Read Timeout:
$ref: '#/components/examples/badRequestReadTimeout'
'401':
description: >-
Unauthenticated USERNAME-SERIAL. Ensure you are logged in and have
successfully generated an API KEY for the IP range you are connecting
from. For more help, select the **Report Issue** in the top right corner
of this Developer Portal specification card and choose Connectivity 401
or 403 Responses.
content:
application/json:
schema:
$ref: '#/components/schemas/errorResponse'
examples:
Bad Request - Date Format:
$ref: '#/components/examples/unauthenticated'
'403':
description: >-
The USERNAME-SERIAL attempted to request the endpoint is not authorized
to access. The request was a legal request, but the servier is refusing
to respond. Please reach out to FactSet Account Team for assistance with
authorization.
content:
application/json:
schema:
$ref: '#/components/schemas/errorResponse'
examples:
Bad Request - Date Format:
$ref: '#/components/examples/forbidden'
'415':
description: >-
Unsupported Media Type. This error may be returned when the caller sends
a resource in a format that is not accepted by the server. This can be
fixed by ensuring that Content-Type header is set to the correct value.
In this instance, "application/json" would be the appropriate value.
content:
application/json:
schema:
$ref: '#/components/schemas/errorResponse'
examples:
Bad Request - Date Format:
$ref: '#/components/examples/unsupportedMediaType'
'500':
description: Internal Server Error.
content:
application/json:
schema:
$ref: '#/components/schemas/errorResponse'
examples:
Internal Server Error - Not Writable:
$ref: '#/components/examples/notWritable'
Internal Server Error - General Exception:
$ref: '#/components/examples/generalException'
examples:
badRequestDateFormat:
summary: Bad Request - Date Format
description: >-
This bad request occurs when a request doesn't use the YYYY-MM-DD in the
date parameters. To resolve, convert your date to YYYY-MM-DD.
value:
status: Bad Re
# --- truncated at 32 KB (48 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/factset/refs/heads/main/openapi/quant-factor-library-openapi-original.yml