Skip to main content
Version: 12 - TBD

Full-Text Search

Full-text search lets you find records by any word they contain — without knowing the record's type or its exact name. It is the fast, fuzzy counterpart to the Advanced Search, which filters records by precise, structured criteria.

A single query is matched against a maintained search index and returns the best-ranked records you are allowed to read, across every indexed record type at once.

What is indexed

The search index covers the following content:

ContentIndexed
name and description of every indexed record✅ Always
FLOW, WRAPPER, SCHEDULER script bodies✅ Always
SETTING and SCHEMA values✅ Always
Custom-object attribute values✅ When the attribute is marked searchable
CONNECTOR values❌ Never (may contain secrets)
EXECUTION, MESSAGE, PROCESS records❌ Never (high-volume activity records)
note

Executions, messages and processes are intentionally excluded from full-text search because they are high-volume and short-lived. Use the Advanced Search Executions and Messages tabs, or list_executions, to find those.

Query semantics

  • Multiple words are AND-combined — every word must be present for a record to match. Searching customer invoice returns records that contain both customer and invoice.
  • The last word is prefix-matched — so cust matches customer, customers, customize, and so on. This makes the search useful while you are still typing.
  • Results are ranked by relevance so the most relevant records appear first.
  • Only records you have READ permission for are returned — full-text search fully respects role-based access control. It never reveals a record you could not otherwise see.
  • Trashed records are excluded. To find deleted content, use the Trash view or the Advanced Search record-status filter.

Making custom-object attributes searchable

By default, only a custom object's name and description are indexed — its custom attribute values are not. To include a specific attribute's value in full-text search, set that attribute's searchable flag on its object template.

In the Console, open the object template, edit the attribute, and enable the Searchable toggle:

Include this attribute's value in the platform full-text search index of its custom objects. Best suited to text attributes (STRING / TEXT / MARKDOWN). Toggling re-indexes this object template's custom objects.

searchable is a boolean field on the object template's attribute definition (the OBJECT_TEMPLATE_ATTRIBUTE subrecord). You can also set it when creating or editing that attribute through the REST API, GraphQL, or the MCP create_subrecord / update_subrecord tools — it defaults to false.

note

Toggling searchable (or adding/removing a searchable attribute) re-indexes every custom object of that template in the background, so existing records become searchable without any manual backfill. Very large templates may take a short while to finish re-indexing.

The quickest way to run a full-text search is the quick-search box in the top navigation bar. As you type, the results popover shows two sections:

  • Name matches — records whose name matches what you typed (the classic quick search).
  • Full-text matches — records that contain your words anywhere in their indexed content (description, flow script, searchable custom-object attributes, …), grouped by record type. These are the extra matches full-text search finds that a name search cannot.

Click any result to open the record, or use the Advanced Search button for precise, structured filtering. As everywhere, only records you are allowed to read appear, and trashed records are excluded.

REST API

Full-text search is exposed as a GET endpoint:

GET /api/latest/fulltext-search?q=<query>
Query parameterDescription
qThe free-text query. Words are AND-combined; the last word is prefix-matched.
typesOptional comma-separated list of record types to restrict to, e.g. FLOW,CUSTOM_OBJECT. Empty = all indexed types.
limitMaximum number of results (default 50, hard cap 200).

The response is a ranked, permission-filtered list:

{
"query": "customer onboarding",
"results": [
{ "id": "…", "record_type": "FLOW", "name": "customer-onboarding" },
{ "id": "…", "record_type": "CUSTOM_OBJECT", "name": "acme-corp" }
]
}

Each result carries just enough to identify and open the record (id, record_type, name); fetch the full record with the REST API or the MCP get_record tool.

MCP tool for agents

LLM agents can use the same search through the built-in search_records MCP tool:

search_records(q="customer onboarding", types=["FLOW", "CUSTOM_OBJECT"], limit=50)

It shares the exact code path (and RBAC filtering) of the REST endpoint and is the token-efficient way for an agent to locate a record by any word in it when it does not know the record's type or exact name.

Full-Text SearchAdvanced Search
Best for"Find anything containing these words""Find records matching precise criteria"
QueryFree text, ranked by relevanceStructured AND/OR filters on specific fields
ScopeAll indexed record types at onceOne record type family per query
Custom-object attributesIndexed when marked searchableFilterable by exact attribute value

Reach for full-text search when you know what a record says but not its type or name; reach for advanced search when you know exactly which field must equal what.

Learn More

Advanced Search
Object Templates & Custom Objects
MCP server for LLM agents