Bank Statement CSV → NetSuite Import Normalizer avatar

Bank Statement CSV → NetSuite Import Normalizer

Pricing

from $2.00 / 1,000 transaction row normalizeds

Go to Apify Store
Bank Statement CSV → NetSuite Import Normalizer

Bank Statement CSV → NetSuite Import Normalizer

Turn any bank's CSV export into a clean NetSuite-ready import file: auto-detects columns, dates, debit/credit, flags duplicates, and outputs bank-statement or journal-entry layouts with totals.

Pricing

from $2.00 / 1,000 transaction row normalizeds

Rating

0.0

(0)

Developer

Omar Arida

Omar Arida

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

9 days ago

Last modified

Categories

Security

Limited permissions

Share

Every bank exports a different CSV: different column names, semicolons instead of commas, 1.234,56 instead of 1,234.56, debit/credit in two columns or one signed column, dates in three orders. This Actor takes any bank statement CSV and returns a clean, consistent file ready for NetSuite import – plus totals and data-quality flags so month-end reconciliation starts from trustworthy numbers.

Built by a NetSuite-certified consultant who has reconciled too many statements by hand.

What it does

  1. Detects the structure – delimiter, header row (skips bank metadata lines), and which columns hold date, description, payee, reference, debit, credit, amount, balance. Works with English, German, Spanish, French and Arabic headers.
  2. Normalizes values – parses (1,234.56), 1.234,56, 1 234,56 DR, currency symbols; converts dates from any common order to the format your NetSuite user expects.
  3. Flags issues – unparseable dates, missing amounts, empty descriptions, possible duplicate rows.
  4. Outputs NetSuite layouts:
    • Bank statement import – Date, Amount, Transaction Type, Transaction ID, Payee, Memo, Account Number, Currency
    • Journal entry import – balanced two-line journals (bank account vs. suspense/offset account) with an External ID per transaction for easy reversal
    • Generic cleaned CSV – all columns plus an Issues column
  5. Summarizes – money in, money out, net, date range, rows with issues.

Who uses it

  • NetSuite admins and accountants doing bank reconciliation or importing historical statements
  • Implementation consultants migrating opening transactions
  • Bookkeepers serving multiple clients with different banks
  • AI agents (via Apify MCP) that need structured bank data from a CSV

Input

{
"csvText": "Date;Description;Amount;Balance\n01.10.2026;Gehalt ACME GmbH;5.000,00;12.000,00\n03.10.2026;Kartenzahlung AMAZON;-129,99;11.870,01",
"outputLayout": "bank_statement",
"dateOutputFormat": "MM/DD/YYYY",
"currency": "EUR",
"accountNumber": "DE89370400440532013000"
}
FieldDescriptionDefault
csvTextPasted CSV text–
csvUrlURL of the CSV (used if csvText empty)–
outputLayoutbank_statement, journal, genericbank_statement
dateOutputFormatMM/DD/YYYY, DD/MM/YYYY, YYYY-MM-DDMM/DD/YYYY
dateInputFormatauto, DMY, MDY, YMDauto
delimiterauto, ,, ;, tab, |auto
currency, accountNumberStamped on every row–
bankAccountGl, suspenseAccountAccounts for journal layoutBank, Suspense
columnMapOverride detection, e.g. {"date":"Booking Date"}–

Output

Dataset row:

{
"rowNumber": 2,
"date": "2026-10-03",
"dateFormatted": "10/03/2026",
"description": "Kartenzahlung AMAZON",
"payee": null,
"reference": null,
"amount": -129.99,
"debit": 129.99,
"credit": null,
"balance": 11870.01,
"currency": "EUR",
"accountNumber": "DE89370400440532013000",
"transactionType": "WITHDRAWAL",
"hash": "3f9a1c2e",
"issues": []
}

Files in the run's key-value store: netsuite_import.csv (the import file) and SUMMARY (totals and detected columns).

Importing into NetSuite

  • Bank statement layout → Transactions > Bank > Banking Import History > Import Online Banking Data (CSV format), or map in Setup > Import/Export > Import CSV Records.
  • Journal layout → Import CSV Records > Transactions > Journal Entry. Each transaction has an External ID (BANK-<date>-<hash>), so re-imports update rather than duplicate.

Pricing

Pay per event: a small amount per transaction row processed. Set a max cost per run in the Apify Console.

Use from code or AI agents

curl "https://api.apify.com/v2/acts/omararida~bank-statement-to-netsuite/run-sync-get-dataset-items?token=<APIFY_TOKEN>" \
-X POST -H 'Content-Type: application/json' \
-d '{"csvText":"Date,Description,Amount\n2026-10-01,Opening,100.00","outputLayout":"generic"}'

Works through the Apify MCP server.

Privacy

Statements are processed in your own Apify run and stored only in your run's storage, which you control and can delete.

Support

Bank format not detected? Open an issue on the Issues tab with the header row (no amounts needed) and it will be added.