Free Intro Class
    Botspot Logo

    agenthub · sheet.read

    Spreadsheet Rows

    Read an uploaded spreadsheet as rows — one record per line, keyed by column heading, ready for Filter and Fan out.

    category Datain out ok · data · errorexecution asyncmodel cost none

    Why the node earns its place

    The Documents tab already parses spreadsheets into a grid; what was missing was a way for a workflow to use one. This emits the same envelope as the other data sources, so the read, filter and fan-out chain works with nothing in between.

    How it works at run time

    1. 1
      Open the chosen document, on sheet_name or the first tab.
    2. 2
      Treat header_row as the headings — exported reports often carry a title block first, so this is not always row one.
    3. 3
      Emit up to limit rows, keyed by heading.
    4. 4
      Complete any phone_columns to full international format using the default country code. The spreadsheet itself is untouched.

    What you wire

    Inputs

    Nothing to wire in.

    Outputs

    • ok
      boolean
    • data
      object
    • error
      object

    Configuration

    KeyTypeDefault & optionsWhat it does
    document_id *stringchoices from distribution:spreadsheetsThe spreadsheet to use, from the files uploaded in the Documents tab. Only .xlsx/.xlsm/.xls/.csv documents appear here.
    sheet_namestringWhich tab inside the workbook. Leave blank to use the first one. Matched case-insensitively.
    header_rownumberdefault 1Which row holds the column headings, counting from 1 as shown in Excel. Leave at 1 for a plain sheet. Exported reports often have a title block first — set this to the row where the real headings start.
    limitnumberdefault 1000Maximum rows to read. Older rows are not skipped — this is a cap, not a page.
    phone_columnsarrayColumns holding phone numbers, e.g. 'mobile'. Their values are completed to full international format using the country code below. The spreadsheet itself is left untouched.
    default_country_codestringCountry code for numbers that don't already carry one, e.g. '+91'. Numbers that already start with '+' are left as they are. Needed only when `phone_columns` is set.

    What usually goes wrong

    Watch for this

    Headings become lowercase underscored keys, so Phone Number is phone_number. A filter that matches nothing is usually a heading spelled the human way.

    Behaviour & provenance

    buildersChat & voice agents, Image workflows, Video workflows, Automations
    routesno
    side effectsnone — computes only
    replay safetynot applicable
    talks todocuments & data sources
    holdsworkspace runtime token, the caller's own identity