Conversion
Marketing automation platform
- Category
- Marketing
- Primary Subcategory
- Email & SMS Lifecycle Marketing Automation
Integration details
Description
Connect ChatGPT to the Conversion marketing data platform to inspect CRM contacts, build emails, audiences, forms, and campaigns, diagnose why a contact did not receive an email or enter a workflow, and audit sync failures with Salesforce and other connected systems. Read-only tools cover contacts, opportunities, campaigns, forms, workflows, sync logs, and email performance metrics. Write tools create blast emails, audiences, campaigns, folders, contacts, and CSV imports within the user's authenticated Conversion workspace.
- Integration type
- Plugin
- Verification status
- Not applicable
- Platform
- ChatGPT
- Primary Subcategory
- Email & SMS Lifecycle Marketing Automation
- Secondary Subcategories
- None listed
- Brand
- Conversion
- Access
- Account required
- First tracked
- 2026-07-08
- Tool count
- 124
- Geography
- US
The Primary Subcategory used for this profile’s headline score.
Other Subcategories where the Integration is listed.
Get alerts for Conversion
Get updates when Conversion’s Discoverability Score or category rank changes.
ChatGPT Plugin Discovery Score
ChatGPT Plugin discovery is coming soon
ChatGPT can surface a Plugin when it matches a user's request.Your Plugin Discovery Score measures how often yours appears.
No spam. Unsubscribe any time.
What discovery looks like

