- Brand
- Interactive Brokers
- Category
- Finance
- Primary Subcategory
- Trading & Live Market Data Platforms
Integration details
Description
Connect your Interactive Brokers account to ChatGPT and manage your portfolio through natural language. Ask about positions, balances, P&L, allocations, and open orders, or request real-time quotes and historical market data. You can also prompt ChatGPT to draft trade instructions — for example, "Buy 100 shares of AAPL at a limit of $200" — which are sent to your IBKR account for your review and approval. ChatGPT never submits orders directly to the market. Any trading symbols displayed or discussed are for illustrative purposes only and are not intended to portray recommendations. Member SIPC.
- Integration type
- Plugin
- Verification status
- Not applicable
- Platform
- ChatGPT
- Primary Subcategory
- Trading & Live Market Data Platforms
- Secondary Subcategories
- None listed
- Brand
- Interactive Brokers
- Access
- Account required
- First tracked
- 2026-06-04
- Tool count
- 37
- 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 Interactive Brokers (IBKR)
Get updates when Interactive Brokers (IBKR)’s Discoverability Score or category rank changes.
Competing in ChatGPT Trading & Live Market Data Platforms
View Category37 tools agents can invoke
Creates an alert with a single condition on an instrument's price, volume, percent change, fee rate, or shortable shares — or on the caller's account margin cushion or daily P&L. Returns the new alert's id. Platform limitation: Alerts created via this tool are currently only visible and manageable in IBKR Desktop. They will not appear in IBKR Mobile, TWS, or Client Portal. Always tell the user this before creating an alert, so they aren't surprised when it doesn't show up outside Desktop. If no email is provided, the user is notified only in IBKR Desktop when the alert triggers and receives no notification otherwise (no push, no SMS, no other email). Before calling this tool without an email parameter, confirm with the user that they intend to rely on in-app-only notification, or ask if they would like to supply an email.
create_alert
Creates a new instruction. An instruction is not a live order. The returned URL deep-links to the instruction in the IBKR platforms where a user can review and submit it. After submission, the instruction is converted into a live order. Supports Stocks (STK), Futures (FUT), single-leg Options (OPT), single-leg Futures Options (FOP), and OPT–OPT option combos/spreads. Combo/spread support is limited to equity-option (OPT) legs only; FOP, FUT, STK, and mixed-type combos are not supported.
create_order_instruction
Creates a new watchlist with the given name and an initial set of instruments. Watchlist names must be non-blank. Returns the new watchlist's id and hash.
create_watchlist
Permanently deletes one or more alerts. This action is irreversible. Confirm with the user before calling. Call get_alerts first to find the ids of the alerts to delete.
delete_alert
Deletes an existing instruction by its ID. Requires flow_type=REVIEW_AND_APPROVE. In AUTONOMOUS flow, use cancel_order instead to cancel a live order.
delete_order_instruction
Permanently deletes a watchlist. This action is irreversible. Confirm with the user before calling. Call get_watchlists first to resolve the watchlist name to its id.
delete_watchlist
Updates a watchlist's name and instruments (id, name, and instruments are all required — full-replace semantics). The instruments list is full-replace: the submitted list becomes the watchlist's complete new content. To add or remove instruments: call get_watchlist first to retrieve the current name and instruments, then submit the full updated list here (get_watchlist → modify → edit_watchlist). Source the current name from get_watchlist — it is required and not returned by this call. Call get_watchlists first to resolve the watchlist name to its id.
edit_watchlist
Retrieves cash balances and market values broken down by currency. Returns one entry per currency.
get_account_balances
Retrieves the list of orders for the user. Not flow-restricted — usable under either flow_type. Each order includes order_id, symbol, side, order type, status, quantity, price, and fill information. In AUTONOMOUS flow, order_id can be used with get_order_status, modify_order, and cancel_order; those tools are unavailable in REVIEW_AND_APPROVE flow. By default only working (not yet completed) orders are returned. Pass show_completed=true to also include orders that completed today (filled, cancelled, etc.), which can reduce the need for separate get_account_trades calls when reporting on recent fills.
get_account_orders
Retrieves all open positions. Each position includes quantity, price, market value, P&L, and cost basis.
get_account_positions
Retrieves account-level financial metrics: net liquidation value, equity with loan value, available funds, buying power, initial and maintenance margin, day trading status, and alike.
get_account_summary
Retrieves a snapshot of trades for the user over the requested time period. Each trade includes trade ID, symbol, side, size, price, commission, and trade time. All date boundaries are calculated in UTC.
get_account_trades
Returns the full detail of one alert: id, name, status, expiry_date, tif, email, email_note, and condition (contract_id, exchange, condition_type, operator, value). Call get_alerts first to find the id of the alert to inspect. Call this before update_alert — update_alert is a full-replace PUT, so you need the current settings to avoid clearing fields you didn't mean to change.
get_alert
Returns a summary of the user's alerts. Status is ACTIVE or PAUSED (set via set_alert_status) Deleted alerts no longer appear in results. Call get_alert for the full detail of a specific alert.
get_alerts
Creates a combo contract identifier from EQUITY OPTION (OPT) legs only. Only OPT–OPT combos are supported. Every leg must be a standard equity/index option (security type OPT) from an OPT option chain. Futures options (FOP), futures (FUT), stocks (STK), and any mixed-type combination are NOT supported and will fail when passed to create_order_instruction. Do NOT call this tool with FOP legs. If the user wants a futures-options spread, tell them multi-leg FOP combos aren't supported and offer to place each leg as a separate single-leg FOP order via create_order_instruction instead. Use this before create_order_instruction when placing a spread or multi-leg options strategy. Each leg requires a `contract_id_ex` (pass call_contract_id_ex or put_contract_id_ex from get_option_data verbatim) and a `size` (positive integer for BUY legs, negative for SELL legs). Returns a `contract_id_ex` string that identifies the combo — pass it directly to create_order_instruction as contract_id_ex. The response also includes a `description` (human-readable strategy summary) and `strategy_name` (e.g. "Bull", "Combo").
get_combo_identifier
Return a company's competitors, products, and geographic exposure (countries and regions of operation). Also includes sectors/trends but with supporting evidence explaining each connection. Use when the user asks 'who are Pepsi's competitors', 'what does Tesla sell', 'where does Shell operate', or wants a full business overview. Requires the company's contract_id — resolve with search_contracts first if you only have a name or ticker. Relationship to get_company_themes: that tool is the lightweight choice when you only need sectors/trends + ranked peers. Use get_company_connections for the broader profile (products/geography/competitors) or when you want evidence explaining WHY a connection exists. To restrict to sectors/trends only, set link_types=['COMPANY_THEME'].
get_company_connections
Given a company, return the sectors, trends, and industries it belongs to, and for each one the top peer companies ranked by relevance. Use for questions like 'what sectors is NVIDIA in?', 'what trends is Tesla part of?', or 'who are Apple's closest peers?' Requires the company's contract_id. If you only have a name or ticker, call search_contracts first to resolve it. Choose this over get_company_connections when you only need sectors/trends + ranked peers. If you need the company's products, countries, regions, broader competitor view, or evidence text explaining each link, use get_company_connections instead.
get_company_themes
Returns the option chain for one expiration: a row per strike with `strike`, `call_contract_id_ex`, `call_contract_id`, `call_description`, `put_contract_id_ex`, `put_contract_id`, and `put_description`. The `*_description` strings carry option contract details such as expiration, strike and futures options include the contract multiplier in parentheses (e.g. '(50)' for ES, '(20)' for NQ). Use these when presenting a contract to the user. The response also contains a top-level `currency` field (e.g. "USD") and a top-level `exchange` field (e.g. "SMART") for the contracts in the chain. Works for both equity options and futures options — the security type is inherited from the get_option_parameters call that produced the `expiration_id`. This tool returns contract structure only — it does NOT return prices, implied volatility, open interest, or volume. To obtain those, call get_price_snapshot using the numeric call_contract_id or put_contract_id together with the response's top-level exchange field. Before choosing a range, fetch the underlying's spot price via get_price_snapshot and center min_strike/max_strike around it. Use a range wide enough to include at least 5 strikes on each side of the spot price in a single call. Omitting all strike bounds on a liquid name can return hundreds of rows — always bound the range unless the user explicitly wants the full chain. `expiration_id` must be a value taken verbatim from expirations[].id returned by get_option_parameters — never construct it. call_contract_id_ex and put_contract_id_ex are the full contract identifiers (e.g. "832609990@SMART" for equity/index options, or "@CME" suffix for futures options). Pass these verbatim to create_order_instruction (as contract_id_ex) for single-leg OPT or FOP orders under REVIEW_AND_APPROVE flow. For AUTONOMOUS live-order tools, only single-leg OPT ids from an OPT option chain are supported; never use FOP ids or combo/spread ids for submit_order, modify_order, preview_order, or get_order_rules. Only OPT (equity option) ids may be passed to get_combo_identifier — FOP ids are not valid combo legs. Use the numeric call_contract_id and put_contract_id together with the top-level exchange for get_price_snapshot / get_price_history (with security_type="OPT" or "FOP"). Note: each row's `strike` is returned as a STRING (e.g. "292.5") even though min_strike/max_strike inputs are numbers — cast `strike` to a number before performing numeric comparisons or arithmetic. call_contract_id_ex/put_contract_id_ex and expiration IDs are internal identifiers used for chaining tool calls. Never display them to the user. Present results using symbol, expiry date, strike and exchange.
get_option_data
Returns available option expirations and the exchange list for an underlying. The response includes an `exchanges` array of valid option exchanges and `current_exchange` (the preferred/default exchange). Each expiration has: `id` (pass to get_option_data), `date` (YYYYMMDD), `regular` (true = standard monthly, false = weekly or daily/zero-days-to-expiration), and `trading_class` (present on every expiration row). `current_expiration` is the id of the preferred (first regular) expiration. For equity options (option_sec_type="OPT", default): call search_contracts and use the `underlying_contract_id` of the row whose symbol exactly matches the root and whose sections include OPT. For future options (option_sec_type="FOP"): call search_contracts and use the `underlying_contract_id` of the row whose symbol exactly matches the root and whose sections include FOP. Call this before get_option_data to resolve an expiration id. Duplicate-date handling: never disambiguate expirations by `date` alone — always key on `id` which is unique. A single `date` can carry multiple `trading_class` values that are DISTINCT contracts. Always prefer expiration without `trading_class` or ask user to specify one. This occurs for both equity options (e.g. 'TSLA' and '2TSLA', 'NVDA' and '2NVDA') and futures options, where a date carries a quarterly class (e.g. 'ES', 'NQ') alongside weekly classes (e.g. 'EW3', 'QN3'). Contract IDs and expiration IDs are internal identifiers used for chaining tool calls. Never display them to the user. Present results using expiry date and exchange.
get_option_parameters
Returns all saved instructions for the account. Not flow-restricted — usable under either flow_type. Each instruction includes an ID, description, contract identifier (contract_id_ex), trade direction (BUY/SELL), quantity, order type (MARKET/LIMIT), limit price, time in force, creation time (ISO 8601), and expiration (ISO 8601, if present).
get_order_instructions
Returns historical OHLCV (open/high/low/close/volume) price bars for an instrument over a specified time period. Use when the user asks about price trends, historical performance, or wants to compare prices across dates. Provide either period or step_count but never both. When called with an option contract_id from get_option_data, use security_type="OPT" and pass the exchange field from that row; if no exchange is available, omit it to default to SMART.
get_price_history
Retrieves a real-time market data snapshot for an instrument. Allows requesting one or more market data fields in a single call. Use this to get the current price, bid/ask spread, volume, volatility, and other live market metrics. For historical OHLCV price bars use get_price_history instead. Note on response key casing: response JSON keys use hyphens where requested field names use underscores. For example, requesting `option_midpoint_iv` returns the key `option-midpoint-iv` in the response; `bid_ask` → `bid-ask`; `option_open_interest` → `option-open-interest`. Always look up response values using the hyphenated form, not the underscore form used in market_data_names. Note: SMART routing only covers SMART-eligible instruments (US equities and equity options). For futures and futures options, pass the contract's native `exchange` (from search_futures / get_option_parameters / search_contracts) or the response will be empty.
get_price_snapshot
Returns the full definition of a saved screener for inspection or reuse. This describes its criteria, not its current results; use run_saved_screener to retrieve matching instruments. When presenting a definition with one or more non-zero-weight factors, describe the factor ranking and do not describe the scanner; the scanner is returned only so the complete saved definition can be preserved on update. The details object contains: name (string): display name. selector (string): asset-class selector, for example "STK" for stocks. locations (array of strings): exchange location IDs included, for example "STK.NYSE" or "STK.NASDAQ.NMS". scanner (string, optional): sorting scanner (sort code). Sort codes commonly follow SCAN_<metric>_<ASC|DESC>, where ASC ranks lower values first and DESC ranks higher values first; for example, SCAN_changePerc_ASC ranks the largest percentage decliners first and SCAN_changePerc_DESC ranks the largest percentage gainers first. Do not infer a code's name or direction from this pattern: IMPVOLATCHANGEPERC uses TOP_OPT_IMP_VOLAT_LOSE (decliners) and TOP_OPT_IMP_VOLAT_GAIN (gainers). This field is returned as saved, including when it is ignored because the screener has one or more non-zero-weight factors and uses factor-based ranking instead. Do not describe this field when presenting a factor-ranked screener. filters (array, optional): filter code and value pairs. Values are strings; codes and units depend on the asset-class selector and exchange location. For example, avgVolumeAbove is measured in shares and usdMarketCapAbove in US dollars. factors (array, optional): factors use the {id, weight} format. Positive weights (+1 to +3) prioritize higher values; negative weights (-1 to -3) prioritize lower values; an absolute weight of 3 is most important. Factors with a non-zero weight use factor-based ranking; the returned sorting scanner is retained but does not apply. When factors are absent or all weights are zero, the screener uses the sorting scanner to determine the result order.
get_saved_screener
Return the full profile of an investment topic: its description, the companies in it ranked by relevance (rank 1 = most central — this is relevance-ranked, NOT market-cap-weighted), and optionally ETFs/mutual funds with exposure. Use after search_investment_topics when the user wants to know which companies are in a sector or trend ('which companies are in AI?', 'top battery stocks', 'what ETFs cover clean energy'). Requires a key obtained verbatim from search_investment_topics. Each returned company includes a contract_id that can be passed directly into get_company_themes or get_company_connections to go deeper. For large topics, use offset together with the returned total_count to paginate through the full company list.
get_theme_details
Returns the name, hash, and full instruments list for a specific watchlist. Returns an empty instruments array if the watchlist has no instruments. Each element of the instruments list contains: contract_id_ex (string, the instrument identifier used by create_watchlist and edit_watchlist) and contract_description (human-readable name or description of the instrument). contract_id_ex values returned here are identical in format to those accepted by create_watchlist and edit_watchlist — pass them back verbatim, no conversion needed. Call get_watchlists first to resolve the watchlist name to its id.
get_watchlist
Returns all of the user's watchlists with their id, name, and hash. Returns an empty list if the user has no watchlists. Use get_watchlist to see the instruments on a specific list.
get_watchlists
Returns the user's saved screeners. Each entry contains: id (string): screener identifier. Pass this value as a string to get_saved_screener. name (string): display name assigned to the screener. hash (integer): content hash for the screener definition. Use it to detect whether a cached definition is stale; it does not represent changes in its live results. Takes no parameters.
list_saved_screeners
Returns the portfolio's NAV broken down along one category dimension into long and (when present) short buckets, each with a `total` and an `items` list carrying id, name, nav, and weight. `short_positions` is only present when the account holds shorts in that dimension — consumers must null-check it. Weights sum to 1.0 within each bucket independently. The long-side total denominator is category-dependent (netted of shorts for ASSET_CLASS and FINANCIAL_INSTRUMENT, gross for SECTOR/REGION/COUNTRY), so do not assume a common base across type values. Item `id` codes are opaque internal keys — display `name`, never interpret id. Related tools: get_account_positions, get_account_balances, search_contracts.
get_pa_allocation
Returns the account's performance time series for every available window (1D, 7D, MTD, 1M, YTD, 1Y). Within each period, `cps`, `nav`, and `dates` are parallel arrays of equal length indexed together. `cps` values are cumulative returns expressed as fractions measured from the period start (e.g. -0.106 = -10.6%), not percentages. The return method is reported in the top-level `portfolio_measure` field as TWR (time-weighted) or MWR (money-weighted), set by account configuration. For accounts younger than one year the 1Y series equals YTD, and inception-keyed periods may report start_nav 0.0 while the first element of the `nav` array holds the true opening value. Related tools: get_account_positions, get_account_trades, get_price_history (for benchmarking the nav series).
get_pa_performance_all_periods
Submits feature requests and customer feedback. Call this tool when (1) the user wants brokerage functionality not yet offered by IBKR tools e.g. portfolio rebalance, funding and position transfers, dividends, screeners, and alike. (2) you identify the user's sentiment towards or issues with IBKR's tools. Always show the user the exact feedback_text you intend to submit and get their confirmation before calling.
provide_customer_feedback
Runs a saved screener and returns a current ranked snapshot of its matching instruments. If the user specified a screener name rather than an id, first resolve it with list_saved_screeners. The response's definition field is the source of truth for the parameters actually run. When presenting results, include the definition's name, asset-class selector, exchange location IDs, and every filter with its units. For screeners without active factors, include the sorting scanner (sort code) and explain its order in plain language (ASC = lowest values first; DESC = highest values first). For screeners with one or more non-zero-weight factors, describe the factor ranking instead and do not describe the sorting scanner; it does not apply. Unless the user gives explicit presentation instructions, display each result's rank, contract_description, and company_name. The response contains: definition (object): the exact screener definition used for this run. results (array): the matching instruments. Each result contains: rank (integer): position in the screener's sort order, starting at 1. contract_id (integer): IBKR contract identifier. Use this value with get_price_snapshot or other contract-level tools to retrieve price, volume, and other details. company_name (string): human-readable company name of the instrument. contract_description (string): human-readable name or description of the instrument. score (number, factor screeners only): combined factor-ranking score. factor_scores (array of numbers, factor screeners only): per-factor ranking scores, in the same order as the screener's factors. total_matched (integer): total number of instruments meeting the screener criteria. url (string): direct link to open the screener in IBKR. Results from a screener using a sorting scanner do not include the sort metric value, price, or volume. Results are a live snapshot: ranks, membership, and total_matched can change between calls. The tool returns the first max_results results only, up to 50. It has no offset or paging parameter, so positions beyond that limit cannot be retrieved. Definitions with one or more non-zero-weight factors use factor-based ranking. Definitions with no factors or only zero-weight factors use their scanner to determine result order. Both modes return the same response shape.
run_saved_screener
Search for contracts (instruments) by ticker symbol, company name, or keyword and return matching instruments with their contract identifiers (contract_id), exchanges, symbols, and available security-type sections. Returns the contract_id required by get_company_themes and get_company_connections — call this first to resolve a contract_id whenever you only have a company name or ticker. Each result row includes a sections array listing the security types available for that instrument (e.g. STK, OPT, FUT). When selecting a row for options: the primary selector is an EXACT match on the `symbol` field (e.g. for root "AAPL" select only the row where symbol == "AAPL", not "AAPU", "AAPB", etc.); having OPT in sections is necessary but NOT sufficient on its own, because many leveraged/income ETFs also carry OPT sections. When multiple rows with the exact symbol remain, prefer the primary listing using the `description` and `country_code` fields to disambiguate (e.g. the US primary listing rather than a foreign listing). Use the `underlying_contract_id` of the selected row for subsequent calls.
search_contracts
Returns the futures term structure (the full expiry ladder) for a given underlying instrument. The response is an object with a contracts array; each element has contract_id_ex, contract_id (numeric), exchange, contract_month (YYYYMM), last_trading_date (YYYYMMDD), and symbol. Use contract_id_ex verbatim for create_order_instruction under REVIEW_AND_APPROVE flow only. AUTONOMOUS live-order tools support STK and single-leg OPT only; never pass futures contract ids to submit_order, modify_order, preview_order, or get_order_rules. Futures contract ids are not valid get_combo_identifier legs. Each contract also includes a numeric contract_id field and a separate exchange field — pass those directly to get_price_snapshot / get_price_history. The `symbol` field is identical for every expiry rather than a per-contract code; it cannot be used to distinguish contracts and must never be displayed to the user. Identify and present an expiry using `contract_month` / `last_trading_date`. Results are NOT returned in expiry order — sort by contract_month ascending yourself; the earliest non-expired entry is the front-month contract. This earliest entry can be within days of its `last_trading_date` and about to roll; when the user wants the actively-traded contract, the next expiry may be more appropriate. To get underlying_contract_id, call search_contracts with the root symbol (optionally security_type=FUT), then take the underlying_contract_id field from the row whose symbol exactly matches the root and whose sections include FUT. Only active contracts are returned unless include_expired=true.
search_futures
Search for companies grouped by sector, industry, trend, or topic. Use when the user asks about an investment area ('who's in solar', 'AI stocks', 'clean energy companies', 'what's happening in quantum computing'). Returns matching topics as {key, name} pairs. Pass the returned key to get_theme_details for the full company list. Query tips: use short, broad, singular keywords — a single root noun ('battery', not 'batteries' or 'electric vehicle batteries'; 'robot', not 'robotics companies'). The matcher is keyword-based and narrow, so plural or multi-word queries often return nothing. If results are empty, retry with a shorter/singular form or a synonym before concluding no match exists. Never guess, construct, or modify a key — only pass keys returned by this tool.
search_investment_topics
Pauses or resumes one or more alerts without deleting them. Call get_alerts first to find the ids of the alerts to update.
set_alert_status
Replaces an existing alert's settings in full. condition_type, operator, symbol, id and value are required on every call; contract_id is required unless condition_type is MARGIN_CUSHION or DAILY_PNL; the remaining fields (tif, expiry_date, exchange, email, email_note) are optional.
update_alert
Returns recent updates, new tools, and changes to this server. Call this when the user asks what's new, what changed, or about server capabilities.
whats_new
Interactive Brokers (IBKR) ChatGPT Plugin FAQ
How the directory, categories and Discoverability Score work.
Read the methodologyHow do I improve Interactive Brokers (IBKR)'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 Interactive Brokers (IBKR) alternatives on ChatGPT?
As of 2026-11-03, Interactive Brokers (IBKR) competes with ABG Market Data, AlgoVault, Alpaca, Alpaca Live, Alpaca Paper Trading, Alphascope, Ask Gina, Bajaj Broking and 29 more in ChatGPT Trading & Live Market Data 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.


