- Brand
- Sally AI
- Category
- Productivity
- Primary Subcategory
- Meeting Notes & Call Intelligence
Integration details
Description
Sally records, transcribes and summarizes meetings. This app lets ChatGPT search those meetings, read summaries and transcripts, manage the tasks that came out of them, and send the Sally assistant into an upcoming online meeting.
- Integration type
- Plugin
- Verification status
- Not applicable
- Platform
- ChatGPT
- Primary Subcategory
- Meeting Notes & Call Intelligence
- Secondary Subcategories
- None listed
- Brand
- Sally AI
- Access
- Account required
- First tracked
- 2026-06-07
- Tool count
- 30
- Market
- US
The Primary Subcategory used for this profile’s headline score.
Other Subcategories where the Integration is listed.
Agent DiscoverabilityChatGPT Discoverability ScoreUpdated dailyThe first to track the ChatGPT, Claude, Muse, Grok & Google ecosystems, with the largest database on the core platforms. Tracked daily since .
0/100
Invisible#63of 77
in Meeting Notes & Call Intelligence- Picked
- 0.0/100
- Found
- 0.0/100
- Positioned
- –/100
Get alerts for Sally AI
Get updates when Sally AI’s Discoverability Score or category rank changes.
Competing in ChatGPT Meeting Notes & Call Intelligence
View Category30 tools agents can invoke
Schedules Sally to join and record an online meeting, given its join link and a start time. Creates a calendar appointment for the authenticated user with recording enabled so the meeting bot joins at the start time. Supported providers: Microsoft Teams, Zoom, Google Meet, Webex. Returns a clear error if the link is not a supported meeting URL, if `end` is before `start`, or if the user has no active recording license/trial. Requires the `mcp:write` scope.
schedule_sally_for_meeting
Marks one of the authenticated user's own tasks as done (`isDone=true`) or reopens it (`isDone=false`). Rejected if the task is not the user's own. Requires `mcp:write`.
set_task_done
Creates a new meeting template (also creates its first editable draft version). Add sections to the draft with upsert_template_section, then publish it with publish_template_version — only published versions are used for summaries. Scope "directory" (organization-wide) requires admin/owner; "personal" (default) or "team" otherwise. Requires `mcp:write`.
create_meeting_template
Creates (omit `id`) or edits (pass `id`) a section of a template DRAFT version. The section type, output-format and detail-level are numeric platform codes — the simplest way to get valid values is to copy them from an existing template via get_meeting_template. Requires `mcp:write`.
upsert_template_section
Creates a new task (omit `id`) or edits an existing OWN task (pass its `id`). The task is always assigned to the authenticated user as the responsible person — you CANNOT create or assign a task for another user through this tool. Editing another user's task is rejected. Requires the `mcp:write` scope.
upsert_task
Creates a new vocabulary term (omit `id`) or edits an existing one (pass `id`). A term is a word or name Sally should recognize better when transcribing. Set `isOrganizationWide=true` to apply it to the whole organization — that requires admin/owner rights; personal terms (the default) can be created and edited by any user. Requires the `mcp:write` scope.
upsert_vocabulary
Deletes one of the authenticated user's own tasks by id (soft delete). Rejected if the task is not the user's own. Requires `mcp:write`.
delete_task
Deletes a vocabulary term by id. Organization-wide terms can only be deleted by admins/owners; personal terms only by their owner. Requires the `mcp:write` scope.
delete_vocabulary
Creates a new editable draft version of an existing template, based on a published version (get the template + its versions via get_meeting_template first). Edit its sections, then publish. Requires `mcp:write`.
draft_template_version
Returns the organization's EFFECTIVE document/export settings for the signed-in user, so you can build a document (protocol, summary export, etc.) that matches the account style. Values already merge the org defaults with the user's personal overrides (the same result a real download would use). Content-relevant: detailLevel (how verbose to write summary/tasks), attendeeDisplay (how to render attendees), downloadRestrictions (true = that output must NOT be offered as a download). Rendering-relevant (apply when you build the file yourself): font (name + CSS family/fallback), colors (headerText/bodyText hex), logo (position + image URLs; rightMode none/sally-default/custom), footer (sectionCount + section texts), pageNumbers. Image URLs are ready-to-fetch (/api/v1/File/{id}/File). Read-only, no mcp:write required.
get_document_settings
Returns ONE summary, addressed either by its recordingSummaryId or — preferred when the platform handed you the open recording — by recordingId. IMPORTANT, a recording has SEVERAL summaries, one per language. With recordingId and no languageCode the server picks the same one the web app would show the caller (caller's language, else English, else the organization's language, else the oldest). The response always states which one you got (`languageCode`) and lists every language available for that recording (`availableSummaries`), so you can offer another one instead of silently presenting a single version. Pass languageCode to pick deliberately. If `summary` is empty and `isSummaryAvailable` is false, the summary is still being generated — that is NOT "there is no summary". Call get_recording for the exact pipeline state. With includeDetails=false (default) only the summary text is returned. With includeDetails=true the response additionally contains the generated sections (`sections`), real tracked tasks (`tasks`) and custom insights (all language-specific, matching the summary's language). `sections` is where the content of a summary lives: one entry per section of the meeting template, in display order. Its `sectionType` decides which fields carry the result. Most types write prose into `content`, but the three structured ones do NOT: a table section fills `tableData` (columns and rows), an appointment section fills the `followUpMeeting` fields (the follow-up that was agreed), and an email section fills `subject`, `description` and `emailRecipients` (a draft, nothing was sent). Reading only `content` shows nothing at all for those three. The arrays `keyFacts`, `decisions`, `items` and `taskSuggestions` are legacy and are empty for everything generated since summaries moved to template sections. Do not report an empty `keyFacts` as 'no key facts were recorded'; look at `sections`. Two task-like arrays are returned and they are NOT the same: `taskSuggestions` are Sally's AI-extracted proposals from the meeting — they are not tracked work until the user accepts them. `tasks` are real, user-tracked tasks attached to the meeting (either created from a suggestion or directly) and carry status flags `isDone`/`doneOn`/`isCanceled`/`canceledOn`. A suggestion that the user already turned into a task has `referencedTaskId` set, and the corresponding entry in `tasks` carries `taskSuggestionId` pointing back to the suggestion. To answer 'what are my open tasks?': use `tasks` filtered by `isDone=false && isCanceled=false`; suggestions without `referencedTaskId` can be surfaced separately as proposals the user hasn't acted on yet. Returns a not-found error if the token holder has no access.
get_summary
Returns a meeting template with its versions and sections (the editable detail). Pass an optional `versionId` to inspect a specific version; otherwise the draft/current version is returned. Read the section type/output/detail codes here to reuse them in upsert_template_section.
get_meeting_template
Returns ONE recording folder by its id — name, description, owner, number of recordings and how it is shared. Use this whenever you were given a folder id instead of scanning list_folders. The recordings INSIDE the folder come from list_folder_recordings. Returns a not-found error if the token holder has no access.
get_folder
Returns one of the authenticated user's own tasks by id. Returns a not-found error if the task does not exist or does not belong to the user.
get_task
Returns ONE recording by its id — title, creation time, duration, the linked appointment, the pipeline state (`sallyStatus`) and every language version of its summary. Use this whenever you were given a recording id (for example because the user has that recording open). Do NOT load get_recordings and search the list for it, and never match by name. From here, get_summary(recordingId) gives the summary and get_transcription(recordingId) the transcript. Returns a not-found error if the token holder has no access.
get_recording
Returns the full transcript of a recording as plain text in the format '[mm:ss] Speaker: ...\n\n[mm:ss] Speaker: ...' — each speaker segment starts with its offset from the beginning of the recording. With includeDetails=true an additional 'segments' array is returned containing per-segment speakerName, text, startTimeInSeconds, endTimeInSeconds and the formatted timestamp. Returns a not-found error if the token holder has no access.
get_transcription
Lists the languages Sally supports, each with its languageId (UUID), iso6391 ("es"), ietfTag ("es-ES") and English name. Use it to resolve a language to the languageId for upsert_vocabulary or transcribe_audio_from_url. (You can also pass languageCode directly to those tools instead of resolving here.) Read-only, no mcp:write required.
list_languages
Lists the meeting templates available to the user (their personal, team and organization templates). Use get_meeting_template for the full detail including versions and sections.
list_meeting_templates
Lists the authenticated user's OWN tasks (tasks where they are the responsible person or the owner). Never returns other users' tasks. Filter with `status`: "open" (default), "overdue", "completed", or "all". Optional `search` matches the subject (case-insensitive).
list_tasks
Lists the recording folders the authenticated user can access — their own folders plus folders shared with them directly or through a team. Folders group recordings; each entry carries its recordingsCount, owner and parent (folders form a tree via parentFolderId). Optional `search` filters by folder name (case-insensitive substring). Take a `folderId` from a result and pass it to list_folder_recordings to see the recordings inside. Recording folders are a Pro/Enterprise feature — the tool returns an error if the account has no access. Read-only, no mcp:write required.
list_folders
Lists recordings the authenticated user can see — i.e. recordings they own, recordings of appointments where they are the technical owner, and recordings in RecordingFolders shared with them. User and organization are derived from the access token; no parameters are required. For each recording the response returns — if available — the appointment ID and its time window as well as all available summaries with their language codes. Paginated via page/pageSize (max 100), sorted by creation date descending. To find a recording by its meeting title, pass `title` — the filter runs over every recording the user can see, not just the current page.
get_recordings
Lists the recordings contained in one recording folder, identified by its `folderId` (get it from list_folders). For each recording it returns the title, duration, whether it is a manual upload, the linked appointment (if the user has an own copy) and all available summaries with their recordingSummaryId + language code — pass a recordingSummaryId to get_summary or the recordingId to get_transcription. Returns a not-found error if the folder does not exist or the user has no access to it. Recording folders are a Pro/Enterprise feature. Read-only, no mcp:write required.
list_folder_recordings
Lists the vocabulary (custom terms that improve transcription accuracy) available to the user: their own personal terms plus all organization-wide terms. Organization-wide terms are visible to everyone but editable only by admins/owners.
list_vocabulary
Publishes a draft template version. Only after publishing does Sally use the version for meeting summaries. Requires `mcp:write`.
publish_template_version
Searches the calling user's appointments in the current Sally organization. Returns ONLY meetings the user has access to: their own appointments (technical owner) or meetings shared with them through recording folders. Never returns other users' calendars and never crosses the organization boundary. Each meeting is returned once — duplicate per-attendee copies of the same online meeting are collapsed, preferring the user's own copy. At least one of subject, participant, tag, startDate or endDate must be provided. Filters combine with AND. TEXT MATCHING (subject, participant.name): - Substring search (case-insensitive). Multiple words combine with AND. - Pass only content words, skip filler like 'my', 'last', 'the'. The LLM should extract the essential tokens from the user's natural-language question and pass them here. SORTING & TIME SEMANTICS: - Default order is by StartTime descending (newest first). Use `orderDirection` ('asc' | 'desc') to control the direction and `orderBy` ('startTime' | 'createdOn') to choose the field — the SAME parameter names as every other list tool. (`sort`/`order` still work as deprecated aliases.) - The default DESC order includes FUTURE-dated appointments — without a date filter, an entry scheduled for tomorrow ranks higher than yesterday's completed meeting. - For 'last', 'previous', 'recent', 'most recent' (a meeting that has ALREADY HAPPENED): pass endDate=<current UTC timestamp> with the default order=desc; the first result is the most recent past meeting. - For 'next', 'upcoming', 'on my calendar' (a meeting that is STILL AHEAD): pass startDate=<current UTC timestamp> and orderDirection='asc'; the first result is the nearest upcoming meeting (pageSize=1 returns exactly it). - When subject is set, results are relevance-ranked (best title match first) unless you pass orderBy/orderDirection explicitly. LIMITS: - subject: min 3 characters. participant: min 2 characters. - Each result includes participants (name, email, invitation and attendance status) and all associated recordings with their RecordingSummary IDs and language codes.
search_appointments
Searches the meeting summaries: the summary text, every generated section (title, content, subject, description) and the cells of table sections. Use this when the user asks which meetings discussed a topic, e.g. 'which calls mentioned pricing Q1?' or 'when did we talk about the supplier change?'. Returns summary hits with an excerpt around the match, the linked appointment (subject + startTime) and language. How matching works (identical in the Public API summary search): the query is split into words, filler words are dropped, and a hit needs ANY of the remaining words (OR). Words of four or more characters also match inside longer words and in their inflected forms (e.g. 'Festgeldkonten' finds 'Festgeldkonto', 'Konto' finds 'Festgeldkonto'); words of up to three characters must stand as a whole word ('KI' does not match 'Kinder'). Umlaut spellings are interchangeable ('Müller' = 'Mueller'). Case is ignored. Pass KEYWORDS, not a full question: every remaining word widens the result. Typical follow-up: take `recordingSummaryId` from a promising hit and call `get_summary` (optionally with includeDetails=true) for the full content. A summary condenses the meeting. Something said in the meeting may be missing from it: if this search finds nothing, also run `search_transcripts` before telling the user that a topic was not discussed. Filters: `languageCode` (IETF tag like 'de-DE' or ISO-639-1 code like 'de') restricts to summaries in that language; an unknown code is an error. `startDate`/`endDate` filter by summary creation date (UTC, ISO-8601, inclusive). Results are sorted by creation date descending. At most 5,000 matching summaries per source are considered.
search_summaries
Searches the verbatim transcripts of the recordings the user can see. Use this when the user asks whether or when something was SAID, needs an exact quote, or when `search_summaries` found nothing: a summary condenses the meeting, so a term that was only mentioned in passing is often only in the transcript. Returns one hit per recording with the number of matching lines and the first five of them (timestamp, speaker, excerpt). How matching works (identical in the Public API summary search): the query is split into words, filler words are dropped, and a hit needs ANY of the remaining words (OR). Words of four or more characters also match inside longer words and in their inflected forms (e.g. 'Festgeldkonten' finds 'Festgeldkonto', 'Konto' finds 'Festgeldkonto'); words of up to three characters must stand as a whole word ('KI' does not match 'Kinder'). Umlaut spellings are interchangeable ('Müller' = 'Mueller'). Case is ignored. Searches the 2,000 most recent recordings in the date range (the 2,000 oldest with `orderDirection=asc`). For older meetings set `startDate`/`endDate`, which filter by recording creation date (UTC, ISO-8601, inclusive). Recordings are sorted by creation date (default newest first). Typical follow-up: call `get_transcription` with the `recordingId` for the full context around a match, or `get_summary` for the condensed result.
search_transcripts
Downloads an audio or video file from an https URL, stores it as a recording and transcribes it (transcription + summary run asynchronously afterwards). Only https URLs to a public host are accepted — internal/loopback/metadata addresses, URLs with credentials and redirects are rejected for security. Supported types: mp4/mkv/avi/mov/webm and mp3/wav/flac/ogg/amr/m4a/opus/aac. Returns a clear error if the user has no active recording license/trial or the transcription quota is exhausted. Requires `mcp:write`.
transcribe_audio_from_url
Get one appointment by its Sally appointment id, including whether the signed-in user may change it (canModify) and, if not, the reason (e.g. not the organizer, or the calendar type is not yet supported for changes). Use this before attempting a reschedule/cancel so you can explain up front what is possible.
Resolve a person by name (or partial name, or email) to their email address, so you can add them as an attendee in create_appointment. Searches the signed-in user's colleagues (members of their organization) and people they have had appointments with. Returns candidates with name, email and source ("colleague" or "participant"). ALWAYS use this when the user names an attendee without giving an email (e.g. "schedule a meeting with Yanick"): call search_people first, then pass the matching candidate's email in attendees. If there are several matches, ask the user which one; if there are none, tell the user you could not find that person and ask for their email address.
Sally AI ChatGPT Plugin FAQ
How the directory, categories and Discoverability Score work.
Read the methodologyHow do I improve Sally AI's ChatGPT Plugin discoverability?
The levers are the listing surface agents actually read: names, descriptions, keywords, tool metadata, and registry health. Which lever matters depends on where discovery breaks, which is what continuous measurement shows.
What are Sally AI alternatives on ChatGPT?
As of 2026-11-02, Sally AI competes with Fireflies, Otter.ai, Granola, Read AI, Fathom, Plaud, Wispr Flow, Zoom and 68 more in ChatGPT Meeting Notes & Call Intelligence, ranked by public Discoverability Score.
Where does Sally AI rank in Meeting Notes & Call Intelligence on ChatGPT?
As of 2026-11-02, Sally AI ranks #63 of 77 in ChatGPT Meeting Notes & Call Intelligence with a Discoverability Score of 0/100 (Invisible).
Where is this profile measured?
This profile uses the geography attached to the latest public registry snapshot: US. Locale tags are intentionally omitted.