# Firestore: “Transaction too big” (over the 10 MiB request limit)

> Firestore rejects a batch or transaction over the 10 MiB request size, index entries included. Split it into smaller batches or use BulkWriter in the Admin SDK.

Canonical: https://app369.com/fix/firestore-transaction-too-big/
Last updated: 2026-11-09

“Transaction too big” is the Firestore error for a batch or transaction larger than the 10 MiB request size limit. The size includes the documents and their index entries, so a few hundred large documents can pass it. Split the writes into smaller batches.

**Short answer**

Commit in chunks, for example 100 to 200 documents per batch, and lower that if the documents are large. For big imports and migrations in the Admin SDK, use BulkWriter, which sends many writes in parallel without one giant request. Large fields you never query can also be left out of indexing to shrink each write.

Rather not fix it yourself? [**App Fix Ticket**](https://app369.com/fixed-price/flutter-firebase-bug-fix/) starts with a fixed-price diagnosis, then a fixed price for the fix before any fix work.

## **Why the write is too big, and the fix**

1. 01 ### **The batch is over 10 MiB**
  > “The transaction exceeded the maximum request size of 10 MiB.” [**Firebase, Transactions and batched writes**](https://firebase.google.com/docs/firestore/manage-data/transactions) One commit carries every write in the batch or transaction. Many documents, or a few large ones, push it over the limit.
2. 02 ### **Index entries count too**
  > “Transaction size depends on the sizes of documents and index entries modified by the transaction.” [**Firebase, Transactions and batched writes**](https://firebase.google.com/docs/firestore/manage-data/transactions) Every indexed field adds index entries to the write. Arrays and maps with many values add many entries. Exempt large fields you never query from indexing.
3. 03 ### **Split the writes into chunks** Commit a batch, start a new one, and repeat. Batches commit one at a time, so write the job to be safe to run again if it stops halfway. This works for batched writes. A transaction can’t be split this way, so make it touch fewer documents.```
// Web SDK
const CHUNK = 200;
for (let i = 0; i < items.length; i += CHUNK) {
  const batch = writeBatch(db);
  for (const item of items.slice(i, i + CHUNK)) {
    batch.set(doc(db, 'products', item.id), item);
  }
  await batch.commit();
}
```
4. 04 ### **Use BulkWriter on the server**
  > “A Firestore BulkWriter that can be used to perform a large number of writes in parallel.” [**Google Cloud Node.js client, BulkWriter**](https://googleapis.dev/nodejs/firestore/latest/BulkWriter.html) For imports, backfills and deletes in the Admin SDK, BulkWriter handles the batching and retries for you.```
import { getFirestore } from 'firebase-admin/firestore';

const db = getFirestore();
const writer = db.bulkWriter();
writer.onWriteError((err) => err.failedAttempts < 3); // retry up to 3 times
for (const item of items) {
  writer.set(db.collection('products').doc(item.id), item).catch((err) => console.error(item.id, err));
}
await writer.close();
```
5. 05 ### **The 500-write rule is out of date**
  > “Maximum API request size 10 MiB” [**Firebase, Quotas and limits**](https://firebase.google.com/docs/firestore/quotas) Older answers say a batch can hold 500 writes. Firebase’s current limits page lists no such count, only a request size, so a batch of small documents can hold more and a batch of large ones less.

Checked against the vendor’s docs on November 9, 2026: [Firebase docs: Transactions and batched writes](https://firebase.google.com/docs/firestore/manage-data/transactions); [Firebase docs: Quotas and limits](https://firebase.google.com/docs/firestore/quotas); [Google Cloud: Firestore Node.js BulkWriter](https://googleapis.dev/nodejs/firestore/latest/BulkWriter.html).

## **Rather hand it over?**

Fixed scope, fixed price, paid upfront. The work happens in writing; no call needed.

- [from $450**App Fix Ticket**One reproducible bug in an existing mobile or web app, diagnosed and fixed.**See scope and start**](https://app369.com/fixed-price/flutter-firebase-bug-fix/)
- [from $450**AI-Built App Rescue**A Lovable, Bolt or Cursor app checked end to end in 3 days, then its worst problems fixed at a fixed price.****No issues worth fixing, no charge.**** If the Launch Check finds nothing rated medium or higher, Simon refunds the full $450. You keep the report either way. This applies to the first 10 Launch Checks bought after October 30, 2026.**See scope and start**](https://app369.com/fixed-price/ai-app-rescue/)

[**All 127 Fiverr reviews**](https://app369.com/reviews/)

Related: [**Firestore ALREADY_EXISTS**](https://app369.com/fix/firestore-already-exists-document/) · [**Firestore quota exceeded**](https://app369.com/fix/firestore-quota-exceeded/) · [**Firestore deadline exceeded**](https://app369.com/fix/firestore-deadline-exceeded/) · [**Firestore invalid document reference**](https://app369.com/fix/firestore-invalid-document-reference/) · [**Firestore document too large**](https://app369.com/fix/firestore-document-too-large/)

Questions

## **More on this error**

<details>

<summary>**Does splitting break atomic writes? **+</summary>

Yes. Each batch is all or nothing, but separate batches aren’t. If the whole set must succeed together, shrink the documents or rethink the write, not just the chunk size.

</details>

<details>

<summary>**Is there a limit per document too? **+</summary>

Yes. A single document can be at most 1 MiB, so a too-big write can also mean one document is too large.

</details>

<details>

<summary>**Can you fix it for me? **+</summary>

If one bug is the whole problem, the App Fix Ticket covers it: a written diagnosis first, then the fix. If the app has more going on, the Launch Check is a written check of the whole app. Each issue found is rated critical, high, medium or low, with where it is and how it was confirmed. No issues worth fixing, no charge. If the Launch Check finds nothing rated medium or higher, Simon refunds the full $450. You keep the report either way. This applies to the first 10 Launch Checks bought after October 30, 2026.

</details>

A different error?

## **Describe it and get a written quote**

Send the error and what you were doing. You get a written scope, a fixed price and a timeline; Simon replies by email, usually within one business day.

[**Describe your problem **→](https://app369.com/contact/) [**All fixes**](https://app369.com/fix/)