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
- 53
- Geography
- US
Other Subcategories where the Integration is listed.
Get alerts for Dex
Get updates when Dex’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 Personal CRM
View Category53 tools agents can invoke
Add up to 500 contacts to a group per call. Split larger selections into separate calls. Retry any IDs in result.remaining to finish a partial write.
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 tags to contacts.
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.
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.
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.
dex_create_calendar_event
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. Returns the created contact(s).
dex_create_contact
Create a new custom field definition.
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.
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.
dex_create_reminder
Create a new tag.
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.
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.
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.
dex_delete_custom_field
Delete a group. This action is irreversible.
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.
dex_delete_tag
Filter contacts with the same structured filters as Dex views: tags, groups, company, job title, LinkedIn presence/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
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.
dex_get_calendar_event
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`), tags, groups, custom fields, related contacts, and optionally recent notes/timeline. 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.
dex_get_group
Get a single note by ID.
dex_get_note
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 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 only some accounts failed. Each event's `email` field identifies which connected account it belongs to — pass that as `account_email` to get/update/delete it.
dex_list_calendar_events
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.
dex_list_contacts
List all custom field definitions.
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.
dex_list_notes
List reminders/tasks with optional filtering by contact, completion status, overdue status and due-date range, plus sorting and pagination.
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. Overdue reminders are NOT included — call dex_list_reminders with is_overdue=true for those.
dex_list_upcoming_reminders_and_birthdays
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. Read the returned mergedContactIds to learn which contact ID survived each group instead of assuming the order you sent. This is irreversible.
dex_merge_contacts
Remove up to 500 contacts from a group per call. Split larger selections into separate calls. Retry any IDs in remaining to finish a partial write.
dex_remove_contacts_from_group
Unlink one or more related contacts from a contact. Relations are symmetric, so removing A↔B clears the link from both sides. The contacts themselves are not modified or deleted.
dex_remove_related_contacts
Remove tags from contacts.
dex_remove_tags_from_contacts
Run Dex Research on 1–5 contacts: searches the public web, reads the best pages, and stores a cited research note per contact (one-line summary + "Current focus" / "Background" / "Interests" bullets with [[n]] citations into `sources`) plus structured findings (LinkedIn, website, email, phone) with confidence and evidence. This is a PAID action that takes a minute or more per contact (contacts run in parallel, so the call lasts as long as the slowest one) — confirm with the user before researching a large set, and chunk bigger sets into several calls. A contact researched within the last 30 days returns its cached note at no cost unless `force: true`. A run auto-fills a contact's EMPTY linkedin/website fields from high-confidence findings (reported in `applied`) and preserves populated contact fields; a fresh run replaces the previous stored research note, findings, and review statuses. Email/phone findings come back `pending` for the user to confirm before you apply them with dex_update_contact. `outcome: "in_progress"` means another request is already researching that contact: read it back later with dex_get_contact_research rather than running again. Results are large — research a few contacts per call to stay under the response limit. Rows that are not `ok` are listed first so they survive truncation; an `ok` note that was truncated is still stored and readable with dex_get_contact_research.
dex_research_contacts
Search contacts by name, email, phone number, or any keyword. Phone numbers are matched on digits; formatting and country code are ignored (a query that is only a phone number searches phone numbers instead of the text fields, so "+420 604 354 254", "420604354254" and "604354254" all find the same contact). Use `near` for geographic proximity ("contacts in the Bay Area", "near Sydney") — the place is geocoded and contacts are matched by their own coordinates, so it finds people whose saved location differs from the query (e.g. "San Francisco" still matches "Bay Area"). `near` and `query` combine (AND): "engineers in the Bay Area" → query "engineer" + near "Bay Area". Returns up to `limit` results. Use an empty query to list contacts sorted by most recently interacted.
dex_search_contacts
Search or list emails across ALL of the user's connected mail accounts (Google/Microsoft), fetched live from the providers. Omit `query` to LIST the most recent emails — set folder:'inbox' for received mail only ("my inbox"); the default includes the user's own sent messages. With `query`, matches plain text against subject, body, and participants — pass keywords like a name, company, or email domain; provider search operators (from:, to:) are neutralized. Date ranges: without `after`/`before`, results cover roughly the last 6 months — when listing, prefer following `next_cursor` over widening the range, and pass bounds only when the request names a period. Returns message metadata (sender, participants, subject, snippet, date, provider link) — not full bodies. Only listings paginate: search results are a single relevance-ranked page (`cursor` with `query` is rejected) — narrow a search with dates or better keywords instead.
dex_search_emails
Batch-update custom field values on contacts. Each update has a mode: "replace" (the default) overwrites the stored value; "prepend" / "append" preserve the existing text atomically on the server and add the new text in front of / after it, joined by `separator` (defaults to a newline) — you do NOT need to read the current value first. Array values prepend/append as a de-duplicated list; date values only support replace.
dex_set_custom_field_values
Set or clear the keep-in-touch cadence for up to 500 contacts in one call (chunk larger sets into multiple calls) — the bulk companion to dex_update_contact's keep_in_touch field. An interval sets how often to stay in touch ("7 days" = weekly, "14 days" = every 2 weeks, "1 mon" = monthly, "42 days" = every 6 weeks, "3 mons" = quarterly, "6 mons" = every 6 months, "1 year" = yearly) — this is "remind me to reach out every N", "stay in touch every N". "never" is the explicit don't-keep-in-touch mark — "no regular outreach", "stop reaching out", "don't keep in touch with them", "stop reminding me about them". "unset" simply clears the cadence so the contact has none — "no cadence", "remove the keep-in-touch" — leaving them unmarked rather than flagged. Every value overwrites whatever cadence each contact already has — and "never"/"unset" leave nothing in its place — so confirm with the user before changing a large set. Marking a due keep-in-touch as done is dex_complete_keep_in_touch, not this tool.
dex_set_keep_in_touch
Update an existing calendar event by its provider event ID. Only provided fields change. To reschedule, provide BOTH start_datetime and end_datetime (or start_date for all-day) — new times replace the old ones and can switch an event between timed and all-day. Recurring events: this edits the whole series when given the series ID. Supply idempotency_key from the first attempt to safely retry a timed-out operation; use a fresh key for a new edit.
dex_update_calendar_event
Update an existing contact. Only provided fields are changed. Pass `null` to clear an optional scalar such as website, company, job title, social profile, birthday, description, or location. For emails and phone numbers, you can add or remove entries — existing ones are preserved automatically. `is_archived: true` ARCHIVES the contact (hidden from lists, search, and reminders; reversible) — confirm with the user first, and use dex_archive_contacts for more than one contact.
dex_update_contact
Update an existing custom field definition.
dex_update_custom_field
Update an existing group: name, emoji, description, or parent group. To nest a group under another, pass parent_id; pass parent_id: null to move it to the top level. A group cannot be its own parent or ancestor. Because null fields are omitted from tool results, a top-level group reads back with no parent_id key.
dex_update_group
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 Dex alternatives on ChatGPT?
As of 2026-09-28, Dex competes with 1to1 Mate, Blinq, Chiho AI, Goodword, table 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.