Limits
The limits to plan around, in one place.
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 |
| Webhook request body | 1,000,000 bytes of valid JSON | Webhook |
| Rows per webhook request | 1, whatever the body holds | Webhook |
Documents
| Limit | Value | Details |
|---|---|---|
| Each document | 20 MiB | Documents and spreadsheets |
| Pages in a PDF | 30 | Documents and spreadsheets |
| Fields in a Documents processor | 100 | Documents and spreadsheets |
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 |
| Attempts per sync run | 7, for failures on Beetl's side | Runs |
| Staged output per sync run | 1 GiB | Write modes |
| Batches per sync run | 10,000 | The sandbox |
| Records per batch | 10,000 | The sandbox |
| Size of one batch | 8 MiB | The sandbox |
| One provider response | 16 MiB | Authentication |
| Memory per job | 1 GiB | The sandbox |
Temporary files in /tmp | 512 MiB, counted against memory | The sandbox |
| Connection test | 2 minutes | The sandbox |
| Each OAuth step | 2 minutes | The sandbox |
| OAuth sign-in in the popup | 10 minutes | Authentication |
| Package build | 15 minutes | The sandbox |
| Package archive | 25 MiB, and 50 MiB unpacked | Pack and upload |
| Package icon | 512 KiB | Pack and upload |
| One log message | 4 KiB | The sandbox |
| Log text per sync run | 1 MiB | The sandbox |
| Sync runs and logs | Kept for 30 days | Runs |
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 |
| Variable name | 128 characters | Template variables |
| Dataset name | 63 characters, starting with a letter | Datasets and tiers |
| Pipeline runs | Kept with no time limit | Runs |
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 |
| Result size | 64 MiB | Query results |
| Query run time | 30 minutes | The SQL editor |
| Data read from external tables | 64 MiB per query | External datasets |
| Result retention | 7 days from creation, with no way to extend it | Query results |
| CSV download | The stored rows, at most 1,000 | Export |
| Result chart | The stored rows, at most 1,000 | Result charts |
To work with more than 1,000 rows, write them to a dataset with a pipeline. See Export.
Apps
| Limit | Value | Details |
|---|---|---|
| Input query preview | 50 rows | Apps |
| Pallet Planner carton types | 1 to 20 per order | Pallet Planner |
| Pallet Planner cartons | 240 per order | Pallet Planner |
| Pallet Planner pallet size | 200 to 2,400 mm wide, deep and high | Pallet Planner |
| Pallet Planner pallet weight | 1,000 to 1,500,000 g | Pallet Planner |
| App runs | Kept with no time limit | Runs |
Reports
| Limit | Value | Details |
|---|---|---|
| Layout source | 256 KiB | Reports |
| Bindings per report | 10 | Reports |
| Rows per binding | 10,000 | Reports |
| JSON per binding | 8 MiB | Reports |
| Per-row query | 10,000 rows, 8 MiB, key up to 1,024 bytes | Reports |
| Pages per document | 100 | Reports |
| PDF size | 25 MiB | Reports |
| Time to render a document | 30 seconds | Reports |
| Schedule | At most once every 15 minutes | Reports |
| Templates per workspace | 50 | Reports |
| Images | 2 MiB each, 20 per report or template | Reports |
| Tags per document | 20, up to 64 characters each | Reports |
| Documents | Kept until the report is deleted | Runs |
Dashboards
| Limit | Value | Details |
|---|---|---|
| Rows per chart query | 50,000. A larger result fails instead of being cut. | 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 |
| Instructions (the goal) | 8,000 characters | Automations |
| Report instructions | 16,000 characters | Automations |
| Starting queries | 20, with unique names and up to 64,000 SQL characters in total | Automations |
| Schedule | At most once every 15 minutes | Automations |
| Investigation time | 5 minutes, then the run writes its report from what it found | Automations |
| Tool calls per run | 32 | Automations |
| Time per query | 60 seconds | Automations |
| Whole run | Marked failed after 7 minutes | Automations |
| Runs in progress | 1 per automation | Automations |
| Reports | Kept with no time limit | Runs |
| Query results linked from a report | 7 days | Query results |
AI and chat
| Limit | Value | Details |
|---|---|---|
| One chat turn | 20 minutes, then the assistant asks you to continue | Chat and the assistant |
| Deploy confirmation card | Expires after 10 minutes | Building with the assistant |
| Assistant instructions | 4,000 characters | AI in a tenant |
MCP
| Limit | Value | Details |
|---|---|---|
Rows per page from execute_query and get_query_result | 50, fewer when rows are wide | Tool reference |
| Rows stored per result | 1,000, as in the app | MCP setup |
run_pipeline preview rows | 1 to 1,000, default 50 | Tool reference |
purpose argument | 1 to 200 characters | Tool reference |
limit on list tools | 100 at most | Tool reference |
read_file | 500 lines per call | Tool reference |
Automations created over MCP have the same limits as in the app.
Last updated on