- Brand
- FactIQ
- Category
- Data & Analytics
- Primary Subcategory
- Market & Competitive Intelligence Data
Integration details
Description
FactIQ is a research data layer for AI agents. It gives users access to source-linked economic, market and company intelligence—including official statistics, structured company financials, filings and earnings-call evidence—inside tools such as ChatGPT and Codex.
- Integration type
- Plugin
- Verification status
- Not applicable
- Platform
- ChatGPT
- Primary Subcategory
- Market & Competitive Intelligence Data
- Secondary Subcategories
- None listed
- Brand
- FactIQ
- Access
- Account required
- First tracked
- 2026-09-17
- Tool count
- 14
- Market
- US
The Primary Subcategory used for this profile’s headline score.
Other Subcategories where the Integration is listed.
Your score is coming
ChatGPT now suggests Plugins on its own when they match a user's request.Your Plugin Discovery Score measures how often yours appears, and it will show here as soon as it’s ready.
What discovery looks like

Get alerts for FactIQ
Get updates when FactIQ’s Discoverability Score or category rank changes.
Competing in ChatGPT Market & Competitive Intelligence Data
View Category14 tools agents can invoke
List the data sources FactIQ has, plus the shared table structure. Call this once before exploring. Returns the visible schemas (organization + country), the ones with no data loaded yet (`schemas_without_data` — skip them), a per-schema dataset index, and the shared DDL for the `series`, `data_points`, `dimensions` and `compound_series` tables. schemas: optional comma-separated filter (e.g. "bls,bea"). full: heavy per-dataset descriptions instead of the compact index.
get_data_catalog
Full metadata for one dataset: topic, methodology, discontinuities, any base-change notice, plus the live dimensions and example series. Call after `search_datasets` narrows you to a dataset.
describe_dataset
Recent market data the warehouse lags on: quotes, OHLCV, company profiles, FX, and commodities. Set data_type to price_history for stocks, currency pairs, and commodities; the asset format determines which market is queried. Use search_company_filings for financial statements and reported facts.
get_market_data
Get satellite-derived indicators aggregated over a country, one state/province, or a bounding box. Use for fires, emissions-based activity, rainfall, vegetation, temperature, and soil-moisture questions. For a sub-national area, call one state/province at a time. Informal regions such as "north India" or "the Midwest" have no boundary, so cover them with one call per state or a bounding box; using the whole country answers a different question. Grid cells and fire detections are activity snapshots, never fire perimeters. For ndvi_s2 and *_tropomi grids, drop or flag cells with low valid_obs_share. Results include units, source attribution, and caveats; cite the attribution. External-provider calls can take about 30 seconds, and rainfall or grid calls can take longer.
get_geo_data
Fetch one series' data: timeseries, tabular, or COMPOUND:: all work. Returns title, units, frequency, notes and data points, with source metadata. `transform="yoy_pct"` (percent change) or `"yoy_diff"` (difference, for rates) adds a column with the change versus the same period one year earlier, matched by calendar date — use it for inflation or growth from one series instead of a `LAG(value, 12)` query, which goes wrong after any missing month. The cell is null where the prior-year period is absent, and `transform.periods_without_prior` lists those periods. The transformed value is rounded to 4 decimal places; round it once more only when you write the final figure, at the precision you report. If the result carries a `coverage_note`, the series has periods with no observation (listed in `missing_periods`): say so in the answer, leave them blank rather than interpolating, and label any aggregate that spans them as partial. SEC-backed results include `row_sources` keyed by `result_index`; each entry identifies the supporting filing, accession/form/publication date, whether the observation is reported or derived, and its standardized `source_link`. Cite that row's source URL beside any figure and label derived observations as derived. A document-precision link does not open an exact passage. IMF (`imf` schema) results also carry `projections_start_after` (the last year the IMF counts as actual; later years are IMF staff projections), `release_label` (the IMF publication, e.g. "Fiscal Monitor (October 2026)") and, when either is known, a `projection_note`. Say which years are projections when you use them. Both fields are null when the IMF gives no such fact for the series. At most 50 points come back; if the series is longer the result is flagged `"truncated": true` — narrow it with `from_year`/`to_year`, or pull the series through `run_sql` with an aggregation (e.g. monthly/quarterly via `date_trunc`) rather than trying to fetch every point.
get_series
Run a read-only SELECT against the FactIQ data warehouse, scoped to one schema — the power tool for joins, pivots and aggregation. Read-only role, 30s statement timeout, with FactIQ's query transforms and series-metadata enrichment. Resolve ids from `series` before filtering `data_points`. `auto_retry=true` opts into a server-side reviser on zero rows. See the `factiq://guide/sql` resource. Returns at most 50 rows. If the query matches more, the result is flagged `"truncated": true` — that is your cue to **aggregate or compute in SQL** (`GROUP BY`, `date_trunc`, a SUM/AVG/rank/ratio) and return that, NOT to try to fetch the raw rows. A chart or a summary needs the aggregated result, and large raw results don't fit in context anyway. Year-over-year and other period comparisons must join on the calendar period (`date_trunc('month', prior.time) = date_trunc('month', cur.time) - interval '1 year'` — the stored day of the month varies by source, so never compare exact dates), never on a row offset such as `LAG(value, 12) OVER (ORDER BY time)`: a series with one missing month compares the wrong periods for the twelve rows after the gap (LEAD: the twelve before it) and the numbers still look plausible. For one series prefer `get_series` with `transform`. When the result carries a `coverage_note`, the rows have periods with no observation (listed in `missing_periods`, per series): name them in the answer, do not interpolate, and label any aggregate that spans them as partial. `page` is the one exception and works only on the `nasa_fires` schema, where a row is a single fire detection that belongs to no series and so cannot be aggregated into one. Each page holds 50 rows; the answer carries `page` and `has_more`, and you read the next block with `page=2`, `page=3` and so on. Give the query an ORDER BY, otherwise Postgres may return the same row on two pages and never return another. Still prefer a count or a total when that answers the question — paging through thousands of detections does not. Runs through FactIQ's read-only database role, which rejects any attempt to modify data (INSERT/UPDATE/DELETE/DROP/…).
run_sql
Find datasets by keyword across every schema — the first discovery step. Keyword ranking (not semantic) over dataset titles and topics. Returns ranked {schema, dataset_code, title, topic}. Follow up with `describe_dataset` for detail, or `run_sql` on the series/dimensions tables for exact series. `latest_data_date`, when present, is the period start date of the newest stored value in the whole dataset (left out when unknown); one part of a dataset can stop earlier, so check the end dates of the series you use.
search_datasets
Search earnings-call intelligence from live calls, decomposed into atomic, quote-anchored claims and Q&A pressure points — never a raw transcript dump. Retrieval for "claims" and "pressure_points" is lexical, not semantic. A nonempty query uses an OR-of-tokens full-text candidate set; strict websearch_to_tsquery matches receive a fixed ranking boost, so strict matches rank ahead of loose partial-term matches. Lower-ranked rows may match only some query terms. If that filtered full-text search returns no rows, a trigram fallback handles typos and sub-word variants. Quoted phrases use websearch syntax, but synonyms are not inferred: try the company's own vocabulary ("capex" and "capital expenditure", segment names, abbreviations). Word forms are matched by their English stem, so "lock" also finds "locked" and "locking", and a hyphen counts as a space, so "lock-in" also finds "locked in" and "locked into". For a broad screen, prefer this tool over run_sql regular expressions, which match only the exact spelling. An empty or partial result is not proof that management did not discuss a topic; coverage and vocabulary both matter. Target and filter semantics: - "claims" (default) searches or browses normalized management/analyst claim rows. ticker, quarter_filter, claim_family, section, detail, and limit apply. claim_family matches primary or secondary families; section is "prepared_remarks" or "qa". Base rows include direction/value/unit where checkable, assertion_status, canonical_statement, verbatim_quote, speaker, speaker_role, section, transcript_id, source_block_index, qa_turn_id, and a source_link object. detail=true rows also carry entity_refs: the companies, products and bodies the claim names, each with raw_name, ref_type (competitor, customer, supplier, partner, product, regulatory_body, other, none), is_implied, entity_name, and entity_ticker. - "pressure_points" searches or browses what analysts pressed for and whether management confirmed, declined, deflected, or partially answered. ticker, quarter_filter, claim_family (the linked family), detail, and limit apply. section is ignored because every pressure point is from Q&A. Base rows include specific_ask, response_quality, refused_number, linked_family, linked_claim_id, verbatim_quote, speakers, transcript_id, source_block_index, qa_turn_id, and a source_link object. speakers lists every transcript turn the quote draws on, in spoken order, each with block_index, speaker, role (analyst, ceo, cfo, ...) and firm as stored for that turn; one quote usually spans an analyst's question and a manager's answer, so attribute each part of the quote to its own speaker. - "disclosure_profile" is a direct company lookup, not text search. The ticker is the first ticker value, or query when ticker is empty. Profiles are curated separately from transcript coverage, so a covered company may not have one; availability is "available" or "unavailable" accordingly. quarter_filter, claim_family, section, detail, and limit do not narrow it. - "coverage" is corpus inventory, not text search. ticker and limit apply; query, quarter_filter, claim_family, section, and detail do not narrow it. Rows report calls_covered, earliest_period, latest_period, latest_call_date (the call date of latest_period), claims, pressure_points, and recent_calls (the newest stored calls, each as its fiscal_period and call date). Fiscal period labels follow each company's own fiscal year, and they are not always the calendar year of the call: a retailer's March 2026 call can be FY2025Q4. Before you pin quarter_filter, read the fiscal_period of the call you want from recent_calls. When a quarter_filter matches no call of the requested tickers, the result note lists the periods and call dates that are stored for them. An empty query is a capped browse, not a completeness guarantee. Rows are ordered by newest fiscal period/call and then source-block (spoken) order within one call. Every response is limited to at most 50 rows, and a browse that reaches its limit may omit additional rows even if no truncation flag is present. For a latest-call note: (1) call "coverage" with one ticker, (2) read latest_period, (3) call "claims" with that ticker, quarter_filter=latest_period, query="", detail=true, and a deliberate limit, then (4) call "pressure_points" with the same ticker and quarter. Treat both browses as capped evidence, not a complete transcript. Narrow large result sets with ticker, quarter, target, claim_family, and (for claims) section. For media quotes, run_sql can read `transcripts.appearance_claims.verbatim_quote`; other transcript tables remain restricted. Evidence rules: canonical_statement is normalized and must not be quoted as verbatim. Quote only verbatim_quote, with its speaker, role, ticker, and fiscal period. A […] inside verbatim_quote marks omitted transcript sentences between non-adjacent evidence spans: preserve it exactly when quoting, and never present text on either side of it as one continuous statement. When a quote is used, render source_link.source_label as the Markdown link text for source_link.source_url beside the claim. The label names the company, fiscal period, and earnings call transcript; never replace it with an ingestion vendor. Do not make a second call just to find a citation, do not invent a replacement when source_url is null, and do not call a document-level link exact context. source_locator still identifies the stored transcript block or Q&A turn. assertion_status is load-bearing: analyst_hypothesized is the analyst's framing, while mgmt_declined_to_confirm is a refusal, not a management assertion. Spoken call claims are a different source class from filed XBRL actuals (`run_sql` on the `sec` schema) and formally issued targets (the `sec_guidance` dataset); label them separately. Examples: - Latest call: search_earnings_transcripts(query="", search_target="coverage", ticker="MU"), then repeat with search_target="claims", quarter_filter=<latest_period>, detail=true, limit=50, and finally with search_target="pressure_points" for the same ticker and quarter. - Cross-company theme: search_earnings_transcripts(query="capital expenditure capacity", search_target="claims", ticker="MU,NVDA", detail=true); inspect each returned row for topical support, do not assume every term matched, and retry vocabulary as needed. - Disclosure habits: search_earnings_transcripts(query="", search_target="disclosure_profile", ticker="MU"). claim_family codes: driver_attribution, forward_conviction, prior_view_revision, strategic_agreement, pricing_mechanics, demand_magnitude, capacity_milestone, competitive_positioning, cohort_behavior, cost_margin_bridge, capital_allocation, stated_risk_constraint, qa_dynamics, regulatory_policy, pipeline_backlog, commodity_hedging, ma_deal, labor_org. Topic paths (topic_path column) are rooted at: demand, supply_capacity, pricing, cost_margin, capital, competition, customer, product_roadmap, risk, governance.
search_earnings_transcripts
Search what people said outside earnings calls, in two kinds of source: - Interviews: podcasts, TV interviews and conference talks by company executives, investors, fund managers, analysts, economists, journalists and other guests. - Central-bank documents: speeches, testimony, policy statements, minutes, press-conference transcripts, projections and reports from the Federal Reserve Board and regional Reserve Banks, the European Central Bank and euro-area national central banks, the Bank of England, the Bank of Japan, the Reserve Bank of India, the People's Bank of China, the Bank of Korea, the Hong Kong Monetary Authority, Taiwan's central bank and others. Documents in other languages yield English paraphrases. Use it for questions about what a named person or institution said: "what has Waller said about rate cuts", "what did the ECB say about inflation at its last meeting", "what did Jensen Huang say about export controls". Claims cover listed and unlisted companies (OpenAI, DeepSeek, MiniMax), institutions (the Federal Reserve, the European Central Bank, regulators), and whole markets and industries, not only the speaker's own employer. How to search: put one to three key words in query, and put the speaker in person, the publisher in institution and the kind of document in appearance_type. A returned row must contain most of the query words, so a long question returns fewer rows than its key words alone. Retry with the speaker's own vocabulary or a synonym before concluding there is no coverage. No serving-time model interprets or expands the query: retrieval is lexical, not semantic. It tries strict full-text matching first, loose any-term full-text matching only when strict matching returns no candidates, then trigram matching only when both full-text stages are empty. Canonical search_target values: - "search" (default): blended structured claims and broad passage cards. - "claims": normalized decision-relevant claims only. - "passages": broad substantive paraphrase cards only. - "pressure_points": stored refusal and declined-to-confirm claim rows. - "appearances": video-level catalog rows. - "coverage": company-level structured-corpus inventory. "all" maps to "search", "videos" to "appearances", and "companies" to "coverage" for older clients; "search" is the primary blended target, not a legacy alias. Result contracts: - search/claims/passages/pressure_points return result_kind, canonical_paraphrase, speaker, primary ticker, topic labels, video/channel/publication metadata, lexical relevance, and source_url (a timestamped YouTube deep link, the episode page for a podcast, the document page for an official document, or the PDF page of a press-conference transcript). detail=true adds normalized claim and attribution fields plus institution, document_kind and event_date (null for interviews), but never raw transcript text or evidence spans. - appearances returns video metadata, primary ticker, attribution metadata, matching claim count, URL, and relevance score. detail has no effect. - coverage returns company-level appearance, publication-date-span, channel, claim, and low-confidence-attribution counts. It is structured coverage, not a per-person acquired-video/hour inventory; query, sort, and detail have no effect. Filter and ordering semantics: - company is comma-separated tickers and company names, mixed freely. A stored ticker matches the appearance's company or a section subject with that ticker; any other value is read as the name of a company, institution, or organisation a podcast section is about, matched after dropping punctuation, a leading "The", and corporate suffixes. Every ticker attached to a matched name joins the ticker filter, so "Alphabet" also reaches GOOGL rows. The result records company_tickers, company_names, company_matched, and company_unmatched (a value that matched nothing, with up to five possible matches); an unmatched value returns no rows, not an error. company_filter is the old name of company and behaves the same; passing both is an error. The appearances and coverage targets also match every value, upper-cased, against the entity references of claims (products, rivals, partners such as "CUDA"); a value found only there is listed under company_references. - person is a case-insensitive substring over the finding speaker and/or appearance speaker metadata. appearance_type applies to every target: podcast, tv_interview, conference and other for interviews; speech, testimony, minutes, statement, press_conference and hearing for official documents. country ("US") restricts every target to official documents of that country; institution ("Federal Reserve") is described with show and channel below. - claim_family restricts structured claims. With blended search it suppresses passage cards; pairing it with search_target="passages" is an error. For appearances/coverage it requires videos with matching structured claims. - date_from/date_to are inclusive YYYY-MM-DD bounds on the video's stored publication/upload date, which can differ from the recording or event date. - show, channel, and institution are case-insensitive substrings of a podcast show name, a YouTube channel name, and a publishing institution; each returns only rows of its own kind, and when more than one is given rows matching any of them are returned. - relevance orders lexical score first, then publication date; newest orders publication date first, then lexical score. Coverage has fixed inventory ordering by latest covered publication date. - limit is one page of 1-50 rows and offset skips that many ranked rows before the page, so limit=15 with offset=15 returns rows 16-30 of the same ranking. Every result carries has_more, plus next_offset when more rows follow; call again with that offset to read the next page. With an empty query, each target browses its most recent rows (search and claims show claims only). Evidence safety: canonical_paraphrase is a normalized paraphrase, not a transcript quotation. Cite source_url (timestamped for YouTube, page-anchored for PDF transcripts) with the returned speaker, publication date, and video or document metadata. FOMC minutes describe the meeting of event_date and are published three weeks later; the Committee, not one person, is their speaker. Do not put canonical_paraphrase in quotation marks unless you independently verify the wording at the source link. The tool never returns raw transcript text. Detail-field safety: internal audit flags are not published; judge a claim from value, assertion_status, and the timestamped source link. company_attribution_confidence and company_attribution_source concern only the video-to-company/ticker assignment; inferred attribution is not independent confirmation.
search_media_appearances
Search recent business, economics and health news from major financial publishers and public-health agencies. Each row has the headline, the publisher's short summary and a link (article bodies are never returned), plus FactIQ metadata: `tickers` of listed companies named in the text and an `analysis` block (keywords, geography, and a one-sentence investor `angle`). Coverage starts between late 2024 and mid 2026, depending on the feed. All arguments combine (AND). - query: lexical full-text search over headline, summary and analysis; every word must match. Start with ONE distinctive term ("Novartis", "copper"). If nothing matches, it retries matching ANY word (meta.query_mode = "any_term"). Supports "exact phrases" and -exclusion. - tickers: bare symbols (["NVDA", "RELIANCE"]). Share classes and cross-listings match automatically (GOOG = GOOGL, TSM = 2330). - topic: one of markets, economics, companies, technology, politics, world, energy, health, india, opinion. With a query it only boosts that topic's articles; without one it filters to them. - start_date / end_date: inclusive ISO dates on publication time. - sources: publisher slugs, as shown in the `source` field of results. - sort: "latest" (default) or "relevance" (needs a query). - limit: 1-50, default 20. Returns {rows: [{id, published_at, source, feed, topics, title, summary, url, tickers, analysis}], meta: {matched, returned, sort, query_mode?, topic_mode?}}. `analysis` is null when an article has no business content or is not yet analysed. Follow up macro stories with search_series / run_sql and company stories with get_market_data / search_earnings_transcripts.
search_news
This is FactIQ's central tool for company filings. It searches structured facts and report metadata from one company's filed reports, for every company in the filings store: US SEC filers (10-K, 10-Q, 8-K, plus 20-F, 40-F, 6-K for foreign filers, and the IPO registration statements S-1 and F-1 with the final prospectus, 424B4 or 424B1) and companies listed in Germany, the UK, France and Switzerland (annual, half-year, Q1, and Q3 reports; for example company="BAS" for BASF SE from German issuer reports in EUR, company="ULVR" for Unilever plc from the FCA National Storage Mechanism, company="MC.PA" for LVMH from the AMF via info-financiere.gouv.fr, and company="NESN" for Nestlé from the reports on the company's own website; UK values are in the issuer's reporting currency, GBP, USD or EUR, French values in EUR, and Swiss values in the issuer's reporting currency, CHF, USD or EUR). A UK, French or Swiss company whose symbol is also a US ticker is stored with its exchange suffix (.L London, .PA Paris, .SW Zurich); the bare symbol goes to the SEC filer, so company="MC" is Moelis & Company and company="MC.PA" is LVMH. It also covers the Nifty 50 companies listed in India, from the quarterly financial results they file with the National Stock Exchange (Q1 to Q4; the Q4 results also carry the audited full-year figures; values in INR; for example company="RELIANCE" for Reliance Industries). It also covers large companies listed in Japan, from the securities reports they file on EDINET, and in South Korea, from the business reports they file on DART (annual, half-year, Q1, and Q3 reports; values in JPY or KRW as filed; for example company="7203.T" for Toyota Motor and company="005930.KS" for Samsung Electronics). The search is deterministic and does not call a language model. Every successful response is a tree and does not expose database row IDs. Set format="json" for the structured tree field. Set format="pretty" for only a human-readable rendered_tree text. The two formats are never returned together. JSON filing and fact nodes retain source_url and add a standardized source_link object for the original filing/report; the pretty rendering ends with a "Source documents" list mapping each cited filing to its URL. When using a returned figure, place its source URL beside the claim as a Markdown link, for example: FY2025 revenue was $40.0B ([Visa Inc. FY2025 10-K](https://www.sec.gov/Archives/...)). A sources line that names the filing without linking its URL is not sufficient. Do not make a second call solely to find a citation or substitute a related press release. source_precision="document" means the URL opens the source document, not an exact passage. Use an exact ticker when possible. A company name is accepted only when it identifies one issuer. A share-class sibling ticker resolves to the same SEC filer (for example GOOGL resolves to the stored GOOG). If a ticker has several exact matches, possible_matches lists every tied company and its identifiers. When nothing matches, possible_matches lists the closest stored companies. When a bare ticker resolves to one company and other companies are stored under that ticker plus an exchange suffix (MC resolves to Moelis & Company; MC.PA is LVMH), the result is still the bare-ticker company and possible_matches lists the suffixed companies. concept selects one registered financial concept and returns it over time. For example, concept="revenue" selects the best revenue concept stored for that company. The response states the selected concept. Use query instead for a broad search across several concepts. search_target controls the tree content. coverage shows available report types and dates. filings shows report records and source URLs. metrics shows available concepts, dimensions, units, and period coverage. facts shows reported numeric values. An empty facts browse is filing-first. A facts search with query or concept is concept-first so that values across reporting periods stay together. For a US-listed company that went public recently, statement facts for the periods before its first periodic report come from the financial statement pages of its IPO registration statement, and single quarters also come from the quarterly results table that many prospectuses print in their MD&A (report_type="quarterly" returns them); a figure that a later report states for the same period replaces it. metric_class="offering_terms" returns the offering price, shares offered and proceeds printed in the registration statement. commentary and risk_changes return qualitative statements extracted from SEC filings when each filing was processed; every statement carries a verbatim quote from the filing. commentary returns management's explanatory statements from MD&A sections and earnings press releases: growth drivers, demand and pricing commentary, capacity and execution milestones, strategy changes, and vaguely quantified statements such as "grew mid-teens" with a numeric range attached. risk_changes returns year-over-year changes in the stated risk factors of annual reports (Item 1A or Item 3.D): new, modified, and removed risks, with the changed passage quoted. A period with no risk_changes rows means the risk factors were unchanged from the prior year only when the result's annual_report_years lists that year as compared; other years were never compared. A year also listed in compared_with_prospectus was compared with the IPO prospectus, so no rows means unchanged from the prospectus. It never means that the company reported no risks. commentary also returns the MD&A statements of a company's final IPO prospectus; set report_type="424B4" (or "424B1") to read only those. Both targets cover US SEC filers only; commentary and risk_changes remain SEC-only and return no rows for German, UK, French, Swiss, Indian, Japanese, or Korean issuer reports. query searches concept names, source labels, source codes, XBRL concepts, aliases, definitions, and segment names. For commentary and risk_changes it searches topics, statements, and quotes. Filters are applied before search. report_type accepts a common report type (annual, quarterly, half_year) or a source form such as 10-K or 10-Q. For German, UK, and French filers, quarterly covers the Q1, half-year, and Q3 reports; their source forms are the document codes of the source (FCA ACS, FR, IR; AMF AMF-RFA, AMF-RFS, AMF-IT, AMF-URD, AMF-RES). An Indian company files no separate annual report: its Q4 results hold the audited full-year statements. For Indian filers, quarterly covers the Q1, Q2, and Q3 results plus the fourth-quarter values of the Q4 results; annual covers the Q4 results; the source forms are "Financial Results" and "Integrated Filing (Financials)". fiscal_period="FY" returns the full-year values of the Q4 results. For Japanese and Korean filers, quarterly covers the Q1, half-year, and Q3 reports. Japan ended the quarterly securities report for quarters that start on or after 1 April 2024, so later Japanese periods have no Q1 or Q3 report. The Korean source forms are the DART report codes 11011 (annual), 11012 (half-year), 11013 (Q1), and 11014 (Q3). fiscal_year and fiscal_period accept company reporting labels such as 2026 and Q3. Earnings 8-Ks take their quarter from the 10-Q or 10-K whose period ended within the 80 days before the 8-K, and keep the 8-K filing date as the reported date. A freshly announced 8-K whose periodic filing has not arrived yet carries a quarter estimated from the company's fiscal calendar, replaced by the exact period when the filing lands. If neither is available, the tool omits the fiscal label instead of guessing. Some companies file the same concept twice for one period and segment — for example a gross segment total next to a net-of-eliminations figure. Both are served: the extra line is its own series node whose name ends in "(reported line 2)", and its evidence_note says so. The two lines are alternative statements of the same item. Never add a "reported line 2" series to its ordinary counterpart — that double-counts. A fact's value is served as stored, and the tool never changes its sign. Figures read from the report pages of companies in Germany, the UK, France, Switzerland, and India carry the sign the page prints, so a figure printed in brackets is negative. A few older rows from these markets were stored with another sign, and their evidence_note says so. SEC XBRL, Japanese, and Korean figures, and other figures taken from XBRL tags, carry the sign of the XBRL tag, which can differ from the page: Apple's 2024 cash flow statement prints its share buybacks as (94,949) million, and the stored value is a positive 94,949,000,000. Where FactIQ has stored what the sign stands for, the fact carries sign_meaning, a short text such as "Total expenses shown in brackets in the income statement.", and sign_meaning_kind, one of money_paid_out (cash that left the company in the period, for example "Tax paid"), money_received (cash that came into the company in the period, for example "Proceeds from sale of shares"), expense (a cost or loss that lowers profit), income (revenue, a gain, or a profit item that raises profit), liability (a balance the company owes at a date), asset (a balance the company owns or is owed at a date), deduction (an amount taken off another line to reach a subtotal, for example treasury shares in equity), increase (the balance of the item in the label went up in the period; it never means "adds to cash" or "adds to profit"), decrease (the balance of the item in the label went down in the period), net_amount (the result of pluses and minuses, for example profit or loss, an operating margin, or net cash flow), change_in_balance (a movement line in a table that rolls a balance from the start to the end of the period, for example additions or disposals), as_reported (the sign has no meaning beyond the printed number, for example total equity or a share count), or other (none of the 12 fits; the sign_meaning text says what the sign means). Read the value's sign together with them before adding or subtracting figures. A fact without them has no stored meaning; SEC XBRL and Japanese figures carry none, and most Korean figures carry them. The pretty rendering prints the meaning after the value. When a company states one per-share figure with two values, both are served as is, and the series name ends with the reason: "on the share count before/after the 2-for-1 share split of 2025-04-01" for earnings per share counted before or after a share split, or "as stated in an earlier report" / "as restated in a later report" when a later report changed the value. A figure whose value a later, amended or restated report changed carries revision_note, for example "revised: 1,942 in the report of 2026-02-10, now 1,950 (restated, report of 2026-05-04)", or "revised 2 times; last: ..." when the value changed more than once. The note also appears when a still later report repeated the revised value. The pretty rendering prints it after the value. For non-admin callers, active_only is always enforced by the tool endpoint. With active_only enabled, every target is limited to facts currently marked active and serving; coverage and filings omit reports with no such facts. If an exact-ticker metrics or facts request has no matching serving data, the tool falls back to Twelve Data standardized consolidated statements. A resolved issuer listed in Germany, the UK, France, Switzerland, India, Japan, or South Korea is sent to the vendor with its exchange suffix (.DE, .L, .PA, .SW, .NS, .T, .KS, .KQ) appended to a bare stored ticker; a stored ticker that already carries the suffix (MC.PA, RELIANCE.NS, 7203.T, 005930.KS) is sent as is, and the bare symbol (RELIANCE, 7203) is sent with the stored suffix. Company names and bare tickers without a resolved issuer remain filings-database-only so vendor data cannot be attributed to a different issuer with the same ticker. A request that names no report_type or fiscal_period tries quarterly statements and then annual, so annual-only vendor coverage still answers. A concept the filings database already holds is never answered from the vendor, even when the other filters leave no rows. Fallback values carry no filing-document, source-page, or segment evidence. coverage, filings, and segment-filtered requests remain filings-database-only.
search_company_filings
Find series in one schema by title terms (substring match, not semantic). Supply already-decomposed terms; prefer short stems (e.g. "rare" over "rare earth"). Includes active COMPOUND:: series. For anything this misses, fall back to `run_sql` exploration on the `series` and `dimensions` tables.
search_series
Report a problem with FactIQ's data or tools to the FactIQ team. Call this when a tool result looks broken: - "data_issue" — a value that contradicts the official source, wrong units or scale, duplicated or missing periods, an obviously wrong label. - "tool_error" — a tool that errors, times out repeatedly, or returns malformed or self-contradictory results. - "missing_data" — a dataset or series the catalog advertises but that returns nothing, or coverage that ends far earlier than the source's. - "other" — a concrete defect in the published tool contract, such as the documented arguments or result shape contradicting actual behavior. Write one short, specific message with the concrete identifiers: the schema, dataset_code or series_id, the SQL you ran, and what you expected vs. what you got (with the official source's value or URL if you have one). Do not include the user's personal details or your conversation. Do not call this for intentional capability boundaries or simply because a user requested an unsupported action. FactIQ cannot mutate warehouse data, return complete raw transcripts, or publicly publish charts/reports; those limits are expected behavior, not defects. A concrete tool result must show the reported malfunction or data problem. This is one-way: the FactIQ team reviews every report, but nothing comes back to you. File it and continue with the user's task — never block on it.
send_feedback
Fetch FactIQ's house-style authoring guides so anything you build matches FactIQ's conventions and look. Call this before producing a chart, a report, or written analysis from FactIQ data, and follow what it returns. By default, use FactIQ's style for all FactIQ work unless the user asks otherwise. You can fetch several at once. Pass any combination of: - "chart" — how to build and style a FactIQ chart: which chart type, finding- style titles, data hygiene, the FactIQ colour palette and plot surface, and sourcing - "report" — report structure, voice, and per-chart sourcing - "sql" — query idioms and pitfalls for FactIQ's tables - "earnings" — quoting discipline, spoken-vs-filed sourcing, guidance tables, and claim-verification patterns for anything built from search_earnings_transcripts - "all" — every guide Returns each requested guide's markdown text, keyed by name. This is free — it does not count against your tool quota.
get_style_guides
FactIQ ChatGPT Plugin FAQ
How the directory, categories and Discoverability Score work.
Read the methodologyHow do I improve FactIQ's ChatGPT Plugin 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 FactIQ alternatives on ChatGPT?
As of 2026-11-01, FactIQ competes with 10Signals, ABRAMS Trade Intelligence, AD Vantage, Adzviser Search Ads 360, AImport.AR, AIsa GTM, akta.pro, Ambush and 85 more in ChatGPT Market & Competitive Intelligence Data, 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.