Competing in ChatGPT Email & SMS Lifecycle Marketing Automation
View Category124 tools agents can invoke
Immediately add contacts to a STATIC audience by their UUIDs.
Create a new audience. DYNAMIC audiences require a filter. BEFORE CALLING: Call `learn_statement_semantics` first to load the schema before calling this tool. Audience filters require the UI/operand OR→AND shape. Use VARIABLE with a real `variableSchemaId` from `list` (resource `fields`) for contact fields, or ENGAGEMENT for events; direct root comparisons are not valid here.
Permanently delete an audience. Use `list` (resource `audiences`) first when you need to verify the target.
Deprecated: call `list` with resource `audiences` instead. List audiences for the current business with cursor pagination and optional sorting.
Get the business's email limits, link tracking, and one-click unsubscribe scope.
Get the business's logo and icon asset IDs. Returns four fields: logoLight, logoDark, iconLight, iconDark. Each is a tapp-assets asset ID — render via https://assets.conversion.ai/i/{id}, or empty string if unset.
Immediately add members. The categories take different arguments: CUSTOM adds everyone matching a `statement`; WEBINAR and FIELD_EVENT add an explicit list of `contactIds`. A webinar member cannot be added as Registered here. That status registers the person with the webinar's provider (Zoom and friends) for real and can email them, so it is left to a person working in the app. Leave `statusId` unset to use the webinar's first status (Invited). A field event never registers anyone on its provider, so every one of its statuses is available. BEFORE CALLING (CUSTOM only): Call `learn_statement_semantics` first to load the schema before calling this tool.
Create a new campaign. Must provide an existing campaign type ID.
Create a new campaign type with initial member statuses. Set `category: "FIELD_EVENT"` for a type field events use; its statuses carry `systemStatus` meanings so Cvent, Luma and Splash know which status to write registrations, waitlists, check-ins and no-shows to.
Add a new member status to an existing campaign type. Statuses define the lifecycle stages a contact can be in for any campaign of this type (e.g., adding 'Waitlisted' to an 'Event' type). Before calling, use `list` (resource `campaign_type_statuses`) to see what's already defined — duplicate names are confusing for downstream reporting.
Permanently delete a campaign that is already EMPTY. Works for custom campaigns, webinars and field events — set `category` to say which, since the id alone does not identify the kind. Use `list` (resource `campaigns`) first when you need to verify the target. Deleting a bound webinar or field event removes it here only; the event still exists at the provider, and a linked Salesforce campaign is untouched. A field event the user is merely done with should be archived (edit_campaign with `archived: true`), not deleted. A campaign holding assets cannot be deleted, and nothing is cascaded: every email, automation, form, audience and nested campaign or folder inside it has to be deleted (or moved out) first. This tool refuses and lists what is in the way rather than deleting anything, so `list` (resource `campaign_items`) is only needed when you want to look before calling.
Permanently delete a campaign type that no campaign is on. Refused while any campaign still uses it — deleting a type never deletes or retypes those campaigns. Use `list` (resource `campaign_types`) and `list` (resource `campaigns`) first to verify the target and find what is still on it.
Permanently delete a campaign member status. Refused while any campaign member still has the status — a status in use can only be retired by hiding it, which keeps existing members on it but stops it being offered when picking a status. Use `list` (resource `campaign_type_statuses`) first to verify the target.
Deprecated: call `list` with resource `campaign_items` instead. Get all assets inside a campaign (emails, automations, forms, etc.). Takes a custom campaign, webinar or field event id — all are containers, so no category is needed.
Get member counts by status for a webinar or a field event — total members plus one count per status (e.g. Invited, Registered, Attended, No Show), zero-filled and ordered by the status ladder. Statuses with isSuccess true count as attendance; a field event's statuses also carry their systemStatus meaning. Prefer this over paging `list` (resource `campaign_members`) when you only need counts. Custom campaigns report memberCount on `list` (resource `campaigns`) instead.
Bind a Conversion webinar to a provider webinar (Zoom, Sequel, or Goldcast) and cache that provider's title, schedule, host, and registration URL. Resolve `provider` and `providerWebinarId` with `list` (resource `bindable_webinars`) — never guess them. Fails if the Conversion webinar is already bound (`list` (resource `campaigns`) with `category: "WEBINAR"`, check `bound`) or if that provider webinar is already bound to another Conversion webinar. Binding is one-shot: you cannot unbind or re-bind from here — unbinding is done from the webinar's page in the app. This does NOT connect the webinar to Salesforce. Use `campaign_link_salesforce` or `campaign_sync_salesforce` for that.
Deprecated: call `list` with resource `campaigns` instead. List campaigns for the current business. Campaigns come in three kinds and this tool covers all of them: custom campaigns, which the user builds; webinars, which may be bound to a provider such as Zoom; and field events (conferences, tradeshows, dinners), which may be bound to Cvent, Luma, or Splash. Omit `category` to see every kind — that returns the first page of each and no cursor. Pass a `category` to page through one kind with `after`. When the user asks about "campaigns" or "events" without qualifying, omit `category` so webinars and field events are not silently left out.
Deprecated: call `list` with resource `campaign_members` instead. List members of a campaign with cursor pagination. Works for custom campaigns, webinars and field events — set `category` to say which, since the id alone does not identify the kind. Returns each member with their contact details and campaign status. Supports statement filters to narrow by contact properties.
Deprecated: call `list` with resource `campaign_type_statuses` instead. List the member statuses defined on a campaign type (e.g., Invited, Registered, Attended). Each status has an id, name, isSuccess flag, and hidden flag — a hidden status is retired: members already on it keep it, but don't pick one when setting a member's status. Call this before `campaign_create_type_status` to avoid creating a duplicate, and before referencing a status by id in `edit_campaign` (memberStatuses).
Deprecated: call `list` with resource `campaign_types` instead. List campaign types for the business. Each type defines a set of member statuses (e.g., Invited, Registered, Attended). You need a campaign type ID to create a campaign.
Immediately set a campaign's value for one token.
Immediately set a member's status. Works for custom campaigns, webinars and field events — set `category` to say which. A webinar member cannot be moved to Registered here. That status registers the person with the webinar's provider (Zoom and friends) for real and can email them, so it is left to a person working in the app. Every other webinar status is available. A field event never registers anyone on its provider, so every one of its statuses is available; a status the provider owns (registered, attended) may be re-asserted by the provider's next sync.
Update an existing campaign type. Any of name, description, archived may be set; omitted fields are left unchanged. Statuses on the type are managed separately.
Deprecated: call `list` with resource `company_opportunities` instead. List the opportunities associated with a company. Answers 'show me Acme's opportunities'. Returns the full Opportunity records (id, variables, Salesforce metadata, timestamps).
Count contacts matching filters using the statement query language. Use this when you only need the number of matching contacts rather than fetching rows. BEFORE CALLING (when passing a statement): Call `learn_statement_semantics` first to load the schema before calling this tool.
Create a new contact on the current business. `email` is required and must be unique. `fields` and `companyFields` are maps of field UUID to value — call contact_list_fields first to discover the right ids. Returns the new contact's id.
Permanently delete one contact. This also deletes the contact's company if that company becomes orphaned. Use `contact_get` first when you need to verify the target.
Look up a contact by their UUID. Returns contact details including name, email, company, subscription status, and key fields. To search by email, use `list` (resource `contacts`) with a filter instead.
Deprecated: call `list` with resource `contact_workflow_runs` instead. Get a contact's run history within a specific automation workflow. Returns each run with status, nodes passed, and activity log.
Deprecated: call `list` with resource `contact_events` instead. Get the event history for a contact: page visits, form submissions, email events, campaign changes, audience changes, and custom events. Events are newest first. Returns { count, total, offset, events, hasMore?, next? }: 'total' is the contact's full event count, 'count' is how many this page holds (default 50, up to 200 with 'limit'). While 'hasMore' is set, pass 'next' back as 'offset' for the following page — until then the history you have is partial, not the whole timeline.
Deprecated: call `list` with resource `contacts` instead. List contacts for the current business with cursor pagination using the statement query language. IMPORTANT: If you haven't already, Call `learn_statement_semantics` first to load the schema before calling this tool. HOW TO USE: 1. Call `list` (resource `fields`) to discover field IDs (including email). 2. Build a statement JSON object and pass it as the "statement" parameter. ROOT ATTRIBUTES: "id", "subscriptionStatus", "createdAt", "companyId", "unsubscribedTopicIds". FIELDS: Email and other contact/company fields must use the wire-format VARIABLE type with a variableSchemaId from `list` (resource `fields`). Never use "email" or "updatedAt" as a root ATTRIBUTE. SORTING: Sort by any core attribute or field. Use "variables.<field_id>" for field sorts (again, "variables" is the wire-format key). RETURNS: count (number of results in this page), contacts array, and optional next cursor. If you only need a count, you can still use this tool — check the count field in the response.
Deprecated: call `list` with resource `contact_opportunities` instead. List the opportunities a contact is attached to, along with the contact's role on each (e.g. Decision Maker, Influencer) and whether they're the primary contact. Answers 'what is this person involved in?'. Each returned item is an Opportunity with an embedded `opportunityContactRole` field.
Create a custom agent with standing instructions, triggers, and tool access. The agent is created switched off. Its triggers do not run until a person enables it in the app. Report that clearly and link the new agent. Use this for recurring or event-driven work, not a task that should be done now. Tool names are the ones you already use, plus the agent-only integration tools (`slack_*`, `linear_*`) a custom agent can be given even when you do not hold them yourself. Provide the complete definition in one call. Write instructions as a permanent brief because the new agent cannot see this conversation.
Create a new email (blast, workflow email, or template). The email is created LIVE but DORMANT — blasts and workflow emails are created as DRAFTs, never sent, scheduled, or published. You cannot send, schedule, or publish via the agent. To change an email that already exists, use `edit_email` (chat — proposes an edit for end-of-turn review) or `update_email` (MCP — applies immediately) instead — do not recreate it. BEFORE CALLING: Call `learn_email_building` first to load the schema before calling this tool. BEFORE CALLING (when setting a BLAST recipient `statement`): Call `learn_statement_semantics` first to load the schema before calling this tool. Use the UI/operand OR→AND shape. Think through the entire email before building the JSON: objective, audience, content strategy, structure (header/body sections/footer), personalization (merge fields), and design choices. Be creative, bold, and opinionated — write punchy, conversational copy that feels human, not corporate. Key points: - All component IDs must be valid UUID v4 strings. - The components array is flat — parent-child via children references. - Always include an unsubscribe component in the footer. - The data field must be a raw JSON object, not a stringified JSON. - Colors, fonts, and shape come from the workspace theme the email adopts. Leave a themed style absent to inherit it; set one only to deliberately deviate. - Spacing (padding, section gap, the page gutter) is never themed and absent spacing renders as zero: set it explicitly on every component, using the standard values from the email-building skill unless the design deviates.
Create a new workspace email theme from a complete WorkspaceTheme design payload. The theme is created as an unpublished DRAFT. Nothing references it and no email can adopt it until a person publishes it in the app — the agent cannot publish. Creating a theme never changes existing emails. BEFORE CALLING: Call `learn_email_theming` first to load the schema before calling this tool. Prefer starting from an existing theme: call `email_theme_get` on the workspace default, then modify the values you actually want to change. A theme must be complete — every field the schema requires must be present.
Create a marketing topic in the current workspace. Topics categorize emails and let recipients manage their subscription preferences. Returns topicId to assign to blast or workflow emails.
Create a field on a contact, company, campaign member, or custom object. The key should be snake_case and unique on that object. Use CAMPAIGN_MEMBER for data that describes a membership rather than the person — a value that differs between the same contact's two campaigns has to live there, or the second one overwrites the first. For a custom object, pass objectType CUSTOM_OBJECT with a customObjectId from `list` (resource `custom_objects`); a business without custom objects has none to name. A field whose value is another record is a relationship — use `create_relationship_field` for those.
Create a new form. The form is created LIVE but DORMANT — as an unpublished DRAFT. You cannot publish via the agent. To change a form that already exists, use `edit_form` (chat — proposes an edit for end-of-turn review) or `update_form` / `update_form_draft` (MCP — applies immediately) instead — do not recreate it. To sync a Meta or LinkedIn lead gen form into Conversion, use `create_lead_gen_form` instead; this tool only builds Conversion-hosted forms. BEFORE CALLING: Call `learn_form_building` first to load the schema before calling this tool. Plan the form before building: purpose, target audience, what data to collect, which CRM fields to map inputs to. Call `list` (resource `fields`) to get CRM field UUIDs (especially the email field). Key points: - All component IDs must be valid UUID v4 strings. - The components array is flat — parent-child via children references. - Every form needs exactly one ROOT, at least one ROW > COLUMN chain, and exactly one SUBMIT. - Input labels and display values must be Lexical SerializedEditorState JSON, not plain strings. - Include an EMAIL component with a CRM mapping so submissions are linked to contacts. - The draft field must be a raw JSON object, not a stringified JSON.
Create a relationship between two objects — a field whose value is another record rather than a scalar. Either side may be a contact, company, opportunity, or one of the business's own custom objects. A relationship is a PAIR of fields written together, and this is the only way to create either half: - `source` is the MANY side and owns the value: each record there points at one `target` record. - `target` is the ONE side and is read-only: it lists the records pointing back at it. Model 'a Product belongs to a Company' as source = Product 'primary_company', target = Company 'products'. A self-relationship (both halves on the same object, e.g. a product's parent product) is allowed, but the two keys must differ. Custom object sides need a customObjectId from `list` (resource `custom_objects`); a business without custom objects has none to name. Use `create_field` for plain scalar fields.
Create a new automation/workflow from its full graph — trigger, nodes, and edges — in one call. The workflow is created LIVE but DORMANT (inactive). You cannot activate it via the agent; the user activates it. To change an existing workflow, use `edit_workflow`. BEFORE CALLING: Call `learn_workflow_building` first to load the schema before calling this tool. If your workflow has ANY conditions (trigger conditions, exit conditions, IF_ELSE, SPLIT, or WAIT_FOR_CONDITION nodes), you MUST ALSO follow this: Call `learn_statement_semantics` first to load the schema before calling this tool. Statement structure (type→attribute pairing, OR>AND wrapping, field/event/audience operand shapes — wire-format `VARIABLE`/`ENGAGEMENT`/`AUDIENCE`) is where most workflow validation failures come from. Plan the full workflow first: trigger type, action sequence, branching logic, and how branches rejoin. Key points: - First node must be TRIGGER with full config in data. - Every node needs a unique temp ID, used in edges and cross-references (defaultNodeId, conditionNodeId). - BRANCH and JOIN nodes must be included explicitly — not auto-created. - Every parent→child connection needs an explicit edge. - All node data must be fully populated. - Never use a deprecated node type: TRUE_FALSE (use IF_ELSE), FIRE_WEBHOOK (use HTTP_REQUEST), or SALESFORCE (use CREATE_SALESFORCE_TASK, LINK_TO_SALESFORCE_CAMPAIGN, or ASSIGN_TO_SALESFORCE_QUEUE). The call is rejected if one appears. Copying an existing workflow is `duplicate_workflow`'s job, not this tool's — it clones the graph server-side, deprecated nodes included.
Count one custom object's records, optionally filtered. Use this instead of paging `list` (resource `custom_object_records`) to the end when you only need the number. BEFORE CALLING (when passing a statement): Call `learn_statement_semantics` first to load the schema before calling this tool.
Permanently delete a custom object and the fields defined on it. Refused while the object still has records — nothing is cascaded — so empty it first with `custom_object_delete_record`, one record at a time. Use `custom_object_count_records` to see how many are in the way.
Permanently delete one custom object record. Relationship values on other records that name it are cleared, but nothing else is cascaded — the records that pointed at it stay. Record ids are globally unique, so this needs no customObjectId; use `custom_object_get_record` first when you need to verify the target.
Read one custom object record by id, with every field the business defined on its object in `variables`. Record ids are globally unique, so this needs no customObjectId — use it when you hold an id from `custom_object_upsert_records`, a relationship value, or `search`, and `list` (resource `custom_object_records`) when you want a filtered page instead. Related records are not inlined. To read them, list the related object's records filtered on the relationship field naming this record.
Deprecated: call `list` with resource `custom_objects` instead. List the business's custom objects — the record types it models beyond contacts, companies, and opportunities (e.g. Product, Subscription, Property). Returns id, key, label, pluralLabel, and the Salesforce object each one syncs with when it is connected to one. This is the discovery step for everything else custom-object-shaped: `list` (resource `custom_object_records`) reads one object's records, and `create_field` / `create_relationship_field` take the ids from here. IMPORTANT: If you filter or sort, and haven't already, Call `learn_statement_semantics` first to load the schema before calling this tool. FILTERABLE AND SORTABLE ATTRIBUTES: "id", "key", "label", "pluralLabel", "color", "primaryVariableSchemaId", "salesforceObjectId", "salesforceObjectName", "createdAt". These are the definitions themselves, not their records — a custom object's own fields are filterable through `list` (resource `custom_object_records`) instead. RETURNS: count (number of results in this page), customObjects array, and optional next cursor.
Deprecated: call `list` with resource `custom_object_records` instead. List one custom object's records with cursor pagination using the statement query language. Call `list` (resource `custom_objects`) first for the customObjectId. IMPORTANT: If you haven't already, Call `learn_statement_semantics` first to load the schema before calling this tool. A custom object IS its schema, so every field the business defined on it — relationships included — comes back in each record's `variables`. Discover those field ids with `list` (resource `fields`): this object's fields are the ones whose customObjectId matches the one you passed here, since every custom object's fields read objectType CUSTOM_OBJECT and two objects may share a key. Reference one in a statement through the wire-format VARIABLE type. ROOT ATTRIBUTES: "id", "createdAt", "updatedAt". RETURNS: count (number of results in this page), records array, and optional next cursor.
Permanently delete a custom agent, including its triggers and saved sessions. Provisioned agents cannot be deleted. Verify the target in the Agents settings before proceeding.
Permanently delete a blast or workflow email. Use `email_get` or the corresponding email list tool first when you need to verify the target. This tool does not block deletion when workflows or other assets reference the email. Deleting it can leave those references invalid, so confirm that the user intends to break them before calling.
Permanently delete a reusable email template. Use `list` (resource `email_templates`) first when you need to verify the target. This tool does not block deletion when emails or other assets reference the template. Deleting it can leave those references invalid, so confirm that the user intends to break them before calling.
Permanently delete a field definition, on any object it belongs to. Use `list` (resource `fields_verbose`) first to verify the field and its object type. Deleting either half of a relationship deletes both.
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 Conversion alternatives on ChatGPT?
As of 2026-09-28, Conversion competes with ActiveCampaign, Aivie, AWeber, beehiiv, Bizgo, Brevo, Customer.io, Flodesk, Intuit Mailchimp, Kanal, Klaviyo, Knock, L Message(エルメ), Life Analytics Mail, Loops, magnews, MailerLite, Mailrith, MailSenpai, Nitrosend - AI Native Email, Notifly, Omnisend, OneSignal, Resend, SAMWAD, Sendly, Sent, Spoki, subscline, Systeme.io, Textmagic, TrueDialog, VerticalResponse, Yournotify 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.