Skip to content

Table — find a row ​

Finds a row by its key. Two outputs: found, and not found.

Looks up one row of a Table by its key and routes the workflow: found or not_found. Use it for lookup tables ("this county → this consultant") and for memory between runs ("has this case already been chased?"). To read several rows at once, use Table — list rows.

The node never says which columns to match on: the table does. The columns ticked Part of the matching key in the table form the key, and the node only gives their values.

At a glance ​

  • Type: table.find · version 1
  • Category: Data
  • Kind: Step — one stage of a run
  • Effect: No external effect (none) — nothing is written outside Mankomail; safe to replay
  • Needs a carrier email: No
  • Connection: None
  • Inputs: main
  • Outputs: found, not_found

Parameters ​

table ​

Table — Picked from the list, or by its short identifier (its “slug”), which may come from a template.

  • Type: Remote resource (resourceLocator)
  • Required: Yes
  • Ways to choose: pick from a list, type an ID (table)

key ​

Row key — The values of the columns marked as “key” in the table. The table decides what rows are matched on — not this node.

  • Type: List of items (collection)
  • Required: Yes
  • Default: []
  • At most 8 items
  • Each item has:
    • column — Key column
      • Type: Text (string)
      • Required: Yes
      • Default: "" (empty)
      • 60 characters at most
      • Expressions: {{ }} not accepted
    • value — Value to match
      • Type: Text (string)
      • Required: No
      • Default: "" (empty)
      • 10000 characters at most

Outputs ​

  • found — Taken when a row carries the key.
  • not_found — Taken when no row carries the key.

Data produced ​

What this node adds to the run data, and how to read it in an expression. <step> stands for the step key: the node name turned into an identifier (see Data and expressions).

  • {{ data.<step>.found }} — boolean. true when a row was found — the same fact as the port taken, for conditions further down the graph.
  • {{ data.<step>.row.<column> }} — object. Found only: the row's cells, by column machine key ({{ data.<step>.row.consultant }}). An empty cell is absent and reads as empty.
  • {{ data.<step>.rowId }} — string. Found only: the row's identifier.
  • {{ data.<step>.updatedAt }} — string. Found only: when the row was last changed (ISO 8601).
  • {{ data.<step>.summary }} — string. A one-line summary: Row found. or No row carries this key.

Example ​

A table "Counties → consultants" (identifier counties-consultants) has a key column county and a column consultant. An earlier Extract step named "Read request" pulled the county from the email. The node is named "Find consultant".

text
table   counties-consultants
key     county = {{ data.read_request.county }}

On the found port, a Send or Compose node can use {{ data.find_consultant.row.consultant }} as the recipient. On the not_found port, a Notify node can warn the team that the county is missing from the table.

Tips ​

  • Columns are named by their machine key, not their heading: the identifier shown as Machine key in the column settings (a heading "County (1-95)" gives county_1_95). The same key is used in {{ data.<step>.row.<column> }}.
  • Matching ignores case, accents and punctuation: "Saint-Étienne" and "SAINT ETIENNE" are the same key. With several key columns, give a value for each; a missing part fails the step with table.invalid_value.
  • Tables refusing duplicate keys. Lookup by key relies on the table option Refuse two rows with the same key. Keep it ticked on a table you search by key.
  • Errors. No table selected or an empty key: node_invalid_param. Unknown table: table.not_found. A table with no key column: table.no_key — tick Part of the matching key on a column. These failures are final and are not retried.
  • Test runs. Reading is real, even in a test: the node looks up the actual table. See Test runs.