> ## Documentation Index
> Fetch the complete documentation index at: https://learn.workflow.dog/llms.txt
> Use this file to discover all available pages before exploring further.

# Find Table Row(s) by Column

> Find Google Sheets table rows using one or more typed column filters.

The **Find Table Row(s) by Column** action filters a header-based table and
returns either the first match or every matching row. Multiple filters use AND
logic: a row must satisfy all of them.

## Inputs

| Input                       | Type            | Required | Description                                                    |
| --------------------------- | --------------- | -------- | -------------------------------------------------------------- |
| **Third-party account**     | Google account  | Yes      | Account with read access.                                      |
| **Spreadsheet ID or URL**   | String          | Yes      | Spreadsheet containing the table.                              |
| **Sheet Name**              | String          | Yes      | Sheet tab to search.                                           |
| **Filters**                 | List of filters | Yes      | One or more column comparisons.                                |
| **Find Multiple Rows?**     | Boolean         | No       | Return every match instead of only the first. Default `false`. |
| **Header Row Number**       | Number          | No       | One-based header position. Defaults to `1`.                    |
| **Return Formatted Values** | Boolean         | No       | Format returned row values. Comparisons always use raw values. |

Each filter has a **Column Name**, **Match Mode**, and—when required—a **Search
Value**. Column names resolve to the closest header ignoring capitalization,
within a small spelling distance.

### Match modes

| Mode                           | Behavior                                                 |
| ------------------------------ | -------------------------------------------------------- |
| **Exact Value**                | Loosely compares strings, numbers, or booleans.          |
| **Empty** / **Not Empty**      | Checks for `null`, missing, or empty-string values.      |
| **Contains Text**              | Case-insensitive substring match.                        |
| **Matches Regex**              | Tests the string representation with the supplied regex. |
| **Greater/Less Than** variants | Compare raw numeric cells only.                          |
| **Is True** / **Is False**     | Match actual boolean values.                             |
| **Is Truthy** / **Is Falsy**   | Test the raw value's truthiness.                         |

## Outputs

**Found** is always available. Other outputs depend on **Find Multiple Rows?**:

<Tabs>
  <Tab title="First match">
    \| Output | Type | Description | | -------------- | ------ |
    \-------------------------------------------- | | **Found** | Boolean|
    Whether a match exists. | | **Row Data** | Object | First matching row, or
    empty when not found. | | **Row Number** | Number | One-based sheet row, or
    empty when not found. |
  </Tab>

  <Tab title="Multiple matches">
    \| Output | Type | Description | | --------------- | --------------- |
    \------------------------------------- | | **Found** | Boolean | Whether any
    match exists. | | **Rows** | List of objects | All matching rows. | | **Row
    Numbers** | List of numbers | Corresponding one-based row numbers. |
  </Tab>
</Tabs>

<Warning>
  Switching **Find Multiple Rows?** changes the node's output shape. Recheck
  downstream connections after toggling it.
</Warning>

## Example: find unpaid large invoices

Add two filters:

* **Status** → **Exact Value** → `Unpaid`
* **Amount** → **Greater Than** → `1000`

Then pass **Row Numbers** to **Update Table Row(s)** or **Delete Row(s)**.

## Troubleshooting

<AccordionGroup>
  <Accordion title="No column found matching a name">
    Verify **Header Row Number** and inspect the header cells. The action allows
    small spelling differences but cannot infer unrelated names.
  </Accordion>

  <Accordion title="A number comparison finds nothing">
    Numeric modes only match raw numeric cells. A number stored as text does not
    qualify, even if its displayed characters look numeric.
  </Accordion>
</AccordionGroup>
