FactSet AI-Ready Data
Seamless Financial Data
- Category
- Data & Analytics
- Primary Subcategory
- Institutional Financial Data & Equity Research Platforms
Integration details
Description
FactSet Model Context Protocol (MCP) is an open, API-based standard designed to seamlessly connect financial data, analytics models, and applications across different platforms. By enabling smooth interoperability, MCP empowers investment teams to easily share insights, streamline workflows, and enhance collaboration regardless of their tools or technology stacks. With MCP, firms can integrate new solutions efficiently, drive innovation, and maximize the value of their financial operations—ensuring consistent, context-rich decision-making throughout the investment process.
- Integration type
- Plugin
- Verification status
- Not applicable
- Platform
- ChatGPT
- Primary Subcategory
- Institutional Financial Data & Equity Research Platforms
- Secondary Subcategories
- None listed
- Brand
- FactSet
- Access
- Account required
- First tracked
- 2026-08-25
- Tool count
- 23
- Geography
- US
The Primary Subcategory used for this profile’s headline score.
Other Subcategories where the Integration is listed.
Get alerts for FactSet AI-Ready Data
Get updates when FactSet AI-Ready Data’s Discoverability Score or category rank changes.
ChatGPT Plugin Discovery Score
ChatGPT Plugin discovery is coming soon
ChatGPT can surface a Plugin when it matches a user's request.Your Plugin Discovery Score measures how often yours appears.
No spam. Unsubscribe any time.
What discovery looks like

