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

> ## Agent Instructions
> Automate.ax automations are TypeScript programs.
> Use Bun for installation and command examples.
> Use Automate.ax for the product name and automate.ax for the package, CLI, and domain.
> Treat documented public APIs as current; do not invent transitional or deprecated names.

# List rows

> List consecutive header-keyed rows from a Google sheet or native table.

`listRows` maps positional cells to records using exact source headers. Use it
when downstream code should address columns by name.

## Example

```ts theme={null}
import { automation, onHttpRequest } from "automate.ax"
import { listRows } from "automate.ax/google-sheets"

export default automation("List recent orders", () => {
  onHttpRequest({ scope: "automation" })

  listRows({
    spreadsheet: "spreadsheet-id",
    source: { sheet: "Orders", headerRow: 1 },
    from: "end",
    limit: 25,
  })
})
```

## Inputs

`spreadsheet` and `source` are required. A source is `{ sheet: string | number;
headerRow?: number }` or `{ table: string }`; sheet headers default to row 1,
while table metadata supplies native headers and body bounds. `from` defaults
to `start`, `limit` defaults to `100` (maximum 10,000), and `offset` defaults to 0. `valueRender` is `unformatted` (default), `formatted`, or `formula`.
`account` selects the Google account.

## Output

```ts theme={null}
interface SheetRow {
  rowNumber: number
  range: string
  values: Record<string, string | number | boolean | null>
}
```

`rowNumber` is one-based and `range` covers the source columns. Headers must be
non-empty and unique after trimming. Keys match headers exactly; missing and
trailing cells become `null`.
