> Documentation index: https://docs.beetl.io/llms.txt

# Limits

> The limits to plan around, in one place.

Source: https://docs.beetl.io/reference/limits/
Last updated: 2026-11-10

Beetl's limits are listed here by area. The ones people reach most often are 5 GiB per file in a File Set, 20 MiB per document in a file processor, 30 minutes of run time for a query, and 1,000 stored rows per query result. Each row links to the page that explains
the limit and how to work within it. Sizes in MiB and GiB are binary: 1 MiB is 1,048,576 bytes.

## Files and webhooks

| Limit                    | Value                           | Details                         |
| ------------------------ | ------------------------------- | ------------------------------- |
| File in a File Set       | 5 GiB. Empty files are refused. | [File Sets](https://docs.beetl.io/sources/file-sets) |
| Webhook request body     | 1,000,000 bytes of valid JSON   | [Webhook](https://docs.beetl.io/sources/webhook)     |
| Rows per webhook request | 1, whatever the body holds      | [Webhook](https://docs.beetl.io/sources/webhook)     |

## Documents

| Limit                           | Value  | Details                                                            |
| ------------------------------- | ------ | ------------------------------------------------------------------ |
| Each document                   | 20 MiB | [Documents and spreadsheets](https://docs.beetl.io/sources/documents)                   |
| Pages in a PDF                  | 30     | [Documents and spreadsheets](https://docs.beetl.io/sources/documents)                   |
| Fields in a Documents processor | 100    | [Documents and spreadsheets](https://docs.beetl.io/sources/documents#define-the-fields) |

A document over either limit fails on its own, and its record shows the reason. The other documents
in the set are processed as usual.

## Syncs and integrations

| Limit                      | Value                           | Details                                                                           |
| -------------------------- | ------------------------------- | --------------------------------------------------------------------------------- |
| Time per sync attempt      | 15 minutes                      | [Connection types, connections and syncs](https://docs.beetl.io/concepts/connections-and-integrations) |
| Attempts per sync run      | 7, for failures on Beetl's side | [Runs](https://docs.beetl.io/concepts/runs-and-jobs)                                                   |
| Staged output per sync run | 1 GiB                           | [Write modes](https://docs.beetl.io/connect/write-modes)                                               |
| Batches per sync run       | 10,000                          | [The sandbox](https://docs.beetl.io/connect/sandbox)                                                   |
| Records per batch          | 10,000                          | [The sandbox](https://docs.beetl.io/connect/sandbox)                                                   |
| Size of one batch          | 8 MiB                           | [The sandbox](https://docs.beetl.io/connect/sandbox)                                                   |
| One provider response      | 16 MiB                          | [Authentication](https://docs.beetl.io/connect/oauth-and-rest)                                         |
| Memory per job             | 1 GiB                           | [The sandbox](https://docs.beetl.io/connect/sandbox)                                                   |
| Temporary files in `/tmp`  | 512 MiB, counted against memory | [The sandbox](https://docs.beetl.io/connect/sandbox)                                                   |
| Connection test            | 2 minutes                       | [The sandbox](https://docs.beetl.io/connect/sandbox)                                                   |
| Each OAuth step            | 2 minutes                       | [The sandbox](https://docs.beetl.io/connect/sandbox)                                                   |
| OAuth sign-in in the popup | 10 minutes                      | [Authentication](https://docs.beetl.io/connect/oauth-and-rest)                                         |
| Package build              | 15 minutes                      | [The sandbox](https://docs.beetl.io/connect/sandbox)                                                   |
| Package archive            | 25 MiB, and 50 MiB unpacked     | [Pack and upload](https://docs.beetl.io/connect/distribution)                                          |
| Package icon               | 512 KiB                         | [Pack and upload](https://docs.beetl.io/connect/distribution)                                          |
| One log message            | 4 KiB                           | [The sandbox](https://docs.beetl.io/connect/sandbox)                                                   |
| Log text per sync run      | 1 MiB                           | [The sandbox](https://docs.beetl.io/connect/sandbox)                                                   |
| Sync runs and logs         | Kept for 30 days                | [Runs](https://docs.beetl.io/concepts/runs-and-jobs)                                                   |

A sync run that goes over a size or time limit fails and writes nothing.

## Pipelines

| Limit         | Value                                 | Details                                             |
| ------------- | ------------------------------------- | --------------------------------------------------- |
| Stage preview | Shows up to 50 rows                   | [Builder tour](https://docs.beetl.io/pipelines/builder)                  |
| Variable name | 128 characters                        | [Template variables](https://docs.beetl.io/pipelines/template-variables) |
| Dataset name  | 63 characters, starting with a letter | [Datasets and tiers](https://docs.beetl.io/concepts/datasets-and-tiers)  |
| Pipeline runs | Kept with no time limit               | [Runs](https://docs.beetl.io/concepts/runs-and-jobs)                     |

## Queries and results

| Limit                          | Value                                                                  | Details                                         |
| ------------------------------ | ---------------------------------------------------------------------- | ----------------------------------------------- |
| Rows stored per result         | 1,000. Beetl keeps the first 1,000 and labels the result as a preview. | [Query results](https://docs.beetl.io/concepts/query-results)        |
| Result size                    | 64 MiB                                                                 | [Query results](https://docs.beetl.io/concepts/query-results)        |
| Query run time                 | 30 minutes                                                             | [The SQL editor](https://docs.beetl.io/query/sql-editor)             |
| Data read from external tables | 64 MiB per query                                                       | [External datasets](https://docs.beetl.io/sources/external-datasets) |
| Result retention               | 7 days from creation, with no way to extend it                         | [Query results](https://docs.beetl.io/concepts/query-results)        |
| CSV download                   | The stored rows, at most 1,000                                         | [Export](https://docs.beetl.io/query/export)                         |
| Result chart                   | The stored rows, at most 1,000                                         | [Result charts](https://docs.beetl.io/query/charts)                  |

To work with more than 1,000 rows, write them to a dataset with a pipeline. See
[Export](https://docs.beetl.io/query/export).

## Apps

| Limit                        | Value                               | Details                                |
| ---------------------------- | ----------------------------------- | -------------------------------------- |
| Input query preview          | 50 rows                             | [Apps](https://docs.beetl.io/apps)                          |
| Pallet Planner carton types  | 1 to 20 per order                   | [Pallet Planner](https://docs.beetl.io/apps/pallet-planner) |
| Pallet Planner cartons       | 240 per order                       | [Pallet Planner](https://docs.beetl.io/apps/pallet-planner) |
| Pallet Planner pallet size   | 200 to 2,400 mm wide, deep and high | [Pallet Planner](https://docs.beetl.io/apps/pallet-planner) |
| Pallet Planner pallet weight | 1,000 to 1,500,000 g                | [Pallet Planner](https://docs.beetl.io/apps/pallet-planner) |
| App runs                     | Kept with no time limit             | [Runs](https://docs.beetl.io/concepts/runs-and-jobs)        |

## Reports

| Limit                     | Value                                     | Details                         |
| ------------------------- | ----------------------------------------- | ------------------------------- |
| Layout source             | 256 KiB                                   | [Reports](https://docs.beetl.io/reports)             |
| Bindings per report       | 10                                        | [Reports](https://docs.beetl.io/reports)             |
| Rows per binding          | 10,000                                    | [Reports](https://docs.beetl.io/reports)             |
| JSON per binding          | 8 MiB                                     | [Reports](https://docs.beetl.io/reports)             |
| Per-row query             | 10,000 rows, 8 MiB, key up to 1,024 bytes | [Reports](https://docs.beetl.io/reports)             |
| Pages per document        | 100                                       | [Reports](https://docs.beetl.io/reports)             |
| PDF size                  | 25 MiB                                    | [Reports](https://docs.beetl.io/reports)             |
| Time to render a document | 30 seconds                                | [Reports](https://docs.beetl.io/reports)             |
| Schedule                  | At most once every 15 minutes             | [Reports](https://docs.beetl.io/reports)             |
| Templates per workspace   | 50                                        | [Reports](https://docs.beetl.io/reports)             |
| Images                    | 2 MiB each, 20 per report or template     | [Reports](https://docs.beetl.io/reports)             |
| Tags per document         | 20, up to 64 characters each              | [Reports](https://docs.beetl.io/reports)             |
| Documents                 | Kept until the report is deleted          | [Runs](https://docs.beetl.io/concepts/runs-and-jobs) |

## Dashboards

| Limit                | Value                                               | Details                                              |
| -------------------- | --------------------------------------------------- | ---------------------------------------------------- |
| Rows per chart query | 50,000. A larger result fails instead of being cut. | [Superset embedding](https://docs.beetl.io/dashboards/superset-embedding) |

Dashboard charts read datasets directly, so the 1,000-row result limit does not apply to them.

## Automations

| Limit                              | Value                                                          | Details                                  |
| ---------------------------------- | -------------------------------------------------------------- | ---------------------------------------- |
| Name                               | 255 characters                                                 | [Automations](https://docs.beetl.io/automations)              |
| Instructions (the goal)            | 8,000 characters                                               | [Automations](https://docs.beetl.io/automations)              |
| Report instructions                | 16,000 characters                                              | [Automations](https://docs.beetl.io/automations)              |
| Starting queries                   | 20, with unique names and up to 64,000 SQL characters in total | [Automations](https://docs.beetl.io/automations)              |
| Schedule                           | At most once every 15 minutes                                  | [Automations](https://docs.beetl.io/automations)              |
| Investigation time                 | 5 minutes, then the run writes its report from what it found   | [Automations](https://docs.beetl.io/automations)              |
| Tool calls per run                 | 32                                                             | [Automations](https://docs.beetl.io/automations)              |
| Time per query                     | 60 seconds                                                     | [Automations](https://docs.beetl.io/automations)              |
| Whole run                          | Marked failed after 7 minutes                                  | [Automations](https://docs.beetl.io/automations)              |
| Runs in progress                   | 1 per automation                                               | [Automations](https://docs.beetl.io/automations)              |
| Reports                            | Kept with no time limit                                        | [Runs](https://docs.beetl.io/concepts/runs-and-jobs)          |
| Query results linked from a report | 7 days                                                         | [Query results](https://docs.beetl.io/concepts/query-results) |

## AI and chat

| Limit                    | Value                                               | Details                                                          |
| ------------------------ | --------------------------------------------------- | ---------------------------------------------------------------- |
| One chat turn            | 20 minutes, then the assistant asks you to continue | [Chat and the assistant](https://docs.beetl.io/chat)                                  |
| Deploy confirmation card | Expires after 10 minutes                            | [Building with the assistant](https://docs.beetl.io/chat/building-with-the-assistant) |
| Assistant instructions   | 4,000 characters                                    | [AI in a tenant](https://docs.beetl.io/concepts/ai-settings)                          |

## MCP

| Limit                                                     | Value                        | Details                               |
| --------------------------------------------------------- | ---------------------------- | ------------------------------------- |
| Rows per page from `execute_query` and `get_query_result` | 50, fewer when rows are wide | [Tool reference](https://docs.beetl.io/mcp/tool-reference) |
| Rows stored per result                                    | 1,000, as in the app         | [MCP setup](https://docs.beetl.io/mcp/setup)               |
| `run_pipeline` preview rows                               | 1 to 1,000, default 50       | [Tool reference](https://docs.beetl.io/mcp/tool-reference) |
| `purpose` argument                                        | 1 to 200 characters          | [Tool reference](https://docs.beetl.io/mcp/tool-reference) |
| `limit` on list tools                                     | 100 at most                  | [Tool reference](https://docs.beetl.io/mcp/tool-reference) |
| `read_file`                                               | 500 lines per call           | [Tool reference](https://docs.beetl.io/mcp/tool-reference) |

Automations created over MCP have the same limits as in the app.