Competing in ChatGPT Institutional Financial Data & Equity Research Platforms
View Category23 tools agents can invoke
FactSet Banks Tool - Retrieve banking industry data across regulatory financials, performance, branches, and filings. **WHEN TO USE THIS TOOL:** - Bank/credit union regulatory financials (US, Canada, Australia) - UBPR performance ratios, peer group rankings - Branch/ATM locations and deposit market share - Country exposure, 10-D/UCC-1 filings, deposit rates - Form ADV AUM or FOCUS broker-dealer reports **Critical: DO NOT USE FactSet_Fundamentals OR FactSet_Metrics(data_products=['fundamentals']) FOR BANK-TYPE ENTITIES.** For any US/Canadian/Australian bank, bank holding company, credit union, or broker-dealer, this tool is the ONLY correct source for regulatory/supervisory figures (FR Y-9C, Call Report, UBPR, FOCUS, Form ADV) — including basic metrics like total assets, net income, or deposits for well-known banks (e.g. Bank of America, JPMorgan Chase). If FactSet_Metrics defaults to or returns data_products=['fundamentals'] for a bank entity, re-run it with data_products=['deep-sector-banks'] instead of accepting that result. **DATA COVERAGE:** 11,000+ US BHCs, 5,800+ credit unions, Canadian (OSFI) & Australian (APRA) banks. History from 1991. **METRIC DISCOVERY:** For data_types needing `metrics`, FIRST call FactSet_Metrics with data_products=['deep-sector-banks'] to find exact codes. **CRITICAL — MAPPING A DISCOVERED METRIC TO data_type:** Every metric FactSet_Metrics returns for data_products=['deep-sector-banks'] carries a `category` and `subcategory` field. These determine which data_type/endpoint the metric belongs to — do NOT assume data_type='financials' just because category='FINANCIALS'. Use this table: | category | subcategory | data_type | |-------------|-----------------------------------------------------------|--------------------| | FINANCIALS | US / CANADA / AUSTRALIA / CREDIT_UNION / INDUSTRY | financials | | FINANCIALS | SPECIALTY_FINANCE | aum OR focus — see below | | FILINGS | TEN_D_AUTO_LOAN / TEN_D_CREDIT_CARD | ten_d | | PERFORMANCE | UBPR | ubpr | | EXPOSURE | COUNTRY | country_exposure | **SPECIALTY_FINANCE is ambiguous by category/subcategory alone** — both `aum` and `focus` metrics share category='FINANCIALS', subcategory='SPECIALTY_FINANCE'. Disambiguate using the metric code PREFIX, not the category: codes prefixed `aum_*` → data_type='aum'; codes prefixed `FSF_*` → data_type='focus'. Never route a SPECIALTY_FINANCE metric to data_type='financials' — that endpoint requires `coverage` and will reject it. **ENDPOINTS (select via data_type):** 1. 'financials' — Regulatory statements. REQUIRES coverage (US/CANADA/AUSTRALIA/CREDIT_UNION) + metrics. 2. 'ubpr' — UBPR ratios & peer rankings. REQUIRES metrics. US banks only. 3. 'branches' — Branch/ATM locations. REQUIRES coverage (US/CREDIT_UNION/AUSTRALIA). No metrics. 4. 'country_exposure' — Form 009a exposure. REQUIRES metrics. 5. 'ten_d' — Form 10-D ABS reports. REQUIRES metrics. 6. 'ucc1' — UCC-1 filings. ids only; no metrics. 7. 'deposit_rates' — Deposit APY rates. no metrics. 8. 'aum' — Form ADV AUM (RIA). REQUIRES metrics. 9. 'focus' — FOCUS broker-dealer reports. REQUIRES metrics. 10. 'search_entities' — Entity lookup/resolution by ID or name. Optional reportType filter to limit results to entities with data for specific report types. No metrics. **DATE HANDLING:** startDate/endDate optional (YYYY-MM-DD) for all data_types. Omit both to get the most recent period. **IDENTIFIERS:** Accepts Market Tickers, SEDOL, ISIN, CUSIP, or FactSet Entity IDs (e.g. '000BDX-E', 'JPM-US') — but which entity level (parent Bank Holding Company vs. operating Banking Subsidiary) is actually covered depends on data_type/coverage. Passing the wrong level (e.g. a parent holding company ID where only the subsidiary is covered) returns no data. Use this table: | data_type / coverage | Identifier coverage | |-----------------------------------------------------|-----------------------------------------------------------------------------------------------| | financials, coverage='US' | Both Bank Holding Companies and Banking Subsidiaries | | financials, coverage='CREDIT_UNION' | Credit unions only, US, private — FactSet Entity IDs only (no public tickers/SEDOL/ISIN/CUSIP) | | financials, coverage='AUSTRALIA' | Both public and private Australian banks | | financials, coverage='CANADA' | Both public and private Canadian banks | | branches, coverage='US'/'CREDIT_UNION'/'AUSTRALIA' | Same identifier coverage as financials for that coverage value | | ubpr | Banking Subsidiaries only, US — do NOT pass the parent Bank Holding Company ID | | country_exposure | Both Bank Holding Companies and Banking Subsidiaries, US (relatively small universe) | | ten_d | Asset-backed trust entities only — NOT the subsidiary bank or holding company. For auto loan securitizations, the trust's ultimate parent may be non-bank finance company, not a bank (e.g. GM Financial, Toyota Financial, Ally Financial, Santander Consumer) — search/pass THAT finance company's own name/ID directly, don't look for a bank holding company above it (none exists), and don't shorten the finance company's name to its parent automaker (e.g. use 'GM Financial', not 'GM' — General Motors and GM Financial are separate legal entities) | | ucc1 | Banking Subsidiaries only, US | | deposit_rates | Banking Subsidiaries only, US — entity-level identifiers required, not parent company IDs | | aum | Private Registered Investment Advisors, US — FactSet Entity IDs only (no public tickers) | | focus | Private broker-dealers, US — FactSet Entity IDs only (no public tickers) | | search_entities | Resolves identifiers to FactSet Entity IDs; identifier level varies by reportType | **CRITICAL:** coverage is ONLY for financials/branches. metrics is NOT used for branches/ucc1/deposit_rates. **IDENTIFIER RESOLUTION WORKFLOW:** When a user query names a company by name (e.g., "JPMorgan Chase"), you must resolve it to the correct FactSet Entity ID level BEFORE calling other endpoints. The correct identifier level varies by data_type/coverage. **CRITICAL RULE:** For data_type IN {ubpr, ucc1, deposit_rates, ten_d, aum, focus}, ALWAYS call `search_entities` first (with the matching `reportType`) and use the resolved `factsetEntityId` in the downstream call — regardless of whether the user supplied a company name or a public ticker. A parent company's public ticker is NOT a valid identifier for these six data_types; only `financials`, `branches`, and `country_exposure` accept the parent-level ticker/entity ID directly. 1. **When the user provides only a name (no ticker/ID):** Call `search_entities` with the company name in `searchText` and the `reportType` matching the endpoint you'll eventually call (reportType is REQUIRED for search_entities). - Example: User asks "What is JPMorgan Chase Bank NA's UBPR return on assets?" - Call 1: search_entities with searchText="JPMorgan Chase Bank NA", reportType="UBPR" - Call 2: use the resolved entity ID in the ubpr endpoint 2. **When the user provides a ticker (e.g., JPM-US, BAC-US):** - Public company tickers CAN be used directly for: financials, branches, country_exposure - Public company tickers CANNOT be used for: ubpr, ucc1, deposit_rates, ten_d, aum, focus — these require an entity ID that differs from the parent's public ticker (subsidiary bank, asset-backed trust, or private entity). Call search_entities with `ids=[<the ticker>]` and the matching `reportType` to resolve it first. 3. **When the user asks about private entities (credit unions, RIAs, broker-dealers) or asset-backed trusts:** - These ALWAYS require FactSet Entity ID resolution via search_entities - No public tickers exist for these entities - Example: User asks "What is Navy Federal Credit Union's total assets?" - Call 1: search_entities with searchText="Navy Federal Credit Union", reportType="FINANCIALS" - Call 2: use resolved FactSet Entity ID in financials endpoint with coverage="CREDIT_UNION" **search_entities parameters:** `reportType` is REQUIRED (destination endpoint you're resolving for). At least one of `ids` (parent ticker/entity ID) or `searchText` (partial/full name match) is REQUIRED — use `searchText` when there's no parent holding company/ticker to supply. Use the bank's overall/common name in `searchText` (e.g. "Chase", "Wells Fargo"), not a specific brand, product line, or business unit (e.g. NOT "Chase Auto", "Wells Fargo Advisors") — it's a substring match, so an overly narrowed name risks matching nothing or the wrong entity. **Mapping by reportType (for use in search_entities filter):** - UBPR → Banking Subsidiaries only, US, for use with ubpr - TEN_D → Asset-backed trust entities, for use with ten_d. For credit card trusts the ultimate parent is typically the bank/bank holding company itself, but for auto loan securitizations it's often a non-bank finance company (e.g. GM Financial, Ford Credit, Toyota Financial, Ally Financial, Santander Consumer) — search/resolve by that finance company's own name, not a bank, and not the automaker parent (e.g. "GM Financial", not "GM") - UCC1 → Banking Subsidiaries only, US, for use with ucc1 - DEPOSIT_RATES → Banking Subsidiaries only, US, for use with deposit_rates - AUM_RIA → Private Registered Investment Advisers, US, for use with aum - FOCUS → Private broker-dealers, US, for use with focus - FINANCIALS → Both Bank Holding Companies and Banking Subsidiaries (coverage-dependent), for use with financials - BRANCHES → Same identifier coverage as FINANCIALS, for use with branches - COUNTRY_EXPOSURE → Both Bank Holding Companies and Banking Subsidiaries, US, for use with country_exposure **RESPONSE FIELDS BY data_type:** - **financials**: `requestId` (string): Institution identifier as submitted in request; `entityProperName` (string): Institution legal name; `factsetEntityId` (string): FactSet entity identifier; `metric` (string): Metric code; `value` (number): Metric value; `description` (string): Metric description; `coverage` (string): Coverage type (US, CANADA, AUSTRALIA, CREDIT_UNION); `currency` (string): Currency ISO code; `fiscalEndDate` (string): Fiscal period end date in YYYY-MM-DD format (US, AUSTRALIA, CREDIT_UNION); `bankTypeDescription` (string): Bank type description (US only); `reportEndDate` (string): Report period end date in YYYY-MM-DD format (CANADA only); `reportPeriod` (string): Report period in M# format where # is month number (CANADA only, e.g., M1 for January); `reportDescription` (string): Standardized line item description from source report (AUSTRALIA, CREDIT_UNION); `report` (string): Report code (CREDIT_UNION only). - **ubpr**: `requestId` (string): Institution identifier as submitted in request; `entityProperName` (string): Institution legal name; `factsetEntityId` (string): FactSet entity identifier; `metric` (string): Metric code; `value` (number): Metric value; `description` (string): Metric description; `fiscalEndDate` (string): Fiscal period end date (YYYY-MM-DD); `currency` (string): Currency ISO code; `peerGroupName` (string): Peer group classification; `peerGroupRank` (integer): Percentile ranking within peer group (0-99). - **branches**: `requestId` (string): Institution identifier as submitted in request; `entityProperName` (string): Institution legal name; `factsetEntityId` (string): FactSet entity identifier; `coverage` (string): Coverage type (US, CREDIT_UNION, AUSTRALIA); `branchCount` (integer): Number of branches (US only); `totalDeposits` (number): Total deposits in thousands (US only); `depositMarketSharePct` (number): Deposit market share percentage (US only); `marketShareType` (string): Market share aggregation level (US only); `marketShareCode` (string): Geographic code - FIPS county, ZIP, or MSA code (US only); `locDesc` (string): Location description (US only); `branchType` (string): Branch type classification (US only); `branchSite` (string): Branch site name (CREDIT_UNION only); `atmSite` (string): ATM site name (CREDIT_UNION only); `isMainOffice` (boolean): Main office flag (CREDIT_UNION only); `hasMemberServices` (boolean): Has member services flag (CREDIT_UNION only); `hasAtm` (boolean): Has ATM on-site flag (CREDIT_UNION only); `hasDriveThru` (boolean): Has drive-thru service flag (CREDIT_UNION only); `addressId` (integer): Unique address identifier (CREDIT_UNION only); `siteType` (string): Type of site (CREDIT_UNION only); `locationCity` (string): City name (CREDIT_UNION, GLOBAL); `stateProvince` (string): US state or province code (CREDIT_UNION only); `locationPostalCode` (string): Postal/ZIP code (CREDIT_UNION, GLOBAL); `locationStreet` (string): Street address (CREDIT_UNION, GLOBAL); `isoCountry` (string): ISO country code (CREDIT_UNION, GLOBAL); `latitude` (number): Latitude coordinate (CREDIT_UNION, AUSTRALIA, GLOBAL); `longitude` (number): Longitude coordinate (CREDIT_UNION, AUSTRALIA, GLOBAL); `locationId` (integer): Unique location identifier (AUSTRALIA only); `serviceChannelType` (string): Type of service channel (AUSTRALIA only); `numServiceChannel` (integer): Number of service channels at location (AUSTRALIA only); `remotenessArea` (string): Remoteness classification (AUSTRALIA only); `sa2Code` (integer): Statistical Area Level 2 code - ABS (AUSTRALIA only); `state` (string): Australian state or territory full name (AUSTRALIA only); `address` (string): Full address (AUSTRALIA only). - **country_exposure**: `requestId` (string): Institution identifier as submitted in request; `entityProperName` (string): Institution legal name; `factsetEntityId` (string): FactSet entity identifier; `metric` (string): Metric code; `value` (number): Metric value; `description` (string): Metric description; `fiscalEndDate` (string): Fiscal period end date (YYYY-MM-DD); `currency` (string): Currency ISO code; `country` (string): ISO country code. - **ten_d**: `requestId` (string): Institution identifier as submitted in request; `entityProperName` (string): Institution legal name; `factsetEntityId` (string): FactSet entity identifier; `ultimateParentProperName` (string): Ultimate parent company name; `factsetUltParentEntityId` (string): Ultimate parent FactSet entity ID; `metric` (string): Metric code; `value` (number): Metric value; `description` (string): Metric description; `filingDate` (string): Form 10-D filing date (YYYY-MM-DD); `reportingMonth` (string): Month covered by report; `reportingYear` (integer): Year covered by report; `currency` (string): Currency ISO code. - **ucc1**: `requestId` (string): Institution identifier as submitted in request; `entityProperName` (string): Institution legal name; `factsetEntityId` (string): FactSet entity identifier; `vendorFilingId` (string): Vendor UCC-1 filing identifier; `debtorName` (string): Debtor name; `filingState` (string): State where filed; `effectiveDate` (string): Filing effective date (YYYY-MM-DD); `expirationDate` (string): Filing expiration date (YYYY-MM-DD). - **deposit_rates**: `requestId` (string): Institution identifier as submitted in request; `entityProperName` (string): Institution legal name; `factsetEntityId` (string): FactSet entity identifier; `asOfDate` (string): Rate effective date (YYYY-MM-DD); `currency` (string): Currency ISO code; `depositProduct` (string): Product type (e.g., Savings, Certificate of Deposit); `term` (string): Product term; `depositCategory` (string): Balance tier category (e.g., 'Up to 2500', '10000 to 100000'); `apyRate` (number): Annual Percentage Yield rate; `prevApyRate` (number): Previous Annual Percentage Yield rate; `nationalApyAvgRate` (number): National average Annual Percentage Yield rate; `apyAvgRate` (number): Average Annual Percentage Yield rate; `prevApyAvgRate` (number): Previous average Annual Percentage Yield rate; `minDeposit` (number): Minimum deposit amount; `maxDeposit` (number): Maximum deposit amount (0 indicates no maximum); `state` (string): Two-letter US state or territory code (ISO 3166-2:US); `onlineDesc` (string): Online availability indicator; `specialFlag` (integer): Special offer flag (1 indicates special promotional rate). - **aum**: `requestId` (string): Institution identifier as submitted in request; `entityProperName` (string): Institution legal name; `factsetEntityId` (string): FactSet entity identifier; `metric` (string): Metric code; `value` (number): Metric value; `description` (string): Metric description; `fiscalEndDate` (string): Fiscal period end date (YYYY-MM-DD); `filingDate` (string): Form ADV filing date (YYYY-MM-DD); `currency` (string): Currency ISO code; `reportType` (string): Report type (AUM). - **focus**: `requestId` (string): Institution identifier as submitted in request; `entityProperName` (string): Institution legal name; `factsetEntityId` (string): FactSet entity identifier; `metric` (string): Metric code; `value` (number): Metric value; `description` (string): Metric description; `fiscalEndDate` (string): Fiscal period end date (YYYY-MM-DD); `currency` (string): Currency ISO code; `reportType` (string): Report type (FOCUS). - **search_entities**: `requestId` (string): Identifier as submitted in request (ticker or entity ID). Null when the entity was matched via searchText without a submitted id.; `entityProperName` (string): Institution legal name; `factsetEntityId` (string): FactSet entity identifier — pass this into the `ids` field of the destination endpoint; `tickerRegion` (string): Regional ticker for the matching entity. Null when the entity has no public ticker.; `fsymRegionalId` (string): FactSet Symbology regional identifier. Null when the entity has no public ticker.; `startDate` (string): Date the relationship to the ultimate parent began (YYYY-MM-DD); `endDate` (string): Date the relationship to the ultimate parent ended (YYYY-MM-DD). Null indicates the relationship is currently active.; `factsetUltParentEntityId` (string): FactSet entity identifier of the ultimate parent; `factsetUltParentProperName` (string): Legal name of the ultimate parent; `reportType` (string): Echoes the requested reportType this entity was resolved for; `isoCountry` (string): ISO country code; `entityType` (string): Three-character FactSet entity type code (e.g. SUB=Subsidiary, TRU=Trust, HOL=Holding Company, PVT=Private Company).
FactSet Events Tool - Comprehensive corporate calendar event data. **CRITICAL**: MAXIMUM 365-DAY SPAN between startDateTime and endDateTime (calculated to the second, not calendar days). The API enforces: (endDateTime - startDateTime) <= exactly 365 days (31,536,000 seconds). The difference between start and end dates must not exceed 365 days. Make sure startDateTime and endDateTime are always set to 00:00:00 (midnight) instead of 23:59:59 to stay within limit. For future earnings release use ProjectedEarningsRelease. Examples: - startDateTime='2024-01-01T00:00:00Z', endDateTime='2024-12-31T00:00:00Z' PASS (exactly 365 days) - startDateTime='2024-01-01T00:00:00Z', endDateTime='2024-12-31T23:59:59Z' FAIL (365 days + 23:59:59 - FAILS) - startDateTime='2024-01-01T00:00:00Z', endDateTime='2025-12-31T23:59:59Z' FAIL (730 days - FAILS) **WHEN TO USE THIS TOOL:** - Earnings calls, investor meetings, conference schedules, corporate actions - "When is [company]'s earnings call?", "Upcoming events for [company]", "[Company] event calendar" - "Earnings schedule for [companies]", "Investor meetings this week/month", "Recent event changes" **CRITICAL: For queries like "When was [company]'s last earnings call?", use this tool BEFORE web search.** **DATA COVERAGE & SCOPE:** - Global corporate event calendar from November 1st, 2022 onwards - Earnings calls, investor meetings, conferences, corporate actions - Historical and future events (up to 365 days ahead) - Real-time schedule updates and modifications **EVENT TYPES:** Earnings, ConfirmedEarningsRelease, ProjectedEarningsRelease, SalesRevenueCall, SalesRevenueRelease, GuidanceCall, AnalystsInvestorsMeeting, ShareholdersMeeting, Conference, SpecialSituation, Split, Dividend **UNIVERSE TYPES:** - Tickers (recommended): Individual symbols, e.g. ['AAPL-US', 'MSFT-US'] - Index: Market index constituents, e.g. ['SP50'] - Etf: ETF holdings, e.g. ['SPY-US'] - AllCompanies: All available companies (use sparingly); symbols must also be 'AllCompanies' **DATE HANDLING — Two mutually exclusive approaches:** Option A (DateTime range): - startDateTime + endDateTime required together (ISO 8601 UTC, max 365 days) - Minimum: 2022-11-01T00:00:00Z | Format: YYYY-MM-DDTHH:MM:SSZ - Example: start='2024-01-01T00:00:00Z', end='2024-12-31T00:00:00Z' Option B (lastModifiedWithin): - SixHours/TwelveHours/Today/TwoDays/OneWeek/OneMonth - Returns events modified in period + scheduled within 45 days **LIMITATIONS:** - 365-day max date range per request; historical data from November 2022 only; future events max 365 days ahead - Contact info and webcast links may not be available for all events
Perform advanced financial screening on company data across multiple content sets (Factset Fundamentals, Factset Global Prices, Factset Entity, FactSet Estimates). Recommended workflow: Fields → Distinct Count (if needed) → Search. Operations: 1. **Fields** - Get available fields. Start here to discover all available fields for screening. 2. **Distinct Count** - Get enumeration values for a field to understand valid filter values. Supports pagination via limit (default 20, max 500) and offset (default 0). Use after Fields to explore enum field values before building filters. Call Fields endpoint to see the complete list of distinct-count supported fields. 3. **Search** - Search records matching filter criteria across content sets with sorting and pagination. Supports pagination via limit (default 20, max 500) and offset (default 0). Call Fields endpoint first, then optionally Distinct Count for enum fields, before building your search query. ## Date Specifications Use ONE of these three approaches per criterion: **Single Date (Point-in-Time Snapshot)** - Use `date` field: - Absolute: '2025-05-28', '5/2025', '2016/3F' (fiscal quarter), '2016' (fiscal year) - Relative: '-1AY' (1 year ago), '-1M' (1 month ago), '0M' (latest month-end) - When: Current snapshot, specific period, historical lookback **Date Range with Aggregation** - Use `dateRange` field with separate `period` field: - Periods: daily, weekly, monthly, quarterly, semi-annual, year-to-date, yearly, last-twelve-months - Operations: AVG, MAX, MIN, SUM - IMPORTANT: period and dateRange are SIBLINGS (separate fields at same nesting level) - [CORRECT]: dateRange: {startDate: '-12M', endDate: '0M', operation: 'AVG'}, period: 'monthly' - [INCORRECT]: dateRange: {startDate: '-12M', endDate: '0M', operation: 'AVG', period: 'monthly'} - When: Trends, averages, rolling metrics across time windows **Estimate Period** - Use `estimatePeriod` field (Factset Estimates only): - Annual: '1' (current year), '2' (next year), '2025' (specific fiscal year) - Quarterly: '1'-'5' depending on the estimate type - When: Forward-looking estimates, consensus forecasts **ContentSet & Date Compatibility:** - Factset Fundamentals: Use `date` (single) or `dateRange` (time-series) - Factset Estimates: Use `estimatePeriod` for forecasts OR `date` for historical snapshots - Factset Entity: Typically no date needed (non-temporal data) **Common Mistakes to Avoid:** - Do NOT use both `date` and `dateRange` on the same criterion - Do NOT use `estimatePeriod` with `dateRange` (mutually exclusive) - Use relative dates ('-1AY') for rolling/periodic queries without hardcoding dates - Use aggregation (period + operation) when comparing metrics across different time buckets
FactSet Debt Capital Structure Tool - Analyze debt structure, instruments, and liquidity for public companies. **WHEN TO USE:** This is the authoritative source for a company's debt figures. Prefer this tool over the general fundamentalstool for any question about short-term debt, long-term debt, gross/total debt, net debt, revolvers, term loans, bonds, secured/unsecured or seniority breakdowns, rate type (fixed/floating), or facility liquidity. **ROUTING BY QUERY TYPE:** - 'summary' (/details-summary): For SNAPSHOT of debt totals at a specific date → "debt totals on 2024-12-31", "Q2 2024 short-term vs long-term debt", "annual debt summary" → Requires: ids + start_date + periodicity (ANN or QTR only) - 'details' (/details): For INDIVIDUAL DEBT INSTRUMENTS with seniority, coupon, maturity over time → "list all bonds", "show instruments by seniority", "get instrument details with history" → Requires: ids + periodicity (ANN or QTR) + date (YYYY-MM-DD) - 'totals' (/dcs-totals): For SPECIFIC METRICS OVER TIME with flexible frequency → "total debt trend 2022-2024", "monthly net debt", "quarterly short-term debt" → Requires: ids + start_date + metrics + frequency (D/W/AM/AQ/AY). end_date optional. - 'liquidity' (/liquidity): For REVOLVER/CREDIT FACILITY DETAILS AND AVAILABILITY → "available revolver capacity", "borrowing base limits", "short-term liquidity" → Requires: ids + start_date + metrics + term (SHORT_TERM or LONG_TERM) **DATE HANDLING (applies to start_date for summary/liquidity and date for details):** These are POINT-IN-TIME as-of dates. Map the user's phrasing to the reporting-period END date - do NOT use January 1st or a range start for a snapshot: - "year-end 2025" / "FY2025" / "fiscal year 2025" / "annual 2025" / "entering 2026" → 2025-12-31, periodicity ANN - "Q1 2025" → 2025-03-31, "Q2 2025" / "mid-2025" / "H1 2025" → 2025-06-30, "Q3 2025" → 2025-09-30, "Q4 2025" → 2025-12-31 (with periodicity QTR) - "as of <date>" → that exact date - "right now" / "current" / "currently" / "latest" / "available today" → today's date For 'totals' (a time series), start_date is the RANGE START; for "over the last N years" use N years before today as start_date and today as end_date. **PERIODICITY:** ANN for annual / year-end / full-year requests; QTR only for a named quarter or explicit quarter-end. ONLY ANN or QTR are accepted (never LTM, SEMI, etc.). For sub-annual series (daily/weekly/monthly) use 'totals' with frequency. **LIQUIDITY METRICS (important):** Use the generic total_revolver_amount_avail_debt for revolver availability and set the `term` parameter (SHORT_TERM or LONG_TERM) to select the short-term vs long-term view. Do NOT swap in total_st_revolver_amount_avail_debt / total_lt_revolver_amount_avail_debt just because the user says "short-term" or "long-term" - keep the generic metric and change `term` instead. Add total_st_borrowing_base_debt when borrowing base is requested. **METRIC SELECTION (totals):** - For convertible debt amounts use total_convertible_debt (not total_convertible_flag_debt). - total_perpetual_flag_debt / total_non_recourse_flag_debt / total_defaulted_flag_debt are the only metrics for those categories (perpetual, non-recourse/asset-backed/project, defaulted). - Do NOT call FactSet_Metrics to look up metric codes for calling this tool; the codes above are standardized. **BATCHING:** When comparing multiple companies, pass all identifiers in a single call (e.g. ids=['BA-US','LMT-US']) rather than making one call per company. **CURRENCY / FX:** 'summary', 'details', and 'totals' accept an optional `currency` parameter (ISO code, e.g. USD, EUR, GBP) that converts returned values into that currency. Omit it to get each company's native reporting currency (default behavior, equivalent to LOCAL) - only set it when the user explicitly asks for figures in a specific currency. The 'liquidity' endpoint does NOT support a currency parameter: for liquidity figures in another currency, retrieve the native values here and separately call FactSet_ForeignExchangeRates for the appropriate pair (e.g. ids=['USDEUR'], data_type=spots) over the same dates, then convert. Do not attempt currency conversion within this tool for liquidity. **DATA AVAILABILITY:** Historical back to 2006. No interim/most-recent endpoint: for the latest data use 'details' or a snapshot with the most recent date available (today's date for "current" requests).
FactSet Entity Tool - Comprehensive entity reference and relationship data. **WHEN TO USE THIS TOOL:** - Entity identification and reference information (supports both public and private identifiers) - Ultimate parent and credit parent relationships - Corporate structure and subsidiary analysis - Related securities (equity and debt instruments) **ENTITY REFERENCE (/entity-references):** Use Case: Entity profiles with parent relationships and business details Returns: Company name, Ultimate Parent ID & name, Credit Parent ID, parent equity ID, entity type flags, website, incorporation details, country/risk info, business description, contact info, headquarters address, investor relations info Best For: Entity identification, parent company research, corporate structure analysis Example: "What is Apple's ultimate parent?" → data_type='entity_reference', ids=['AAPL-US']
Fetch analyst estimates, consensus, segments, guidance, ratings, and surprise data. **CRITICAL PIT RULE:** For historical estimates, startDate AND endDate are ALWAYS required. Omitting both returns only the most recent snapshot — NOT Point-in-Time data. **WHEN TO USE THIS TOOL:** - Analyst estimates, forecasts, or consensus data - Forward-looking metrics (EPS, revenue, EBITDA forecasts) - Analyst ratings and buy/hold/sell recommendations - Earnings surprise (actual vs estimate beat/miss) - Segment-level estimates (product/business lines, geographic regions) — consensus across analysts - Company guidance and projections **DATA COVERAGE:** 16,000+ companies, 90+ countries. History from 1999 (Europe 1997). Consensus window: 100 days. **CRITICAL:** Estimates metrics are NOT prefixed with FF_ (use SALES, EPS, PRICE_TGT). Fundamentals use FF_ prefix. Call the metrics endpoint first if unsure. **ENDPOINTS (select via estimate_type):** 1. 'consensus_fixed' — Forecasts for specific fiscal periods. Use fiscalPeriodStart/End (YYYY or YYYY/FQ). CRITICAL: Cannot mix with relativeFiscal params. 2. 'consensus_rolling' — Forecasts for relative periods (FY1, next year). Use relativeFiscalStart/End. CRITICAL: relativeFiscalEnd must be >= relativeFiscalStart. 3. 'surprise' — Actual vs estimate comparison. startDate+endDate REQUIRED. Returns surpriseAmount, surprisePercent, before/after values. 4. 'ratings' — CONSENSUS buy/hold/sell counts. For rating trends add startDate/endDate. No metrics. Returns buyCount, holdCount, sellCount. 5. 'segments' — CONSENSUS segment estimates by product/geography. DEFAULT for "segment revenue", "operating segments", "business line/region" queries. Returns all segments automatically. segmentType=BUS/GEO. Use relativeFiscalStart/End or fiscalPeriodStart/End. 6. 'guidance' — Company-provided forward guidance. Specify periodicity (ANN=fiscal year, QTR=quarterly). Returns guidanceMidpoint, guidanceLow, guidanceHigh. **SPECIAL CASE — PRICE_TGT:** Use consensus_rolling with relativeFiscalStart=0, relativeFiscalEnd=0. For single-date snapshot, set startDate=endDate. Do NOT use frequency with single-date snapshots. **DATE HANDLING:** - consensus_fixed/rolling, segments, guidance, ratings: startDate+endDate optional (omit for latest; provide both for PIT history) - surprise: startDate+endDate REQUIRED. For most recent, set both to today's date. - CRITICAL: Never provide only one of startDate/endDate. - Literal year/period (e.g. "2025", "Q4 2024", "FY2025") → use fiscalPeriodStart/End. - Relative phrasing ("next fiscal year", "next N years", "FY1", "FY2", "this quarter") → use relativeFiscalStart/End. - CRITICAL: If a call errors, RETRY with the same startDate/endDate/frequency — do NOT drop them. Dropping dates returns only the latest snapshot. **SNAPSHOT WINDOW (startDate/endDate):** Perspective dates, not filters on publication date. Consensus published before startDate appears if still active during window—expected behavior. **ID LIMITS:** Max 3,000 identifiers. Accepts: ticker (AAPL-US), CUSIP, SEDOL, ISIN, FactSet ID. **METRIC LIMITS:** Max 1 metric per request. NOT USED for ratings. **PERIODICITY vs FREQUENCY:** periodicity is the forecast horizon (which fiscal period analysts estimate); frequency is the sampling density of historical snapshots — it NEVER changes which period is estimated, only how often it is sampled. Example: periodicity=ANN + frequency=AM returns 12 monthly snapshots of the same FY estimate evolving. Use NTMA/LTMA (rolling 12M, no fixed year-end) for valuation multiples; use ANN/QTR for specific-period tracking. **RESPONSE FIELDS BY data_type:** - **consensus_fixed**: `requestId` (string | null): Identifier that was used for the request; `fsymId` (string | null): FactSet regional security identifier; `metric` (string | null): Financial statement metric that is estimated; `periodicity` (string | null): Reporting interval for the estimate: ANN, QTR, SEMI, LTMA, or NTMA; `fiscalPeriod` (integer | null): Fiscal period for the estimate record; `fiscalYear` (integer | null): Fiscal year for the estimate record; `fiscalEndDate` (string | null): Fiscal end date for the estimate record (YYYY-MM-DD); `relativePeriod` (integer | null): Fiscal period relative to estimate date; not applicable for consensus_fixed; `estimateDate` (string | null): Date of estimate (YYYY-MM-DD); `currency` (string | null): Currency code the data is adjusted to; `estimateCurrency` (string | null): Estimate currency of the requested security; `mean` (number | null): Mean of estimates in consensus calculation; `median` (number | null): Median of estimates in consensus calculation; `standardDeviation` (number | null): Standard deviation of estimates in consensus calculation; `high` (number | null): Highest estimate in consensus calculation; `low` (number | null): Lowest estimate in consensus calculation; `estimateCount` (integer | null): Count (NEST) of estimates in consensus calculation; `up` (integer | null): Number of upward revisions within the consensus window (default 100 days); `down` (integer | null): Number of downward revisions within the consensus window (default 100 days). - **consensus_rolling**: `requestId` (string | null): Identifier that was used for the request; `fsymId` (string | null): FactSet regional security identifier; `metric` (string | null): Financial statement metric that is estimated; `periodicity` (string | null): Reporting interval for the estimate: ANN, QTR, SEMI, LTMA, or NTMA; `fiscalPeriod` (integer | null): Fiscal period for the estimate record; `fiscalYear` (integer | null): Fiscal year for the estimate record; `fiscalEndDate` (string | null): Fiscal end date for the estimate record (YYYY-MM-DD); `relativePeriod` (integer | null): Fiscal period relative to estimate date; not applicable for consensus_fixed; `estimateDate` (string | null): Date of estimate (YYYY-MM-DD); `currency` (string | null): Currency code the data is adjusted to; `estimateCurrency` (string | null): Estimate currency of the requested security; `mean` (number | null): Mean of estimates in consensus calculation; `median` (number | null): Median of estimates in consensus calculation; `standardDeviation` (number | null): Standard deviation of estimates in consensus calculation; `high` (number | null): Highest estimate in consensus calculation; `low` (number | null): Lowest estimate in consensus calculation; `estimateCount` (integer | null): Count (NEST) of estimates in consensus calculation; `up` (integer | null): Number of upward revisions within the consensus window (default 100 days); `down` (integer | null): Number of downward revisions within the consensus window (default 100 days). - **ratings**: `fsymId` (string | null): FactSet regional security identifier; `estimateDate` (string | null): Date of estimate (YYYY-MM-DD); `buyCount` (integer | null): Number of Buy ratings in the consensus (100-day window); `overweightCount` (integer | null): Number of Overweight ratings in the consensus (100-day window); `holdCount` (integer | null): Number of Hold ratings in the consensus (100-day window); `underweightCount` (integer | null): Number of Underweight ratings in the consensus (100-day window); `sellCount` (integer | null): Number of Sell ratings in the consensus (100-day window); `ratingsNestTotal` (integer | null): Total number of ratings in the consensus calculation (100-day window); `ratingsNote` (number | null): Mean numerical rating score: 1=Buy, 1.5=Overweight, 2=Hold, 2.5=Underweight, 3=Sell; `ratingsNoteText` (string | null): Mean textual rating (Buy/Overweight/Hold/Underweight/Sell) derived from ratingsNote; `requestId` (string | null): Identifier that was used for the request. - **surprise**: `fsymId` (string | null): FactSet regional security identifier; `date` (string | null): Date for the data (YYYY-MM-DD); `currency` (string | null): Currency code the data is adjusted to; `estimateCurrency` (string | null): Estimate currency of the requested security; `metric` (string | null): Financial statement metric that is estimated; `statistic` (string | null): Method of calculation for the consensus statistic (e.g., MEAN); `periodicity` (string | null): Periodicity of the estimate record: ANN, QTR, SEMI, NTMA, or LTMA; `fiscalEndDate` (string | null): Fiscal end date for the estimate record (YYYY-MM-DD); `fiscalYear` (integer | null): Fiscal year for the estimate record; `fiscalPeriod` (integer | null): Fiscal period for the estimate record; `surpriseDate` (string | null): Date of the reported event (YYYY-MM-DD); `surpriseAmount` (number | null): Amount of difference between last consensus and actual; `surprisePercent` (number | null): Percent difference between last consensus and actual; `surpriseBefore` (number | null): Last consensus estimate before the event; `surpriseAfter` (number | null): Actual reported value after the event; `eventDescription` (string | null): Description of the reported event; `eventFlag` (integer | null): Event flag code: 0=results, 1=profit warning; `requestId` (string | null): Identifier that was used for the request. - **segments**: `requestId` (string | null): Identifier that was used for the request; `fsymId` (string | null): FactSet regional security identifier; `segmentType` (string | null): Type of segment requested: BUS (business/product) or GEO (geographic); `metric` (string | null): Financial statement metric that is estimated; `fiscalPeriod` (integer | null): Fiscal period for the estimate record; `fiscalYear` (integer | null): Fiscal year for the estimate record; `segmentLabel` (string | null): Specific label of the segment (e.g., 'iPhone'); `segmentLevel` (string | null): Segment hierarchy level: P=Parent or S=Subordinate; `fiscalEndDate` (string | null): Fiscal end date for the estimate record (YYYY-MM-DD); `estimateDate` (string | null): Date the estimates are as of (YYYY-MM-DD); `currency` (string | null): Currency used in consensus calculations; `estimateCurrency` (string | null): Estimate currency of the requested security; `mean` (number | null): Mean of estimates in consensus calculation; `median` (number | null): Median of estimates in consensus calculation; `standardDeviation` (number | null): Standard deviation of estimates in consensus calculation; `high` (number | null): Highest estimate in consensus calculation; `low` (number | null): Lowest estimate in consensus calculation; `estimateCount` (integer | null): Count (NEST) of estimates in consensus calculation; `up` (integer | null): Number of upward revisions within the consensus window (default 100 days); `down` (integer | null): Number of downward revisions within the consensus window (default 100 days). - **guidance**: `requestId` (string | null): Guidance identifier used as input in the request; `fsymId` (string | null): FactSet regional security identifier; `metric` (string | null): Financial statement metric that is estimated; `currency` (string | null): Currency code the data is adjusted to; `estimateCurrency` (string | null): Estimate currency of the requested security; `periodicity` (string | null): Reporting interval for the estimate: ANN, QTR, SEMI, LTMA, or NTMA; `consensusDate` (string | null): Perspective date representing the current analyst consensus as of today; `fiscalYear` (integer | null): Fiscal year for the estimate record; `fiscalEndDate` (string | null): Fiscal end date for the estimate record (YYYY-MM-DD); `relativePeriod` (integer | null): Fiscal period based on relationship to estimate date; `fiscalPeriod` (integer | null): Fiscal period for the estimate record; `guidanceDate` (string | null): Date guidance was issued (YYYY-MM-DD); `inputDateHigh` (string | null): Date FactSet collected the guidance high value (YYYY-MM-DD); `inputDateLow` (string | null): Date FactSet collected the guidance low value (YYYY-MM-DD); `inputDateHighTime` (string | null): Timestamp FactSet collected the guidance high value; `inputDateLowTime` (string | null): Timestamp FactSet collected the guidance low value; `guidanceMidpoint` (number | null): Central value in the projected financial guidance range; `guidanceLow` (number | null): Lower end of the projected financial guidance range; `guidanceHigh` (number | null): Upper end of the projected financial guidance range; `guidanceRange` (string | null): Span between the lowest and highest guidance values (e.g. '6450.00-6500.00'); `prevMidpoint` (number | null): Midpoint of the financial guidance range given in the prior period; `prevLow` (number | null): Low end of the financial guidance range given in the prior period; `prevHigh` (number | null): High end of the financial guidance range given in the prior period; `meanBefore` (number | null): Consensus value the day before the guidance was issued; `meanSurpriseAmt` (number | null): Difference between the meanBefore value and the guidance; `meanSurpriseAmtPercent` (number | null): Percentage difference between the meanBefore value and the guidance.
FactSet Fundamentals Tool - Comprehensive financial statements data. **MANDATORY WORKFLOW:** 1. ALWAYS call FactSet_Metrics FIRST before calling FactSet_Fundamentals - no exceptions, even for common metrics 2. Copy the EXACT metric code string(s) returned by FactSet_Metrics into the metrics parameter - do not paraphrase, abbreviate, or infer codes 3. Only after receiving a valid FactSet_Metrics response may you call FactSet_Fundamentals 4. Never call FactSet_Fundamentals with metric codes that were not explicitly returned in the current conversation's FactSet_Metrics response **DO NOT USE THIS TOOL FOR:** - Earnings comparisons to estimates ("beat", "miss", "surprise", "vs estimates") - Analyst forecast comparisons - use FactSet Estimates API instead **PERIODICITY — SET THIS BEFORE EVERY CALL, NO EXCEPTIONS:** - **User specifies a periodicity or fiscal dates** → use exactly that value, no fallback needed. - **User does NOT specify a periodicity or fiscal dates (i.e., "latest" / current data)** → you MUST execute this fallback sequence in order: 1. Call with `periodicity='QTR'` — always start here, no exceptions 2. If QTR returns empty → retry with `periodicity='SEMI'` 3. If SEMI returns empty → retry with `periodicity='ANN'` Return the first non-empty response. Do NOT skip straight to ANN. DO NOT use `periodicity=null`. The schema accepts null but null silently defaults to ANN and will miss quarterly/semi-annual reporters — always supply an explicit value. **DATES - CRITICAL:** - For queries with "last X" or temporal keywords: MUST include BOTH fiscalPeriodStart and fiscalPeriodEnd - Calculate: start = today - X period, end = today (e.g., "last 4 quarters" = 2025-02-26 to 2026-02-26) - For specific year: BOTH dates required (e.g., 2024 = 2024-01-01 to 2024-12-31) - Latest/current data ONLY: Omit both date parameters - Format: YYYY-MM-DD ONLY; never use '2024' or '2024/1F' **PERIODICITY:** - Options: ANN, ANN_R, QTR, QTR_R, SEMI, SEMI_R, LTM, LTM_R, LTMSG, LTM_SEMI, LTM_SEMI_R, YTD **METRICS:** Use FF_* codes (validate via FactSet_Metrics first); max 1,600 per request **EXAMPLES:** - Revenue (last 4 quarters): ids=['AAPL-US'], metrics=['FF_SALES'], periodicity='QTR', fiscalPeriodStart='2025-02-26', fiscalPeriodEnd='2026-02-26' - Balance sheet: ids=['IBM-US'], metrics=['FF_ASSETS', 'FF_LIAB', 'FF_SH_EQ'], periodicity='ANN' - Pre-calculated ratios: Check FactSet_Metrics for FF_DEBT_EQ, FF_ROE, FF_CURR_RATIO, etc. first **PRE-CALCULATED RATIOS (CHECK FIRST):** FF_DEBT_EQ, FF_CURR_RATIO, FF_QUICK_RATIO, FF_ROE, FF_ROE_DILUTED, FF_ROA, FF_EBIT_OPER_ROA, FF_ASSET_TURN, FF_PE, FF_ENTRPR_VAL_EBITDA_OPER, FF_EBIT_OPER_MGN, FF_EBITDA_OPER_MGN, FF_CCE_END **AUDIT CARD:** Each data item includes audit.card.link with verification URL. Display as: **[value](link)** - Make each number a clickable audit link. **RETURNS:** JSON with requestId, fsymId, metric, fiscalPeriod, fiscalYear, value, audit.card.link **ERROR HANDLING:** Invalid params/dates/metrics → Detailed error message with guidance **RESPONSE FIELDS BY data_type:** - **fundamentals**: `requestId` (string | null): Input identifier used for the request; `fsymId` (string | null): FactSet regional security ID; `metric` (string | null): Requested metric code, e.g. FF_SALES; `periodicity` (string | null): Reporting frequency of the returned period: ANN/ANN_R/QTR/QTR_R/SEMI/SEMI_R/CAL/LTM/LTM_R/LTMSG/LTM_SEMI/LTM_SEMI_R/YTD; `fiscalPeriod` (integer | null): Fiscal period number within the fiscal year; `fiscalYear` (integer | null): Fiscal year of the reported period; `fiscalPeriodLength` (integer | null): Length of the fiscal period in months; `fiscalEndDate` (string | null): Fiscal period end date (YYYY-MM-DD); `reportDate` (string | null): Date the period's financials were reported; `epsReportDate` (string | null): Date EPS was reported for the period; `updateType` (string | null): Preliminary or Final; `currency` (string | null): ISO currency code of the value; `value` (string | number | null): Metric value; numeric for most metrics, string for text-valued metrics.
FactSet Funds and ETF Tool - Comprehensive mutual funds and ETF data analysis. **CRITICAL:** Always call summary endpoint to retrieve fund names from FactSet data. Do NOT use LLM training knowledge for fund names. **WHEN TO USE THIS TOOL:** - Fund performance, returns, pricing (NAV) - Fund composition, holdings, and portfolio analysis - Fund costs, fees, expense ratios, and tax information - Fund flows, AUM, yields, distributions, and risk metrics - ETF scoring, analytics, geographic/sector/asset allocation PREFER this tool over FactSet_GlobalPrices for fund/ETF queries (SPY, QQQ, VOO, VTI, etc.). Geographic revenue: use data_type='portfolio_analytics' with analyticsType='GEOGRAPHIC_REVENUE'. **DATA COVERAGE:** US-listed and international mutual funds and ETFs (SPY, VOO, QQQ, VTI, etc.). **ENDPOINTS (select via data_type):** 1. 'summary' — **REQUIRED for fund names.** Fetches official fund name, country domicile, share class info. Call this first to verify fund identity. 2. 'prices' — Fund NAV data. startDate REQUIRED, endDate optional. 3. 'returns' — Time-series NAV returns. startDate+endDate REQUIRED. 4. 'returns_range' — Period return. startDate+endDate REQUIRED. 5. 'returns_snapshot' — Pre-defined horizons (YTD/1Y/3Y/5Y). date REQUIRED. 6. 'aum' — Assets under management. Dates optional. 7. 'flows' — Net inflows/outflows. Dates optional. 8. 'distributions' — Dividend/distribution history. Dates optional. 9. 'yields' — SEC yield (gross and net). 10. 'costs_fees' — Expense ratios, management fees, load fees. 11. 'taxes_and_risks' — Tax exposure, regulatory compliance. 12. 'risk_analytics' — Credit/rate risk analytics. riskType: CREDIT_RISK or RATE_RISK. 13. 'segments_and_structure' — Fund structure and classification. 14. 'portfolio_statistics' — Portfolio metrics. 15. 'portfolio_analytics' — Asset/sector/geographic/market cap breakdown. 16. 'financials_key_items' — Financial key items. 17. 'trading' — Trading and liquidity characteristics. 18. 'scoring' — ETF scores, grades, analyst recommendations. **DATE HANDLING:** - prices: startDate REQUIRED, endDate optional - returns/returns_range: startDate+endDate BOTH REQUIRED - returns_snapshot: date REQUIRED (not startDate/endDate) - aum/flows/distributions: dates optional - All others: NO date params **FIELD CATEGORIES — PICK CORRECTLY:** **AUM Fields** (fund size in $): fundLevelAUM, shareClassAUMReported, shareClassAUMActual → endpoint='/aum' Example: "How much AUM does VOO have?" **Performance/Return Fields** (price % gain): yearToDate, oneYear, oneMonth, return → endpoint='/returns/snapshot' (or '/returns' for single-date) Example: "What was the YTD return for SPY?" **Yield Fields** (annual income %): sec30DayYieldNet, sec30DayYieldGross → endpoint='/yields' Example: "What's the current SEC yield for HYG?" — NOT /returns **ID LIMITS:** Max 10 per request. Accepts: ticker (SPY, VOO), ISIN, CUSIP, FactSet ID. International: append -GB, -CA, -DE, etc. (e.g., XIU-CA). **CRITICAL PERCENTAGE INTERPRETATION:** Percent values are decimal fractions (0.05 = 5%). Multiply by 100 before displaying. Affected: costs_fees (medianTrackingDifferencePercent, maxUpsideDeviationPercent, maxDownSideDeviationPercent), trading (averageSpreadPercent, marketHoursOverlapPercent).
Perform advanced financial screening on funds and ETFs. Recommended workflow: Fields → Distinct Count (if needed) → Search. Operations: 1. **Fields** (data_type='fields') - Get available fields for specified content sets. IMPORTANT: contentSets (array) is required. Example: ['Factset Funds']. 2. **Distinct Count** (data_type='distinct_count') - Get enumeration values for a field to understand valid filter values. REQUIRED: contentSet (singular string), fieldName. Supports pagination via limit/offset. Example: contentSet='Factset Funds', fieldName='assetClass'. Use this to discover enum field values before building filters. 3. **Search** (data_type='search') - Search records matching filter criteria across content sets with sorting and pagination. REQUIRED: contentSets (array). Example: ['Factset Funds']. Optional: filters, sort, limit (default 20, max 500), offset (default 0). NOTE: Search results return identifiers only (ticker_region, instrument_name, fsym_id, fsymId). Numeric field values (expenseRatio, shareClassAUMReported, etc.) are NOT returned. To retrieve metric values for matched funds, use fsym_id with a separate data fetch API. IMPORTANT parameter distinctions: - data_type='fields' → use contentSets (array) - data_type='distinct_count' → use contentSet (singular string) + fieldName - data_type='search' → use contentSets (array) Filter criteria (search operations): Each criterion MUST include a contentSet field matching the content set the field belongs to (e.g., 'Factset Funds'). Example filter structure: [ { "criteria": [ {"contentSet": "Factset Funds", "fieldName": "assetClass", "operator": "EQ", "values": ["Fixed Income"]}, {"contentSet": "Factset Funds", "fieldName": "shareClassAUMReported", "operator": "GT", "values": ["10000000000"]} ] } ] Operators: EQ, NE, CT, NOT_CT, IN, NOT_IN, LT, LTE, GT, GTE. All values must be strings, including numeric comparisons. IMPORTANT: Use the 'fields' endpoint first to discover each field's unit type (basis points, percent, string, ISO codes, etc.). For enum fields, use distinct_count to discover valid values before filtering.
FactSet GeoRev Tool - Comprehensive geographic revenue exposure analysis. **WHEN TO USE THIS TOOL:** - Geographic revenue, revenue by region/country, or geographic exposure - "Where does [company] make its revenue?" or "geographic breakdown" - Revenue exposure analysis by region or country - Geographic risk assessment (geopolitical, macroeconomic impacts) - Portfolio-level geographic exposure aggregation - Comparing revenue footprints vs. country of domicile - Questions about revenue in specific countries or regions Do NOT use for PRODUCT/BUSINESS segment data - use FactSet Fundamentals Segments instead. **DATA COVERAGE:** 49,000+ companies, ETFs, mutual funds globally (Russell 3000 + MSCI ACWI). U.S. from 2003, Non-U.S. from 2007. ~300 countries. Fiscal annual, updated daily. **ENDPOINTS (select via data_type):** 1. 'regions' — Revenue by Super-Regions/Regions/Areas (hierarchical). default: returns all SUPER_REGIONS. Max 15 regionIds. NOT USED: countryIds. 2. 'countries' — Country-level revenue (most granular). default: returns ALL countries. Max 300 countryIds. NOT USED: regionIds. **ROUTING GUIDE:** - General geographic revenue (no specific countries named) → data_type='regions', regionIds=['SUPER_REGIONS'] - Breakdown by each individual region → data_type='regions', regionIds=['REGIONS'] - Breakdown by area → data_type='regions', regionIds=['AREAS'] - Specific countries named → data_type='countries', countryIds=['CN', 'US', ...] - All countries (full footprint) → data_type='countries', countryIds=['ALL'] (pass explicitly) **REGION ID GROUPS:** SUPER_REGIONS (7 total), REGIONS (15), AREAS (31) **SUPER REGIONS:** R1=Africa & Middle East, R101=Americas, R170=Asia/Pacific, R274=Europe, R349=Non-Disclosed, R354=No Operations, R393=Non-Geographic **REGIONS:** R2=Africa, R68=Middle East, R102=Latin America, R164=North America, R171=Asia, R233=Oceania, R275=EU, R314=Non-EU **AREAS (examples):** R167=US & Canada, R172=Far East, R219=Indian Region, R234=AU & NZ, R276=Eastern EU, R286=Northern EU, R292=Southern EU, R298=Western EU **DATE HANDLING:** - startDate+endDate: OPTIONAL (defaults to latest fiscal period). YYYY-MM-DD. Future dates not accepted. - For multi-year queries: use ONE call with a date range + frequency='FY' rather than separate calls per year. **ID LIMITS:** Max 300 per request. Accepts: ticker (AAPL-US), CUSIP, SEDOL, ISIN, FactSet ID, Fund ID. **CONFIDENCE METRICS:** Confidence 0.5–1.0 (1.0=actual reported). Certainty Rank 1–80 (80=reported). Certainty Class A–E (A=highest). Revenue values are in MILLIONS of the specified currency.
FactSet Global Prices Tool - Comprehensive market pricing and corporate actions data. **WHEN TO USE THIS TOOL:** - Stock prices, OHLCV data, or market pricing - Returns, performance analysis ("how did X perform") - Dividends, stock splits, corporate actions - Shares outstanding, share counts, dilution analysis, or market capitalization - Global equities: 90+ countries, end-of-day data from 2006 Do NOT default to web search. **CRITICAL: INDEX IDENTIFIERS NOT SUPPORTED** — does NOT accept SP50, SP500, SPX, or any market index. Use individual security identifiers only. **ENDPOINTS (select via data_type):** 1. 'prices' — OHLCV data. startDate REQUIRED, endDate optional. Params: frequency, calendar, currency, adjust, fields. PRICE FIELD SEMANTICS: Each row's `date` is a specific trading day. All fields are values AS OF that exact date — NOT aggregates over a range. When frequency is non-daily (W, M, AM, AQ, CQ, etc.), the `date` returned is the last trading day of that period, and every price field reflects the closing snapshot on that specific day only. AVAILABLE FIELDS: price (close), priceOpen, priceHigh (day's high), priceLow (day's low), volume, turnover, tradeCount, vwap, currency. NOTE: priceHigh/priceLow are DAILY high/low only — there is no native 52-week or annual high/low field. To get 52-week or annual high/low, query priceHigh/priceLow over the target date range (last 52 calendar days, or Jan 1–Dec 31) and compute max(priceHigh)/min(priceLow) across the returned series. 2. 'returns' — Period-by-period returns. startDate+endDate REQUIRED. CRITICAL: Returns one value PER PERIOD (e.g., daily day-over-day changes). For a single total return over a range, ALWAYS use 'returns_range'. frequency: match interval to question — actual (D/AM/AQ/AY) for exact date ranges, calendar (M/CQ/CY) for standard periods. Use for Performance analysis, portfolio returns, benchmark comparison 3. 'corporate_actions' — Dividends, splits, spinoffs, rights. Dates optional. Use eventCategory to filter. 4. 'annualized_dividends' — Current IAD only. No date params. Max 50 IDs. 5. 'shares_outstanding' — ALWAYS use for share count history, shares outstanding, periodic shares counts, and dilution analysis. NOT for market cap — use 'market_value' instead. 6. 'market_value' — Current market cap (in millions). No date/frequency/currency params. Max 50 IDs. CRITICAL: Use this (NOT shares_outstanding) for ANY market cap or company size question. 7. 'returns_range' — Total return over a specific date range. startDate+endDate REQUIRED. CRITICAL: Returns ONE value per security. ALWAYS use for a single value over a specified date range. Use 'returns' for period-over-period breakdowns. **DATE HANDLING — Always calculate date ranges from today.** - prices: startDate REQUIRED, endDate optional - returns: startDate+endDate BOTH REQUIRED; anchored periods → D/AM/AQ/AY; calendar periods → M/CQ/CY; YTD → startDate=Jan 1 of current year - returns_range: startDate+endDate BOTH REQUIRED - corporate_actions: both optional (omit for all events) - annualized_dividends, market_value: NO date params - shares_outstanding: both optional **ID LIMITS:** 500 for single-day prices; 50 for all other/multi-day requests. Accepts: AAPL-US, MSFT-US (ticker-region), CUSIP, SEDOL, ISIN, FactSet Permanent IDs. **RESPONSE FIELDS BY data_type:** - **prices**: `fsymId` (string): FactSet Regional Security ID; `date` (string): Trade date (YYYY-MM-DD); `currency` (string): Price currency ISO code; `price` (number): Closing price; `priceOpen` (number): Opening price; `priceHigh` (number): Daily high price; `priceLow` (number): Daily low price; `volume` (number): Shares traded; `turnover` (number): Total trade value for the day; `tradeCount` (number): Number of trades; `vwap` (number): Volume-weighted average price. - **returns**: `fsymId` (string): FactSet Regional Security ID; `date` (string): Return observation date (YYYY-MM-DD); `currency` (string): Return currency ISO code; `totalReturn` (number): Calculated total return for the period; `requestId` (string): Echoed request identifier. - **returns_range**: `fsymId` (string): FactSet Regional Security ID; `startDate` (string): Start date of the return range; `endDate` (string): End date of the return range; `totalReturn` (number): Total return over the full date range (one value per security); `currency` (string): Return currency ISO code; `requestId` (string): Echoed request identifier. - **corporate_actions**: `fsymId` (string): FactSet Regional Security ID; `effectiveDate` (string): Ex-date of the event; `eventTypeCode` (string): Character code denoting the event type; `eventTypeDesc` (string): Description of the event type; `eventId` (string): Unique event identifier; `announcementDate` (string): Date the event was publicly announced; `recordDate` (string): Record date of the event; `payDate` (string): Payment date of the event; `requestId` (string): Echoed request identifier; `currency` (string): [Dividends] Currency of the distribution amount; `amtDefNetGrossIndicator` (string): [Dividends] Whether default amount is gross or net (G/N); `amtDefTradingAdj` (number): [Dividends] Split-adjusted default amount in trading currency; `amtGrossTradingAdj` (number): [Dividends] Split-adjusted gross amount in trading currency; `amtNetTradingAdj` (number): [Dividends] Split-adjusted net amount in trading currency; `dividendStatus` (string): [Dividends] Active, Cancelled, Postponed, or Partial Information; `dividendFrequencyCode` (string): [Dividends] Dividend frequency code; `taxRate` (number): [Dividends] Domestic withholding tax rate for a resident individual; `adjFactor` (number): [Distribution/Split] Price adjustment factor for the event; `adjFactorCombined` (number): [Distribution/Split] Combined adjustment factor for all events that day; `distPct` (number): [Distribution/Split] Distribution percentage; `distOldTerm` (number): [Distribution/Split] Shares held component of distribution ratio; `distNewTerm` (number): [Distribution/Split] Shares received component of distribution ratio; `shortDesc` (string): [Distribution/Split] Textual description of the event. - **annualized_dividends**: `fsymId` (string): FactSet Regional Security ID; `annualizedDividend` (number): Annualized value of the latest reported dividend (excludes cancelled dividends); `currency` (string): Dividend currency ISO code; `requestId` (string): Echoed request identifier. - **shares_outstanding**: `fsymId` (string): FactSet Regional Security ID; `date` (string): Observation date (YYYY-MM-DD); `sharesOutstanding` (number): Split-adjusted shares outstanding; `requestId` (string): Echoed request identifier. - **market_value**: `fsymId` (string): FactSet Regional Security ID; `marketValue` (number): Current market cap; `currency` (string): Market Value ISO code; `requestId` (string): Echoed request identifier.
FactSet Macroeconomics API - Economic calendar events and historical time series data for global economic indicators (90+ countries). **STEP 0 -- PICK THE RIGHT data_type FIRST:** - VALUE/LEVEL/trend of an indicator over time (a rate, an index, a growth %) -- e.g. "latest/current/historical GDP, CPI, unemployment...": use `meta_series` -> `as_reported_economics` - WHEN a specific, well-known named release is scheduled, plus its actual/consensus/prior/surprise -- e.g. "next FOMC decision", "US CPI release date", "ECB rate decision", "NFP jobs report", "PMI release": use `meta_events(type=FDS_CODES)` -> `economic_events(fdsCode=...)` - A broad sweep of many event types/topics across countries/dates (no single named release in mind): use `meta_events(type=INDICATORS)` -> `economic_events(indicator=...)` - HOW MANY events happen in a date range ("how many", "count of", "number of"): use `event_count` (no country/topic filter) - Discovery/reference data itself (what codes exist): use `meta_events` or `meta_series` FDS_CODES vs INDICATORS: FDS_CODES identify one *specific, named, recurring release* (e.g. "US CPI m/m", "FOMC Rate Decision") and are the default choice whenever the query names or implies a specific well-known report. INDICATORS identify a broader *topic/category* (e.g. "PRCPI" = prices/inflation broadly) for sweeping many report-types/countries at once when no single named release is meant. If unsure, check FDS_CODES first -- it's the more precise match more often. Either path is fine as long as it resolves to data that actually answers the question. **ALWAYS DISCOVER IDENTIFIERS BEFORE USE:** `seriesId`, `fdsCode`, and `indicator` are not predictable from naming patterns (e.g. 'US.GDPR' is not a valid seriesId just because 'AR.GDPR' is valid for Argentina; 'GDP' is not a valid indicator code just because it's the plain-English topic). An invented identifier silently returns zero results rather than erroring. Always call the matching reference endpoint first (`meta_series` for `seriesId`; `meta_events(type=FDS_CODES)` for `fdsCode`; `meta_events(type=INDICATORS)` for `indicator`) and copy the exact value from its response, unless that exact value was already confirmed earlier in this conversation. Details on required companion parameters and date-range limits per identifier are on each parameter itself (see fdsCode/indicator/seriesId/startDate/endDate descriptions). **ENDPOINTS (select via data_type):** 1. `economic_events` -- Calendar events for a date range: scheduled/historical releases with actual/consensus/prior values. Filter by `countryCode`, `indicator`, or `fdsCode`. 2. `as_reported_economics` -- Historical time series for one `seriesId` (discover via `meta_series`). Supports frequency conversion; no maximum date range. 3. `event_count` -- Count of events per calendar day. No country/indicator/fdsCode filter -- always global. For a country-scoped count, call `economic_events` with that countryCode and count the results yourself. 4. `meta_events` -- Reference data via `type`: INDICATORS, COUNTRIES, FDS_CODES, or TIMEZONES. FDS_CODES is the right first call for "next/latest release of [specific named report]" (see STEP 0). 5. `meta_series` -- Series discovery for `as_reported_economics`. `searchText` is a literal substring match on the series NAME only (no synonym/semantic matching) -- for conceptual discovery (e.g. "labor market indicators"), omit `searchText` and filter the response's `subcategory` field yourself instead of guessing phrases. Set `paginationLimit=1000` when cataloging a country/category, since the default (25) truncates large catalogs. One country per call; when enumerating several (G7, G20), call one at a time and back off/retry on 429 rather than firing a burst. **RESPONSE FIELDS BY data_type:** - **economic_events**: `data` (array): List of economic events; `meta` (object): Response metadata including pagination info (total, isEstimatedTotal). - **as_reported_economics**: `data` (array): Array of economic series with data; `meta` (object): Response metadata including pagination info. - **event_count**: `data` (array): Array of event count items; `meta` (object): Response metadata including pagination info. - **meta_events**: `data` (array): Array of reference items (indicators, countries, FDS codes, or timezones); `meta` (object): Response metadata including pagination info. - **meta_series**: `data` (array): Array of economic series records with metadata; `meta` (object): Response metadata including pagination info.
FactSet Mergers & Acquisitions Tool - M&A transaction data and deal analytics. **WHEN TO USE THIS TOOL:** - Mergers, acquisitions, or M&A transactions - Company acquisition history ("Who did [X] acquire?") - Deal values, premiums, and transaction terms - Public company takeover analysis - Market-wide deal screening by date range **DATA COVERAGE:** 60,000+ global M&A transactions; public targets; all values in USD. **ENDPOINTS (select via data_type):** 1. 'deals_by_company' — Deals involving specific companies (buyer/seller/target). ids+startDate+endDate REQUIRED. Max 500 company IDs. 2. 'public_targets' — Acquisitions of publicly traded companies. status+startDate+endDate REQUIRED. No IDs needed. 3. 'deal_details' — Deal terms, advisors, premiums, multiples. ids (deal IDs) REQUIRED. Max 100 deal IDs. NOTE: Obtain deal IDs from deals_by_company or public_targets first. **DATE HANDLING:** - deals_by_company: startDate+endDate REQUIRED. Max 1-year window per request. - public_targets: startDate+endDate REQUIRED. Max 1-year window per request. - deal_details: NO date params. For multi-year analysis, make sequential yearly requests (e.g., 2015-01-01→2015-12-31, then 2016-01-01→2016-12-31). **ID LIMITS:** deals_by_company: Max 500 company IDs. deal_details: Max 100 deal IDs. public_targets: No ID limit. Accepts: ticker (IBM-US), CUSIP, SEDOL, ISIN, FactSet ID; deal IDs (e.g., 4143886MM).
FactSet Metrics Tool - Semantic vector search for financial metric codes. **WHEN TO USE THIS TOOL:** - Find metric codes before calling Fundamentals or Estimates or Banks (when exact codes are unknown) - Search by natural language ("profitability ratios", "debt metrics", "EPS") - Explore ontology categories and subcategories - Batch discover multiple related metrics in one call **CRITICAL:** Call this tool BEFORE Fundamentals/Estimates/Banks when metric codes are unknown. Use exact codes returned — do not infer or abbreviate. **SEARCH TARGET (target param):** - 'metric' — individual metrics (FF_SALES, EPS, FF_EBITDA). Default. - 'category' — high-level groups (Income Statement, Balance Sheet). - 'subcategory' — mid-level groups (REVENUES, ASSETS, LIABILITIES). **DATA PRODUCTS (data_products param):** - 'fundamentals' — FF_* prefixed codes (FF_SALES, FF_NET_INC, FF_DEBT_EQ) - 'estimates' — unprefixed codes (SALES, EPS, EBITDA, PRICE_TGT) - 'private-companies' — FPC_*/FPE_*/FPD_* codes - 'deep-sector-banks' — bank/credit-union metric codes for FactSet_Banks (FB_*, UBPR*, aum_*, FSF_*). Use this for any FactSet_Banks metric discovery. - Omit to search across all products. **BATCH QUERIES:** text=["revenue", "profitability", "debt"], target="metric", data_products=["fundamentals"], limit=5 **CRITICAL: No hyphens in text queries.** Use spaces: "short term debt" not "short-term debt". Hyphens cause "suspicious patterns" API errors. **RESPONSE KEY FIELD:** properties.metric — the exact code to use in Fundamentals/Estimates/Banks calls. Lower distance = better match. **FOR data_products=['deep-sector-banks'] RESULTS:** each metric also carries `category` and `subcategory` fields (e.g. category='FINANCIALS', subcategory='SPECIALTY_FINANCE'). These are NOT just descriptive — they determine which FactSet_Banks data_type/endpoint the metric must be sent to. Do not assume category='FINANCIALS' always means data_type='financials'; category='FINANCIALS' also covers aum/focus metrics (subcategory='SPECIALTY_FINANCE'). See FactSet_Banks's tool description for the full category/subcategory -> data_type mapping table, and use the metric code prefix (aum_* vs FSF_*) to tell aum and focus apart when subcategory='SPECIALTY_FINANCE'. **DO NOT USE FOR:** actual financial data retrieval — use Fundamentals or Estimates or Banks instead. **RESPONSE FIELDS BY data_type:** - **metric_query**: `query` (string | null): The input text query this result corresponds to; `target` (string | null): The content type searched — always 'metric' for this tool; `limit` (integer | null): Max results requested for this query (from searchParameters.limit); `score` (number | null): Similarity score for this match, 0.0-1.0 (from results[].score); `category` (string | null): High-level classification of the metric, e.g. 'INCOME_STATEMENT' (properties.category); `description` (string | null): Detailed explanation of the metric, its calculation formula, and notes (properties.description); `metric` (string | null): Internal metric identifier — the exact code for downstream tool calls, e.g. 'FF_EBIT_OPER'; `name` (string | null): Human-readable name of the metric (properties.name); `subcategory` (string | null): Sub-classification under the main category (properties.subcategory); `type` (string | null): The type of item matched, e.g. 'metric' or 'term' (properties.type); `dataProduct` (string | null): Data product this metric belongs to, e.g. 'fundamentals', 'estimates' (properties.dataProduct); `factor` (string | null): Scaling factor applied to the value, e.g. '1000000'. Absent when not applicable (properties.factor); `valueList` (string | null): Name of an associated value list, e.g. 'etf-category'. Only present for value-list matches; `values` (array | null): Categorized {name, score} value entries for `valueList`. Only present for value-list matches.
FactSet Ownership Tool - Comprehensive holdings, holders, and transactions data. **WHEN TO USE THIS TOOL:** - Fund holdings, portfolio composition, or what funds own (e.g., "What does SPY hold?" "What fixed income securities does AGG hold?") - Institutional ownership, insider ownership, or shareholder data - Insider trading activity, executive transactions, or Form 4 filings - Institutional position changes, 13F filings, or "smart money" tracking - Questions like "What does [fund/ETF] own?" or "Who owns [stock]?" **NOT FOR INDEX CONSTITUENTS:** This tool is for fund/ETF holdings and investor positions only. For benchmark index composition (e.g., "S&P 500 constituents", "Russell 2000 members"), use FactSet_BenchmarksConstituents instead. Distinction: AGG, SPY, QQQ are tradeable ETFs with holdings (use Ownership). S&P 500, Russell 2000 are benchmarks (use Benchmarks). NOTE: Use data_type='fund_holdings' to retrieve what a fund/ETF holds (its underlying securities). This is distinct from FactSet_FundsETF which covers fund performance, NAV, flows, and analytics — NOT holdings composition. **DATA COVERAGE:** 60,000+ fund portfolios, 50,000 institutions, 400,000 insider records, 110+ countries. From 2006+. **ENDPOINTS (select via data_type):** 1. 'fund_holdings' — Holdings for mutual funds, ETFs, closed-end funds. Max 10 IDs. SUPPORTS HISTORICAL DATES: Use the 'date' parameter (YYYY-MM-DD) to retrieve holdings as-of any month-end. Example: date='2024-09-30' returns holdings as of September 30, 2024. Note: Security names/tickers reflect the CURRENT security master, not the snapshot date — surface this caveat when returning historical holdings. 2. 'security_holders' — Who owns a security (institutions, funds, insiders, beneficial owners). CRITICAL: Max 1 security per request. SUPPORTS HISTORICAL DATES: Use the 'date' parameter (YYYY-MM-DD) to retrieve ownership as-of any month-end. Example: date='2024-03-31' returns holders as of March 31, 2024. RANKING: The topn parameter ranks by position market value ONLY. To rank or sort by ANY other metric (e.g., portfolio weight / % Port, shares held, % outstanding), you MUST set topn='ALL' and sort the returned results client-side — otherwise the default market-value topn filter skews the set before your metric is applied. Use topn=N only when the user ranks by market value. Example: "top 5 institutional holders by Portfolio Weight (% Port)" → topn='ALL', then sort by % Port and take 5. 3. 'insider_transactions' — Executive/director trades from SEC Form 4/5. Max 10 IDs. CRITICAL: startDate+endDate REQUIRED. sharesOwned is per-filing only — NOT the insider's current position; use security_holders with holderType='S' for absolute position. 4. 'institutional_transactions' — Position changes from 13F filings. Max 10 IDs. CRITICAL: startDate+endDate REQUIRED. posChange is a delta, not absolute shares held; use security_holders with holderType='F'/'M' for absolute counts. Optional params: holderType, topNHolders, frequency (M/CQ/CY), periodOfMeasure (1M/3M/6M/12M), currency. DATE PATTERNS: - Regular date range (e.g., "in Q2 2024", "during H2 2020", "full year 2022"): startDate='2024-04-01', endDate='2024-06-30' — use actual range bounds - Rolling N-month window (e.g., "past 6 months", "last quarter position changes"): Set startDate AND endDate to the SAME reference date (today or date you're analyzing), use periodOfMeasure for the window (1M/3M/6M/12M) Set frequency to 'M' (monthly) Example: past 3 months → startDate='2025-03-31', endDate='2025-03-31', periodOfMeasure='3M', frequency='M' **DATE HANDLING:** - fund_holdings, security_holders: date optional (defaults to latest month-end) - insider_transactions, institutional_transactions: startDate+endDate BOTH REQUIRED **ID LIMITS:** Max 10 for fund_holdings/insider_transactions/institutional_transactions; max 1 for security_holders. Accepts: ticker-region (AAPL-US, VTI-US), CUSIP, SEDOL, ISIN, FactSet IDs. **INVESTOR TYPE FILTERING — GRANULAR HOLDER CLASSIFICATION:** The `holderType` input parameter groups holders into broad categories (e.g., M = mutual funds AND ETFs combined). The `investorType` field in the response output is the most granular holder classification available. When a prompt requests a specific type of holder, interpret it against `investorType` in the output — not just `holderType`. Workflow: 1. Use the closest `holderType` value to pull the broadest matching category from the API. 2. After receiving results, filter client-side by `investorType` to match the specific holder type requested. Examples: - "ETF holders" → holderType='M', then filter results where investorType='Exchange Traded Fund' - "hedge fund holders" → holderType='F', then filter results where investorType='Hedge Fund Manager' When the prompt is non-specific (e.g., "institutional holders", "all holders"), do not apply an investorType filter, return the full result for the requested holderType. **CRITICAL POSITION INTERPRETATION RULES:** insider_transactions — sharesOwned IS NOT A POSITION, NEVER PRESENT IT AS ONE: - sharesOwned: Shares owned as reported on that individual filing only — varies record-to-record, scoped to that filing. For authoritative position size, use security_holders with holderType='S' and read adjHolding. - shares: Transaction size (delta only) — what changed in that single transaction. institutional_transactions — posChange IS A DELTA, NOT A POSITION: - posChange: Change in shares held over the periodOfMeasure window. DO NOT present as shares held. - For absolute institutional share counts, use security_holders with holderType='F' or 'M' and read adjHolding. **RESPONSE FIELDS BY data_type:** - **fund_holdings**: `requestId` (string | null): Fund identifier used in the request; `fsymId` (string | null): FactSet Regional Security Identifier of the requested fund; `date` (string | null): Date of the reported holding (YYYY-MM-DD); `currency` (string | null): Currency code the data is adjusted to; defaults to the fund's local currency; `adjHolding` (number | null): Adjusted shares held, split/name-change adjusted (not spinoff/merger adjusted); `adjMarketValue` (number | null): Adjusted market value of shares held, same adjustment rules as adjHolding; `weightClose` (number | null): Closing weight of the security in the fund for the requested asset type (percent); `issueType` (string | null): Issue type of the held security; `fsymSecurityId` (string | null): FactSet Security ID of the held security (not the parent fund); `fsymRegionalId` (string | null): FactSet Regional Security Identifier of the security held in the fund; `securityName` (string | null): Name of the held security; `securityTicker` (string | null): Ticker of the held security. - **security_holders**: `holderId` (string | null): FactSet Ownership Holders ID of the holder; `fsymId` (string | null): FactSet Regional Security Identifier of the requested security; `holderEntityId` (string | null): FactSet Entity ID corresponding to the holder ID; `holderName` (string | null): Name of the holder; `date` (string | null): Date of the reported holding (YYYY-MM-DD); `currency` (string | null): Currency code the data is adjusted to; defaults to local currency; `investorType` (string | null): Granular investor classification (e.g. Hedge Fund Manager, Exchange Traded Fund); `holderType` (string | null): Holder type name aligned to the requested holderType; `adjHolding` (number | null): Adjusted shares held, split/name-change adjusted (not spinoff/merger adjusted); `adjMarketValue` (number | null): Adjusted market value of shares held, same adjustment rules as adjHolding; `weightClose` (number | null): Closing weight of the security for holders of the requested security (percent); `percentOutstanding` (number | null): Percent of outstanding common shares held by the filing institution; `source` (string | null): Report source of the holdings data (13F Form or ND-30D); `requestId` (string | null): Security identifier used in the request. - **insider_transactions**: `requestId` (string | null): Identifier used in the request; `fsymId` (string | null): FactSet Regional Security Identifier of the requested security; `currency` (string | null): Currency code the data is adjusted to; defaults to local currency; `holderName` (string | null): Name of the insider in the transaction; `holderTitle` (string | null): Title of the insider in the transaction; `holderId` (string | null): Holder ID of the insider; `shares` (number | null): Transaction size (delta only) — what changed in this single transaction; `price` (number | null): Transaction price; `netValueChange` (number | null): Transaction value; `filingDate` (string | null): Date the transaction was processed; `isDerivative` (boolean | null): True for Derivative, false for Non-Derivative; `isDirect` (boolean | null): True for direct, false for indirect ownership; `tradeType` (string | null): Acquisition/disposition flag for the transaction; `transactionCode` (string | null): Transaction detail code; `transactionCodeDescription` (string | null): Description of the transaction detail code; `formType` (string | null): SEC form type for the transaction (e.g. Form 4/5); `transactionDate` (string | null): Date of the transaction; `sharesOwned` (number | null): Shares owned as reported on this filing only — NOT the insider's current position; use security_holders with holderType='S' and adjHolding for absolute position; `secRule10b51` (boolean | null): Rule 10b5-1 flag for the insider's transaction. - **institutional_transactions**: `requestId` (string | null): Identifier used in the request; `fsymId` (string | null): FactSet Regional Security Identifier of the requested security; `currency` (string | null): Currency code the data is adjusted to; defaults to local currency; `holderName` (string | null): Name of the institution in the transaction; `pctOS` (number | null): Position held as percentage of total outstanding, per change type; `pctChange` (number | null): Change in position held as percentage of total outstanding, per change type; `posChange` (number | null): Change in shares held over the periodOfMeasure window (delta) — NOT absolute shares held; use security_holders with holderType='F'/'M' and adjHolding for absolute counts; `marketVal` (number | null): Market value for holders matching the specified change type; `periodOfMeasure` (string | null): Range used to calculate Percent Ownership and Position Change; `reportDate` (string | null): Report date for the transaction; `asOfDate` (string | null): Date on which the specified data is accurate/relevant.
FactSet People Tool - Comprehensive executive and leadership data. **WHEN TO USE THIS TOOL:** - Executives, leadership, or company personnel queries - Questions about "Who is the CEO/CFO/founder of [company]?" - Backgrounds, career histories, profiles, compensation, demographics - Board composition and governance analysis **CRITICAL:** NEVER answer executive/leadership queries from training data — always query FactSet first. **DATA COVERAGE:** 50,000+ institutions, 400,000+ insider/stakeholder records, 110+ countries. US compensation data only (regulatory requirement). **ENDPOINTS (select via data_type):** 1. 'profiles' — Biographical profile: education, employment, compensation. Person Entity IDs (XXXXXX-E), max 500. 2. 'jobs' — Employment history and career progression. Person Entity IDs (XXXXXX-E), max 1,000. 3. 'company_people' — Leadership roster for a company. Company IDs, max 1,000. 4. 'company_positions' — Specific position holders (CEO, CFO, FOU, etc.) with tenure/demographics. Company IDs, max 1,000. CRITICAL: ALWAYS use for "Who is the [position]?" queries. 5. 'company_compensation' — Executive pay analysis. US companies ONLY. Company IDs, max 1,000. 6. 'company_stats' — Aggregated leadership demographics (age, tenure, diversity). Company IDs, max 1,000. **MANDATORY WORKFLOW (profiles/jobs need Person Entity IDs XXXXXX-E, which users rarely have):** For a company's people, FIRST call company_positions (a role) or company_people (officers/directors) to get person IDs, THEN call profiles (bio) or jobs (career history) with them. Do NOT make a second company_* call. **ID FORMAT:** - profiles/jobs: Person Entity IDs only (XXXXXX-E). Example: ['0DPHLH-E'] - company_*: Ticker, FactSet ID (incl. private companies), CUSIP, SEDOL, or ISIN.
FactSet Power & Utilities Tool - Global power plant and energy market data. **WHEN TO USE THIS TOOL:** Power plant discovery, specs (solar/wind/thermal), ownership, balancing authority generation/demand/interchange, power prices (spot/forward/spark spreads), plant and unit-level generation with emissions (CO₂/SO₂/N₂O), ISO/TSO codes, zones. **DATA COVERAGE:** 20,000+ plants globally. ISOs: ERCOT, PJM, CAISO, MISO, NYISO. Since 2006+. **CRITICAL: ID TYPES by operation** - **plant_ids** (B00121-M): aggregated plant. Use for monthly_generation. Optional for plant_details/units_ownership (mixes with unit_ids). - **unit_ids** (05RLSM-M): asset-level. Use for hourly_generation. Optional for plant_details/units_ownership (mixes with plant_ids). - **location_ids** (HB_NORTH): price hubs. Use for prices. - **ba_ids/ba_sub_region_ids**: balancing authorities. Use for market_data. **11 OPERATIONS (via operation_type):** 1. plant_ids 2. plant_details (5 categories) 3. units_ownership 4. market_coverage 5. market_data (3 categories) 6. prices (4 categories) 7. hourly_generation 8. monthly_generation 9. iso_mapping 10. zone_mapping 11. location_mapping 12. entity_history **ID LIMITS:** Details/ownership/generation: max 1000. Market data: max 100. **DATE REQUIREMENTS:** Generation/market_data/prices (Power/SparkSpread/Forward): startDate+endDate REQUIRED (YYYY-MM-DD). Prices Capacity: deliveryYear instead. Discovery: dates not applicable.
FactSet Private Company Tool - Unified financials and reference data with entity resolution. **WHEN TO USE THIS TOOL:** - Resolve private company names to FactSet Entity IDs (data_type='universe') - Fetch historical financial time-series (revenue, EBITDA, debt; data_type='financials') - Retrieve reference/funding data (investor counts, VC amounts, VC backing; data_type='non_periodic') **DATA COVERAGE:** 50,000+ private companies; financials from 2010-present; global coverage. **ENDPOINTS (select via data_type):** 1. 'universe' — Resolve company names to entity IDs. Required: company_names. Optional: country. 2. 'financials' — Time-series financial data (FPC_* metrics). Required: entity_ids, metrics, start_date. Optional: end_date. 3. 'non_periodic' — Reference data (FPE_*/FPD_* metrics). Required: entity_ids, metrics. Dates ignored. **DATE HANDLING:** - 'universe': Not used. - 'financials': start_date REQUIRED; end_date optional (defaults to latest). - 'non_periodic': Not used. **ID LIMITS:** - Max 25 company names per universe request; Max 3,000 entity IDs per financials/non_periodic request; Max 100 metrics per request. - Rate limit: 10 req/sec, 10 concurrent per user. - Accepts: Entity IDs in XXXXXX-E format (from universe), metric codes (FPC_*/FPE_*/FPD_*). **CRITICAL fpcIndicator (financial data quality):** Each financial value includes fpcIndicator: 0=Actual (filings/releases), 1=Estimated (China ranges), 3=Modeled (peer ML), 4=Computed (tax filings). Interpret values with indicator context. Always indicate this status when displaying metrics. **CRITICAL Entity Matching:** matchFlag may be false even for correct matches. Always verify returned entityName against your search query. **Use FactSet_Metrics tool to discover available metric codes before calling this tool.**
FactSet Private Equity & Venture Capital Tool - Comprehensive PE/VC data. **WHAT THIS TOOL COVERS:** Private equity and venture capital data including funds, general partners (GPs), limited partners (LPs), portfolio companies, transactions (VC rounds, PE deals), M&A activity, and IPO exits. **AUTOMATIC ENDPOINT ROUTING:** This tool routes to 14 different endpoints based on the `data_type` parameter: --- **UNIVERSE (Entity Lookup):** 1. `universe` — Resolve a firm, fund, or portfolio company name to a FactSet Entity ID. - REQUIRED: `name` (the firm/fund/company name to look up) - OPTIONAL: `country` (ISO2 country code to narrow results), `entityType` (filter by entity type) - Returns: List of candidate matches sorted by match quality (best matches first) with: * `entityId` (format 'XXXXXX-E') * `entityName` * `matchFlag` (boolean: true = direct match to query, false = candidate match) - Results are pre-sorted with exact/best matches appearing first — typically use the first result - USE FIRST: Always call this to get FactSet entity IDs before using other data_types - Entity type codes: PVT (Private Company), VEN (Venture Capital Fund), PVF (Private Equity Fund), FAF (Family of Funds), HOL (Holding Company), NPO (Non-Profit), SUB (Subsidiary), JVT (Joint Venture) --- **FUNDS:** 2. `funds` — Core profile and summary for one or more PE/VC funds. - REQUIRED: `ids` (fund entity IDs, format 'XXXXXX-E') - Returns: Fund status, strategy type, vintage year, financial info (amount raised, dry powder), investment criteria (min/max deal size, EBITDA, revenue), fund terms (management fee, carry), features (ESG, co-invest) 3. `funds_portfolio_companies` — List of portfolio companies held by specified funds. - REQUIRED: `ids` (fund entity IDs) - Returns: FactSet entity IDs and names of portfolio companies, investment date, sector 4. `funds_fundraising` — Fundraising milestones: close dates and amounts (first, interim, final) for specified funds. - REQUIRED: `ids` (fund entity IDs) - Returns: Each fundraising close (First, Second, Final, etc.) with close date, amount raised, target amounts, currency - For 'number of closes', count the closes list. Use for fund lifecycle questions. 5. `funds_cashflows` — Quarterly cash flow time-series (contributions, distributions, and NAV) for funds. NAV/dry power data lags 3-6 months; expect stale estimates for current year. For static fund data (vintage, target size), use funds endpoint. - REQUIRED: `ids` (fund entity IDs) - OPTIONAL: `startDate` (YYYY-MM-DD), `endDate` (YYYY-MM-DD), `cfType` ('CONTRIBUTION', 'DISTRIBUTION', or 'NAV') - Returns: Date, cash flow type, amount in reporting currency and USD --- **GENERAL & LIMITED PARTNERS:** 6. `general_partners` — Core profile for General Partner (GP) firms. - REQUIRED: `ids` (GP entity IDs, format 'XXXXXX-E') - OPTIONAL: `asOfDate` (YYYY-MM-DD, for AUM data) - Returns: GP name, AUM (with date), investment criteria, ESG focus, public company investment flag 7. `general_partners_funds` — All funds managed by specified GP firms. - REQUIRED: `ids` (GP entity IDs) - Returns: List of fund IDs, names, status (Raising/Investing/Divesting/Liquidated), launch date, amount raised 8. `limited_partners` — LP-level data: name, commitment amount, capital called, distributions for specified funds. Use for 'which LPs invested and how much' questions. Different from general_partners_funds (which lists funds a GP manages). - REQUIRED: `ids` (fund entity IDs, format 'XXXXXX-E') - Returns: LP name, LP entity ID, commit date, commit amount (local currency and USD), fundraising close code --- **TRANSACTIONS:** 9. `transactions` — Detailed data for specific PE/VC transactions by transaction ID. Shows fund's perspective on portfolio company exits (M&A, IPO, distributions). For post-exit investor analysis (e.g., did investor X retain stake in buyer), query the buyer entity separately. - REQUIRED: `ids` (transaction IDs — INTEGER values, e.g., [1000001, 1000002]) - Returns: Portfolio company, investment type, status, dates, deal size, pre/post-money valuation, funding round, stage, investors (with lead flag, fund used, amount invested), securities used 10. `transactions_search` — Search/filter the full transaction universe by company, stage, and date. - REQUIRED: `ids` (portfolio company entity IDs, format 'XXXXXX-E') - OPTIONAL: `status` ('Pending', 'Cancelled', 'Completed'), `stage` ('Seed', 'Early', 'Late', 'Recap'), `investmentType` ('Venture Capital', 'Growth', 'Corporate', 'Capitalization', 'Angel', 'Crowdfunding', 'Accelerator/Incubator', 'Secondary', 'Undisclosed Round'), `startDate`, `endDate` (YYYY-MM-DD announcement date range), `minAmount`, `maxAmount` (USD transaction amount filter) - Returns: Transaction IDs, portfolio company name, announcement/close dates, total amount (USD), stage, status 11. `transactions_ma_activity` — M&A advisory and investment details for specific transactions. - REQUIRED: `ids` (transaction IDs — INTEGER values) - Returns: Advisors (financial/legal, client type), investments (entry/exit type, deal ID, IPO ID, retaining stake) --- **IPOs:** 12. `ipos` — Detailed IPO data for portfolio company exits by deal ID. Note: Offer price data is sparse; use GlobalPrices for detailed IPO pricing. - REQUIRED: `ids` (deal IDs — INTEGER values, e.g., [410294, 730294]) - Returns: IPO ID, portfolio company name, ticker, trade date, offer price (local and USD), IPO size (millions), status, announcement/pricing dates 13. `ipos_search` — Search/filter the IPO universe by status, size, and date. - REQUIRED: None (all parameters optional) - OPTIONAL: `status` ('Closed', 'Announced', 'Postponed', 'Cancelled', 'Priced', 'Withdrawn', 'In Registration'), `startDate`, `endDate` (YYYY-MM-DD announcement date range), `minSizeUsd`, `maxSizeUsd` (IPO size filter in USD millions) - Returns: IPO ID, portfolio company name, ticker, trade date, offer price (USD), IPO size, status --- **STRATEGIES:** 14. `entity_strategies` — Detailed investment strategy mandate for a fund or GP. - REQUIRED: `ids` (fund or GP entity IDs, format 'XXXXXX-E') - Returns: Geographic focus (regions, countries, states), sector/industry focus, investment instruments, transaction strategies, control criteria, investor roles --- **TYPICAL WORKFLOWS:** **"What funds does [GP firm] manage?"** 1. Call data_type='universe' with name='[GP firm name]' to get GP entity ID 2. Call data_type='general_partners_funds' with ids=[gp_entity_id] **"Show me details on [fund name]"** 1. Call data_type='universe' with name='[fund name]', entityType=['VEN'] or ['PVF'] 2. Call data_type='funds' with ids=[fund_entity_id] **"Who are the LPs in [fund]?"** 1. Resolve fund entity ID via universe 2. Call data_type='limited_partners' with ids=[fund_entity_id] **"What VC rounds has [company] raised?"** 1. Call data_type='universe' with name='[company name]', entityType=['PVT'] 2. Call data_type='transactions_search' with ids=[company_entity_id] 3. Optionally call data_type='transactions' with the returned transaction IDs for full details **"What IPOs are coming up in biotech?"** → Call data_type='ipos_search' with status='Announced', filter by date range **ID TYPE REFERENCE:** - Fund/GP/Company entity IDs: String format 'XXXXXX-E' (e.g., '001JYM-E', '000BKX-E') → Used by: funds, funds_portfolio_companies, funds_fundraising, funds_cashflows, general_partners, general_partners_funds, limited_partners, transactions_search, entity_strategies - Transaction IDs: Integer values (e.g., 1000001) → Used by: transactions, transactions_ma_activity - Deal IDs: Integer values (e.g., 410294) → Used by: ipos **RETURNS:** - Structured JSON responses per the FactSet PEVC API schema - Entity IDs returned by one endpoint can be passed directly to related endpoints - Error details included per-item in the response data array
FactSet RBICS Tool — Industry classification, revenue breakdown, and tradeNames. **FIRST CHOICE for any industry/sector classification or revenue-by-industry query** — companies, ETFs, and Mutual Funds. Do not default to web search. **ENDPOINTS (select via data_type):** 1. 'entity_focus' — Primary RBICS classification (single sector >50% revenue). Returns L1–L6 IDs/names. Use for: "what industry is X in?", "what does X do?", "X's primary classification". ids REQUIRED; date, levels, includeNames optional. 2. 'entity_revenue' — RBICS industry-taxonomy revenue breakdown. Returns hierarchical percentages across all RBICS industries. Use for: "X's revenue breakdown by industry/sector/sub-sector", ETF/Mutual Fund industry breakdowns. ids REQUIRED; startDate, endDate, level optional (level=6 = full L1–L6). ETFs/Mutual Funds supported here (L1–L4 only); >1y queries may exceed 20s. 3. 'tradenames' — Company tradeNames and product lines mapped to RBICS sectors. Response already includes l6Id/l6Name per product, so do NOT call entity_focus alongside. ids REQUIRED; asOfDate optional. Max 500 IDs. **QUERY → ROUTING (use this tool, NOT the alternatives):** - ANY ETF / Mutual Fund (SPY, QQQ, VOO, ARKK, FXAIX, …) sector / sub-sector / industry / "compare … breakdown" query → entity_revenue HERE. NOT FactSet_FundsETF — its SECTOR_WEIGHTAGE returns portfolio-holding sector weights on a different taxonomy, NOT the RBICS industry breakdown. - Company industry/sector revenue breakdown (Salesforce, Pfizer, …) → entity_revenue here. NOT FactSet_FundamentalsSegments — that returns company-reported business segments, not RBICS. - "compare classifications of A and B" → entity_focus only — do NOT also call entity_revenue. - Geographic/country breakdown → FactSet_GeoRev (this tool is industry-only). **LEVEL (entity_revenue)** API default is L1; ETFs/Mutual Funds capped at L4. See level parameter for full taxonomy and language mapping. **DATA COVERAGE:** 48,000+ liquid public companies plus ETFs/Mutual Funds. Monthly updates. **DATES — YYYY-MM-DD. Future dates (T+1) rejected.** - entity_focus: date optional (omit → full history) - entity_revenue: startDate/endDate optional (omit → latest); supply endDate when query specifies a date - tradenames: asOfDate optional (omit → latest active) **IDS:** Max 2,500 (500 for tradenames). See ids parameter for accepted formats.
FactSet Supply Chain Tool - Business relationship data: competitors, customers, suppliers, and partners. **WHEN TO USE THIS TOOL:** - Competitors, competitive landscape, or "who competes with X" - Suppliers, customers, or strategic partners of a company - Supply chain mapping or business network analysis - Competitive intelligence from official company filings (10-K, annual reports) - Comparing relationships across multiple companies (suppliers, competitors, partners, customers) **DATA COVERAGE:** Global public and private companies; relationships sourced from official filings (10-K, annual reports); reverse-linked into a complete bidirectional network. **ENDPOINT:** /relationships — returns related entities with product-overlap metrics. Max 500 IDs. Accepts: ticker (AAPL-US), CUSIP, SEDOL, ISIN, FactSet ID (public + private). **RELATIONSHIP TYPES:** COMPETITORS=disclosed competitors. CUSTOMERS=buy from source. SUPPLIERS=sell to source. PARTNERS=JVs/equity/strategic alliances. **FILTERS:** - companyType: PUBLIC_COMPANIES_ONLY (API default), PRIVATE_COMPANIES_ONLY, ALL. - relationshipDirection: controls whose filings are the source — see CRITICAL block below. **CRITICAL — relationshipDirection:** - DIRECT: Source company (ids) named them in SOURCE's own filings. "Who did Apple list as competitors in their 10-K?" - REVERSE: Target companies named the source in THEIR filings (the "reverse-linked" disclosures). "Who considers Apple a competitor?" / "Who competes with Apple?" - ALL (default): Both directions. Complete bidirectional network. Omitting relationshipDirection defaults to ALL. For "what did [Company] disclose" queries, you MUST set relationshipDirection=DIRECT. **CRITICAL — overlap metrics:** overlappingProductCount and overlapPercentage measure product/service SIMILARITY ONLY. DO NOT use to rank "top", "biggest", "most important", or "primary" relationships. These are NOT measures of revenue, financial importance, or strategic significance.
FactSet Terms and Conditions API Tool - Fixed Income Securities Data. **WHEN TO USE THIS TOOL:** - Fixed Income security terms, conditions, or detailed attributes - Coupon schedules, redemption prices, or convertible features - Issue size, agent details, lead underwriters, use of proceeds - Covenant details for corporate, government & agency securities - NOTE: For bond price data (BID/MID/ASK), use the FactSet_BondPrices tool instead. **DATA COVERAGE:** Fixed Income Corporate, Government & Agency securities globally. Not available for equities. **ENDPOINTS (select via data_type):** 1. 'issue_size' — Amount outstanding, currency, changes, type. 2. 'coupon_history' — Historical coupon rates and effective dates. 3. 'coupon_schedules' — Scheduled coupon payment dates and rates. 4. 'covenant_details' — Covenant types and descriptions. 5. 'redemption_prices' — Call, Put, Sinking Fund prices. categories: ALL (default)/CALL/PUT/SF. 6. 'agents' — Agent names, entity IDs, types (trustees, paying agents). 7. 'lead_underwriters' — Lead underwriter entity IDs and details. 8. 'use_of_proceeds' — Use of proceeds descriptions. 9. 'convertible_details' — Convertible currency, dates, ratios, price methods. 10. 'convertible_history' — Historical convertible price and ratio changes. 11. 'convertible_triggers' — Trigger events, descriptions, and trigger IDs. **ID LIMITS:** Max 250 per request. Accepts: CUSIP, SEDOL, ISIN, FactSet Security Permanent Identifier (-S).
FactSet Unstructured Content Tool - Semantic search across financial documents. **WHEN TO USE THIS TOOL:** - ANY query requiring semantic/natural language search across financial documents - Questions like "What are companies saying about AI investment?" or "Find news about energy regulation" - Searching EDGAR filings, StreetAccount News, or FactSet CallStreet Transcripts by topic - Filtering financial documents by sentiment or form type - Finding relevant document excerpts with similarity scoring Do NOT use for structured financial data (prices, estimates, fundamentals) - use appropriate FactSet APIs instead. **DATA SOURCES:** - ALL_FILINGS — returns all SEC filings - ALL_NEWS — returns all news articles - ALL_TRANSCRIPTS — returns all earnings transcripts - Individual sources (e.g., StreetAccount, FactSet Transcripts) — verify availability using data_type='sources' before searching **KEY CAPABILITIES:** - Natural language semantic search with similarity scoring (0-1 scale) - Filter by sentiment (Negative, Neutral, Positive, Very Negative, Very Positive) - Filter by EDGAR form types (ONLY accepts 10-K, 10-Q, 8-K) - Filter by company identifiers (FactSet IDs, tickers) - Control result count and sort order (by date or similarity) - Per-source result limits via resultsBySource **DATA AVAILABILITY BY SOURCE:** - **ALL_FILINGS** (SEC EDGAR): Available from 2000 onwards (10-K, 10-Q, 8-K forms) - **ALL_NEWS** (StreetAccount News): Available from 2010 onwards - **ALL_TRANSCRIPTS** (FactSet CallStreet Transcripts): Available from 2005 onwards If your query returns no results, check that your date range falls within the source's data availability. The tool will provide guidance on recommended date ranges if this is the issue. **MANDATORY WORKFLOW:** 0. **REQUIRED: Verify available sources if a user requests a specific source** — Before searching a source like 'MTN', 'SA', 'FCST', or 'EDG', call with data_type='sources' to confirm your account has entitlements to that source. This prevents failed searches against unavailable data. 1. Formulate the query — TWO STRICT RULES: a. NATURAL LANGUAGE REQUIRED: Must be a complete sentence or question. Keyword phrases, comma-separated terms, or shorthand is not acceptable. b. NO EXPANSION: Include ONLY the exact topics the user literally stated. Never add related concepts, sub-themes, synonyms, or industry terms the user did not say. BAD → user said "tariffs": query='What are executives discussing about tariffs and supply chain disruptions?' GOOD → user said "tariffs": query='What are executives discussing about tariffs?' 2. Select at least one source: ALL_FILINGS, ALL_NEWS, ALL_TRANSCRIPTS (max 3) 3. Provide startDate and endDate in YYYY-MM-DD format matching the user's request exactly. DEFAULT: Use recent data (last 1-2 years) unless user specifies a different period. EXCEPTION: If user says "from [year]" (e.g., "from 2023"), expand to that full year. Data boundaries: ALL_FILINGS (2000+), ALL_NEWS (2010+), ALL_TRANSCRIPTS (2005+). 4. Optionally add sentiment, formTypes (ALL_FILINGS only), or ids filters 5. SET limit — MANDATORY RULE: ALWAYS pass limit=10. This is not optional. Only deviate if the user provides an explicit number (e.g., "give me 5 results", "show 20"). Vague requests like "find some", "search for", or "look up" do NOT override the default. GOOD → user said "get me a few results": limit=10 BAD → user said "get me a few results": limit=3 6. RANKING/SORTING — When user asks for "most relevant", "best matches", or "ranked by relevance": Set sort parameter to prioritize by semantic similarity (default behavior). When user asks for "oldest", "earliest", or "chronological": sort by date. 7. SOURCES — Combine multiple sources in a single call (do NOT split automatically). Only split sources if tool errors suggest it, then retry separately. 8. If no results are returned: Check the tool's guidance for date availability warnings and try adjusting to within available date ranges **COMMON USE CASES:** **"What are companies saying about AI infrastructure?"** (recent) → query='What are companies saying about AI infrastructure?', sources=['ALL_FILINGS', 'ALL_TRANSCRIPTS', 'ALL_NEWS'], startDate='2025-09-10', endDate='2026-09-10', limit=10 **"Find 10-K filings discussing energy consumption"** (specific year) → query='How are companies addressing energy consumption in their operations?', sources=['ALL_FILINGS'], formTypes=['10-K'], startDate='2024-01-01', endDate='2024-12-31', limit=10 **"Most relevant news about cloud AI competition"** (relevance ranked) → query='How are Google and Microsoft competing in cloud AI?', sources=['ALL_FILINGS', 'ALL_NEWS', 'ALL_TRANSCRIPTS'], ids=['GOOGL-US', 'MSFT-US'], startDate='2025-09-10', endDate='2026-09-10', limit=10 **"Positive Apple earnings call content"** (sentiment filtered) → query='What is Apple saying about its data center strategy?', sources=['ALL_NEWS', 'ALL_TRANSCRIPTS'], ids=['AAPL-US'], sentiment=['Positive'], startDate='2025-09-10', endDate='2026-09-10', limit=10 **RESULT STRUCTURE:** - vectorId: Unique identifier for the document chunk - similarityScore: Relevance score (0-1, higher = more relevant) - content: Text excerpt from the document - headline: Document headline - viewUrl: Link to the full source document - REQUIRED for citation rendering - themes: Themes associated with the document - sentiment: Sentiment of the document - source: ALL_FILINGS, ALL_NEWS, or ALL_TRANSCRIPTS - ids: Related company identifiers - limit: Always explicitly passed — MUST be 10 unless the user stated a specific number - EDGAR-specific: formType, sectionName, sectionNumber, docType, tableText - Transcript-specific: speakerName, speakerTitle, speakerCompanyName, financialYear, financialQuarter **CITATION LINK RENDERING:** - **Source links are ALWAYS included in the LLM response**, even if a link was already provided elsewhere in the response - Each result in the response includes: * viewUrl: Direct URL to the source document for this specific result * headline: Document headline used as the clickable link text - Example viewUrl: https://my.apps.factset.com/viewer-fusion/?_doc_sequence=18_doc_id=3188517-t&_doc_date=2025-02-26T20:42:21&_doc_product=FCST&_doc_docFn=UZFsdGVkX188ugKkIIsgIr76H4HbA+s6feJA0n0N/PhFIjd9LA **CRITICAL INSTRUCTION - SHOWING CITATION SOURCES:** Present each result with its citation link in Markdown format. AI Client will automatically render these as clickable hyperlinks. CRITICAL RULES: - Use Markdown link format with bold: **[headline](viewUrl)** - Make EACH result's headline a clickable link using its corresponding viewUrl - AI Client automatically render these as clickable hyperlinks in the chat - DO NOT show separate citation sections at the bottom - DO NOT show raw URLs - embed them in the Markdown links - Each result gets its own unique viewUrl — **always include it in the response, every time** - **PRESERVE THE EXACT viewUrl:** Do not modify, encode, transform, or substitute the viewUrl string. Pass it exactly as returned by the API without any changes to the domain, parameters, or encoding. - **No URL transformation:** Each viewUrl must be rendered precisely as provided without any modifications, URL encoding changes, or domain substitutions.
How do I improve a ChatGPT Plugin's discoverability?
The levers are the listing surface agents actually read: names, descriptions, keywords, tool metadata, and registry health. Which lever matters depends on where discovery breaks, which is what continuous measurement shows.
What are FactSet AI-Ready Data alternatives on ChatGPT?
As of 2026-09-29, FactSet AI-Ready Data competes with Aiera, AIR Credit Intelligence, Alpha Vantage, ALPHAPORT.AI, Balanços.AI, Bigdata.com, Bull AI, Clarity AI, CredCore - Tusk Liquid, Daloopa, FactorWeave, Financial Datasets, Financial Summarizer Pro, FinancialFilings, FinRank Shiver, Fiscal.ai, Fitch Solutions, FMP, FX Hedge, Lexfi, LSEG, Mansa African Markets, MetricDuck, Moody's Credit MCP, Moody’s, MSCI Connector, MT Newswires, Multiples.vc, Nomas Research, Octus, Pinegap, Preqin, Quartr, RoboSystems, S&P Global - Adaptive, S&P Global - Deterministic, Theia Insights, Trata, WikiFx, Wisesheets, Zacks Financial Data in ChatGPT Institutional Financial Data & Equity Research Platforms, ranked by public Discoverability Score.
Where is this profile measured?
This profile uses the geography attached to the latest public registry snapshot: US. Locale tags are intentionally omitted.