Skip to main content
Due to the complexity of advanced filtering, updates may take a few seconds to appear in search results.
The Opportunities Search API lets you search for opportunities using extensive filtering, sorting, and pagination options.

Endpoint

POST /opportunities/search

Request body

ParameterTypeRequiredDescriptionLimit
locationIdstringYesLocation ID to search within.
pagenumberNoPage number for standard pagination. Do not use with searchAfter.min: 0
limitnumberYesResults per page.1–500
searchAfterarrayNoCursor for pagination beyond 10,000 records. Value returned in each response.
querystringNoFull-text search against configured searchable fields.max 75 chars
filtersarrayNoFilter criteria — see Filters below.
sortarrayNoSort criteria — see Sort below.
additionalDetails.notesbooleanNoInclude notes (true/false).
additionalDetails.tasksbooleanNoInclude tasks (true/false).
additionalDetails.calendarEventsbooleanNoInclude calendar events (true/false).

Sample request

{
  "locationId": "5DP41231LkQsiKESj6rh",
  "page": 1,
  "limit": 20,
  "query": "john@example.com",
  "filters": [
    { "field": "status", "operator": "eq", "value": "open" },
    {
      "group": "OR",
      "filters": [
        { "field": "pipeline_id", "operator": "eq", "value": "bCkKGpDsyPP4peuKowkG" },
        { "field": "pipeline_stage_id", "operator": "eq", "value": "7915dedc-8f18-44d5-8bc3-77c04e994a10" }
      ]
    }
  ],
  "sort": [{ "field": "date_added", "direction": "desc" }],
  "additionalDetails": { "notes": true, "tasks": true, "calendarEvents": false }
}

Pagination

Standard pagination (page + limit)

  • Fetches up to 10,000 records total.
  • Maximum 500 records per request.

Cursor-based pagination (searchAfter + limit)

  • Required for more than 10,000 records.
  • Use the searchAfter value returned in each response as the start point for the next page.
  • Do not include page when using searchAfter.

Filters

Filters can be applied individually or grouped with AND / OR logical operators. Each filter has three components:
  • Field — the opportunity attribute to filter on.
  • Operator — the comparison to apply.
  • Value — the value to compare against.

Sample filter payload

{
  "group": "AND",
  "filters": [
    {
      "group": "AND",
      "filters": [
        { "field": "status", "operator": "eq", "value": "open" },
        { "field": "monetary_value", "operator": "range", "value": { "gte": 1000, "lte": 5000 } }
      ]
    },
    {
      "group": "OR",
      "filters": [
        { "field": "assigned_to", "operator": "eq", "value": "082goXVW3lIExEQPOnd3" },
        { "field": "source", "operator": "exists" }
      ]
    }
  ]
}

Supported operators

OperatorDefinitionValue typeLimit
eqEqualsNumber, String, Boolean
not_eqNot equalsNumber, String, Boolean
containsContains (no special characters)String75
not_containsNot contains (no special characters)String75
existsHas a value— (omit value)
not_existsHas no value— (omit value)
rangeRange with gte, lte, gt, ltObject

Supported filter fields

Opportunity information

Display nameField nameSupported operators
Opportunity IDideq, not_eq
Opportunity Namenameeq, not_eq, contains, not_contains, exists, not_exists
Monetary Valuemonetary_valueeq, not_eq, range, exists, not_exists
Pipeline IDpipeline_ideq, not_eq, exists, not_exists
Pipeline Stage IDpipeline_stage_ideq, not_eq, exists, not_exists
Statusstatuseq, not_eq, exists, not_exists
Lost Reason IDlost_reason_ideq, not_eq, exists, not_exists
Sourcesourceeq, not_eq, exists, not_exists
Assigned Toassigned_toeq, not_eq, exists, not_exists
Followersfollowerseq, not_eq, contains, not_contains, exists, not_exists

Contact information (on opportunity)

Display nameField nameSupported operators
Contact IDcontact_ideq, not_eq, exists, not_exists
Contact Namecontact_nameeq, not_eq, contains, not_contains, exists, not_exists
Company Namecompany_nameeq, not_eq, contains, not_contains, exists, not_exists
Emailemaileq, not_eq, contains, not_contains, exists, not_exists
Phonephoneeq, not_eq, contains, not_contains, exists, not_exists

Date fields

Display nameField nameSupported operators
Date Addeddate_addedrange, exists, not_exists
Date Updateddate_updatedrange, exists, not_exists
Last Status Changelast_status_change_daterange, exists, not_exists
Last Stage Changelast_stage_change_daterange, exists, not_exists

Custom fields

Field typeField name formatOperators
Text, Large Text, Single Option, Radio, Phonecustom_fields.{custom_field_id}eq, not_eq, contains, not_contains, exists, not_exists
Checkbox, Multiple Optionscustom_fields.{custom_field_id}eq, not_eq, exists, not_exists
Numerical, Monetarycustom_fields.{custom_field_id}range, eq, not_eq, exists, not_exists
Datecustom_fields.{custom_field_id}range, exists, not_exists
Textbox Listcustom_fields.{field_id}.{option_id}eq, not_eq, contains, not_contains, exists, not_exists

Sort

You can combine up to 2 sort criteria.
[
  { "field": "date_added", "direction": "desc" },
  { "field": "monetary_value", "direction": "asc" }
]

Supported sort fields

Display nameField name
Date Createddate_added
Date Updateddate_updated
Opportunity Namename
Monetary Valuemonetary_value
Last Status Changelast_status_change_date
Last Stage Changelast_stage_change_date
Last modified on March 7, 2026