Levitate
The Levitate app gives you natural language access to your relationship marketing platform. Search and manage contacts, view full profiles, add tags in bulk, and stay on top of action items — all through conversation. You can also track donations and fundraising campaigns, manage sales opportunities across pipeline stages, and review insurance policies.
- Integration type
- Plugin
- Verification status
- Not applicable
- Platform
- ChatGPT
- Primary Subcategory
- B2B Sales CRM Platforms
- Secondary Subcategories
- None listed
- Brand
- Levitate
- Access
- Account required
- First tracked
- 2026-07-31
- Tool count
- 58
- 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
Levitate 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 B2B Sales CRM Platforms
View CategoryHow the Discoverability Score works
Organic discovery scoring for Levitate 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.
58 tools agents can invoke
Add one or more tags to a list of contacts. Use after searching to apply tags to matching contacts. Tag names that don't already exist are created automatically — this is how new tags come into existence, so use this tool to satisfy requests to "create a tag" or "make a new tag group" (there is no separate create-tag tool). Call `tags_search` first when you intend to reuse an existing tag, to avoid near-duplicates. Examples: - After searching donations, tag all donors with "2025 Gala Donor" - After finding contacts in a specific company, tag them with "Key Account" Returns a summary of how many contacts were successfully tagged and any failures.
contacts_add_tags
Add a single question to a custom survey. Call once per question, in the order the questions should appear — there is no reordering tool. Read the custom_survey_creation resource (levitate://custom-survey-creation) before calling. Key rules: - DropDown and CheckBoxes questions REQUIRE the options parameter (the choices, in display order). - All other types (ShortAnswer, LongAnswer, FileUpload, LinearScale, Nps) MUST NOT pass options. - LongAnswer is a multi-line free-text answer (use it instead of ShortAnswer when a paragraph is expected). - LinearScale is a numeric scale question (Google-Forms style, e.g. 1–5); Nps is the standard 0–10 Net Promoter Score question. Both render as a numeric scale with no options — the scale bounds/end-labels use standard defaults and are not configurable from this tool. - visibleWhen makes the question conditional on an earlier DropDown or CheckBoxes question's answer. Source the controllingQuestionId and optionIds from the response of an earlier surveys_question_add call — never guess them. Returns the new questionId and, for DropDown/CheckBoxes, the persisted option labels and their optionIds. Hold on to those — later surveys_question_add calls reference them when wiring visibleWhen branching.
surveys_question_add
Add a phone number to an existing contact. Get the `contactId` from `contacts_search` or `contacts_get_profile` first. The contact's existing phone numbers are always kept — this only adds. Optionally pass a `label` such as "Cell", "Work", or "Home".
contacts_add_phone
Add an email address to an existing contact. Get the `contactId` from `contacts_search` or `contacts_get_profile` first. The contact's existing email addresses are always kept — this only adds. Set `makePrimary` to true when the new address should become the contact's main email (for example, when correcting a wrong primary address; the old one is retained as a secondary). If the email already belongs to a different contact this returns an error rather than creating a conflict.
contacts_add_email
Begin uploading a file. Returns an `uploadUrl` and a single-use `uploadToken`. Upload the raw file bytes with a single HTTP POST to `uploadUrl`, sending header `Authorization: Bearer <uploadToken>` (and optionally `X-Content-Sha256: <hex sha256>` for an integrity check). The bytes travel over ordinary HTTP — never paste file contents into this tool. On success the file is identified by the returned `fileId`, which you pass to file-aware tools — an email attachment (email_provider_* / email_campaigns_create_draft) or an image on a social post (social_posts_create_draft). Uploads are transient and expire automatically, so create the upload shortly before referencing it. The token is good for one upload and then expires.
files_create_upload
Cancel a scheduled or pending social post so it does not publish. An unscheduled draft is deleted; a scheduled or pending post is marked Cancelled. Posts that have already started or finished publishing cannot be cancelled. Use social_posts_search to find the post ID.
social_posts_cancel
Cancel a queued or scheduled email campaign so it does not send (emails already sent are unaffected). Use email_campaigns_search to find the campaign ID.
email_campaigns_cancel
Mark an action item as completed. Once completed, the action item's completion date is set to the current time. Examples: - "Mark my follow-up call task as done" → provide the actionItemId - "Complete the proposal task" → provide the actionItemId Use action_items_search to find the action item ID first.
action_items_complete
Create a new action item (task, to-do, reminder, or follow-up) that can be assigned to users and associated with contacts. IMPORTANT: The assigneeId parameter and the response fields AssigneeId/CreatorId contain user IDs, not names. - To assign to yourself, omit assigneeId (defaults to current user) or call users_get_self first to get your user ID. - To assign to someone else, call users_search to find their user ID first. Examples: - "Create a task to call John next Friday" → provide description, contactId (from contacts_search), and dueDate - "Remind me to send a proposal by end of week" → provide description and dueDate - "Add a follow-up task for the team lead" → provide description and assigneeId Action items must have future due dates. Past dates will be rejected.
action_items_create
Create a new custom survey shell with branding, an optional date window, and per-field contact-info requirements. This creates the survey but does not add any questions — use surveys_question_add for that, in the order they should appear. Read the custom_survey_creation resource (levitate://custom-survey-creation) before calling — it explains the two-phase create-then-add-questions flow, the three-state contact-info model, and how to wire question-visibility branching using IDs returned from prior calls. Returns the newly created survey's ID. Hold on to it — every surveys_question_add call needs it.
surveys_custom_create
Create a draft email in the user's connected email provider. The draft lands in their Drafts folder — it is NOT sent. The user must review and send it themselves from their email client. Returns the provider draft id and a web link (when available). Note — drafts created here live only in the user's mailbox and are not logged or tracked in Levitate. For outreach to contacts that should appear on their Levitate timeline (with open/reply tracking and compliance handling), use email_campaigns_create instead; reserve this tool for when the user explicitly wants a draft in their own email client. Supported on Gmail, Microsoft 365 (Outlook), and on-prem Exchange (EWS); IMAP and SMTP-only providers return an error. WebLink: Outlook links directly to the draft. Gmail links to the Drafts folder of the user's default Google account in their browser — Gmail's API has no per-draft URL, and the link can land on the wrong account if the user has multiple Google accounts signed in. Exchange returns no web link. Provide at least one of: a recipient (to/cc/bcc), a subject, or a body. Optional inline attachments (base64) may be supplied; combined size is capped at the maximum message size the user's email provider allows. They are passed through to the provider with this draft only and are NOT persisted to Levitate.
email_provider_create_draft
Create a new contact. Supply either both a first and last name, or an email address (at minimum one of those). The company is inferred from the email domain and visibility defaults to your account's default — do not pass them. To tag the contact, pass `tags` (maximum 10). Ground tag names with `tags_search` first so you reuse the account's existing tags (e.g. "VIP") instead of creating near-duplicates. Unknown tags are created automatically. If a contact with the given email already exists, this returns an error instead of creating a duplicate — fall back to `contacts_search` to find the existing contact and `contacts_add_tags` to tag it.
contacts_create
Create a DRAFT social media post. The draft is never published by this tool: it stays unscheduled until social_posts_schedule is called, and account rules (compliance review) still apply at that point. Read the levitate://social-post-creation guide before using this tool. Targets — provide one or more pages from social_connections_list, each {provider, pageId}. Every target must be a Connected account the current user owns; an unknown or disconnected page is rejected. Content — plain text up to 2,200 characters. Do NOT include the user's social signature or any required disclosure; those are appended automatically at publish time. ALWAYS show the user the content and the target pages and get their confirmation before creating the draft. Images — optionally attach up to 10 images (no video; add video in Levitate). Upload each image with files_create_upload first, then pass its fileId here. Instagram REQUIRES at least one image: an Instagram target with no image is created as a draft but is rejected at schedule time, so attach an image here (or in Levitate) before scheduling it.
social_posts_create_draft
Create a new text note associated with a specific contact. Use this tool to: - Add notes, observations, or comments about a contact - Record meeting notes, phone call summaries, or conversation details - Log follow-up reminders or next steps - Document interactions, touchpoints, or relationship history The note is automatically linked to the specified contact and appears in their timeline.
notes_create
Create an email campaign AND schedule it to start sending after `startDate`, in one step. There is no unscheduled "draft" state: a campaign created here is committed to send (subject to the lead time below, and to compliance approval when the account requires it). Use email_campaigns_cancel to stop it before it starts. ALWAYS confirm the subject, body, audience, AND the exact start date with the user before calling this tool — once the start date arrives it sends real email to real contacts. The required lead time guarantees the creator gets Levitate's day-before reminder and a window to cancel, but that is a safety net, not a substitute for confirming first. This is the DEFAULT way to email contacts through Levitate: sends are logged on each contact's timeline, tracked (opens, replies, clicks), and honor the account's compliance, approval, and unsubscribe rules. Do NOT use email_provider_send / email_provider_create_draft for contact outreach — those bypass Levitate entirely and are reserved for when the user explicitly asks to send directly from their own mailbox. Read the levitate://email-campaign-creation guide before using this tool. Start date (required, ISO 8601, e.g. '2026-06-10T14:00:00Z'): - Immediate sends are not available; the date must be in the future. - Self-sends require ~25 hours of lead time (so the creator receives the day-before reminder and can cancel). - On-behalf sends require the account's send-on-behalf wait time (default 2 days). - A too-early date is rejected with the earliest allowed value. To preview the projected send window for a large audience before committing, you can create it, then call email_campaigns_estimate / email_campaigns_get, and email_campaigns_cancel if the user changes their mind (the lead time leaves ample room). Audience — provide exactly one of: - recipients: an explicit list of contacts (max 500), each {contactId, optional subject, optional htmlBody}. Use contacts_search to find IDs. - filter parameters (tags / companyName / location / lastCommunicatedDateRange): resolved the same way as contacts_search. Use contacts_search with the same parameters first to preview who will be targeted. Content — provide htmlBody, or templateId to start from an existing template (htmlBody then overrides the template body if both are given). Attachments — optionally attach files (PDFs, images, etc.). Upload each with files_create_upload first, then pass its fileId in `attachments`; the bytes never pass through this tool. Combined size must stay within the user's email provider per-message limit. To make an image appear inline in the body, embed it in the HTML instead — attachments are sent as downloadable files. Per-contact customization — the campaign-level subject/htmlBody are the default for everyone. To tailor a specific recipient (a bespoke sentence for a VIP, a different opening), set subject and/or htmlBody on that entry in `recipients`; it overrides the default for that contact only. This is for variation that ISN'T expressible as a merge placeholder — for "insert each person's first name", use a {{placeholder}} in the default body instead of customizing every recipient. Per-contact customization is only available with the explicit `recipients` audience, not the filter audience. Personalization — you may insert merge placeholders in the subject and body (campaign-level OR per-contact) using {{placeholder}} syntax, written as plain text (e.g. "Hi {{first name}},"); each is filled in per recipient at send time. Call email_placeholders_list for the supported placeholders — any other or malformed {{...}} is rejected so a broken token can't reach a contact. Do not hand-write placeholder HTML. Compliance: on accounts with compliance review enabled, the campaign is automatically routed through approval — it is created on hold and will not send until a reviewer approves it in Levitate. The response Campaign.Status will be WaitingForApproval in that case, and the schedule takes effect once approved. You cannot skip this from the agent. Sending on behalf of another user requires the account's send-on-behalf feature and admin permission, and is subject to compliance approval and a longer scheduling lead time (account's wait time, default 2 days).
email_campaigns_create
Dry-run a campaign send to preview the audience size and the projected send window before scheduling. The projection accounts for the account's daily send limits (large campaigns are spread across days), business hours, and holidays. ALWAYS call this before email_campaigns_schedule: the response includes `minimumAllowedStartDate`, the earliest start date the schedule tool will accept for this campaign, so you can propose a valid date the first time. Nothing is sent or scheduled by this tool.
email_campaigns_estimate
Fetch full details for a single meeting by provider meeting ID. Returns description, attendees with RSVP status and resolved Levitate contact IDs (when matchable), conferencing URL, and deep links. Use this after calendar_provider_search when you need attendee details or description content beyond the lightweight search result. When the meeting is not found or cannot be fetched, the response has Found=false and Meeting=null.
calendar_provider_get_meeting
Fetch full email message details (including body content) from the user's connected email provider. Primary usage: Pass providerMessageIds from email_provider_search results for direct message retrieval. Fallback usage: Pass contactId with a date range to search for messages (slower, less precise). This retrieves content directly from the provider (Gmail, Outlook, Exchange), NOT from Levitate bulk emails or campaigns.
email_provider_get_message
Return metadata for an uploaded file by id, including a short-lived signed download URL for ready files. Does not return the file bytes.
files_get
Return a user's profile by their ID. Use this to resolve user IDs (e.g. AssigneeId, CreatorId from action items) into display names.
users_get
Return a company's activity timeline — notes, meetings, sent emails, phone calls, text messages, deals, and follow-ups — most recent first (up to 100 events). Use after `companies_search` to understand the history of interactions with a company. This is the company-level counterpart to `contacts_get_timeline`: it aggregates activity across the company (including its associated contacts), whereas the contact timeline is scoped to a single person. Each event includes its type, timestamp, a human-readable summary, and type-specific details (e.g. email subject and recipients, an action item's due/completion dates).
companies_get_timeline
Return a contact's activity timeline — meetings, sent emails, notes, phone calls, text messages, action items, survey responses, and more — most recent first (up to 100 events). Use after `contacts_search` or `contacts_get_profile` to understand the history of interactions with a contact. Each event includes its type, timestamp, a human-readable summary, and type-specific details (e.g. email subject and recipients, an action item's due/completion dates).
contacts_get_timeline
Return the full profile for a known contact — identity, key dates, tags, custom properties, and communication metadata.
contacts_get_profile
Get a single social media post by ID, including its status, schedule, target pages with per-platform publish state, the post body, and engagement stats. Use social_posts_search to find post IDs.
social_posts_get
Get a single email campaign by ID, including its status, schedule, audience size, engagement stats, the campaign-level HTML body, and which contacts have per-contact overrides. Use email_campaigns_search to find campaign IDs.
email_campaigns_get
Get a single email template by ID, including its full HTML content. Use email_templates_search to find template IDs.
email_templates_get
Return the current authenticated user's profile (ID, name, email, role). Call this FIRST when the user refers to themselves with "my", "me", "I", "mine". Use the returned ID as `assignedTo` in `action_items_search`.
users_get_self
List all opportunity boards and their stages. Call this first to discover board IDs and stage names before searching opportunities. Returns all boards with their stages, including deal size rollup data (total and average) per stage.
opportunities_boards_list
List the current user's connected social media accounts/pages (Facebook, Instagram, LinkedIn). Call this BEFORE social_posts_create_draft: each entry's `pageId` is what you pass as a target's pageId. Only accounts with state `Connected` can publish. An account that is `Disconnected`, `NoTarget`, or whose token has expired must be reconnected by the user in Levitate first — surface that to the user rather than trying to post to it.
social_connections_list
List the merge placeholders you can use in an email subject or body (including per-contact overrides). Each is replaced per recipient at send time. Write them as plain text (e.g. "Hi {{first name}},") — do not hand-author placeholder HTML. Any {{...}} not in this list, or malformed, is rejected when you create a campaign, so check here rather than guessing.
email_placeholders_list
Search for donation campaigns by name. Use this tool first when a user asks about donations for a specific campaign by name — call this to resolve the campaign name to an ID, then pass that ID to donations_search. Returns campaigns whose names match the query (partial, case-insensitive). Omit the query to list all campaigns. Pagination: returns up to 10 campaigns per page. To retrieve subsequent pages, pass the response's `nextCursor` back as the `cursor` parameter on the next call. The cursor is opaque — do not construct, parse, or substitute a numeric offset. When `hasMore` is false there are no further pages.
donations_campaign_search
Search for insurance carriers by name. Use this tool first when a user asks about policies for a specific carrier by name — call this to resolve the carrier name to an ID, then pass that ID to policies_search. Returns carriers whose names match the query (partial, case-insensitive). Omit the query to list all carriers. Pagination: returns up to 10 carriers per page. To retrieve subsequent pages, pass the response's `nextCursor` back as the `cursor` parameter on the next call. The cursor is opaque — do not construct, parse, or substitute a numeric offset. When `hasMore` is false there are no further pages.
policies_carriers_search
Search for insurance lines of business by name. Use this tool first when a user asks about policies for a specific line of business by name — call this to resolve the line of business name to an ID, then pass that ID to policies_search. Returns lines of business whose names match the query (partial, case-insensitive). Omit the query to list all lines of business. Pagination: returns up to 10 lines of business per page. To retrieve subsequent pages, pass the response's `nextCursor` back as the `cursor` parameter on the next call. The cursor is opaque — do not construct, parse, or substitute a numeric offset. When `hasMore` is false there are no further pages.
policies_lines_of_business_search
Schedule a draft social post to publish at the given future date, or reschedule one that has not published yet. ALWAYS confirm the exact date and the target pages with the user before calling this tool — once the date arrives the post is published publicly to the connected accounts. Constraints: - The start date must be at least ~15 minutes in the future, leaving a window to review and cancel. - Immediate publishing is not available through this tool. - On accounts with compliance review enabled, the post is routed through approval instead of being scheduled directly: it lands in `Pending` status and only publishes once a reviewer approves it in Levitate. Use social_posts_cancel to stop a scheduled or pending post before it publishes.
social_posts_schedule
Reschedule an existing email campaign that has not started sending yet — move its start date earlier or later. New campaigns are created already-scheduled by email_campaigns_create; use this only to change the start date of a campaign that is already queued (or to (re)apply a date to a campaign created in the Levitate UI). ALWAYS confirm the exact start date with the user before calling this tool — once the start date arrives the campaign sends real emails to real contacts. Constraints (also returned by email_campaigns_estimate as `minimumAllowedStartDate`): - Immediate sends are not available through this tool. - Campaigns the current user sends themselves require at least ~25 hours of lead time, which guarantees the creator receives Levitate's day-before reminder notification and has a window to cancel. - On-behalf campaigns require the account's send-on-behalf wait time (default 2 days). - Campaigns pending compliance approval keep their hold; the schedule takes effect once approved. Use email_campaigns_cancel to stop a scheduled campaign before its start date.
email_campaigns_schedule
Search the user's connected calendar provider (Google Calendar, Microsoft / Outlook, Exchange) for meetings on the authenticated user's calendar. Use `keyword` for free-text search over meeting summary, description, and location. On providers that don't support native keyword search, `keyword` is ignored and `keywordFilterApplied` is false in the response — post-filter results client-side. Filter by `contactId` (Levitate contact) or `attendeeEmail` to surface meetings involving a specific person. Without a date range, searches the 30 days before and after today. Examples: - "What's on my calendar this week?" -> dateRange with bounds - "When did I last meet with contact X?" -> contactId=<id>, dateRange.Before=today - "Upcoming meetings about the Q2 renewal" -> keyword="Q2 renewal", dateRange.After=today
calendar_provider_search
Search the user's connected email provider (Gmail, Outlook, Exchange) communication history. Returns email metadata (subject, sender, recipients, timestamps, ProviderMessageId) without body content. Use email_provider_get_message with ProviderMessageId to retrieve the full message body. All searches hit the user's mailbox directly via the email provider. When a query is provided, the search uses the provider's keyword matching (subject + body). Without a query, results are filtered by contact, email address, direction, and/or date range. Without an explicit date range, the last 30 days are searched. IMPORTANT: SenderEmail, ToEmails, CcEmails, BccEmails contain email addresses. SenderId and ContactIds contain user/contact IDs. Examples: - "Find emails about the renewal proposal" -> query="renewal proposal" - "Emails with john@example.com" -> emailAddress="john@example.com" - "Emails I sent last week" -> direction=Sent, dateRange with After/Before bounds - "All emails for contact X" -> contactId=<contactId> - "Search for emails about insurance from last month" -> query="insurance", dateRange with bounds
email_provider_search
Search email campaigns (bulk email sends) visible to the current user. All specified criteria are combined with AND logic. Results include status, schedule, and engagement stats (sent/opened/replied/bounced counts). Visibility follows the same rules as the Levitate UI: regular users see their own campaigns; admins also see shared/approval campaigns. Examples: - "My queued campaigns" → status="Queued" - "Campaigns sent in May" → dateRange with After="2026-05-01" and Before="2026-05-31" - "Everything including individual sends" → includeNonCampaignSends=true Pagination: returns up to 25 campaigns per page. Pass the response's `nextCursor` back as `cursor` to advance; the cursor is opaque.
email_campaigns_search
Search the email templates available to the current user: their own templates plus templates shared account-wide. (The broader industry/system template library is not included in these results.) Templates are pre-written (often pre-approved) content — prefer starting a campaign from a template via email_campaigns_create's templateId parameter instead of writing content from scratch. Results are sorted by most recently modified. Use email_templates_get to read a template's full content. Pagination: returns up to 25 templates per page. Pass the response's `nextCursor` back as `cursor` to advance; the cursor is opaque.
email_templates_search
Search and filter responses for an event registration survey. You must provide an eventSurveyId — use surveys_event_registrations_search first to find it. Examples: - "Show all registrations for event X" → eventSurveyId="<id>" - "Who's attending?" → eventSurveyId="<id>", attendanceStatus="Attending" - "Check-ins for today's event" → eventSurveyId="<id>", attendanceStatus="CheckedIn" Filter by attendance status: 'Attending', 'NotAttending', 'NoResponse', or 'CheckedIn'. Each response includes an IsAnonymous field indicating whether it is linked to a contact. Omit optional filters to return all responses (newest first). Pagination: returns up to 50 responses per page. To retrieve subsequent pages, pass the response's `nextCursor` back as the `cursor` parameter on the next call. The cursor is opaque — do not construct, parse, or substitute a numeric offset. When `hasMore` is false there are no further pages.
surveys_event_registration_responses_search
Search and list event registration surveys. Use this tool to find event IDs before searching for event responses with surveys_event_registration_responses_search. Returns event surveys with full event details including location, start/end times, timezone, capacity, and registration deadline. Examples: - "List all my events" → no filters - "Find my gala event" → query="gala" - "Show upcoming events" → includeExpired=false (default) Results are sorted by name. Omit filters to list active, non-expired events. Pagination: returns up to 25 events per page. To retrieve subsequent pages, pass the response's `nextCursor` back as the `cursor` parameter on the next call. The cursor is opaque — do not construct, parse, or substitute a numeric offset. When `hasMore` is false there are no further pages.
surveys_event_registrations_search
Search the account's existing tags by name prefix. Use this to ground tagging in the tags the account already uses: call it before `contacts_add_tags` so you reuse a canonical existing tag (e.g. "VIP") instead of creating a near-duplicate ("vip", "VIP Client", "Important Customer"). Pagination: returns up to 25 tags per page. To retrieve subsequent pages, pass the response's `nextCursor` back as the `cursor` parameter on the next call. The cursor is opaque — do not construct, parse, or substitute a numeric offset. When `hasMore` is false there are no further pages. Omit `query` to list all of the account's tags. Hidden tags are never returned.
tags_search
Search users on the account by name (or partial name) and return matching users with their IDs. Use this to resolve a rep/user name into a user ID — for example to disambiguate a name that `notes_search` reported in `unresolvedReps`, then re-call `notes_search` with the chosen ID in `ownedByUserIds`. Returns all matches; if more than one user matches, ask which one is intended.
users_search
Search the current user's social media posts. Results include status, schedule, targets, and (after publishing) engagement stats. Visibility follows the Levitate UI: regular users see their own posts; admins and account-wide contexts see everyone's. Drafts have no scheduled date, so to list them pass status=Draft (the dateRange is ignored in that case). For every other status the search is by scheduled/publish date — pass a dateRange to narrow the window. Pagination: up to 25 posts per page. Pass the response's `nextCursor` back as `cursor` to advance; the cursor is opaque.
social_posts_search
Search and filter responses for a specific survey (excluding events — use surveys_event_registration_responses_search for events). You must provide a surveyId and surveyType — use surveys_search first to find them. Examples: - "Show all responses for survey X" → surveyId="<id>", surveyType="Satisfaction" - "Responses from contact Y" → surveyId="<id>", surveyType="Custom", contactId="<id>" - "5-star reviews this month" → surveyId="<id>", surveyType="Satisfaction", ratings=[5], dateRange.After=<start of month> Type-specific filters: - Satisfaction surveys: use 'ratings' (1-5) to filter by star rating - Custom surveys: use 'searchName' to filter responses by contact name (either first or last) Each response includes an IsAnonymous field indicating whether it is linked to a contact. Omit optional filters to return all responses (newest first). Pagination: returns up to 50 responses per page. To retrieve subsequent pages, pass the response's `nextCursor` back as the `cursor` parameter on the next call. The cursor is opaque — do not construct, parse, or substitute a numeric offset. When `hasMore` is false there are no further pages.
surveys_responses_search
Search and list surveys of a specific type. Use this tool to find survey IDs before searching for survey responses with surveys_responses_search. For events, use surveys_event_registrations_search instead. You must specify a surveyType. If the user does not specify a type, call this tool once for each type ('Satisfaction' and 'Custom') and combine the results. Examples: - "Find my NPS survey" → surveyType="Satisfaction", query="NPS" - "Show all custom surveys" → surveyType="Custom" - "List all my surveys" → call once with surveyType="Satisfaction", once with surveyType="Custom" Results are sorted by name. Pagination: returns up to 25 surveys per page. To retrieve subsequent pages, pass the response's `nextCursor` back as the `cursor` parameter on the next call. The cursor is opaque — do not construct, parse, or substitute a numeric offset. When `hasMore` is false there are no further pages.
surveys_search
Search and filter action items using one or more criteria. All specified criteria are combined with AND logic. IMPORTANT: The assignedTo parameter and the response fields AssigneeId/CreatorId contain user IDs, not names. - To search for "my action items", first call users_get_self to get your user ID, then pass it as assignedTo. - To display who an action item is assigned to or created by, call users_get with the AssigneeId or CreatorId. Examples: - "My incomplete action items" → call users_get_self first, then use assignedTo=<your userId>, isCompleted=false - "Action items due this week" → dueDateRange with Before/After bounds - "Completed items assigned to a specific user" → isCompleted=true, assignedTo=<userId> Omit any filter to return all accessible action items. Combine as many filters as needed. Pagination: returns up to 25 action items per page. To retrieve subsequent pages, pass the response's `nextCursor` back as the `cursor` parameter on the next call. The cursor is opaque — do not construct, parse, or substitute a numeric offset. When `hasMore` is false there are no further pages.
action_items_search
Search and filter companies by name and tags, with AND/OR/NOT tag logic. All specified filters are combined with AND logic. Pagination: returns up to 25 companies per page. To retrieve subsequent pages, pass the response's `nextCursor` back as the `cursor` parameter on the next call. The cursor is opaque — do not construct, parse, or substitute a numeric offset. When `hasMore` is false there are no further pages. Examples: - "Companies in the Q2 blitz that haven't been called yet" → allTags=["Q2 Blitz"], excludeTags=["Called"] - "Companies tagged Prospect or Lead" → anyTags=["Prospect", "Lead"] - "Acme companies tagged VIP" → name="Acme", allTags=["VIP"] Omit any filter to return all companies. Combine as many filters as needed.
companies_search
Search and filter contacts using one or more criteria. All specified criteria are combined with AND logic. Pagination: returns up to 25 contacts per page. To retrieve subsequent pages, pass the response's `nextCursor` back as the `cursor` parameter on the next call. The cursor is opaque — do not construct, parse, or substitute a numeric offset. When `hasMore` is false there are no further pages. Examples: - "Contacts in New York not communicated with in the last 6 months" → location="New York", lastCommunicatedBefore=<date 6 months ago> - "VC-tagged contacts at Venture Inc" → tags=["VC"], companyName="Venture Inc" - "All contacts tagged VIP in California" → tags=["VIP"], location="CA" Omit any filter to return all contacts. Combine as many filters as needed.
contacts_search
Search and filter donations using one or more criteria. All specified criteria are combined with AND logic. Pagination: returns up to 100 donations per page. To retrieve subsequent pages, pass the response's `nextCursor` back as the `cursor` parameter on the next call. The cursor is opaque — do not construct, parse, or substitute a numeric offset. When `hasMore` is false there are no further pages. Examples: - "Donations over $100 last month" → amountRange.Min="100", dateRange.After=<date 1 month ago> - "Donations for campaign X" → campaignId="<id>" - "All donations tagged VIP" → tags=["VIP"] - "What has contact Y donated?" → contactId="<id>" Omit any filter to return all donations. Combine as many filters as needed.
donations_search
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 Levitate alternatives on ChatGPT?
As of 2026-08-14, Levitate competes with Allianz, Asbie, Attio, Breakcold, BROSH AI CRM, CarClever, Cirra AI, Clarify, Clearskies, Close, Coevera, decisionpoint.io, Guides, Haaretz, HighLevel, HubSpot, Hypha, Idea To Prototype Beta, item, Journaling with Medome, LicitaLAB, Nash Agent, OnePageCRM, PortfolioIQ, Rallies, RealEstateIQ, RemindMeIQ, Rox, Salesflare, Streak, Talonic, Ticketek, Twenty, VoiceBit, WeightWise, YNAB: Get Good At Money, YouEx.ai, Zoho CRM in ChatGPT B2B Sales CRM Platforms, ranked by public Discoverability Score.
Where is this profile measured?
This profile uses the geography attached to the latest public registry snapshot: US. Locale tags are intentionally omitted.