FactIQ
Financial and economic data
- 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
- 15
- Geography
- US
The Primary Subcategory used for this profile’s headline score.
Other Subcategories where the Integration is listed.
Get alerts for FactIQ
Get updates when FactIQ’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 Market & Competitive Intelligence Data
View Category15 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. 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. 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
Render a FactIQ-styled interactive chart inline, from data you have already fetched. Before calling, finish all data retrieval, calculations, source reconciliation, and title/value checks. This tool does not publish or host a public page or create a share link. FactIQ-hosted publishing is unavailable. Explain that limitation and offer the inline chart or a local artifact; do not inspect FactIQ's legacy web interface, use browser automation, or probe HTTP endpoints for a publishing workaround. Do not call send_feedback for this intentional capability boundary. For each intended chart, call this tool exactly once, only after its data and title are final; never render a draft and then re-render a correction. Build the final numbers from run_sql / get_series, aggregated to chart resolution. - x_values: the x axis — ISO dates ("2024-01-01") or categories, sorted. These are the positions; keep them as real ISO dates for date axes so the axis spaces correctly. - series: one or more {label, values}; each `values` list lines up 1:1 with x_values (use null for gaps, don't drop entries). - chart_type: "line" (default), "bar", or "area". - units: y-axis units, e.g. "Percent". Axis-label control (both optional — leave unset for normal date axes, which auto-format to the most compact form, e.g. '24 or Jul 24): - x_tick_format: hint the date granularity — "auto" (default), "year", "quarter", "month", or "date". Use e.g. "quarter" to label quarterly points "Q1 '24", or "date" to force full dates. The widget still chooses how many labels fit and spaces them; this only sets the text. - x_labels: fully custom tick text, one per x_value (1:1 with x_values), for labels the widget can't infer — e.g. fiscal quarters ["Q2 FY19", …, "Q2 FY26"] or custom category names. Takes precedence over x_tick_format. x_values still drives positioning; x_labels is only the text. Don't use this just to reformat dates — prefer x_tick_format. Give the chart a finding-style title with the numbers in it (see the chart style guide). Keep it to a handful of series and a few hundred points at most — aggregate in SQL first if needed.
render_chart
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.
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). 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. - "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, transcript_id, source_block_index, qa_turn_id, and a source_link object. - "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, claims, and pressure_points. 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
Deterministically search precomputed intelligence from podcasts, TV interviews, and conference talks outside earnings calls, and from official documents: Federal Reserve speeches and congressional testimony, FOMC statements, implementation notes, minutes, press-conference transcripts and Summary of Economic Projections tables. The speakers are company executives, investors, fund managers, analysts, economists, journalists, central-bank officials, and other guests, and their 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. No serving-time model interprets or expands the query. Retrieval for structured findings is lexical, not semantic: strict full-text matching is tried 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. Natural-language questions work because person names and common question scaffolding are normalized. Prefer concise topical terms; retry synonyms or the speaker's own vocabulary before concluding there is no coverage. 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. Compatibility aliases remain accepted for older clients: "all" maps to "search", "videos" to "appearances", and "companies" to "coverage". New callers should use the six canonical values; "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. Alternate spellings can return different appearances or coverage rows because reference names are matched exactly ("open ai" and "OpenAI" select the same subject but not the same references); the claims rows are the same. - 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. institution (substring, "Federal Reserve") and country ("US") restrict every target to official documents. - 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 is a case-insensitive substring of the show or channel name ("Odd Lots", "Les experts") and applies to every target. - 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, search and claims browse recent high-signal claims without generic passage cards; passages browses recent passage cards; pressure_points browses recent refusal rows; appearances browses the video catalog; coverage returns the company inventory. Each result set is capped at 1-50 rows. 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: detail adds normalized claim fields only. The extraction pipeline's internal audit flags are not published, because they describe how a row was built rather than anything checkable about the claim; judge a claim from value, assertion_status, and the timestamped source link instead. 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 the curated news feed FactIQ continuously ingests: Bloomberg, the Financial Times, and the Wall Street Journal RSS sections, plus India-macro (Zerodha Daily Brief, ET HealthWorld) and global-health sources (WHO, ECDC, CDC MMWR, STAT, KFF, and others). Each result is the article's headline, its short publisher-written summary, and the link to the publisher — full article bodies are never stored or returned — plus FactIQ-derived metadata: tickers of listed companies explicitly named in the text ({symbol, exchange, country}) and an `analysis` block: keywords, a geography, and an `angle` — one sentence on why the story matters to an investor. Pivot macro stories into search_series / run_sql, and company stories into get_market_data / search_earnings_transcripts / run_sql on the sec schema. Coverage is recent news, not an archive: most feeds start late 2025 to mid 2026 (Bloomberg back to Dec 2024). All arguments combine (AND). - query: full-text search over headline + summary. Lexical, not semantic — every word must match, so start with ONE distinctive term ("Novartis", "copper") and add words only to narrow. If a multi-word query matches nothing, the tool automatically retries matching ANY of the words, ranked so rare words and multi-word matches come first (meta.query_mode = "any_term" when that happened). Supports quoted "exact phrases" and -exclusion. - tickers: match articles naming any of these companies (bare symbols, e.g. ["NVDA", "RELIANCE"]). Share classes and cross-listings of major companies match automatically (GOOG also matches GOOGL; TSM also matches its Taiwan listing 2330) — pass whichever symbol you know. Most macro stories legitimately name no listed company. - topic: one of markets, economics, companies, technology, politics, world, energy, health, india, opinion. Combined with a query, topic is a ranking preference — articles from that topic's feeds rank first, but matches from other sections still return (feed sections are coarse; an energy story often runs in a markets feed). Without a query it is a hard filter on the topic's feeds. - start_date / end_date: ISO dates (YYYY-MM-DD) on publication time, inclusive. Start wide or omit; narrow only after seeing results. - sources: publisher slugs, any of bloomberg, cdc-mmwr, ecdc, et-healthworld, fierce-pharma, ft, global-fund, kff, stat-news, udn-money, un-news, who, wsj, zerodha. - sort: "latest" (default, newest first) or "relevance" (text-match rank; needs a non-empty query, otherwise falls back to latest). - limit: max rows (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 for articles not yet analysed or with no business/economic content.
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 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" 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). 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. 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. 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 or that filing is not yet processed — never that the company reported no risks. Both targets cover US SEC filers only; commentary and risk_changes remain SEC-only and return no rows for German, UK, or French 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). 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. 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, or Switzerland is sent to the vendor with its exchange suffix (.DE, .L, .PA, .SW) appended to a bare stored ticker; a stored ticker that already carries the suffix (MC.PA) is sent as is. 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
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 FactIQ alternatives on ChatGPT?
As of 2026-09-28, FactIQ competes with ABRAMS Trade Intelligence, AIsa GTM, CE Cosmos Deep Dive, CE Cosmos Signal, Clutch.co, Company Dossier, Comscore, Crunchbase, D&B Finance Analytics, Datapublica, Dcipher Analytics, DiligenceSquared, Dow Jones Factiva, ECDB, Economic Mind, GlobalSource Partners, Grata EU, Iceflower, Impala, InfoTrack.ai, JARS LT, JoomPulse, Kindora, Lux AI, Net Zero Insights, Noah, Nogogo AI, Ornn Data, Partnership Leaders Research, Pi by Placer.ai, PolicyNote, Powerset Research, SmartCustomer, Songstats, Soundcharts, Tembi Intelligence, The Declarant, Trace, Tracxn MCP, Website Launches, Windsock, ZINT 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.