Drop a CSV, get mapped and validated rows on a Sheet — the App uploads, the Sheet holds the mapping and the data, the Agent does the work.A drop zone for CSV files that lands them in the App’s imports/inbox folder, an Agent that maps and validates each file into one Sheet, and two views over that Sheet: Imports (one receipt row per file — mapping matched, rows imported, status) and Data (the imported rows with their validation status). Column mapping lives on the Sheet’s own Mapping tab, so a finance user changes it without touching the App. Installing the blueprint installs the App, the Sheet with its three worksheets, and the CSV Sheet Importer agent with its two triggers. Business area: Build on NetSuite · Type: App Built for: AP clerk, Finance operations, Data steward
Data and resources
- CSV drop zone — saves into imports/inbox (Tool action): The drop zone calls this write binding once per dropped file. It is er_file_create with the team and the App’s own imports/inbox folder pinned; the page may only supply fileName, content and contentType. Every file it creates passes through the Team File create path, which is what starts the importer agent’s file.created trigger.
- CSV Imports sheet (Sheet): The one Sheet the App and the agent share. Imports is the first tab (one row per dropped file), Data holds the imported rows plus Status and Note, and Mapping tells the agent which file-name patterns map which source headers onto which Data columns. The default creates it with the demo mapping for vendor-bills-*.csv; choose an existing Sheet only if it already has these three worksheets.
- Data worksheet reader (Tool action): Read binding on er_sheet_read, pinned to rows mode on the Data worksheet. A sheet datasource reads exactly one worksheet, so the Data tab is read through this binding with the sheetId the Imports read reports in its diagnostics — the same Sheet, under the viewer’s own permission.
- View preferences (App state): Which tab is open and the Data status filter, per viewer.
Included Agents
- CSV Importer — triggers:
file.created,sheet.updated.