- Brand
- Attio
- Category
- Sales & CRM
- Primary Subcategory
- B2B Sales CRM Platforms
Integration details
Description
Attio connects ChatGPT directly to your CRM workspace, letting you manage customer relationships through natural conversation. Search and filter contacts, companies, and deals with flexible queries. Create, update, and organize records without switching between screens. Add notes, manage tasks, and track your sales pipeline—all through simple requests. Key capabilities: - Search records using powerful filters (find companies by size, industry, last contact date) - Create and update people, companies, and deal records - Manage notes attached to any record - Track and complete tasks - Navigate lists and organize your data Whether you're preparing for a meeting, updating deal stages, or researching prospects, Attio brings your CRM data into your conversation — no manual data entry required.
- Integration type
- Plugin
- Verification status
- Not applicable
- Platform
- ChatGPT
- Primary Subcategory
- B2B Sales CRM Platforms
- Secondary Subcategories
- None listed
- Brand
- Attio
- Access
- Account required
- First tracked
- 2026-02-03
- Tool count
- 49
- 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 .
39/100
Buried#2of 73
in B2B Sales CRM Platforms- Picked
- 39.5/100
- Found
- 42.0/100
- Positioned
- –/100
Get alerts for Attio
Get updates when Attio’s Discoverability Score or category rank changes.
Competing in ChatGPT B2B Sales CRM Platforms
View Category49 tools agents can invoke
Add a record to a list as a new list entry. IMPORTANT: Before calling this tool: 1) You should call list-list-attribute-definitions for the target list to understand which entry attributes are available. 2) You should call list-records or search-records to find the record you want to add to the list. 3) You may call list-lists to find available lists. By default, duplicate entries are prevented - if the record already exists in the list, the existing entry ID is returned. Set allow_duplicates to true to create multiple entries for the same record.
add-record-to-list
Create a new record for a given activity, for example one specific phone call. IMPORTANT: Before calling this tool, you should call list-activity-attribute-definitions for the target activity to understand which attributes are available, their types, whether they are required, and (for select/status fields) the valid options. Different attribute types require different value formats - see the 'values' parameter description for details.
create-activity-record
Creates a new comment on a record, list entry, or as a reply to an existing comment thread. Provide exactly one of: (parent_object + parent_record_id) for records, (parent_list + parent_entry_id) for list entries, or (parent_comment_id) for replies. Email addresses in the content will be automatically converted to @mentions if they match workspace members.
create-comment
Creates a new list in Attio. Lists are used to group and track records of a single object type (e.g. a sales pipeline of companies). The list is created without any views. Records can be added to the list with the add-record-to-list tool, and attributes specific to the list can be inspected with the list-list-attribute-definitions tool. Permissions are controlled with workspace_access and workspace_member_access. The calling workspace member is automatically granted full access to the created list and does not need to be included in workspace_member_access. If they are included, their given level applies instead, so some workspace member must then keep full access to the list. Returns the created list's ID.
create-list
Creates a new note attached to a record. Returns the created note's ID.
create-note
Create a new record in a given object. IMPORTANT: Before calling this tool, you should call list-attribute-definitions for the target object to understand which attributes are available, their types, whether they are required, and (for select/status fields) the valid options. Different attribute types require different value formats - see the 'values' parameter description for details.
create-record
Creates a new task in Attio. Tasks can optionally have a deadline, an assignee (workspace member), and be linked to a record (e.g., a person or company). To assign to a workspace member, provide their workspace_member_id. To link to a record, provide both the object type (e.g., "people", "companies") and the record_id together. Returns the created task's ID.
create-task
Deletes a comment. You can only delete comments that you created. Deleting a parent comment will also delete all of its replies.
delete-comment
Deletes a task. Call list-tasks to find the ID of the task you want to delete.
delete-task
Retrieves the full details of a call recording by ID, including its status, timestamps, and complete transcript.
get-call-recording
Retrieves the full content/body of an email. Requires the mailbox_id and email_header_id, which can be obtained from email search results.
get-email-content
Get the body of a note by its ID
get-note-body
Retrieve a given set of records by their IDs for a given object. Returns an array of records with their attribute values. If a record is not found, it will not be included in the response.
get-records-by-ids
List all activities in the Attio workspace. Activities model things that happen over time, such as phone calls or meetings, and each one holds activity records. Returns activity metadata including ID, API slug, singular and plural nouns, and the schemas the activity extends. Use the query parameter to filter by name or slug.
list-activities
List attribute definitions for a given activity
list-activity-attribute-definitions
List records for a given activity, such as phone calls or meetings, with optional filtering and sorting. Returns paginated results. Use this tool to retrieve activity records that match specific criteria. You can filter on attributes using comparison operators, combine filters with AND/OR logic, and sort results by attribute values. Before calling this tool, ensure you know the attribute slugs or IDs for any filters or sorts you want to apply. Use the list-activity-attribute-definitions tool to discover available attributes for an activity.
list-activity-records
List attribute definitions for a given object
list-attribute-definitions
Lists replies to a comment. Provide the comment_id of a top-level comment to fetch its replies. Cannot be used with reply comments - only top-level comments that were created on records or list entries. All replies in a thread use the same parent comment ID.
list-comment-replies
Lists comments on a record or list entry. Returns paginated top-level comments with up to 5 replies each. If a thread has more replies, use "list-comment-replies" to fetch additional replies. Provide either (parent_object and parent_record_id) to list comments on a record, or (parent_list and parent_entry_id) to list comments on a list entry.
list-comments
List attribute definitions for a given list
list-list-attribute-definitions
List all lists in the Attio workspace. Returns list metadata including ID, name, API slug, and parent object types. Use the query parameter to filter by name or slug.
list-lists
List all objects in the Attio workspace. Objects are the types of record the workspace stores, such as companies, people and deals. Returns object metadata including ID, API slug, singular and plural nouns, and whether the object is a standard Attio object. Use the query parameter to filter by name or slug.
list-objects
List records in a given object with optional filtering and sorting. Returns paginated results. Use this tool to retrieve records that match specific criteria. You can filter on attributes using comparison operators, combine filters with AND/OR logic, and sort results by attribute values. Before calling this tool, ensure you know the attribute slugs or IDs for any filters or sorts you want to apply. Use the list-attribute-definitions tool to discover available attributes for an object.
list-records
List entries in a given list with optional filtering and sorting. Returns paginated results. Use this tool to retrieve entries within a list that match specific criteria. You can filter on attributes using comparison operators, combine filters with AND/OR logic, and sort results by attribute values. Each entry includes the parent record it belongs to and all entry-level attributes.
list-records-in-list
Lists tasks in the workspace with optional filters. Returns paginated results with task content, completion status, assignees, linked records, and deadlines. Use to find tasks by assignee, completion status, linked record, or date ranges.
list-tasks
List members in the Attio workspace. Returns a list of matching members with their ID, email address, name, access level, and team memberships. Use the query parameter to filter by name, email, or team.
list-workspace-members
List teams in the workspace. Teams are groups of workspace members used primarily for permission management. Returns an array of teams, each with: workspace_team_id, name, description, is_archived, created_at, and members (array of {name, email}).
list-workspace-teams
Merges two records of the same object into one. Where both records have a value for the same attribute, the primary record's value takes precedence. Merging produces a NEW record, so `new_record_id` will match neither of the records you supplied. Both original records are marked as merged and can no longer be read or written. Large merges are applied in the background. `merge_status: in_progress` means the merge has been committed but reading the new merged record will fail until it finishes; do not retry the merge, wait a few seconds and then read the record. `merge_status: completed` means the new merged record is readable immediately.
merge-records
Execute a read-only SQL query against the workspace's object, list, and activity data using PostgreSQL syntax. It is faster and more efficient to use this tool for complex queries than to retrieve large amounts of data and process it in-memory. Where useful, select record_id or entry_id to support rendering rich references. Use this tool to: - Query answers to questions that require complex filtering, sorting, or aggregations that are challenging to achieve with the other tools. - Answer questions that require combining data from multiple objects. - Answer analytical or aggregate questions (counts, groupings, joins across objects) that cannot be expressed with the simpler list/search tools. <schema> Tables are organized into schemas. Column names correspond to attribute slugs. - objects (default schema): one table per object, named by object slug (e.g. companies or objects.companies). Has a record_id column that can be used to join back to the original record entity_instance_id in Attio if needed. - lists: lists.<slug> (e.g. lists.sales_pipeline). Has an entry_id column that identifies the list entry, and parent_record (entity-reference) pointing at the record the entry belongs to. - activities: activities.<slug> (e.g. activities.phone_calls). Interface tables (called "schemas" in the product) span every activity implementing them: activities.activities (title, timestamp, linked_records) covers all activities, and activities.interactions adds direction and participants. They expose only the interface's columns, plus self (entity-reference) identifying the underlying activity. - system: system.workspace_members has one row per workspace member with workspace_membership_id, name and email_address. Tables outside objects must always be schema-qualified. IMPORTANT: When selecting or filtering by attributes - you must not assume the slug based on the users query, instead you should retrieve available attributes first. Each column's SQL type is determined by the attribute type (left = attribute type, right = SQL type): - text -> TEXT - number -> DOUBLE PRECISION - checkbox -> BOOLEAN - currency -> NUMERIC - date -> DATE - domain -> TEXT - email-address -> TEXT - phone-number -> TEXT - rating -> BIGINT - timestamp -> TIMESTAMP - actor-reference -> composite (type TEXT, id TEXT) - entity-reference -> composite (entity_definition_id TEXT, entity_instance_id TEXT) - location -> composite (line_1 TEXT, line_2 TEXT, line_3 TEXT, line_4 TEXT, locality TEXT, region TEXT, postcode TEXT, country_code TEXT, latitude TEXT, longitude TEXT) - pipeline -> composite (id TEXT, title TEXT) - select -> composite (id TEXT, title TEXT) Composite columns must be accessed through a field, such as name.full_name or assignee.id; never compare an entire composite value. Multiselect attributes use PostgreSQL array notation TYPE[]. For example, a multiselect select attribute is (id TEXT, title TEXT)[]. Use UNNEST(column) to expand array values into rows. </schema> <syntax> The SQL dialect is PostgreSQL. Follow these rules: - Use single quotes for string literals, e.g. 'Acme' - Use standard PostgreSQL functions (COUNT(record_id) FILTER (WHERE ...), ARRAY_AGG, TO_CHAR, DATE_TRUNC, etc.) - Only SELECT statements are supported </syntax> <joins> Multi-select record reference attributes (e.g. associated_deals on people, or associated_people on deals) are stored as arrays of entity-reference structs, each of the shape (entity_definition_id TEXT, entity_instance_id TEXT). To join from a record to the records it references, you must unnest that array into one row per reference, then join on entity_instance_id. Unnesting a table's own column directly in the FROM clause is NOT supported. Do not write: FROM people, UNNEST(people.associated_deals) AS deal_ref The supported method to write this join is to unnest inside a CTE’s SELECT, then field-access and join in the outer query. <example prompt="List the deals associated with each person"> WITH person_deals AS ( SELECT record_id AS person_id, UNNEST(people.associated_deals) AS deal_ref FROM people ) SELECT person_deals.person_id, deals.name AS deal_name FROM person_deals JOIN deals ON deals.record_id = person_deals.deal_ref.entity_instance_id </example> </joins> <result_limit> Only the first 1000 rows of query results are returned. If a query returns more than 1000 rows, the additional rows are truncated and you are told that this happened. A LIMIT you write yourself is not reported back, so if you get exactly the row count as your LIMIT there could be more rows to paginate through. This is especially important when there is no meaningful ORDER BY. If unsure whether you should explore more, tell the user there may be more information if they'd like you to search for it. To work with larger datasets: - Use aggregations (COUNT, SUM, GROUP BY) to reduce the result set - Use LIMIT and OFFSET to paginate through results - Add WHERE clauses to narrow the query </result_limit> <example prompt="Count all companies named Acme"> SELECT COUNT(record_id) FROM companies WHERE name = 'Acme' </example>
query-particle-sql
Run an aggregate report on records in an object or entries in a list. Use this tool when you need totals, averages, minimums, maximums, or grouped breakdowns. How to use: 1. Pick a source object/list via slug or UUID. 2. Choose a metric: - {"type":"count"} for counting records/entries. - {"type":"attribute", ...} for aggregating a numeric attribute. 3. Optionally add filter to narrow rows before aggregation. 4. Optionally add up to two group_by entries. The first is the primary grouping (outer key), the second is secondary (inner key). 5. If required, use the list attribute tools to discover valid attribute slugs for filter, metric paths, and grouping paths. Expected response shape: - group_by = []: plain number string, e.g. "42" or "1034.5" - one group_by: TOON key/value map, e.g. enterprise: 12 smb: 35 - two group_by: nested TOON map, e.g. emea: won: 4 open: 7 na: won: 3
run-basic-report
Searches all call recordings across the workspace by their metadata. Useful for finding call recordings based on who was on the call (workspace members or person records), related records (e.g., companies or deals), meeting title, and time range. Returns paginated results ordered by start time (most recent first). Uses limit/offset pagination. Returns call recording metadata only (IDs and timestamps). Use the "get-call-recording" tool to retrieve the full transcript of a call recording.
search-call-recordings-by-metadata
Searches emails visible to the user by their metadata. Useful for finding emails based on participants, domain, and time range. The participant and domain filters are meant for external participants: filtering by a workspace member's own address or the company's own domain returns no results, because workspace-connected mailboxes matching the filter are excluded from the search scope. Returns paginated results ordered by sent time (most recent first). Uses cursor pagination: pass the next_cursor value from the previous response to fetch the next page. A page may contain fewer than "limit" emails (even zero) while more results still exist; continue while has_more is true. When both domain and participant_email_addresses are provided, they are ORed together (emails matching either filter are returned). Returns email metadata only (ID, subject, summary, snippet, sender, sent_at). Use the "get-email-content" tool to retrieve the full content of an email.
search-emails-by-metadata
Search across past and future meetings in the workspace. Returns paginated results with meeting metadata and associated call recording IDs. Useful for finding meetings based on participants, related records, and time range. Results are split into past_meetings (sorted by start time descending) and future_meetings (sorted by start time ascending). Returns call_recording_ids for past meetings so you can fetch full transcripts via the "get-call-recording" tool.
search-meetings
Searches for notes by their metadata. Useful for finding notes based on parent record, meeting, author (workspace member), and creation time. Returns paginated results ordered by creation date (most recent first). Uses limit/offset pagination.
search-notes-by-metadata
Perform a full-text search for records in a given object. Only searches indexed attributes: domains, email addresses, phone numbers, name/title, description, social handles, and location. Returns paginated results.
search-records
Searches all call recordings across the workspace using semantic similarity. Returns call recordings that are most semantically similar to the query, even if the exact keywords are not present in the transcript. Useful for finding calls where a specific topic was discussed. Searches both transcript content and call recording overviews (title and summary) automatically. Returns matching transcript chunks and call recording overview information. Use the "get-call-recording" tool to retrieve the full transcript of a call recording.
semantic-search-call-recordings
Searches emails visible to the user using semantic similarity. Returns up to 20 emails that are most semantically similar to the query, even if exact keywords are not present. Useful for finding emails where a specific topic was discussed. Returns email metadata only (ID, subject, summary, snippet, sender, sent_at). Use the "get-email-content" tool to retrieve the full content of an email.
semantic-search-emails
Searches all notes across the workspace using semantic similarity. Returns up to 20 notes that are most semantically similar to the query, even if the exact keywords are not present in the note. Useful for finding notes where a specific topic was discussed. Returns note metadata only (ID, title, timestamps, parent record). Use the "get-note-body" tool to retrieve the full content of a note.
semantic-search-notes
Use this tool to update activity records, such as phone calls or meetings, by `record_id`.
update-activity-record
Change the workspace's data model: create objects, enable standard objects, and create attributes and relationships. All changes in a call are applied together in one transaction, or none are. If the call fails nothing was applied: fix every listed issue and resend the whole list. Before calling, use list-objects, and list-attribute-definitions for any existing object you add to. Lists, archived attributes and disabled objects also hold slugs. Creating objects needs a workspace admin. Enabling or adding to an existing object needs admin or full access to it. Each item in `changes` has an `action`: - create-object: a new custom object. Optionally set record_text_attribute to an attribute created in this call that names each record. - enable-standard-object: turn on deals, users or workspaces. Disabled ones are not in list-objects. No views are created. deals already has name, stage (with statuses), owner, value, associated_people and associated_company. users and workspaces are your customers' product users and accounts, not Attio teammates. - create-attribute: one attribute. select and status take their options inline. Prefer existing standard attributes (e.g. email_addresses, linkedin on people; domains on companies) over near-duplicates. - create-relationship: a two-way link that creates one attribute on each side, e.g. people.manager (is_multiselect false) with people.direct_reports (true). For a one-way link use create-attribute with type record-reference. Refer to objects by api_slug, including ones created in this call. Array order only sets display order. Creating something that exists, or enabling an enabled object, is an error. Plan rules: created and enabled objects count toward the plan's object limit, and custom objects and relationships need a plan that includes them. Limits per call: 100 changes, 10 objects created or enabled, 100 attributes (a relationship counts as 2), 500 options and statuses. Calls near these limits may still be too large; split them. Returns {success: true}.
update-data-model
Update a list's name, API slug, or permissions.
update-list
Update attribute values on an existing list entry by its entry ID. Before calling this tool, you must: - Call list-records-in-list to find the entry you want to update. You may also: - Call list-list-attribute-definitions for the target list to understand which entry attributes are available. - Call list-lists to find available lists. Note: The parent record cannot be changed after creation.
update-list-entry-by-id
Update attribute values on a list entry by finding it via its parent record ID. IMPORTANT: This tool will error if the record has zero or multiple entries in the specified list. Before calling this tool, you may: 1) Call list-lists to find available lists. 2) Call list-list-attribute-definitions for the target list to understand which entry attributes are available. 3) Call list-records or search-records to find the record ID.
update-list-entry-by-record-id
Appends or prepends plain-text content to an existing note and/or updates its title. At least one of `operation` or `updated_title` must be provided.
update-note
Use this tool to update people, companies, and other records by `record_id`.
update-record
Updates an existing task in Attio. You can update the deadline, completion status, assignee, and linked record. To update the assignee, provide their workspace_member_id. To update the linked record, provide both the object type (e.g., "people", "companies") and the record_id together. To clear the deadline, set deadline_at to null. Returns the updated task's ID.
update-task
Use this tool to create or update activity records, such as phone calls or meetings. A matching attribute is used to search for existing activity records. If a record is found with the same value for the `matching_attribute`, that record will be updated. If no record with the same value for the `matching_attribute` is found, a new record will be created instead. If the matching attribute is a multiselect attribute, new values will be added and existing values will not be deleted. The `matching_attribute` must be a unique attribute of the activity. Use the `list-activity-attribute-definitions` tool to find one. If you would like to avoid matching, please use the `create-activity-record` tool.
upsert-activity-record
Use this tool to create or update people, companies and other records. A matching attribute is used to search for existing records. If a record is found with the same value for the `matching_attribute`, that record will be updated. If no record with the same value for the `matching_attribute` is found, a new record will be created instead. If the matching attribute is a multiselect attribute, new values will be added and existing values will not be deleted. If you would like to avoid matching, please use the `create-record` tool.
upsert-record
Returns information about the current user's identity and workspace membership, including their email, name, workspace member ID, access level, workspace name, and the teams they belong to.
whoami
Attio ChatGPT Plugin FAQ
How the directory, categories and Discoverability Score work.
Read the methodologyHow do I improve Attio'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 Attio alternatives on ChatGPT?
As of 2026-11-02, Attio competes with HubSpot, Close, Zoho CRM, 33CRM, Agiled, Alaz, Anvil CRM, Asbie and 64 more in ChatGPT B2B Sales CRM Platforms, ranked by public Discoverability Score.
Where does Attio rank in B2B Sales CRM Platforms on ChatGPT?
As of 2026-11-02, Attio ranks #2 of 73 in ChatGPT B2B Sales CRM Platforms with a Discoverability Score of 39/100 (Buried).
Where is this profile measured?
This profile uses the geography attached to the latest public registry snapshot: US. Locale tags are intentionally omitted.