You can search for multiple contacts by the value of their attributes in order to fetch exactly who you want.
To search for contacts, you need to send a POST request to https://api.intercom.io/contacts/search
. This will accept a query object in the body which will define your filters in order to search for contacts.
🚧 Why is there a delay when creating contacts and searching for them?
If a contact has recently been created, there is a possibility that it will not yet be available when searching. This means that it may not appear in the response. This delay can take a few minutes. If you need to be instantly notified then you could use webhooks instead, which you'd currently have to iterate on to see if they match your search filters.
🚧 Nesting & Limitations
You can nest these filters in order to get even more granular insights that pinpoint exactly what you need. Example: (1 OR 2) AND (3 OR 4). There are some limitations to the amount of multiple's there can be:
- There's a limit of max 2 nested filters
- There's a limit of max 15 filters for each AND or OR group
🚧 Searching for Timestamp Fields
All timestamp fields (created_at, updated_at etc.) are indexed as Dates for Contact Search queries; Datetime queries are not currently supported. This means you can only query for timestamp fields by day - not hour, minute or second. For example, if you search for all Contacts with a created_at value greater (>) than 1577869200 (the UNIX timestamp for January 1st, 2020 9:00 AM), that will be interpreted as 1577836800 (January 1st, 2020 12:00 AM). The search results will then include Contacts created from January 2nd, 2020 12:00 AM onwards. If you'd like to get contacts created on January 1st, 2020 you should search with a created_at value equal (=) to 1577836800 (January 1st, 2020 12:00 AM). This behaviour applies only to timestamps used in search queries. The search results will still contain the full UNIX timestamp and be sorted accordingly.
Accepted Fields
Most key listed as part of the Contacts Model are searchable, whether writeable or not. The value you search for has to match the accepted type, otherwise the query will fail (ie. as created_at
accepts a date, the value
cannot be a string such as "foorbar"
).
Field | Type |
---|---|
id | String |
role | String Accepts user or lead |
name | String |
avatar | String |
owner_id | Integer |
String | |
phone | String |
formatted_phone | String |
external_id | String |
created_at | Date (UNIX Timestamp) |
signed_up_at | Date (UNIX Timestamp) |
updated_at | Date (UNIX Timestamp) |
last_seen_at | Date (UNIX Timestamp) |
last_contacted_at | Date (UNIX Timestamp) |
last_replied_at | Date (UNIX Timestamp) |
last_email_opened_at | Date (UNIX Timestamp) |
last_email_clicked_at | Date (UNIX Timestamp) |
language_override | String |
browser | String |
browser_language | String |
os | String |
location.country | String |
location.region | String |
location.city | String |
unsubscribed_from_emails | Boolean |
marked_email_as_spam | Boolean |
has_hard_bounced | Boolean |
ios_last_seen_at | Date (UNIX Timestamp) |
ios_app_version | String |
ios_device | String |
ios_app_device | String |
ios_os_version | String |
ios_app_name | String |
ios_sdk_version | String |
android_last_seen_at | Date (UNIX Timestamp) |
android_app_version | String |
android_device | String |
android_app_name | String |
andoid_sdk_version | String |
segment_id | String |
tag_id | String |
custom_attributes.{attribute_name} | String |