# NetSuite CSV Import Limit Calculator: File Splits and Run Time

> Source: https://netray.co/tools/netsuite-csv-import-file-split-calculator
> Publisher: Netray (netray.co), AI and integration engineering for ERP and manufacturing systems.
> Section: Free Tools

## Short answer

Enter record counts, lines per record and row size to get records per file, number of import jobs and run hours under the Import Assistant limits.

## Category

netsuite

## Erp

NetSuite

## Audience

- NetSuite administrator
- Data migration consultant
- Implementation consultant

## Tool

**Kind:** calculator

**Inputs:**

#### Records to import

**Key:** total_records

**Type:** number

**Default:** 120000

**Min:** 1

**Step:** 1000

**Unit:** records

#### CSV rows per record

**Key:** rows_per_record

**Type:** number

**Default:** 1

**Min:** 1

**Step:** 1

**Unit:** rows

**Help:** 1 for items, customers and vendors; average line count for journals or sales orders imported one row per line.

#### Average row size

**Key:** avg_row_bytes

**Type:** number

**Default:** 350

**Min:** 20

**Step:** 10

**Unit:** bytes

**Help:** File size divided by row count from a sample file.

#### Share of the limit to use per job

**Key:** safety_pct

**Type:** slider

**Default:** 80

**Min:** 50

**Max:** 100

**Step:** 5

**Unit:** %

#### Measured seconds per record

**Key:** seconds_per_record

**Type:** number

**Default:** 0.6

**Min:** 0.01

**Step:** 0.05

**Unit:** s

**Help:** Time a test job of a few hundred records and divide by the record count.

#### Threads (Use Multi-Threading)

**Key:** threads

**Type:** select

**Default:** 1

**Options:**

##### 1 (default, no SuiteCloud Plus)

**Value:** 1

##### 2

**Value:** 2

##### 4

**Value:** 4

##### 8

**Value:** 8

**Outputs:**

#### Total CSV rows

**Key:** total_rows

**Expr:** total_records * rows_per_record

**Format:** integer

#### Record cap per job at your safety share

**Key:** max_records_per_job

**Expr:** floor(25000 * safety_pct / 100)

**Format:** integer

#### Rows that fit in the size cap

**Key:** max_rows_by_size

**Expr:** floor(50 * 1024 * 1024 * safety_pct / 100 / avg_row_bytes)

**Format:** integer

#### Records per job (file)

**Key:** records_per_job

**Expr:** max(1, min(max_records_per_job, floor(max_rows_by_size / rows_per_record)))

**Format:** integer

**Description:** The smaller of the record cap and the size cap converted to records.

#### Import jobs needed

**Key:** jobs

**Expr:** ceil(total_records / records_per_job)

**Format:** integer

**Primary:** true

#### Jobs if each CSV row counted as a record

**Key:** jobs_if_rows_count

**Expr:** ceil(total_rows / min(max_records_per_job, max_rows_by_size))

**Format:** integer

**Description:** Conservative plan for multi-line transactions until you confirm how your import counts.

#### Estimated processing time

**Key:** hours

**Expr:** total_records * seconds_per_record / threads / 3600

**Format:** hours

**Primary:** true

**Description:** Assumes threads scale linearly, which is optimistic.

**Chart:**

#### Jobs and hours as record count grows

**Type:** line

**X:** total_records

**From:** 10000

**To:** 500000

**Steps:** 25

**Series:**

- jobs
- hours

**Disclaimer:** Planning estimate. The 25,000 record / 50 MB per job limit is from Oracle help (General CSV File Conventions). Throughput varies with scripts, workflows, sourcing and account load; measure with a test job.

## Content

**Intro:** This calculator splits a NetSuite CSV import into jobs that stay under the Import Assistant limit of 25,000 records or 50 MB per job, and estimates processing time from a rate you measure. It handles multi-line transactions such as journal entries, where one record spans several CSV rows.

**Sections:**

#### How to use it

