By default, Bulk API processes batches in parallel — Salesforce runs multiple batches at the same time on its server-side queue. That’s why Bulk API is fast.
Serial mode is the opt-in to disable that parallelism. Batches run one at a time, in order. Slower, but predictable.
How to enable it
- Open Data Loader.
- Settings → Settings.
- Tick Use Bulk API.
- Tick Enable serial mode for Bulk API.
- Save.
The two checkboxes are independent — serial mode only takes effect when Bulk API is on.
Why parallel can hurt
Parallel batches step on each other when:
- They update the same parent record (rollup-summary or master-detail child loads). Each batch acquires a row lock on the parent; two batches racing for the same Account get
UNABLE_TO_LOCK_ROW. - Triggers update related records. A
before inserton Contact that updates its Account’sLast_Contact_Date__cwill collide if two Contact batches share Accounts. - Heavy flow / process automation writes to lookup records.
- Custom approval/lock logic writes to a shared row.
The symptoms are seemingly-random row failures in error.csv with UNABLE_TO_LOCK_ROW or Record currently unavailable. Re-running the failed rows often works because the contention is gone.
When serial mode is the right pick
- You see lock-row errors in a Bulk API job. Switch on serial mode and they go away.
- Master-detail children where many rows roll up to the same parent.
- Recursive triggers that update related objects.
- Heavy validation that reads related records for cross-record checks.
- Approval process / process builder / flow that holds locks during the batch.
- You need ordered processing — e.g. timestamped events that must be ingested in CSV order.
The cost
A 1-million-record load that takes 20 minutes in parallel mode can take hours in serial. You’re trading throughput for safety. Run a serial-mode job when you must, and only when you must.
Alternatives before resorting to serial mode
- Sort the CSV so rows targeting the same parent are clustered into the same batch. Within a batch, the API handles updates safely; between batches is where the contention happens.
- Reduce trigger / flow scope. Skip rollups during the load via a custom permission bypass, then re-calc post-load.
- Decrease batch size while staying parallel — sometimes 5 parallel batches of 1,000 work where 5 parallel batches of 10,000 fail.
- Defer rollups. Calculate them with a one-time batch Apex run after the load.
Watch out
- Serial mode only affects the Bulk API. Using SOAP API? Each batch was always synchronous; the toggle does nothing.
- Serial mode doesn’t change the per-batch governor limits. Each batch still has to fit inside 10,000 DML rows, 100 SOQL, etc.
- The Bulk API job’s batch order in serial mode is not guaranteed to match the file’s row order. If you need strict ordering, split the file into batch-size-aligned chunks.
In an interview
Two sentences will do: “Serial mode forces Bulk API batches to run one at a time instead of in parallel. Turn it on when you hit UNABLE_TO_LOCK_ROW errors — usually because batches are updating related records or sharing parents in master-detail.”
Verified against: Data Loader Guide — Bulk API Serial Mode, Bulk API Developer Guide — Serial Mode, Metadata API Developer Guide. Last reviewed 2026-05-17 for Spring ‘26 release.