Free Intro Class
    Botspot Logo

    agenthub · transform.lookup

    Find Row

    Find the first row in a list whose field matches a value, and keep the whole row. This is the membership question and the answer to who they are, in one node.

    category Transformin data · valueout outputexecution asyncmodel cost none

    Why the node earns its place

    The counterpart to Extract List. Extract discards the rows down to one field — good for a yes-or-no contains test. Find Row keeps the row, which is what you want the moment you need anything about the match: their name, their status, their renewal date.

    It emits both at once: found is the membership answer to wire into a Condition, and record carries the fields forward. One node does what Extract plus a second branch used to.

    How it works at run time

    1. 1
      Walk rows_path into the wired data to find the list.
    2. 2
      Resolve the value to match: the wired value input, else value_context_key from run context or the saved-variable bag.
    3. 3
      Compare match_field on each row under match_normalize, and keep the first row that matches.
    4. 4
      Reshape the row through project when set; otherwise keep it whole.

    What comes out

    output.found   true / false — your membership answer
    output.record  the matched row, or {} when nothing matched

    What you wire

    Inputs

    • data *
      object
    • value
      any

    Outputs

    • output
      object

    Configuration

    KeyTypeDefault & optionsWhat it does
    rows_path *stringDotted path (into the wired `data`) to the list of rows, e.g. 'result.body.results' for a Notion query response. After a Test Run you can pick this from the observed shape.
    match_field *stringPath INSIDE each row to compare against the value, e.g. 'properties.Phone.phone_number'. The row is kept only if this matches.
    match_normalizestringdefault "exact" exact · lower · phone10How to compare. phone10 = last 10 digits (so a raw +91… caller phone matches a differently-formatted roster cell).
    value_context_keystringIf the `value` input isn't wired, read the value to match from this run-context / saved-variable key (e.g. 'phone').
    projectobjectOptional { output_field: path-in-row } map to reshape `record` down to just the fields you want. Empty = keep the whole matched row.

    What usually goes wrong

    Watch for this

    Use phone10 for phone numbers. An API-side equality check is not enough for rosters, where the same number is stored with a country code in one place, spaces in another and a leading zero in a third. Comparing the last ten digits collapses all of it.

    Behaviour & provenance

    buildersChat & voice agents, Image workflows, Video workflows, Automations
    routesno
    side effectsnone — computes only
    replay safetynot applicable
    talks tonothing outside the run
    holdsno credentials