get_campaign_analytics
ChatGPTGet campaign analytics (METRICS or REVENUE_ATTRIBUTION) for one or more campaigns. Each entry in the request list is a full analytics request. Each response contains the campaignObjectId of the requested campaign.
Bring HubSpot customer context into Claude. Search and update contacts, companies, deals, tickets, campaigns, and more - without leaving Claude. Analyze campaign performance across emails, landing pages, and blog posts. Forecast pipeline, qualify leads, and update deal stages in seconds. Useful for pre-call prep, pipeline reviews, campaign attribution, and full account visibility. Permission-aware, real-time, secure.
search_crm_objects tool to list a few objects first without a filter criteria - Then use the get_crm_objects tool to retrieve those objects by their IDs without any properties in the tool input to understand the data model - This will help you understand the structure of the objects and their properties </usage_guidance>guidance field is present, read it carefully before responding — it may contain a user-facing message (e.g., missing permissions requiring reauthorization) that must be relayed to the user, or an agent-internal hint (e.g., name disambiguation) that should influence how you process the results </usage_guidance> <examples> <example> <user_query>Who works in sales at my company?</user_query> <action>Use this tool with include=[TEAMS] to get teams, then filter for sales-related ones</action> </example> <example> <user_query>Show me deals for MY team?</user_query> <action>Do NOT use this tool, use get_user_details instead</action> </example> <example> <user_query>Search deals for all marketers</user_query> <action>Use this tool with include=[JOB_TITLES] to find marketing-related roles</action> </example> <example> <user_query>How many users have each seat type?</user_query> <action>Use this tool with include=[SEATS] to get seat type names, then use search_crm_objects on USER objectType filtering by each seat type to count users per seat</action> </example> <example> <user_query>Show me our sales team's deal pipeline</user_query> <action>Use this tool with include=[TEAMS] to get the sales team's member owner IDs, then use search_crm_objects to filter deals by those owner IDs.</action> </example> <example> <user_query>Which teams am I on?</user_query> <action>Use this tool with include=[TEAMS] to get all teams, then find teams that contain the member's ownerID (NOT MEMBER'S NAME)</action> </example> </examples>AVAILABLE - Every non AVAILABLE object type or tool requires some user interaction to resolve, noting that some issues cannot be resolved by just the user themselves - Each object type returns TWO separate availability statuses: read for view/search operations and write for create/update operations. Check the appropriate permission based on the operation you intend to perform - Use the "include" param to request only the sections you need; omitting it or passing an empty list returns USER_INFORMATION and TOOL_INFORMATION only — TEAMS_AND_ROLES must be explicitly requested - For account-level settings (timezone, currency, account type, UI domain), use get_organization_details with include=[ACCOUNT_INFORMATION] instead of this tool - TEAMS_AND_ROLES returns context specific to the current user only (their primary team, job title, direct reports); for org-wide team or role data, including "my TEAMS", use get_organization_details - IMPORTANT: directReports are not the same as team members. If directReports is empty and the user asked about direct reports: stop, inform the user that no direct reports are configured, and ask whether they want to proceed with team members instead — do not automatically substitute team members for direct reports </usage_guidance> <availability_guidance> <status name="AVAILABLE">It is free to use without issue</status> <status name="REQUIRES_REAUTHORIZATION">The user needs to perform a new authorization flow through HubSpot to unlock new access. This is possible through disconnecting and reconnecting the HubSpot connector through their settings</status> <status name="REQUIRES_PERMISSION_MODIFICATION">The user lacks the correct permission in their HubSpot account. If the only way to resolve a task is to use this tool or object, you should inform the user of their lacking permissions and let them decide if they want to ask their administrator for more privilege</status> <status name="REQUIRES_ACCOUNT_MODIFICATION">The whole HubSpot account lacks the correct permissions and would require an account upgrade. Again, inform the user about these tools or objects only if the presented task can only be solved using them</status> <status name="BLOCKED_FOR_PORTALS_WITH_SENSITIVE_DATA">The operation involves sensitive data, and no troubleshooting will unblock usage of the object or tool. If the only way to resolve a task is to use this tool or object, inform the user of the issue and ask them how they would like to proceed</status> <status name="NOT_AVAILABLE">There is no action the user can take to enable the object or tool. It is simply unavailable for use</status> </availability_guidance> <returns> - Always returned: user ID and Hub ID (accountId) - Only fields listed in the include parameter are returned (or all fields if include is omitted): - USER_INFORMATION: owner ID, name, and email for the current user - TOOL_INFORMATION: a mapping of CRM object types to separate read and write availability statuses; a mapping of other MCP tools to current availability - TEAMS_AND_ROLES: the current user's job title, assigned seats, primary team with member owner IDs, and direct report owner IDs (personal context only — use get_organization_details for org-wide team/role data) - If the guidance field is present, STOP and relay its message to the user — it indicates requested sections could not be returned and the user needs to reauthorize the app </returns> <examples> <example> <user_query>Compare workload across my direct reports</user_query> <action>Call with include=[TEAMS_AND_ROLES]. If directReports is empty, ask the user if they would like to compare workload across their primary team members instead. DO NOT use team members unless user confirms.</action> </example> </examples>search:find_objects|count_objects tool. </critical_requirements> <capabilities> - Returns a 'total' count attribute that can help perform analytical tasks on large datasets - Useful to sample data from a specific object type to understand the data model - Can list and filter by associations between objects (e.g., "contacts associated with company X or contacts with num_associated_deals > 1") - Use the search_owners tool to list users/owners in the HubSpot account </capabilities> <returns> List of matching CRM records containing: - id: Unique identifier for the CRM object - properties: Key-value pairs of property names and their values for the requested properties - urlTemplate: URL template to view the object in HubSpot (replace {property_name} with the property value from the response) - total: Total count of records matching the search criteria (for analytics and pagination) - offset: Current pagination offset for retrieving the next page of results </returns> <usage_guidance> - This searches for ACTUAL DATA (records), not field definitions. To discover available fields, use search_properties - Always check 'total' count to ensure you're not missing data due to pagination limits. You MUST NOT use sample data or insufficient data as a substitute for actual data - Use the get_crm_objects without properties to understand the data model of an objectType - You can include a maximum of five filterGroups with up to 6 filters in each group, with a maximum of 18 filters in total - [Important] CRM Analysis can be a complex task. Work with the user to refine requirements and segment large datasets into manageable parts before performing analysis - [Important] You MUST include a clickable URL for every record returned, without exception. ALWAYS include UTM params in the URL - [Important] You should use associatedWith for searching objects by associations </usage_guidance> <filtering_capabilities> - Think of "filterGroups" as separate search conditions that you want to combine with OR logic (meaning ANY of them can match) - If you want to find things that match ALL of several conditions (AND logic), put those conditions together in the same filters list - If you want to find things that match AT LEAST ONE of several conditions (OR logic), put each condition in a separate filterGroup - You can include a maximum of five filterGroups with up to 6 filters in each group, with a maximum of 18 filters in total </filtering_capabilities>fetch tool to get HubSpot CRM Objects. </critical_requirements> <capabilities> - Lists all property definitions for specified object type when no search terms provided - To search for actual data, use search_crm_objects </capabilities> <returns> A filtered list of properties matching the search criteria containing: - name: Property identifier - label: Display label - description: Property description - matchScore: Relevance score for the property based on the search query (absent if no query is provided) </returns> <usage_guidance> - Use keywords field for multiple related property guesses in a SINGLE request (recommended for performance) - MAXIMUM OF 5 KEYWORDS ALLOWED PER REQUEST - exceeding this limit will return a validation error - Keywords should be property name guesses, not natural language phrases - Use query field for backward compatibility with single property guess - No search terms provided: Returns ALL properties for the object type (useful for discovery) </usage_guidance> <examples> <example> <user_input>total number of open tickets grouped by urgency</user_input> <thoughts>Customer is asking for total number of open tickets grouped by "urgency". I will look for the best matches on the "urgency" property for the "TICKET" object type.</thoughts> <query>{"objectType": "TICKET", "keywords": ["urgency"]}</query> </example> <example> <user_input>calls assigned to me</user_input> <thoughts>Customer is asking us to filter by calls assigned to them. I have a few guesses for what that property might be called: "assigned_to", "assignee", "owned_by", or "owner". Let me search for those on the "CALL" object type in one efficient request.</thoughts> <query>{"objectType": "CALL", "keywords": ["assignee", "assigned_to", "call_owner", "owned_by"]}</query> </example> <example> <user_input>list each company with its name, employees amount, zip code, and when we last touched base</user_input> <thoughts>Customer is asking us to list companies by a few attributes. I will guess keywords for each of those properties and search for them on the "COMPANY" object type in one request.</thoughts> <query>{"objectType": "COMPANY", "keywords": ["name", "employees", "zip_code", "last_contact"]}</query> </example> <example> <user_input>tickets for this year to identify top 10 most problems our customers face</user_input> <thoughts>Customer is asking us to analyze tickets. I will return all properties for the "TICKET" object type to help with discovery.</thoughts> <query>{"objectType": "TICKET"}</query> </example> </examples> <common_mistakes> - Do not exceed 5 keywords per request (will return validation error) - Keywords should be property name guesses, not natural language phrases </common_mistakes>App Stats
30
Tools
3
Prompts
Feb 25, 2026
First seen
ChatGPT, Claude
Platforms
Category
CRM RecordsWorks with
Data refreshed daily