- Brand
- Dex
- Category
- Sales & CRM
- Primary Subcategory
- Personal CRM
Integration details
Description
Dex helps you manage personal and professional relationships in ChatGPT. Find and update contacts, organize tags and groups, log notes, manage reminders and keep-in-touch cadence, and review upcoming birthdays and follow-ups. Search connected mailbox metadata, manage connected calendar events, and read or request cited public-web research on contacts.
- Integration type
- Plugin
- Verification status
- Not applicable
- Platform
- ChatGPT
- Secondary Subcategories
- None listed
- Brand
- Dex
- Access
- Account required
- First tracked
- 2026-07-21
- Tool count
- 69
- Market
- US
Other Subcategories where the Integration is listed.
Your score is coming
ChatGPT now suggests Plugins on its own when they match a user's request.Your Plugin Discovery Score measures how often yours appears, and it will show here as soon as it’s ready.
What discovery looks like

Get alerts for Dex
Get updates when Dex’s Discoverability Score or category rank changes.
Competing in ChatGPT Personal CRM
View Category69 tools agents can invoke
Add up to 500 contacts to a group per call. Split larger selections into separate calls. result.added counts new memberships (the same number as result.count) and result.already_linked the IDs that were members already; any other processed ID matched no contact you can add. result.remaining is always present: retry any IDs in it to finish a partial write, and an empty list means every ID was processed.
dex_add_contacts_to_group
Link one or more contacts to a contact as related contacts (e.g. family members, colleagues, people met through them). Relations are symmetric — linking A to B also links B to A — and carry no relationship label, so record the nature of the relationship in a note or the description instead. Resolve names to IDs with dex_search_contacts first. Related contacts appear in dex_get_contact under `related_contacts`. Re-linking an existing pair is a no-op.
dex_add_related_contacts
Add workspace tags to companies. `added` counts the tag links this call created; a pair that was already linked is not counted again. Workspace connections only; requires Companies to be enabled for the workspace.
dex_add_tags_to_companies
Add tags to contacts. `tags` and `affected` cover every requested pair that is tagged after the call, including pairs that already were; `added` counts the links this call created and `already_linked` the ones that existed before it, so a pair in neither was not tagged. A retry with the same `idempotency_key` after the first call completed reports those pairs as `already_linked`.
dex_add_tags_to_contacts
Archive or unarchive up to 500 contacts by ID (chunk larger sets into multiple calls). Archived contacts keep all their data (notes, reminders, history) but are hidden from the default contact list, search, and keep-in-touch reminders — the reversible alternative to dex_delete_contacts, recommended for bulk cleanup. Always show the user which contacts will be archived and get their confirmation first. Archiving MORE THAN 20 contacts in one call is server-enforced: the call is rejected (nothing changes) unless it carries confirm: true AND expected_count equal to the number of distinct contact_ids — the count the user confirmed. Restoring (archived: false) is never gated. Find archived contacts with dex_filter_contacts archived_only:true and restore them with archived:false. Not available on a Dex for Teams workspace connection: archive or restore one contact at a time with dex_update_contact is_archived (true or false). That covers any number of contacts, and restoring too.
dex_archive_contacts
Mark a keep-in-touch contact as done — records that the user was just in touch, so the cadence resets and the next reminder lands one frequency interval from now (the dashboard's "Mark as complete"). Pass snooze_days to instead push the next reminder out without recording a touch (the dashboard's snooze uses 7). Set or clear the cadence itself via dex_update_contact's keep_in_touch field, or dex_set_keep_in_touch for many contacts at once. In a Dex for Teams workspace it acts on the contact's Team or My cadence (pass kind when the contact has both) and returns the rescheduled `cadence`: "We met" on a Team cadence writes a note shared with the workspace, on a My cadence a private note (returned as `note_id`), and a viewer gets no note. That shared note counts as your own touch too, so marking the Team cadence done also restarts your My cadence on the contact, if you have one. A snooze only hides the cadence until it ends and never moves its due date, so one that ends on or before the next due date changes nothing and the result carries a `warning` saying so. Set or remove a workspace cadence with dex_set_keep_in_touch.
dex_complete_keep_in_touch
Create an event on the user's connected calendar (primary account by default). For a timed event set start_datetime + end_datetime; for an all-day event set start_date (end_date optional for multi-day). Attendees are added to the invite; whether they are emailed follows the calendar provider's default behavior. Personal Dex connection only (on a Dex for Teams workspace connection it is refused).
dex_create_calendar_event
Create 1-100 companies in the workspace in one all-or-nothing call: if any one is refused (for example a website another company already has, 409), none is created. Returns the created `companies`. Search first with dex_list_companies to avoid duplicates. Workspace connections only; requires Companies to be enabled for the workspace.
dex_create_company
Create one or more contacts. For a single contact, pass fields directly (first_name, email, etc.). For batch creation (e.g. CSV import), pass a `contacts` array instead (max 100). Creating does NOT deduplicate: a contact with the same name or email as an existing one becomes a second contact, so search first (dex_search_contacts) when the person may already be in Dex. For a batch, pass an `idempotency_key` and reuse it if you must send the same call again; without one, a repeated call creates every contact a second time. Returns every created contact (up to 100) with its new `id`; when full rows would not fit the response size limit, each row is trimmed to its id, names, job title and company (or, failing that, its id and names) — read the rest with dex_get_contact.
dex_create_contact
Create a new custom field definition. In a Dex for Teams workspace, only owners and admins can create field definitions.
dex_create_custom_field
Create a new contact group, optionally nested under an existing group. A group cannot be its own parent or ancestor.
dex_create_group
Create a new note. Use dex_list_note_types first to discover available note types and pick the most appropriate one. `event_time` is required when `idempotency_key` is supplied; repeat calls with the same key and arguments within the server's 24-hour idempotency window return the original note instead of creating a duplicate. In a workspace, notes are shared with every member unless you pass audience "private" (only when the user asks for a private note).
dex_create_note
Create a new reminder/task. When `idempotency_key` is supplied, repeat calls with the same key within the server's 24-hour idempotency window return the original reminder instead of creating a duplicate. On a Dex for Teams workspace connection the reminder is assigned to you unless `assignee_id` names another member (or null for unassigned).
dex_create_reminder
Create a new tag. Tag names are unique regardless of letter case: if a tag with the same name already exists (e.g. "Design Partner" when you pass "design partner"), that tag is returned instead of a duplicate, with `existing: true` when its stored name differs in letter case from the one you passed. Repeating the exact name returns the same tag without the flag.
dex_create_tag
Delete a calendar event by its provider event ID. Irreversible — and if the user organizes the event, deleting it cancels the meeting for all attendees. Personal Dex connection only (on a Dex for Teams workspace connection it is refused).
dex_delete_calendar_event
Delete one or more contacts by their IDs. This action is irreversible — when the user might want the contacts back later, use dex_archive_contacts instead. Not available on a Dex for Teams workspace connection: delete workspace contacts in the Dex app, or archive one contact at a time with dex_update_contact is_archived: true.
dex_delete_contacts
Delete a custom field definition. This action is irreversible. Deleting an ID that does not exist — including one you already deleted — returns a not-found error, NOT a success. Do not retry a delete that already succeeded; treat the first success as final. Not available on a Dex for Teams workspace connection: delete workspace custom fields in the Dex app.
dex_delete_custom_field
Delete a group. This action is irreversible. Not available on a Dex for Teams workspace connection: delete workspace groups in the Dex app.
dex_delete_group
Delete a note. This action is irreversible.
dex_delete_note
Delete a reminder. This action is irreversible.
dex_delete_reminder
Delete a tag. This action is irreversible. Not available on a Dex for Teams workspace connection: delete workspace tags in the Dex app.
dex_delete_tag
Draft the user's reply to an attention item's thread with Dex's drafting model, in the user's saved drafting style. Returns `{ body }`; nothing is sent or saved. The reply goes into the thread under its own subject, to the answered message's `reply_to` (or its sender) as dex_get_attention_item_thread shows — show the draft to the user, and send it (as written or edited) with dex_send_attention_item_reply only once they approve. To revise, pass the current draft and a short `instruction` ("shorter", "say no politely"). Personal Dex connection only (on a Dex for Teams workspace connection it is refused).
dex_draft_attention_item_reply
Filter contacts with the same structured filters as Dex views: tags, groups, company, job title, social profile presence, LinkedIn history, location, interaction dates, keep-in-touch cadence, custom fields, and more. All conditions combine with AND. Up to 100 contact IDs can be fetched in one call; tenant ownership is enforced server-side. Archived contacts are omitted unless `archived_only: true`. Use this to answer questions like "contacts tagged investor at Google I talked to this year". For plain keyword or geographic search use dex_search_contacts; for full details on one contact use dex_get_contact.
dex_filter_contacts
Read the email thread behind an attention item, live from the user's mailbox, oldest message first. The newest 5 messages are returned (`earlier_messages_omitted` counts the rest); each carries its `id`, sender, `reply_to` when set (where a reply goes), date, whether the user wrote it (`from_user`), and its text, clipped to 4000 characters. Call this before dex_send_attention_item_reply: its `message_id` is the `id` of the message being answered — normally the latest one not from the user. Nothing is stored or changed. Personal Dex connection only (on a Dex for Teams workspace connection it is refused).
dex_get_attention_item_thread
Get a single calendar event by its provider event ID, including attendees, conferencing links, and recurrence flags, fetched live from the connected Google/Microsoft account. This tool writes nothing: it opts out of the note-metadata refresh the API performs for other clients. When the same address is connected under both providers, pass account_provider from the event returned by dex_list_calendar_events. Personal Dex connection only (on a Dex for Teams workspace connection it is refused). On a workspace connection, dex_list_calendar_events already returns your own events from the calendars you share there in full.
dex_get_calendar_event
Get one company by ID, archived ones included: its fields (owner as `owner_member_id`, tags as `tag_ids`, custom field values), `contacts_count` ({ current, past }: active contacts with a current or only a past role there) and `team`: the members who know at least one of its contacts (`members`, most first) and your own row (`you`, absent when you know none), each with `member_id`, `known_contacts_count` and `last_interaction_at`. Workspace connections only; requires Companies to be enabled for the workspace.
dex_get_company
The company's activity across the workspace, newest first: shared notes on its contacts (current and past), each member's first and last email or meeting with them, and the days members connected with them on LinkedIn. Each item is `{ type: "NOTE" | "INTERACTION", date, data }`; `data.member_id` is the note's author or the member who interacted. An item's `company_contacts` (`[{ contact_id, former }]`) lists the contacts it names that have a role at this company, `former: true` for past roles only; a named contact missing from it has no role at the company (a shared note can tag people from elsewhere). It is omitted when none do. Workspace connections only; requires Companies to be enabled for the workspace.
dex_get_company_activity
Get a single contact by ID with full details including emails, phone numbers, location (text plus latitude/longitude when geocoded), keep-in-touch cadence (`frequency` / `never_keep_in_touch` on Personal Dex; in a Dex for Teams workspace, `keep_in_touch` with the contact's Team cadence as `team` and your own My cadence as `my`, each left out or null when not set, so `keep_in_touch: {}` means the contact has neither), tags, groups, custom fields, related contacts, and optionally recent notes/timeline. Workspace connections also include `team_interactions`: up to 20 members by recency, `members_total`, and the strongest current connection (2 × meeting_count + email_count; ties or all-zero use most recent email, meeting or shared note). Counts cover all of the member's emails/meetings with the contact across connected accounts, not just shared accounts, and require active membership and current sharing for that channel. Null means unknown. Former members retain dates only and never rank strongest. `linkedin_connected_at` is when the member connected with the contact on LinkedIn, and `linkedin_connected_at_exact` tells a real LinkedIn date (true) from the date Dex first saw the connection (false), which is only an upper bound; it is not an interaction, so a member known only through LinkedIn lists last, with no interaction dates, and never ranks strongest. The block is omitted if unavailable. In a workspace, a contact-type custom field appears in `contacts_custom_fields` as `{ custom_field_id, linked_contact_ids }`. Use `fields` to request only the relation data needed and keep rich contacts within the response limit.
dex_get_contact
Get a single group by ID, with its direct sub-groups (`sub_groups`) and its counts (`_count.groups_contacts` active contacts, `_count.sub_groups`), the same shape dex_create_group and dex_update_group return.
dex_get_group
Get a single note by ID.
dex_get_note
Read the user's relationship-priority tiers (tier_number + the label the user sees) and, optionally, the current priority of specific contacts. Priority is a built-in field on every contact, the same one the Priority Map and the contact page's priority control edit. Tiers are numbered from 1 (highest); the defaults are 1 Top, 2 High, 3 Medium, 4 Low, 5 None, but the user may have RENAMED them — always call this first and speak in the user's own labels, never the defaults. A contact with no priority_tier has no priority set, which is different from the "None" tier (a priority the user chose). Set priorities with dex_set_contact_priority. Personal Dex only.
dex_get_priority_tiers
Get a single reminder by ID.
dex_get_reminder
Read the stored Dex Research note for 1–10 contacts without running anything (free and fast). Returns each contact's cited note and structured findings from its last run, or no `research` key when the contact has never been researched. Use this to check for existing research before paying for dex_research_contacts, to pick up a run that came back `in_progress`, or to re-read results a large run response truncated.
dex_get_contact_research
Get a single tag by ID.
dex_get_tag
List the user's attention items: email threads Dex flagged as waiting on them — a reply someone expects, or an action they need to take (sign, renew, set something up) — newest first, as shown on the Dex home page. Use for "what's waiting on me?", "who do I owe a reply?" or "anything in my inbox I need to deal with?". Each item has a short `title` (e.g. "Reply to Matt about the intro"), an optional `body`, the sender, the linked Dex contact when the sender is one, and a `link` that opens the thread in the mail client. Open items only unless include_resolved is true. Items are generated hourly from the last couple of hours of mail; this tool does not scan the mailbox itself. Personal Dex connection only (on a Dex for Teams workspace connection it is refused).
dex_list_attention_items
List events across ALL of the user's connected calendars (Google/Microsoft) within a time range. Defaults to the next 7 days when no range is given. An optional free-text `query` searches titles, descriptions, locations, and attendees — combine it with a wide start/end range to find past or future meetings matching a person or company. Events are fetched live from the providers. A failure across all accounts returns an error; warnings indicate incomplete results when some accounts failed or a provider reported an incomplete read. Each event's `email` field identifies which connected account it belongs to — pass that as `account_email` to get/update/delete it. On a Dex for Teams workspace connection it reads only what members share with the workspace. With a range (one day from `start` by default, at most 7 days; `query` is Personal Dex only and `limit` applies only with `contact_id`) it returns every event on your own calendars that you share with this workspace, in full, plus teammates' meetings with workspace contacts, oldest first. With `contact_id` instead of a range, it returns the meetings with that contact on every calendar shared with the workspace at subject and metadata or full level, yours included, newest first (`order: "newest_first"`) — capped, not exhaustive. A teammate's meeting carries `shared_id` (not an event id: get/update/delete stay Personal Dex only), `member_user_ids` (the members whose shared calendars hold it, not every attendee; names via dex_list_workspace_members) and `visibility`: `metadata` gives title, time and attendees, `full` adds the description.
dex_list_calendar_events
List the workspace's companies with optional filters, sorting and pagination. Each row is the company (owner as `owner_member_id`, tags as `tag_ids`, custom field values) plus its `contacts_count`, `connections_count` and `last_interaction_at`. Filters AND together. Archived companies are left out unless `archived` is true. Workspace connections only; requires Companies to be enabled for the workspace.
dex_list_companies
List a company's contacts: `current` (a current role there; the default) or `past` (only past roles), active contacts before archived ones. Each row has `contact_id` (names via dex_get_contact), `is_archived`, the contact's `roles` at the company, `team_connection_count`, `notes_count` and `connected_with_you`. Workspace connections only; requires Companies to be enabled for the workspace.
dex_list_company_contacts
List all contacts with cursor-based pagination. Returns lightweight contact summaries (id, name, company, job title, location). Use dex_get_contact for full details on a specific contact. Use dex_search_contacts for keyword search. In a Dex for Teams workspace these rows carry no keep-in-touch cadence: read one contact's Team and My cadences with dex_get_contact, see who is due with dex_list_upcoming_reminders_and_birthdays, or select contacts by cadence with dex_filter_contacts' has_frequency (true/false; it matches Team cadences only, so a contact with only a My cadence matches false).
dex_list_contacts
List custom field definitions. Contact fields by default; pass entity_type "company" for company fields (Dex for Teams workspaces) or "all" for both. Each row carries its entity_type.
dex_list_custom_fields
List contacts in a group with pagination.
dex_list_group_contacts
List contact groups, most recent page first. Returns up to `limit` groups; if `has_more` is true, pass `next_cursor` back as `cursor` to fetch the rest.
dex_list_groups
List available note types (e.g. Meeting, Call, Coffee, Note).
dex_list_note_types
List notes on contact timelines with optional filtering by contact and date range. In a workspace, contact_id is required and date filters are unavailable.
dex_list_notes
List reminders/tasks with optional filtering by contact, completion status, overdue status and due-date range, plus sorting and pagination. Each row carries the contacts it is linked to (`reminders_contacts`) and, on a Dex for Teams workspace connection, its tags (`tags`). "Today" and "overdue" are judged by the calendar day in the user's timezone (Dex settings). On a Dex for Teams workspace connection, `assignee_id` also filters by who a reminder is assigned to.
dex_list_reminders
List all tags with optional pagination.
dex_list_tags
What's coming up for the user inside a date window, like the Dex homepage: the contacts whose birthday falls in the window, the open reminders due in it, and the keep-in-touch contacts due for a touch by the end of it. Defaults to the next 7 days starting today — use `days: 30` for the next month, or set `from` to look at a specific week. Use this for questions like "whose birthday is next week?", "who should I reach out to this week?" or "what do I have coming up?". Recurring reminders are listed on their next occurrence. Birthdays the user already marked done this year on the homepage are omitted. `keep_in_touch` DOES include contacts already overdue for a touch (flagged `is_overdue`) — the homepage keeps showing them as due until the touch is logged. Reminders are picked by the day they come up inside the window, so reminders due before `from` are NOT included — call dex_list_reminders with is_overdue=true for those. Dates, "today" and `is_overdue` are judged in the user's timezone from their Dex settings (UTC only if it cannot be read). In a Dex for Teams workspace: `keep_in_touch` lists the workspace's Team cadences and your own My cadences due by the end of the window (narrow with kind; each row carries cadence_id, kind and frequency_days, and `due_on` accounts for a snooze); `reminders` are the workspace's open reminders, across the whole workspace rather than only yours, a recurring one listed on its current occurrence; and birthdays are not available, so `birthdays` is empty and `unavailable_in_workspace` lists it.
dex_list_upcoming_reminders_and_birthdays
List the active members of this connection's Dex for Teams workspace: member_id, name, email, role and is_you (the caller). Use a member's member_id as `assignee_id` on dex_create_reminder, dex_update_reminder and dex_list_reminders. Pass `query` (part of a name or email) to find a specific member, e.g. before assigning a reminder. Returns up to `limit` members (default 50); if `has_more` is true, pass `next_cursor` back as `cursor` with the SAME `query` to continue; a new query starts without a cursor. Only active members can be assigned. Viewers can read but cannot edit or complete a reminder, so assigning one strands it; prefer owner, admin or standard members. Workspace connections only: a Personal connection has no workspace and this tool is refused.
dex_list_workspace_members
List the Dex for Teams workspaces the user belongs to, with their role in each and whether API & MCP access is turned on (api_access_enabled). This MCP connection acts in one place: Personal Dex, or the one workspace its API key was created for (in Dex under Settings → Dex API & MCP). A Personal connection cannot act in a workspace; naming one with ?workspace= is refused. A workspace only works with api_access_enabled true, which a workspace owner or admin turns on in the workspace's settings. Roles: viewer can read; standard, admin and owner can read and write. Deleting or merging contacts, groups or tags, and archiving contacts in bulk, are never available over MCP in a workspace.
dex_list_workspaces
Merge duplicate contacts. Each group of IDs is consolidated into one surviving contact — all data is combined onto it and the other IDs are deleted. The survivor defaults to the oldest (longest-lived) record in the group, NOT the first ID you pass; to choose the survivor yourself, pass the group as { contact_ids, primary_contact_id } instead of a plain array. A chosen survivor also keeps its own fields (photo, company, title, LinkedIn); the others only fill its empty ones. Without one, values from the most recently updated contact win. Read the returned mergedContactIds to learn which contact ID survived each group instead of assuming the order you sent. This is irreversible. Not available on a Dex for Teams workspace connection: merge workspace contacts in the Dex app.
dex_merge_contacts
Dex ChatGPT Plugin FAQ
How the directory, categories and Discoverability Score work.
Read the methodologyHow do I improve Dex'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 Dex alternatives on ChatGPT?
As of 2026-11-02, Dex competes with 1to1 Mate, Blinq, Chiho AI, ConnectMachine, dots brain, Goodword, KnowWho CRM, Rep and 1 more in ChatGPT Personal CRM, 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.