Operational

RouteForms limits

Every product limit in one place. The plan caps are ours; the Slack and Apps Script caps are upstream constraints we work within.

Plan caps

LimitFreeSoloAgency
Responses / month30UnlimitedUnlimited
Forms15Unlimited
Routing rules per form010Unlimited
Slack destinations per form110Unlimited
Client workspacesUnlimited
Delivery log retention30 days90 days180 days
Failed-streak email alerts
CSV log export

Payload limits

  • Form response payload from Apps Script: up to 64 KB after JSON serialisation. Larger payloads (long file-upload metadata, very long paragraph answers) are truncated by Apps Script before posting; we accept whatever arrives.
  • Per-field length in Slack messages: 500 characters per field. Values longer than this are truncated with an ellipsis in the rendered Slack message (the underlying log preserves the full value).
  • Block Kit body to Slack:Slack's own cap is ~16 KB. RouteForms doesn't add to this, same as posting from any other client. For long messages, split into multiple posts or summarise.

Slack-side limits

These are upstream Slack limits, not RouteForms limits. We work within them:

  • Incoming webhook rate limit: Slack rate-limits incoming webhooks per app per workspace. Sustained sub-second bursts get HTTP 429 responses with a Retry-After header. RouteForms surfaces these as FAILED rows with decoded errors; manual retry after the backoff window usually succeeds.
  • Block Kit body cap: ~16 KB. Above this Slack returns 400.
  • Header text: 150 characters max. Above this Slack returns invalid_blocks.
  • Section fields per block: 10 max. Above this Slack returns invalid_blocks.
  • Action buttons per block: 5 max.
  • Total blocks per message: 50 max.

Full Block Kit reference and decoded errors live at /tools/slack-webhook-error-decoder.

Apps Script-side limits

The Apps Script we install runs on Google's infrastructure under your Google account. Its quotas bound how RouteForms behaves:

  • Trigger execution time: 6 minutes per execution on free Google accounts; 30 minutes on Workspace. Our handler does one POST and exits, so the limit is never hit in normal operation. It can be hit if your account has many other scripts that run on the same execution context.
  • UrlFetchApp daily calls: 20,000 / day on free Google accounts; 100,000 on Workspace. One form submission = one UrlFetchApp call. Hitting this cap is extremely rare for form workflows.
  • Triggers per script:20 maximum. Our installer creates one trigger; unless you have many other scripts on the same form's project, the cap isn't a concern.
  • Authorization scopes: our script requests https://www.googleapis.com/auth/forms (read form metadata) and https://www.googleapis.com/auth/script.external_request (POST to RouteForms). No other scopes.

RouteForms-side rate limits

The inbound webhook endpoint that receives form submissions from your Apps Script has a per-form rate limit of 60 requests per minute. Form submissions over this rate are queued briefly; sustained over-rate traffic returns HTTP 429 to Apps Script, which RouteForms records as FAILED with reason rate_limited.

Practical implication: 60 simultaneous form submissions per minute is the ceiling. If you expect higher bursts (e.g. mass-import via spreadsheet pasting that produces one Apps Script trigger per row), spread the import across time.

Log retention

The per-form delivery log keeps rows for:

  • Free: 30 days
  • Solo: 90 days
  • Agency: 180 days

Older rows are deleted automatically, there's no undo. For longer retention (compliance, audit), export the log to CSV from the dashboard before the retention window expires.

Changes to limits

Limits are versioned with the active plan. Limits in effect when you signed up stay grandfathered if a future plan version lowers caps. Limit increases (e.g. raising the Free quota) apply immediately to existing accounts. Material changes are emailed to the account owner 30 days in advance.