**Body:** Enter the number of records, the average CSV rows per record and the average row size from a sample file (file bytes divided by rows). Set the safety share: 80% leaves room for row-size variation and avoids a job failing on the last few rows. Then run a test import of a few hundred records with the same mapping and options, divide elapsed time by records, and enter that as seconds per record. The result gives records per file, the number of jobs and an estimate of hours, which is what you need to plan a cutover weekend. Split files on record boundaries: all lines of one journal must stay in the same file and share the same External ID.

**Bullets:**

- Use one saved import map for every file so each job behaves the same.
- Name files with a sequence number and log job ids from Setup, Import/Export, View CSV Import Status.

#### The limit and how the calculator applies it

**Body:** Oracle help states that the Import Assistant has a limit of 25,000 records or 50 MB per import job, and that for a multiple file upload all files combined must be under those limits. The calculator computes the record cap (25,000 times the safety share), converts the 50 MB cap into rows using your row size, divides by rows per record, and takes the smaller. Oracle's wording counts records, but it does not spell out how lines of a multi-line transaction count, so the conservative output treats every row as a record. Plan on that figure for journals until a full-size test file confirms the larger one in your account.

**Bullets:**

- records_per_job = min(floor(25000 x share), floor(50 MB x share / row bytes / rows per record))
- jobs = ceil(records / records_per_job); hours = records x seconds per record / threads / 3600

#### Multi-threading, queues and speed

**Body:** Under Advanced Options on the Import Options step there is a Use Multi-Threading checkbox, available only in accounts with a SuiteCloud Plus licence, and a queue selector. The number of queues and threads available depends on your service tier and SuiteCloud Plus licences, so check your own account before choosing 4 or 8. Multi-threading submits rows out of order, which breaks imports that depend on sequence, so most consultants keep transactions with lines single-threaded and use threads for items, entities and custom records. Turning off Run Server SuiteScript and Trigger Workflows during migration loads is often a larger speed gain than threads, if your process allows it.

#### Worked example

**Body:** 120,000 journal lines grouped into 30,000 journals of 4 lines, 350 bytes per row, 80% share. Record cap 20,000; the size cap fits 119,837 rows, or 29,959 journals, so 20,000 journals per job and 2 jobs. If every row counted as a record, the plan would be 120,000 rows over 20,000 per job, or 6 jobs. At 0.6 seconds per journal on one thread the load takes about 5 hours.

**Cta:** If your team wants to ask NetSuite about import results, failed rows and record counts in plain English instead of reading status pages, we can add that layer on your own infrastructure.

**Faq:**

#### What is the NetSuite CSV import limit?

**Answer:** Oracle help states the Import Assistant limit is 25,000 records or 50 MB per import job, and for multiple-file imports all files together must stay under those limits. Oracle recommends breaking large imports into smaller chunks for performance, so many admins plan files of 10,000 to 20,000 records.

#### How do I import journal entries by CSV in NetSuite?

**Answer:** Use Setup, Import/Export, Import CSV Records, type Transactions, record Journal Entry. Put one row per line and give all lines of one journal the same External ID so they group into one entry, with debits and credits balancing per group. Keep each journal's lines in the same file when splitting.

#### Does multi-threading speed up NetSuite CSV imports?

**Answer:** It can for records that do not depend on order, such as items, customers and custom records. It requires SuiteCloud Plus and processes rows out of sequence, so many consultants avoid it for multi-line transactions. Thread counts depend on your licences; the calculator assumes linear scaling, which real jobs rarely reach.

#### Why is my NetSuite CSV import so slow?

**Answer:** User event scripts, workflows, sourcing and duplicate detection run for every record. Large records with many lines and account-wide load also add time. Test with Run Server SuiteScript and Trigger Workflows off if your process allows it, measure seconds per record, then size files and the schedule from that measurement.

## Search terms

netsuite csv import limit, netsuite csv import, csv import in netsuite, import data into netsuite, netsuite journal entry csv import, netsuite import 25000 records, netsuite csv import multi-threading

---
Talk to an engineer: https://netray.co/contact?intent=erp_ai | Machine catalog: https://netray.co/agent/catalog.json
