- Brand
- Two Minute Reports
- Category
- Data & Analytics
- Primary Subcategory
- Pending
Integration details
Description
Connect ChatGPT to your marketing stack with Two Minute Reports. Analyze PPC, SEO, social media, ecommerce, email marketing, and analytics data from Google Ads, Facebook Ads, TikTok Ads, LinkedIn Ads, Microsoft Ads, Apple Search Ads, Amazon Ads, Pinterest Ads, Reddit Ads, Snapchat Ads, Twitter Ads, Google Analytics 4 (GA4), Google Search Console, Google My Business, PageSpeed Insights, Google Trends, Shopify, WooCommerce, Amazon Seller Central, HubSpot, Klaviyo, Facebook Insights, Instagram Insights, LinkedIn Pages, and YouTube Analytics - all in one place. Ask questions in natural language and instantly get insights on CTR, CPC, conversions, ROAS, ad spend, SEO performance, social media engagement, ecommerce revenue, and marketing performance across channels. Built for marketing agencies, ecommerce brands, growth teams, and data analysts, it turns multi-platform marketing data into clear, actionable insights directly inside ChatGPT.
- Integration type
- Plugin
- Verification status
- Not applicable
- Platform
- ChatGPT
- Primary Subcategory
- Pending
- Secondary Subcategories
- None listed
- Brand
- Two Minute Reports
- Access
- Account required
- First tracked
- 2026-10-08
- Tool count
- 33
- Geography
- 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 Two Minute Reports
Get updates when Two Minute Reports’s Discoverability Score or category rank changes.
Competitive lineup
33 tools agents can invoke
Map an enabled connector account to a client. This links the account so it can be used in the client's goals, dashboards, and data queries. Only enabled accounts can be mapped — if the account is not yet enabled, call enable_account first. Use get_connector_accounts(status='enabled') to find accounts available to map.
add_client_account
Create a new client for the team. A client represents a business or advertiser the team manages (e.g. an agency client). If a domain is provided, the client's logo is automatically fetched from the domain — no extra step needed. Custom logos can be uploaded from the hub. After creating, use add_client_account to map connector accounts to the client.
create_client
Create a custom metric (a numeric value that aggregates across rows) or a custom dimension (a categorical value rows are grouped by) for the team. The new field is available immediately: its 'tmr_custom_*' id works in run_query, in dashboard widgets, in goal targets and in filters. Field ids inside formulaItems, conditionBlocks and mappings are connector-prefixed, exactly as get_connector_query_schema returns them for that connector — 'ga4_sessions', 'gadw_clicks', 'fads_spend'. configurationMethod: • 'formula' — one expression, built from formulaItems. type 'field' references a connector field, type 'constant' is a literal, type 'operator' joins the items either side. Metrics evaluate the expression as arithmetic; dimensions concatenate it into a string. Add conditionRules when the formula differs by condition: rules are evaluated in order and the first match wins, so a rule with setConditions false placed last acts as the 'else'. • 'join' — blending, for a metric that exists on several platforms under different names. Map one source field per connector in join.perSourceConfigs, keyed by connector id. On a blended row a metric SUMS every mapped source's contribution and a dimension takes the first mapped source with a value; on a single-connector row only that connector's mapping is used. Per-connector arithmetic is allowed, which is how a field reported in micros is normalised before it is blended. • 'split' — dimensions only. Split splitConfig.sourceField on a delimiter, keep one fragment, and optionally rewrite the result through valueMappings. fallbackValue decides what the field returns when it cannot be computed — no rule matched, an invalid expression, or no source contributed. Each call creates a new field; calling it twice with the same arguments produces two fields with different ids, not one. Nothing leaves Two Minute Reports: the definition is stored on the team.
create_custom_field
⚠ Hand-building pages/widgets? Read get_dashboard_guidelines first (once per conversation — reuse it, don't refetch) for widget types, layout rules, and data field rules. (Skip it for the generate_* tools and for simple metric/dimension tweaks to existing widgets.) Flow: (0) get_dashboard_guidelines. (1) list_connectors + get_connector_accounts to resolve accounts. (2) get_connector_query_schema for field IDs. (3) validate_query with raw unprefixed IDs. (4) Build widgetConfig with connector-prefixed IDs (e.g. 'sessions' → 'ga4_sessions'). (5) Call create_dashboard once with all pages assembled. Do NOT call run_query — the dashboard renders its own charts.
create_dashboard
Create a new goal. There are two types: • standalone_goal — tracks any performance metric (leads, ROAS, conversions, revenue, etc.). Can optionally be linked to a parent budget_goal via parentId (accountIds are then inherited from the budget). progressDirection: 'positive' (higher is better) or 'negative' (lower is better, e.g. CPA, CPL). • budget_goal — tracks blended ad spend against a budget cap. performanceMetric is always 'blended_amount_spent' — do not ask the user, just send that value. progressDirection is always 'positive' (handled by backend — do not send it). Before calling this tool, ask the user: 1. Is this goal for a specific client or team-wide? • Client-scoped: resolve clientId via list_clients, then list_client_accounts for their accounts. • Team-wide (clientId omitted): use get_connector_accounts(status='enabled') to let the user pick accounts. 2. For standalone_goal: what metric are they tracking and what connector is it from? Use get_connector_query_schema to show available metrics if needed. 3. What is their numeric target, currency, and date range?
create_goal
Disable a connector account for the team. The account will no longer be used for data retrieval and frees up a slot in that connector's limit. It is not deleted — it can be re-enabled later. Confirm with the user before calling.
disable_account
Enable a connector account for the team. Only enabled accounts can be used to retrieve data, appear in goals and dashboards, and run analytics queries. Enabled accounts count toward that connector's own account limit. Use get_connection_accounts or get_connector_accounts(status='disabled') to find accounts to enable.
enable_account
Get details of a specific client including their name, domain, status, metadata (logo/brand), and creation date. Use outputFields to select which response fields are returned.
get_client
Get details of a specific connection including the platform type, status, and number of linked accounts. Use outputFields to select which response fields are returned, e.g. ['id', 'status'] for a status check without the connector-specific config blob.
get_connection
List accounts exposed by one specific connection. Use this only during onboarding or connection setup — when the user has just created a connection and wants to see what accounts are available under it before enabling them. For finding accounts to use in queries, goals, or dashboards, use get_connector_accounts(status='enabled') instead — it covers all connections for a connector in one call. Supports sortBy, filters, and limit.
get_connection_accounts
List all accounts for a connector type across all its connections in a single call, with their enabled/disabled status. This is the preferred tool whenever you need accounts for a specific platform — use status='enabled' to get all active accounts ready for queries, goals, and dashboards without having to iterate individual connections. Use status='disabled' to find accounts still needing activation. If connectorId is omitted, returns accounts across all connectors. If there are multiple accounts returned, you must present the list and ask which accounts to use. Supports sortBy, filters, and limit.
get_connector_accounts
Get the full query schema for a connector — available fields, report modes, required params, and validation rules. Always call this before constructing any query for validate_query or run_query. For standard connectors (GA4, Google Ads, Facebook Ads, etc.) it returns grouped metrics and dimensions. For PSI, Amazon Seller, and Google Search Console it returns the full query schema including report modes, required params, allowed values, and rules you MUST follow when building the query. PSI rule: the 'urls' field MUST be provided by the user — never auto-generate, infer, or guess URLs. If the user has not explicitly provided URLs, ask them before calling run_query.
get_connector_query_schema
Get details of a specific dashboard. Omit outputFields to get everything including full widget definitions (e.g. before update_dashboard). For a lightweight overview without the widgetConfig payloads pass outputFields like ['id', 'name', 'pages.name', 'pages.widgetCount', 'pages.widgetTypes', 'theme', 'reportDefaults'] — ideal when you just need to understand what a dashboard contains or list its pages.
get_dashboard
Returns the structural spec for hand-building TMR dashboard widgets — every widget type, its widgetConfig shape, layout/grid rules, and data-field rules. (Theme/palette/typography are inherited from the existing dashboard, not covered here.) Call this ONCE before hand-building a dashboard/widget config (create_dashboard / update_dashboard), then REUSE it for the rest of the conversation — do NOT refetch on every call. NOT needed for the AI generators (generate_dashboard / generate_dashboard_page), nor for changing a metric/dimension/chart type on an existing widget (use get_connector_query_schema + validate_query for that). Hand-built dashboards that ignore these guidelines will have structural errors and render incorrectly.
get_dashboard_guidelines
Get full details of a specific goal including its performance metric, target value, date range, progress direction, and the connector accounts it is measured against. Use outputFields to select which response fields are returned.
get_goal
Get details for the team — plan name, usage limits, and member count.
get_team
List all members of the team, with the role each one holds and whether they have a seat. Every team has the same six standard roles — viewer, editor, data_manager, deputy_admin, admin, owner — and may define its own, in which case roleCode is null and roleName carries the team's name for it. A seat is separate from a role: a member without one sees everything their role allows and is refused every write. Supports sortBy, filters, and limit.
get_team_members
Get the current user's profile including name, email, and avatar.
get_user
List the connector accounts mapped to a specific client, optionally filtered by connector type. Use this when the user's question is about a named client and you need to know which accounts belong to them. The returned accountIds are what you pass to validate_query and run_query. If the user has not mentioned a specific client and just wants accounts for a connector, use get_connector_accounts(status='enabled') instead. Supports sortBy, filters, and limit.
list_client_accounts
List all clients for the team. A client represents a business or advertiser the team manages (e.g., an agency client). Clients group related connector accounts together and are used to scope goals and dashboards. Call this when the user refers to a client by name to resolve its clientId. Use outputFields to pick which response fields each item includes (e.g. ['id', 'name'] for name resolution); supports sortBy, filters, and limit.
list_clients
List all data source connections for the team. A connection is an authenticated link to an external platform (e.g., a Google Ads OAuth login or a Facebook Ads account). Use this for connection management tasks — checking OAuth status or troubleshooting a specific integration. To find accounts for data queries, dashboards, or goals, use list_connectors then get_connector_accounts(status='enabled') instead — it is faster and covers all connections in one call. Supports outputFields (pick which response fields each item includes, e.g. ['id', 'name', 'status'] to skip the config blob), sortBy, filters, and limit.
list_connections
List all connector types active for the team (e.g., GA4, Google Ads, Facebook Ads) with the count of connections and enabled accounts per connector. This is the first step when you need to discover what data sources are available — call this before get_connector_accounts to know which connectorIds to query. A connector is a platform type; a team can have multiple connections per connector (e.g., two separate Google Ads logins) but this tool aggregates them all into one row per platform. Supports sortBy, filters, and limit.
list_connectors
List the team's custom fields: metrics and dimensions the team defined itself, on top of the native connector fields. Their ids start with 'tmr_custom_' and are valid wherever a native field id is, in run_query metrics, dimensions and filters — the platform resolves them when the query runs. Each field says how it is computed: 'formula' (an expression over connector fields), 'join' (blending — one source field mapped per connector), or 'split' (a fragment taken out of a naming convention). Use outputFields to keep responses small — a full definition includes every formula item — and sortBy, filters and limit to narrow the list.
list_custom_fields
List all dashboards for the team. A dashboard is a collection of data visualisation widgets, each backed by an analytics query. Dashboards can be client-scoped (clientId is set — widgets can only use accounts mapped to that client) or team-wide (clientId is null — widgets can use any enabled account across any client or unmapped accounts). Dashboards render their own charts and do not require run_query. Full pages/theme payloads are returned unless narrowed — prefer outputFields like ['id', 'name', 'clientId', 'pageCount', 'widgetCount'] when browsing; supports sortBy, filters, and limit.
list_dashboards
List all performance goals for the team. A goal tracks a specific metric target (e.g., achieve 10,000 sessions, keep CPC below $2) over a defined period, measured against one or more enabled connector accounts. Goals can be client-scoped (clientId is set — only accounts mapped to that client can be used) or team-wide (clientId is null — any enabled account across any client can be used). Use outputFields to pick which response fields each item includes (e.g. pass ['id', 'name', 'entityType'] to check which goals are standalone); supports sortBy, filters, and limit.
list_goals
Execute analytics queries for one or more connectors and return data rows. Supports multiple connectors in a single call — pass one entry per connector in the 'connectors' array. Required flow: get_connector_query_schema → construct query → validate_query → run_query. Queries must be validated via validate_query before execution. Before executing: must show the query to the user, explain what it will fetch, and ask if they want any changes. Only call run_query after they confirm. All queries across all connectors run in parallel. Use this only for ad-hoc data insights where the user wants actual numbers returned in the conversation. For dashboard widgets do NOT call run_query — embed the validated query object directly as the widget's widgetConfig instead. FIELD IDs: always raw, no connector prefix (e.g. 'sessions' not 'ga4_sessions'). connectorId is per-entry, NOT a prefix. Account IDs: pass raw account IDs without prefix (e.g. '123456789' not 'ga4_123456789'). CUSTOM FIELDS (list_custom_fields) are the exception to the raw-id rule: pass the full 'tmr_custom_*' id unchanged in metrics, dimensions, filters or sort. A blended custom field ('join') returns only the queried connector's share, not its cross-platform total — each connectors entry runs one connector. Sum the per-connector results to state a total. After returning the results, suggest the next step that fits what the user is trying to do — keep it on a dashboard (create_dashboard), track it as a goal (create_goal), or turn a calculation they asked about into a reusable custom field (create_custom_field). SORTING: use query.sort ([{sortField, direction: 'asc'|'desc'}]) to order result rows — e.g. for 'top campaigns by clicks' sort by 'clicks' desc. sortField must be one of the query's own metrics/dimensions. Default when omitted: ascending by dimensions. REPORT CONNECTORS — some connectors use query.reportParams instead of (or alongside) metrics/dimensions. Always call get_connector_query_schema first for the connector — it tells you required reportParams fields, which metrics to pass, and any rules.
run_query
Update a client's name or domain. Only send the fields that should change. If domain is updated, the logo is automatically re-fetched from the domain (unless a custom logo has been uploaded from the hub).
update_client
Change an existing custom field's definition. Send only the keys that change; anything omitted keeps its current value. Each key is replaced whole, never merged: join, formulaItems, conditionRules and splitConfig discard their previous value, so send the complete new one. Get customFieldId from list_custom_fields. This edits a definition other things already depend on: every dashboard widget, goal and saved query that selected this field starts computing the new definition, including for periods already reported. A field cannot change between metric and dimension, because whatever already references it selected it as one or the other. Sending configurationMethod switches the field to that method and discards the configuration the previous method used, so send the new method's own config in the same call. Field ids inside formulaItems, conditionBlocks and mappings are connector-prefixed, exactly as get_connector_query_schema returns them for that connector.
update_custom_field
⚠ Hand-building pages/widgets? Read get_dashboard_guidelines first (once per conversation — reuse it, don't refetch) for widget types, layout rules, and data field rules. (Skip it for the generate_* tools and for simple metric/dimension tweaks to existing widgets.) Update an existing dashboard — rename, change scope, replace pages/widgets, update reportDefaults or theme. Only provided fields are updated; omit the rest. Always call get_dashboard first (without outputFields, so full pages are returned) to read current pages before modifying. Pages are replaced wholesale — partial page updates are not supported. Do NOT call run_query for dashboard widgets.
update_dashboard
Update an existing goal's fields. Only send the fields that should change — all fields are optional. Do NOT change entityType or performanceMetric to an incompatible type (e.g. swapping from a spend metric on a budget_goal). Use get_goal first if you need to confirm current values before updating.
update_goal
Update the current user's first and last name. Both are required.
update_user_name
Validate queries for one or more connectors before executing them. Supports multiple connectors in a single call — pass one entry per connector in the 'connectors' array. Query construction flow: (1) Call get_connector_query_schema for each connector to discover field IDs. (2) Construct each query: choose metrics and dimensions by raw 'id' values, set date range, add filters. For report connectors, leave metrics/dimensions empty and populate query.reportParams instead. (3) Call this tool — each query is validated independently and errors name exact field IDs or rule violations. (4a) If the user wants data: pass the same connectors array to run_query. (4b) If for a dashboard widget: convert field IDs to connector-prefixed format before embedding. PREFIXING RULE — validate_query / run_query use RAW IDs; dashboard widget configs use PREFIXED IDs: validate_query / run_query → accountIds: ['123456789'] metrics: ['sessions'] dimensions: ['date'] widget widgetConfig → accounts: ['ga4_123456789'] metrics: ['ga4_sessions'] dimensions: ['ga4_date'] Prepend '<connectorId>_' to EVERY field and account when moving from query to widget. CUSTOM FIELDS (list_custom_fields) are the exception: pass the full 'tmr_custom_*' id unchanged.
validate_query
Verify the user's identity and retrieve the teams they belong to. Always call this first — every other tool requires a teamId. Each team includes a planStatus field. Plan status values: - 'active', 'in_trial', 'non_renewing' → plan is active; all tools are available. - 'cancelled' → the team's plan is not active Do NOT call any create, update, delete, validate_query, or run_query tools for a cancelled team. If the user belongs to multiple teams, you must present the list and ask which team to work with — note any cancelled teams so the user can pick an active one. Store the chosen teamId for all subsequent tool calls. WORKFLOW — discovering accounts for data queries, dashboards, or goals: 1. list_connectors — see which platform types (GA4, Google Ads, etc.) the team has active. 2. get_connector_accounts(connectorId, status='enabled') — get all enabled accounts for that platform in one call. Do NOT use list_connections → get_connection_accounts for this — it makes one extra call per connection and returns the same information less efficiently.
verify_team_details
Two Minute Reports ChatGPT Plugin FAQ
How the directory, categories and Discoverability Score work.
Read the methodologyHow do I improve Two Minute Reports'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.
Where is this profile measured?
This profile uses the geography attached to the latest public registry snapshot: US. Locale tags are intentionally omitted.