ActiveCampaign
You already work in ChatGPT. Now drive and track your marketing outcomes there too. Connect ActiveCampaign in a few clicks. From the chat, you can: - Understand yesterday's campaign performance in seconds - Look up a contact and update their information. - Clean up tags, build segments, and organize your lists. - Move deals forward without leaving ChatGPT. - Enroll a contact in automated marketing workflows. No new tab. No copy paste. No starting over. ChatGPT is the surface you ask from. ActiveCampaign takes action.
- Integration type
- Plugin
- Verification status
- Not applicable
- Platform
- ChatGPT
- Primary Subcategory
- Email & SMS Lifecycle Marketing Automation
- Secondary Subcategories
- None listed
- Brand
- ActiveCampaign
- Access
- Account required
- First tracked
- 2026-08-11
- Tool count
- 64
- Geography
- US
The Primary Subcategory used for this profile’s headline score.
Other Subcategories where the Integration is visible.
ChatGPT Plugin Discoverability Score
ChatGPT organic discovery is not live yet
ActiveCampaign is tracked in the ChatGPT Plugin registry. Public organic-discovery measurement is not live for ChatGPT yet, so there is no score to publish today.
Get notified when your score goes live
Enter your work email and we’ll notify you when ChatGPT Plugin organic discovery scoring launches.
No spam. Unsubscribe any time.
Competing in ChatGPT Email & SMS Lifecycle Marketing Automation
View CategoryHow the Discoverability Score works
Organic discovery scoring for ActiveCampaign on ChatGPT is not live yet. The score will use measured agent conversations when it launches.
Organic discovery scoring is pending. Your Plugin score will appear on this scale when measurement goes live.
FoundDiagnostic
Whether Claude found your Plugin in connector search. It must be Found before it can reach the picker, but the score counts picker appearances—not search results.
PickedMain score
How often your Plugin appeared in the picker, or Claude invoked it directly, across contested conversations. This percentage is the Discoverability Score; the headline number is rounded.
PositionedDiagnostic
What position your Plugin appeared in when it was shown in the picker. This shows prominence, but it does not affect the score.
64 tools agents can invoke
Add a contact to an automation. This will start the automation for the specified contact. The contact will begin at the first step of the automation sequence. Parameters ---------- - params: ContactAutomationCreateParams object containing: - contact: The ID of the contact to add to the automation - automation: The ID of the automation to add the contact to
add_contact_to_automation
Use ONLY for 1–9 contacts. For 10+ use bulk_import_contacts. Subscribe, unsubscribe a contact to or form a list, or update their subscription status. This tool allows you to add a contact to a list with a specific status, enabling contact list management and subscription control. Use this to subscribe contacts to lists for email campaigns and marketing automation. Setting status from unsubscribed (2) to active (1) may require additional confirmation. Use status 1 for normal subscription workflows. Status 0 is used for double opt-in processes. The contact and list must already exist in ActiveCampaign. Args: params (ContactListUpdateParams): Subscription parameters containing: contact (int): Required. The ID of the contact to add to the list. list (int): Required. The ID of the list to add the contact to. status (int): Required. The subscription status: 1 = Active (subscribed), 2 = Unsubscribed, 0 = Unconfirmed. auth: Authentication credentials for the request. Returns ------- dict[str, Any]: A dict containing the updated contact list membership data.
add_contact_to_list
Use ONLY for 1–9 contacts. For 10+ use bulk_import_contacts. Use this tool only for adding a single tag to a single contact. Add a tag to a contact. Parameters ---------- - params: ContactTagParams object containing: - contact: Required. The ID of the contact. - tag: Required. The ID of the tag to add to the contact.
add_tag_to_contact
Use ONLY for 10+ contacts. For 1–9 contacts, use single-contact tools. Bulk create, update, tag, set fields, add to lists, or any combination for multiple contacts in a single request. Existing contacts are matched by email (or phone when phone-only is enabled); you can mix new and existing contacts in one call. Do NOT add any additional contact fields beyond what the user specified. If any contact has no email, you MUST check whether phone-only contact setting is enabled before calling this tool. If unknown, call is_phone_only_contact_enabled first, then set phone_only_contacts_enabled accordingly. If phone-only is not enabled, you CANNOT import a contact without an email. Ask the user for an email instead. Supported per-contact fields: email, first_name, last_name, phone, customer_acct_name, tags (list of strings, applied/created as needed), custom field values (id + val pairs), subscribe (list of {listid} objects for lists to subscribe the contact to), and unsubscribe (list of {listid} objects for lists to unsubscribe the contact from). An optional callback can be provided to receive async results via webhook. The callback includes a url, requestType (e.g. "POST"), optional detailed_results flag, and optional params/headers key-value pairs to include in the webhook request. Set exclude_automations to True to skip running automations triggered by the import. By default, automations should run on imported contacts. Args: contacts: List of contact records to import. Each contact must have at least an email or a phone number. phone_only_contacts_enabled (bool): Must be set to True if any contact has no email. Check with is_phone_only_contact_enabled first. callback (BulkImportCallback | None): Optional webhook callback to receive async import results. exclude_automations (bool | None): Set to True to skip automations triggered by the import. auth: The authentication class for the request. Returns ------- dict[str, Any]: Dictionary containing success (int), queued_contacts (int), batchId (str), message (str), and errors (list).
bulk_import_contacts
Retrieve the status of bulk contact import batches, showing outstanding and recently completed imports. Returns two groups of import batches: - outstanding: imports that are still being processed - recentlyCompleted: imports that have finished processing recently Each entry includes the date the batch was submitted (forDate), the number of batches, and the total number of contacts in those batches. Args: auth: The authentication class for the request. Returns ------- A dict containing two arrays: - outstanding (list): Pending import batches, each with forDate, batches, and contacts counts. - recentlyCompleted (list): Recently finished import batches, each with forDate, batches, and contacts counts.
bulk_import_status_list
Update the owners of multiple deals in a single request. This function allows you to reassign multiple deals to new owners. You can assign different owners to different deals in the same batch. **Required permissions:** User must have permission to manage deals, permission to manage the pipeline each deal belongs to, and permission to reassign deals. Args: params (DealOwnerUpdateParams): Object containing a list of deals to update. deals (List[DealOwnerUpdateItem]): Required. A list of deal owner update objects, each containing: id (int): Required. The ID of the deal to update. ownerId (int): Required. The ID of the new owner for this deal. auth: The authentication class for the request. Returns ------- dict[str, Any]: A dictionary with three arrays — `success` (deal IDs updated), `nochange` (deal IDs where owner was already assigned), and `failed` (deal IDs that encountered errors).
deal_owner_bulk_update
Check if the phone only contact setting is enabled for this ActiveCampaign account. Remember this in current context. Do NOT offer the user to turn it on.
is_phone_only_contacts_enabled
Create a contact custom field. Always create field options after creating fields of type "dropdown", "listbox", "radio", or "checkbox". Parameters ---------- - params: ContactCustomFieldCreateParams object containing: - field_title: Required. The custom field label (sent to the API as title). - type: Required. The type of field. Valid values: "text", "textarea", "date", "datetime", "dropdown", "listbox", "radio", "checkbox", "hidden". - descript: Optional description of the field. - perstag: Optional personalization tag name. - defval: Optional default value. - visible: Optional. Whether this field is visible in forms (0 or 1). - ordernum: Optional. The order of this field relative to others.
create_contact_custom_field
Associate a contact custom field with a contact list Parameters ---------- - params: ContactFieldRelCreateParams object containing: - relid: Required. The ID of the contact list. - field: Required. The ID of the custom field.
create_contact_field_relationship
Create a contact custom field value. Contact field values can also be set in bulk in the payload to create or update a contact. Parameters ---------- - params: ContactFieldValueCreateOrUpdateParams object containing: - contact: Required. The ID of the contact. - field: Required. The ID of the custom field. - value: Required. The value to store in the field. Format depends on field type: - text/textarea/hidden: Simple string value - dropdown/radio: Exact option value - date: "YYYY-MM-DD" format - datetime: ISO format "YYYY-MM-DDThh:mm:ssZ" - checkbox (multiple): "||Option 1||Option 3||" format - checkbox (single): "||Option 2||" format - useDefaults: Optional. If true, populates missing required fields on the contact record with default values. Defaults to false.
create_contact_field_value
Create a new contact tag Parameters ---------- - params: TagCreateParams object containing: - tag: Required. The name of the tag. - tagType: Optional. The type of tag. Defaults to "contact". Valid values: "contact", "template". - description: Optional. Description of the tag. Defaults to empty string.
create_contact_tag
Create a new custom object schema in an ActiveCampaign account. Defines a new custom object type with fields, relationships, labels, and description. ## When to use - Create a new custom object type to model domain-specific data (e.g. orders, projects, tickets) - Define fields and relationships for a new custom object - Set up a custom object schema before creating records of that type ## When NOT to use - User wants to modify an existing schema — not doable via MCP - User wants to create records within a schema — use create_or_update_custom_object_record - User asks about standard objects (contacts, deals, campaigns) — use the dedicated tools ## Examples - "define a new custom object type called Order with a name field linked to contacts" → params={"schema":{"slug": "order", "labels": {"singular": "Order", "plural": "Orders"}, "description": "Customer orders", "fields": [{"id": "name", "labels": {"singular": "Name", "plural": "Names"}, "type": "text"}], "relationships": [{"id": "primary-contact", "labels": {"singular": "Primary Contact", "plural": "Primary Contacts"}, "namespace": "contacts", "hasMany": false}]}} - "set up a custom object schema for tracking support tickets with a title field linked to contacts" → params={"schema": {"slug": "support-ticket", "labels": {"singular": "Support Ticket", "plural": "Support Tickets"}, "description": "Support tickets", "fields": [{"id": "title", "labels": {"singular": "Title", "plural": "Titles"}, "type": "text", "required": true}], "relationships": [{"id": "primary-contact", "labels": {"singular": "Primary Contact", "plural": "Primary Contacts"}, "namespace": "contacts", "hasMany": false}]}} - "create a new custom object type linked to contacts with a notes field" → params={"schema": {"slug": "my-object", "labels": {"singular": "My Object", "plural": "My Objects"}, "fields": [{"id": "notes", "labels": {"singular": "Note", "plural": "Notes"}, "type": "text"}], "relationships": [{"id": "primary-contact", "labels": {"singular": "Primary Contact", "plural": "Primary Contacts"}, "description": "Primary contact for this object", "namespace": "contacts", "hasMany": false}]}} - "set up a custom object schema for tracking projects with a title field linked to deals" → params={"schema": {"slug": "project", "labels": {"singular": "Project", "plural": "Projects"}, "fields": [{"id": "title", "labels": {"singular": "Title", "plural": "Titles"}, "type": "text"}], "relationships": [{"id": "deal", "labels": {"singular": "Deal", "plural": "Deals"}, "namespace": "deals", "hasMany": false}]}} - "create a custom object type for tracking assets linked to accounts" → params={"schema": {"slug": "asset", "labels": {"singular": "Asset", "plural": "Assets"}, "fields": [{"id": "name", "labels": {"singular": "Name", "plural": "Names"}, "type": "text"}], "relationships": [{"id": "account", "labels": {"singular": "Account", "plural": "Accounts"}, "namespace": "accounts", "hasMany": false}]}} ## Constraints - The slug must be unique across the account and follow kebab-case format. - Field types include: text, textarea, number, currency, date, datetime, dropdown, multiselect. - Number fields require a scale value (decimal places, e.g. 0 for integers, 2 for decimals). - Currency fields require a defaultCurrency value (e.g. "USD", "EUR"). - Dropdown fields require options, each with an id and value (e.g. [{"id": "active", "value": "Active"}]). - At least one field must be defined. If the user has not specified any fields, ask them before proceeding. - labels (singular and plural) are required on the schema, every field, and every relationship. - Relationship namespaces must reference existing object types (e.g. 'contacts', 'accounts', 'deals'). - Exactly one relationship must be specified to link the schema to a primary object (contacts, accounts, or deals). Only one ActiveCampaign object type can be related per schema. - If the user does not specify which object type the schema should relate to, **always ask first** before creating the schema. Do not assume or choose a default — the relationship is a critical decision that must be explicit.
create_custom_object_schema
Create a new deal in ActiveCampaign. A deal represents a sales opportunity that can be tracked through a pipeline. You must associate the deal with either a contact or an account. **Important — owner vs contact:** The ``owner`` and ``contact`` fields refer to completely different entities: - **owner** — an ActiveCampaign *user* (team member / sales rep) responsible for working the deal. This is **not** the customer. Obtain valid user IDs from the ``list_users`` tool or the ``GET /api/3/users`` endpoint. - **contact** — the *customer or lead* the deal is associated with. Obtain valid contact IDs from ``list_contacts`` or ``get_contact``. Do **not** pass a contact ID as the owner; the API will reject it with ``"The provided owner id does not exist."`` **Important:** To create a deal, the user requires permission to manage deals and permission to manage the pipeline the new deal belongs to. Args: params (DealCreateParams): Parameters for creating a deal. title (str): Required. The name of the deal. value (int): Required. Deal value in cents (e.g., 10000 for $100.00). Must be >= 0. currency (str): Deal currency in 3-digit ISO format, lowercased. Defaults to "usd". group (str, optional): Deal pipeline ID. Required if stage is not provided. stage (str, optional): The ID of the deal stage. Required if group is not provided. owner (str): Required. The ID of the deal owner — must be a valid ActiveCampaign **user** ID (not a contact ID). Required if the pipeline's auto-assign option is disabled. contact (str, optional): The ID of the deal's primary **contact** (the customer or lead). Required if account is not provided. account (str, optional): Deal account ID. Required if contact is not provided. description (str, optional): Description of the deal. percent (int, optional): The probability percent of the deal. status (int, optional): The deal status (0=Open, 1=Won, 2=Lost). Default is 0 (Open). fields (List[DealCreateCustomField], optional): Custom field values. Each item: customFieldId (int): Required. ID of the custom field. fieldValue (str): Required. Value to set for the field. fieldCurrency (str, optional): Currency code for currency-type fields. auth: The authentication class for the request. Returns ------- dict[str, Any]: A dict representing the created deal resource.
create_deal
Create a new note for a deal in ActiveCampaign. A deal note represents text that can be added to a deal to note important information. **Important:** To create a deal note, the user requires permission to manage deals and permission to manage the pipeline the deal belongs to. Args: deal_id (int): The unique ID of the deal to add a note to. params (DealNoteCreateParams): Parameters for creating a note. note (str): The text of the note to be added. auth: The authentication class for the request. Returns ------- dict[str, Any]: A dict representing the deal's newly created note.
create_deal_note
Create a new deal pipeline (dealGroup) in ActiveCampaign. A pipeline represents a customizable sales process with stages that deals move through. Pipelines allow you to organize and track sales opportunities, automate deal assignment, and manage which users and groups have access to deals. ## Use Cases - Create separate pipelines for different sales processes (e.g., "New Business", "Renewals", "Upsells") - Organize deals by product line, region, or business unit - Set up automated deal assignment with Round Robin or value-based distribution - Control pipeline access by assigning specific user groups ## Pipeline Configuration **Auto-assignment options:** - 0: Disabled - No automatic assignment - 1: Round Robin - Distributes deals evenly among users - 2: Deal values - Assigns based on deal value thresholds **Group management:** - allgroups=1: All user groups can manage this pipeline - allgroups=0: Only specified groups (in dealGroup.groups) can manage **User assignment:** - allusers=1: Auto-assign new deals to all users - allusers=0: Auto-assign only to specified users (in dealGroup.users) ## Important Notes To create a pipeline, the user requires permission to manage deals and permission to create new pipelines in ActiveCampaign. Args: params (DealPipelineCreateParams): Parameters for creating a pipeline. - dealGroup (DealGroup): The pipeline configuration object containing: - title (str): The name of the pipeline (required). - currency (str): Default currency for new deals in 3-digit ISO format, lowercased (e.g., "usd", "eur", "gbp") (required). - allgroups (Literal[0, 1]): Whether all groups can manage this pipeline. 1 = all groups, 0 = only groups in dealGroup.groups (default: 1). - allusers (Literal[0, 1]): Whether to auto-assign to all users. 1 = all users, 0 = only users in dealGroup.users (default: 0). - autoassign (Literal[0, 1, 2]): Auto-assignment mode. 0 = disabled, 1 = Round Robin, 2 = deal values (default: 1). - users (List[str], optional): List of user IDs to auto-assign new deals to. Required when allusers=0. - groups (List[str], optional): List of user group IDs that can manage this pipeline. Required when allgroups=0. Returns ------- dict[str, Any]: A dict representing the created pipeline (dealGroup) resource, including the pipeline ID, title, currency, stages, and configuration settings.
create_deal_pipeline
Create a new deal stage within a pipeline in ActiveCampaign. A deal stage represents a step in a pipeline that deals can move through. Call list_deal_pipelines first to find the pipeline (group) ID to assign the stage to. Args: params (DealStageParams): Parameters for creating a deal stage. dealStage (DealStage): The stage configuration object. title (str): Name of the stage. Required. group (str): Pipeline (dealGroup) ID the stage belongs to. Required. order (int, optional): Display order of the stage within the pipeline. auth: The authentication class for the request. Returns ------- dict[str, Any]: A dict representing the created dealStage resource.
create_deal_stage
Create options for a dropdown, listbox, radio, or checkbox contact custom field Parameters ---------- - params: FieldOptionBulkCreateParams object containing a list of: - field: Required. The ID of the custom field these options belong to. - value: Required. The value of the option. - label: Required. The label to display for the option. - orderid: Required. The order in which to display the option. - isdefault: Optional. Whether this option is selected by default. Defaults to false.
create_field_options
Create a new list in ActiveCampaign. This tool creates a new list for organizing contacts and managing email campaigns. Use this tool to create new lists for organizing contacts. Consider using list_groups() to see available groups if you want to associate the new list with a group for better organization using create_list_group_permission(). Note: For a list to be visible in the ActiveCampaign user interface for non-administrators, it may need to be associated with a user group. The AC API also requires a `stringid` (URL-safe list name), but this is generated automatically from the name if not provided. Args: params (ListCreateParams): List creation parameters containing: name (str): Required. Name of the list. channel (str): Optional. Channel type ("sms" or "email", default: "email"). sender_url (str): Optional. The website URL associated with this list (recommended for CAN-SPAM compliance). sender_reminder (str): Optional. Reminder text shown to subscribers about how they joined the list. send_last_broadcast (int): Optional. Whether to send the most recent campaign to new subscribers (default: 0). carboncopy (str): Optional. Comma-separated email addresses to receive copies of all mailings. subscription_notify (str): Optional. Comma-separated email addresses to notify on new subscriptions. unsubscription_notify (str): Optional. Comma-separated email addresses to notify on unsubscriptions. auth: Authentication credentials for the request. Returns ------- dict[str, Any]: A dict containing the created list data.
create_list
Associate a list with a user group for enhanced organization and visibility. This tool creates a list group permission, which associates a specific list with a user group in ActiveCampaign. This association enables group-based permissions and makes lists visible in the appropriate sections of the ActiveCampaign interface. This is typically used after creating a list to ensure it appears in the correct sections of the ActiveCampaign interface for the appropriate user groups. Args: params (ListGroupPermissionParams): Permission parameters containing: listid (int): Required. The ID of the list to associate with the group. groupid (int): Required. The ID of the group to associate with the list. auth: Authentication credentials for the request. Returns ------- dict[str, Any]: A dict containing the created list group permission data.
create_list_group_permission
Use ONLY for 1–9 contacts. For 10+ use bulk_import_contacts. Use this tool only for a single create or single update. **IMPORTANT — phone-only contacts:** If the contact has no email but has a phone number, first check context if phone-only contact setting is enabled. If unknown, call is_phone_only_contact_enabled first. If it's not enabled, you CANNOT create a contact with only a phone number. Ask the user for an email. Create or update a contact, using the email or phone (if phone-only contact setting is enabled) as the unique identifier (upsert). fieldValues fieldIds can be found or created by using the list_contact_custom_fields and create_contact_custom_field tools. Always try to find a similar field name or perstag to the one you want to create, even if it isn't exactly the same. Stop and prompt the user if you can't find it to ask if they want to create a new field. Args: email (str | None): Contact's email address. Required unless phone-only contact setting is enabled. phone (str | None): Contact's phone number. first_name (str | None): Contact's first name. last_name (str | None): Contact's last name. field_values (list | None): List of custom field values to set on the contact. auth: The authentication class for the request. Returns ------- dict[str, Any]: Dictionary containing the created or updated contact data.
create_or_update_contact
Create or update a single record in a custom object schema. If ``record.externalId`` matches an existing record it is updated; otherwise a new record is created with that externalId. If ``record.id`` matches an existing record it is updated; if it does not match, it is ignored and a new record is created with a generated id. ## When to use - Create a new custom object record with field values and relationships - Update an existing record by its ``externalId`` or ``id`` - Create or update a record using your own ``externalId`` as the match key ## When NOT to use - User wants to list records — use list_custom_object_records - User wants to list or create custom object schemas — use list_custom_object_schemas / create_custom_object_schema - User asks about standard objects (contacts, deals, campaigns) — use the dedicated tools ## Examples - "create an order record with order number ORD-001" → schema_id="order-schema-id", record={"fields": [{"id": "order-number", "value": "ORD-001"}]} - "create a record with name test linked to contact 42" → schema_id="order-schema-id", record={"fields": [{"id": "name", "value": "Test"}], "relationships": {"primary-contact": [42]}} - "create a project record named Website Redesign linked to deal 2" → schema_id="project-schema-id", record={"fields": [{"id": "title", "value": "Website Redesign"}], "relationships": {"deal": [2]}} - "create an asset record linked to account 15" → schema_id="asset-schema-id", record={"fields": [{"id": "name", "value": "Server Rack"}], "relationships": {"account": [15]}} - "update record ext-001 to set total to 200" → schema_id="order-schema-id", record={"externalId": "ext-001", "fields": [{"id": "total-amount", "value": 200}]} ## Constraints - ``schema_id`` is required. ``record.fields`` defaults to empty if omitted. - The schema_id can be either the schema UUID or its slug. If the user mentions a schema by name (e.g., "vendor record", "asset record"), infer the slug from that name and use it directly — do not call list_custom_object_schemas to look it up. - If the schema is not found, do not assume or try similar schema names (e.g., trying "vendor2" if "vendor" fails). Instead, ask the user to clarify which schema they meant or provide the correct schema ID/slug. - Fields must reference valid field slugs defined in the target schema. - Multiselect fields require a list of option display values as the value (e.g. ``["Option 1", "Option 3"]``). - Every schema has exactly one relationship defined (to either contacts, accounts, or deals). If the user does not specify relationships, ask them which entity (contact ID, account ID, or deal ID) the record should be linked to based on the schema's relationship type. - Relationship keys must match the relationship ID defined in the schema (e.g. 'primary-contact', 'deal', 'account'). - Prefer ``externalId`` over ``id`` — it is the recommended match key and makes future updates easier. - Providing ``id`` does not guarantee an update: if no record with that id exists, a new record is created.
create_or_update_custom_object_record
Retrieve a single campaign by ID. Args: campaign_id: The ID of the campaign to retrieve Returns ------- Dict with full campaign record
get_campaign
Retrieve links associated with a campaign from ActiveCampaign. Parameters ---------- - campaign_id: The ID of the campaign to retrieve links for
get_campaign_links
Retrieve messages for a campaign. Returns each message's ``subject``, ``preheader_text``, ``fromname``, and ``fromemail``. Pass ``include_body=True`` or ``include_text=True`` to also fetch the HTML or plain text content when you need to read or edit it. Use to inspect current message content or to obtain ``message_id`` before calling ``update_campaign_message``. :param campaign_id: ID of the campaign. :param include_body: Include the HTML body (large -- omit unless needed). :param include_text: Include the plain text version (omit unless needed). :return: Dict with a ``messages`` list.
get_campaign_messages
Retrieve a single contact by ID. Args: contact_id: The numeric ID of the contact to retrieve Returns ------- Dict with full contact record
get_contact
Retrieve a specific contact automation record by ID. This provides detailed information about a specific automation run for a contact, including status, progress, completion details, and timing information. Parameters ---------- - contact_automation_id: The ID of the contact automation record to retrieve
get_contact_automation
Get a contact custom field by ID Parameters ---------- - field_id: The ID of the custom field to retrieve
get_contact_custom_field
Get a contact custom field value by ID Parameters ---------- - field_value_id: The ID of the field value to retrieve
get_contact_field_value
Get all custom field values for a specific contact. Args: contact_id: The ID of the contact whose field values to retrieve Returns ------- Dict with fieldValues array (field ID, value, cdate, udate per item)
get_contact_field_values
Get all list memberships for a specific contact. Args: contact_id: The ID of the contact whose list memberships to retrieve Returns ------- Dict with contactLists array (list ID, status: 0=Unconfirmed/1=Active/2=Unsubscribed)
get_contact_list_memberships
Retrieve all score values for a specific contact id. Returns a list of scoreValue objects representing each scoring rule applied to the contact and the resulting numeric score value. Args: contact_id: The ID of the contact whose score values to retrieve. auth: The authentication class for the request. Returns ------- A dict containing a "scoreValues" array. Each item includes the score rule ID, contact ID, deal ID (null for contact scores), the scoreValue (numeric string), creation date (cdate), last modified date (mdate), and the record ID.
get_contact_score_values
Get all tags assigned to a specific contact by ID or email (not both). By email: returns full tag objects (name, description, subscriber count) alongside contactTag records. By contact_id: returns contactTag records with tag ID only. Args: contact_id: The numeric ID of the contact. Provide this or email, not both. email: The email address of the contact. Provide this or contact_id, not both. Returns ------- Dict with contactTags array and (when email) full tag details
get_contact_tags
Retrieve a single deal by ID. Note: if the user lacks pipeline permission, returns id/title/isDisabled=true only. Args: deal_id: The unique ID of the deal to fetch Returns ------- Dict with full deal record
get_deal
Retrieve a deal pipeline (dealGroup) by ID from ActiveCampaign. Returns the full pipeline configuration including title, currency, stages, auto-assignment settings, and associated users and groups. Args: pipeline_id (int): The unique ID of the pipeline to retrieve. auth: The authentication class for the request. Returns ------- dict[str, Any]: A dict representing the pipeline (dealGroup) resource, including all configuration details, stages, and metadata.
get_deal_pipeline
Retrieve a single deal stage by ID from ActiveCampaign. Args: stage_id (int): The unique ID of the deal stage to retrieve. auth: The authentication class for the request. Returns ------- dict[str, Any]: A dict representing the dealStage resource, including its title, pipeline (group), display order, and timestamps.
get_deal_stage
Retrieve a single list by ID from ActiveCampaign. This tool fetches detailed information about a specific list, including all configuration settings, tracking options, and metadata. Args: list_id (int): The ID of the list to retrieve. auth: Authentication credentials for the request. Returns ------- dict[str, Any]: A dict containing the list details.
get_list
Get a tag by ID Parameters ---------- - tag_id: The ID of the tag to retrieve
get_tag
List automations from ActiveCampaign with filtering and pagination. Automation records include basic metadata. With enhance=true, records also include block definitions, goals, linked campaigns, contact counts, and labels. Filtering and sorting BY completion rate or active-contact count is NOT supported. ## When to use - User asks to browse, view, or list automations - User needs automations filtered by name, status, tag, trigger type, or label - User wants automations sorted by entry count (contacts who entered) Tip: to see which contacts are active in ONE specific automation, call list_contact_automations with filters.seriesid=<id> and filters.status=1. ## When NOT to use - User asks for completion rate, active-contact percentage, or asks to SORT/RANK automations by those metrics (e.g., "automation with highest completion rate") — REJECT without calling this tool. Suggest: "I can show automations sorted by total entries [entered] or filtered by name — want that?" - User asks to filter by completion rate, active-contact count, or any property not in Supported filters — REJECT. State: filters support filters.name, filters.status, filters.ids, filters.tag, filters.triggers, filters.actions, filters.label_name, label (folder ID), search, active, has_message. - User asks to sort by a field not in Supported sort fields — REJECT. State: sort supports name, status, entered, cdate, mdate, revisions. - You already called this tool this turn — REJECT a second call. State the limitation. Do NOT retry with different params to explore. ## Supported filters (exhaustive) - filters.name: partial match on automation name - filters.status: 1=active, 2=inactive - filters.ids: comma-separated automation IDs - filters.tag: tag ID - filters.triggers: comma-separated trigger types - filters.actions: comma-separated action block types - filters.label_name: by label name - label: folder/label ID (integer) - search: partial name match - active: true=active only, false=inactive only - has_message: boolean flag ## Supported sort fields name, status, entered (contacts-entered count), cdate, mdate, revisions ## Examples — SUPPORTED - "Active automations" → active=true - "Automations named 'welcome'" → filters.name="welcome" - "Most-entered automations" → orders={"entered": "DESC"} - "Automations with tag 42" → filters.tag=42 - "Automations sorted by creation date" → orders={"cdate": "DESC"} - "Automation details with counts and blocks" → enhance=true ## Examples — UNSUPPORTED (REJECT) - "Automations with completion rate above 50%" — completion rate is not a filter - "Automations with more than 100 active contacts" — active-contact count is not a filter Args: params: Filtering, ordering, and pagination options Returns ------- Dict with automations array. With enhance=true: adds blocks, goals, campaigns, counts, and labels per record.
list_automations
List campaigns from ActiveCampaign with filtering and pagination. Campaign records include performance data per campaign (opens, uniqueopens, linkclicks, uniquelinkclicks, hardbounces, softbounces, unsubscribes). Filtering and sorting BY those values is NOT supported. ## When to use - User asks to browse, view, or list email/SMS campaigns - User needs campaigns filtered by status, type, name, list, or automation flag - User wants performance data for a set of campaigns (returned per record) ## When NOT to use - User asks for the BEST/WORST campaign or asks to SORT/FILTER by open rate, click rate, or any performance metric — REJECT without calling this tool. Performance data is in records but cannot be used to filter or sort. Suggest: "I can show your completed campaigns sorted by send date — want that?" - User asks to FILTER by open rate, click rate, revenue, or any performance threshold — REJECT. State: filters support status, type, name, list_id, seriesid, label_name, has_message, has_message_content, has_form, excludeTypes. No performance-metric filter. - User asks to SORT by open rate, click rate, or any field not in Supported sort fields — REJECT. State: sort supports sdate, mdate, ldate, status. - You already called this tool this turn — REJECT a second call. State the limitation. Do NOT retry with different params to explore. ## Supported filters (exhaustive) - status: "drafts"/"scheduled"/"currently-sending"/"paused"/"stopped"/"complete"/ "disabled"/"pending-review"/"determining-winner" - filters.type: "single"/"recurring"/"split"/"responder"/"reminder"/"special"/ "activerss"/"text" - filters.name: partial match on campaign name - filters.list_id: by list ID - filters.seriesid: by automation/series ID - filters.label_name: by label - filters.automation: boolean flag - has_message, has_message_content, has_form: boolean flags - excludeTypes: comma-separated campaign types to exclude ## Supported sort fields sdate (scheduled date), mdate (modified date), ldate (last-sent date), status ## Examples — SUPPORTED - "Scheduled campaigns" → status="scheduled" - "Completed email campaigns" → status="complete", filters.type="single" - "Campaigns named 'summer'" → filters.name="summer" - "Most recently sent campaigns" → orders={"ldate": "DESC"} ## Examples — UNSUPPORTED (REJECT) - "Best-performing campaign" — no sort field for opens, clicks, or any metric - "Campaigns with open rate above 30%" — open rate threshold is not a filter Args: params: Filtering, ordering, and pagination options Returns ------- Dict with campaigns array. Each record includes opens, uniqueopens, linkclicks, uniquelinkclicks, hardbounces, softbounces, unsubscribes.
list_campaigns
List activities for a specific contact. Returns a chronological log of actions and events associated with a contact, such as email interactions, list subscriptions, automation steps, deal tasks, SMS messages, link clicks, and eCommerce order events. A contact ID is required. This endpoint does not support multiple contact IDs in a single call. Args: params: ContactActivityListParams object containing: - contact: Required. The ID of the contact whose activities to retrieve. - after: Optional. Filter for activities after a specific date/datetime. - include: Optional. Comma-separated list of related objects to include. Valid values: notes, notes.user, recipients, recipients.recipient, reference, reference.automation, reference.campaign, reference.campaign.campaignList, reference.campaign.campaignMessage, reference.campaignMessage, reference.contact, reference.contactList, reference.contactList.list, reference.deal, reference.deal.contact, reference.dealTasktype, reference.link, reference.list, reference.log, reference.log.campaign, reference.log.contact, reference.log.message, reference.message, reference.note, reference.sms, reference.sms.automation, user - orders_tstamp: Optional. Sort direction for timestamp ordering ("ASC" or "DESC"). - emails: Optional. If true, includes email data fields in deal activities. auth: The authentication class for the request. Returns ------- A dict containing an "activities" array. Each activity includes subscriberid, reference_type (e.g. SubscriberEmail, DealTask, SubscriberList, Note, SmsLog), reference_id, reference_action (e.g. subscribe, start, complete), and tstamp.
list_contact_activities
List automation run records — which contacts entered which automations. Use to answer: "which automations did contact X go through?" or "which contacts went through automation Y?". Filter by seriesid (automation ID) or subscriberid (contact ID) to scope results. ## Supported filters (exhaustive) filters.seriesid (automation ID), filters.subscriberid (contact ID), filters.adddate (date, with eq/gt/gte/lt/lte operators), filters.status (1=in progress/2=completed), filters.lastblock (step ID), q (text search), min_time/max_time (seconds in automation), tags (tag IDs), lists (list IDs), g_id (goal ID), g_status (0=incomplete/1=complete) ## Supported sort fields seriesid, adddate, status, lastblock, subscriberid, name, first_name, last_name, email, cdate, score, goal_completion Args: params: Filtering, ordering, and pagination options Returns ------- Dict with contactAutomations array
list_contact_automations
List all contact custom field definitions (schema lookup, not per-contact values). Use to look up custom field names, IDs, and types. To get values for a specific contact, use get_contact_field_values instead. Args: params: Pagination options (limit, offset) Returns ------- Dict with fields array (field definitions)
list_contact_custom_fields
List all contact custom field values Parameters ---------- - params: ContactFieldValueListParams object containing: - filters: Optional dictionary to filter by fieldid conditions (e.g., {"fieldid": 123}) - limit: Number of results to return - offset: Offset for pagination
list_contact_field_values
List contacts from ActiveCampaign with filtering and pagination. ## When to use - User asks to browse, view, or list contacts - User needs contacts filtered by email, phone, tag, list, segment, status, or date - User wants contacts sorted by ID, created date, email, first/last name, or score ## When NOT to use - User asks for a COUNT, AGGREGATE, or wants to SORT by an unsupported property (e.g., "how many contacts have more than 5 tags?", "contacts sorted by number of tags", "contacts in California") — REJECT without calling this tool. Tag count and location are not filterable or sortable. Suggest: "I can list contacts filtered by tag ID or sorted by score — want that?" - User asks to filter by city, birthdate, organization, custom field value, email open rate, or any property not listed in Supported filters below — REJECT. State: filters support email_like, phone, search, listid, tagid, segmentid, formid, seriesid, waitid, status, and date ranges (created/updated before/after). - User asks to sort by "most active", "most tagged", "most recently updated", or any field not listed in Supported sort fields below — REJECT. State: sort supports id, cdate, email, first_name, last_name, name, score. - You already called this tool this turn — REJECT a second call. State the limitation. Do NOT retry with different params to explore. ## Supported filters (exhaustive) - email_like: email contains this string - phone: phone starts with this value - search: partial match across name, email, phone - listid: subscribed to this list ID (use list_lists to look up IDs) - tagid: has this tag ID assigned - segmentid, formid, seriesid, waitid: by segment / form / automation / wait ID - status: ACTIVE=1, UNCONFIRMED=0, UNSUBSCRIBED=2, BOUNCED=3, ANY=-1 - filters.created_before / created_after / updated_before / updated_after: ISO 8601 ## Supported sort fields id, cdate (created date), email, first_name, last_name, name, score ## Examples — SUPPORTED - "Contacts on list 5" → listid=5 - "Phone starts with 555" → phone="555" - "Highest-scoring contacts" → orders={"score": "DESC"} - "Most recently created contacts" → orders={"cdate": "DESC"} - "Active contacts sorted by email" → status=ACTIVE, orders={"email": "ASC"} - "Contacts created last month" → filters={"created_after": "2024-04-01", "created_before": "2024-05-01"} - "Total contact count" → limit=1, read meta.total ## Examples — UNSUPPORTED (REJECT) - "Contacts with the most tags" — tag count is not a sort or filter field - "Contacts subscribed to most lists" — subscription count is not a sort field; REJECT without calling any tool - "Contacts who opened the last campaign" — email open activity is not a filter - "Contacts in California" — location/city is not a filter - "Most engaged contacts" — engagement score is not a sort field Args: params: Filtering, ordering, and pagination options Returns ------- Dict with contacts array and meta.total count
list_contacts
List records for a given custom object schema in an ActiveCampaign account. Returns records with their field values, relationships, and timestamps. ## When to use - Retrieve records belonging to a specific custom object type - Browse or paginate through custom object data - Filter records by their relationship to a contact, account, or deal - Filter records by field values - Inspect field values stored in custom object records ## When NOT to use - User wants to list custom object schemas (types) — use list_custom_object_schemas - User wants to create or update a record — use create_or_update_custom_object_record - User asks about standard objects (contacts, deals, campaigns) — use the dedicated tools ## Examples - "show me all records for schema abc-123" → schema_id="abc-123", params={"limit": 100} - "list the first 10 records of custom object order" → schema_id="order", params={"limit": 10} - "get records for schema abc-123 linked to contact 42" → schema_id="abc-123", params={"filters": {"relationships.primary-contact": {"eq": "42"}}} - "get records for schema abc-123 linked to deal 7" → schema_id="abc-123", params={"filters": {"relationships.deal": {"eq": "7"}}} - "get records for schema abc-123 linked to account 15" → schema_id="abc-123", params={"filters": {"relationships.account": {"eq": "15"}}} - "find order records where city is Tulsa" → schema_id="order", params={"filters": {"fields.shipping-address-city": {"eq": "Tulsa"}}} - "find project records where budget is $10" → schema_id="projects", params={"filters": {"fields.budget.value": {"eq": "10"}}} - "find project records where currency is USD" → schema_id="projects", params={"filters": {"fields.budget.currency": {"eq": "USD"}}} - "show me the next page of records" → schema_id="abc-123", params={"limit": 100, "offset": 100} - "list records sorted by newest first" → schema_id="abc-123", params={"orders": {"createdTimestamp": "DESC"}} - "list records ordered by a custom field" → schema_id="abc-123", params={"orders": {"fields.my-field": "ASC"}} ## Constraints - Maximum 100 results per request (default 20). Use limit/offset for pagination. - The schema_id can be either the schema UUID or its slug. - Supported filter keys: - 'relationships.<relationship-id>' with operator 'eq' and the related object's ID as value. Common relationship IDs: 'primary-contact', 'account', 'deal'. - 'fields.<field-id>' with operator 'eq' and the field value to match. Currency fields require a suffix: use 'fields.<field-id>.value' to filter by amount or 'fields.<field-id>.currency' to filter by currency code. Currency values are stored as decimal strings (e.g. "10" or "10.50" for $10.50) — NOT in cents. - Supported order keys: 'createdTimestamp', 'fields.<field-id>'. Values: 'ASC' or 'DESC'. - All filters are AND-combined. - Non-admin users must include at least one relationship filter (primary-contact, account, or deal). Calling without a relationship filter is only permitted for admin users and returns a 403 otherwise.
list_custom_object_records
List all custom object schemas in an ActiveCampaign account. Returns schema definitions including fields, relationships, labels, and visibility. ## When to use - Discover what custom object types exist in the account - Inspect field definitions or relationships of custom object schemas - Retrieve schema IDs or slugs for further custom object operations - Check whether a specific custom object type has been created - Find schemas that have a relationship with contacts, accounts, or deals - Find child schemas of a given parent schema ## When NOT to use - User asks about standard objects (contacts, deals, campaigns) — use the dedicated tools - User wants to list records within a custom object — list_custom_object_records ## Examples - "what custom objects do I have?" → params={} - "show me all custom object schemas" → params={} - "list custom objects sorted by creation date" → params={"orders": {"createdTimestamp": "DESC"}} - "find custom object with slug my-schema" → params={"filters": {"slug": {"eq": "my-schema"}}} - "find custom objects whose slug contains order" → params={"filters": {"slug": {"contains": "order"}}} - "show me the first 5 custom object types" → params={"limit": 5} - "find custom objects linked to contacts" → params={"filters": {"relationships.id": {"eq": "primary-contact"}, "relationships.namespace": {"eq": "contacts"}}} - "find custom objects linked to accounts" → params={"filters": {"relationships.id": {"eq": "account"}, "relationships.namespace": {"eq": "accounts"}}} - "find custom objects linked to deals" → params={"filters": {"relationships.id": {"eq": "deal"}, "relationships.namespace": {"eq": "deals"}}} - "find child schemas of schema abc-123" → params={"filters": {"parentId": {"eq": "abc-123"}}} - "find custom objects whose description contains orders" → params={"filters": {"description": {"contains": "orders"}}} ## Constraints - Maximum 100 results per request (default 20). Use limit/offset for pagination. - Pass showFields=all to include deleted fields (status 'marked_for_deletion'). - Supported filter keys: 'slug' (operators: eq, contains), 'description' (operators: eq, contains), 'relationships.id' (operators: eq, values: 'primary-contact', 'account', 'deal'), 'relationships.namespace' (operator: eq; values: 'contacts', 'accounts', 'deals'), 'parentId' (operators: eq, contains). All filters are AND-combined. - 'relationships.id' and 'relationships.namespace' must always be provided together. - Order keys: 'createdTimestamp'. Values: 'ASC' or 'DESC'.
list_custom_object_schemas
List all deal activities from ActiveCampaign with filtering and pagination options. Args: params (DealActivityListParams): Parameters for listing deal activities. deal (int, optional): Filter by deal ID. exclude (str, optional): Exclude patterns (e.g. 'email=test@example.com'). limit (int, optional): Number of results to return. offset (int, optional): Offset for pagination. filters (DealActivityFilters, optional): Filtering options. data_type (str): Filter by data type (e.g. 'userid', 'deal', 'contact'). data_id (int): Filter by data ID. d_name (str): Filter by deal title. auth: The authentication class for the request. Returns ------- dict[str, Any]: A dictionary containing a list of deal activities.
list_deal_activities
List deal pipelines from ActiveCampaign with filtering and pagination. Returns basic pipeline info only: ID, title, currency, stage IDs. Only one filter (title) and one sort field (title) are supported. ## When to use - User asks to browse, view, or list sales pipelines - User needs pipeline IDs to pass to list_deals (filters.group) - User needs to find a pipeline by name ## When NOT to use - User asks for pipeline performance (win rate, avg deal value, deal count) or asks to SORT/RANK pipelines by those metrics (e.g., "pipeline with the most deals") — REJECT without calling this tool. Records contain ID/title/currency/stage IDs only. Suggest: "I can list pipelines; then you can query deals filtered by pipeline ID — want that?" - User asks to filter by anything other than title — REJECT. State: only filters.title (partial match) is supported. - User asks to sort by anything other than title — REJECT. State: only title sort (ASC/DESC) is supported. - You already called this tool this turn — REJECT a second call. State the limitation. Do NOT retry with different params to explore. ## Supported filters (exhaustive) - filters.title: partial match on pipeline title (only filter available) ## Supported sort fields title (ASC or DESC only) ## Examples — SUPPORTED - "All pipelines" → no filters needed - "Pipeline named 'Enterprise'" → filters.title="Enterprise" - "Pipelines sorted A-Z" → orders={"title": "ASC"} ## Examples — UNSUPPORTED (REJECT) - "Pipeline with the most deals" — deal count is not returned or sortable - "Best-performing pipeline" — no performance metrics in records Args: params: Filtering, ordering, and pagination options Returns ------- Dict with dealGroups array and meta.total count. Fields: id, title, currency, stage IDs.
list_deal_pipelines
List deal stages — use to resolve a stage name to its ID before updating a deal. When the user refers to a stage by name (e.g. "Enquiry", "Nurture"), call this ONCE to look up the ID, then pass that ID to update_deal. Filter by d_groupid to scope results to a specific pipeline. Args: params: Filter options (d_groupid to scope by pipeline, limit, offset) Returns ------- Dict with dealStages array (id, title, pipeline group)
list_deal_stages
List deals from ActiveCampaign with filtering and pagination. Deal values are in cents (minimum_value=500000 = $5,000). Returns raw deal records only — no aggregate metrics (total value, average size, win rate) computed across records. ## When to use - User asks to browse, view, or list deals/sales opportunities - User needs deals filtered by status, pipeline, stage, owner, value range, score, tag, organization, or date ## When NOT to use - User asks for total deal value, average deal size, win rate, or any aggregate metric — REJECT without calling this tool. Suggest a specific supported slice instead, e.g. "I cannot compute totals, but I can show your open deals sorted by value — want that?" - User asks to sort by a field not in Supported sort fields — REJECT. State: sort supports title, value, cdate, contact_name, organization_name, next_action. - You already called this tool this turn — REJECT a second call. State the limitation. Do NOT retry with different params to explore. Note: deals in pipelines the user lacks permission on return id/title/isDisabled=true only. ## Supported filters (exhaustive) - filters.status: 0=Open, 1=Won, 2=Lost - filters.group: pipeline ID (use list_deal_pipelines to look up) - filters.stage: stage ID (use list_deal_stages to look up) - filters.owner: user ID - filters.tag: tag ID (-1=any tag, -2=no tag) - filters.organization: organization ID - filters.minimum_value / filters.maximum_value: deal value range (in cents) - filters.score / filters.score_greater_than / filters.score_less_than: deal score - filters.created_before/created_after/updated_before/updated_after: ISO 8601 - filters.nextdate_range: "upcoming"/"scheduled"/"overdue"/"no-task" (task due dates) - filters.tasktype: task type ID (1=Call, 2=Email, 3=Meeting) - filters.search + filters.search_field: text in "all"/"title"/"contact"/"org" - filters.title: title match ## Supported sort fields title, value, cdate (created date), contact_name, organization_name, next_action ## Examples — SUPPORTED - "Open deals" → filters.status=0 - "Won deals this month" → filters.status=1, filters.created_after="2024-05-01" - "Deals in pipeline 3 sorted by value" → filters.group=3, orders={"value": "DESC"} - "Most valuable deals" → orders={"value": "DESC"} - "Deals worth over $5,000" → filters.minimum_value=500000 - "Deals with overdue tasks" → filters.nextdate_range="overdue" - "My deals" → filters.owner=<user_id> ## Examples — UNSUPPORTED (REJECT) - "Total value of all open deals" — aggregate; REJECT, suggest "I can show open deals sorted by value — want that?" - "Win rate by pipeline" — aggregate; REJECT, suggest "I can show won deals in that pipeline sorted by value — want that?" Args: params: Filtering, ordering, and pagination options Returns ------- Dict with deals array and meta.total count. Fields: id, title, value (cents), currency, status, stage, owner, contact, organization, cdate, score.
list_deals
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 ActiveCampaign alternatives on ChatGPT?
As of 2026-08-14, ActiveCampaign competes with Aivie, AWeber, Bizgo, Conversion, Flodesk, Intuit Mailchimp, Klaviyo, L Message(エルメ), Life Analytics Mail, magnews, MailerLite, MailSenpai, Nitrosend - AI Native Email, Notifly, Omnisend, OneSignal, Resend, Spoki, Systeme.io, Textmagic, VerticalResponse in ChatGPT Email & SMS Lifecycle Marketing Automation, 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.