Limitations of SurveyCTO

For a vast majority of users, you will never have to worry about having too much/many data, fields, or anything else. However, for you special few, there are a few limits to keep in mind:


Submissions per month: 10,000 (subscription), 200 (community)

  • A SurveyCTO subscription includes a base of 10,000 monthly recurring submission credits, as explained on the plans page. However, you can purchase additional submission credits at any time, (details are here).

Storage: Unlimited (subscription), 200 MB (community)

Forms: Unlimited (subscription), 10 (community)

Users: Unlimited

Devices: Unlimited

Teams: Depends on number of team-months available (further reading)

Spreadsheet form design templates

When designing a SurveyCTO form in the spreadsheet form design template, there are limits on the survey sheet on how much of it will be read by our software when compiling form designs. 

Maximum columns: 1,000 (further reading)

Max rows: 50,000

Maximum spreadsheet form definition file size: 10 MB

Attachment limits

Max file attachment size (per file): 100 MB

Max total attachment size: 300 MB

  • To get around this, you can try compressing the files into a ZIP file.

Maximum number of CSV columns: 1,998 (in a spreadsheet, this is column BXV).

  • Server datasets have similar limits (see below).
  • To work around this, simply split your pre-load data across multiple CSV files or server datasets so that no single file has more than 1,998 columns, and pre-load the data you need from the correct pre-load source.

Server datasets

Column header length: 60 characters

Columns: 1,890

  • Although datasets support slightly fewer columns than CSV files, you can still split larger datasets into multiple datasets (see Maximum number of columns above).

Characters per cell: 255 characters

  • If you need to publish data to a dataset that is more than 255 characters, you can use the substr() [sic] function to split the data into multiple columns of the row. For instance, you could have substr(${fieldname}, 0, 255) for the first part of the input, and substr(${fieldname}, 255, 510) for the next part, and so on. To later pull this data from the dataset into another form, bring these separated strings together with the concat() function (further reading: Using expressions in your forms).

Dropdown menu selection: 499 fields

  • Explanation: If you are setting up publishing into a dataset, the dropdown menu to select the field to publish will not work if you have 499 fields or more. Instead, you can manually type the name of each field, or click the blue + Add all button to add all fields, and then remove the fields you do not want to publish.

Further reading: Introduction to advanced dataset usage, Publishing form data into server datasets

Form fields

Field name lengths: Unlimited

  • We strongly advise using the shortest possible field names. While form designs can have field names of any length, other server console features will fail to work with overly long field names (for example, automated quality checks work only with field names of 60 characters or fewer).
  • Keep in mind the limits of the data analysis software you want to use later. Stata, for example, only supports variable names up to 32 characters, and if you exceed this, it will automatically truncate variable names, which you may not want. Even outside the limits of downstream software, if you have to type the names of variables later during analysis, shorter names will be a lot easier.
For more recommendations on field naming conventions, see our blog post on the subject.

media:images: PNG, JPG, and JPEG will work well, but not TIF. As of SurveyCTO version 2.70, SVG files are an option for use with field-plugins. For information on what field types work on each device type, check out this documentation.

repeat_count: 1,000

  • If a repeat group's repeat_count is more than 1,000, after the 1,000th repeat instance, it will ask the enumerator if they would like to add an additional repeat instance. One way around this is to have multiple repeat groups. For example, if a group needs to repeat 1,600 times, have two repeat groups with identical fields (but different field names), and set each one to repeat 800 times.

SurveyCTO Collect (mobile or browser)


Max size of individual attachments (images, video, and other files): 100 MB

Max size of total attachments per form instance (submission): 300 MB


Integer fields:

  • Up to 9 characters (9 digits, or 8 digits with the negative sign)
  • Will not store a a leading zero
  • For phone numbers, instead use a text field with the "numbers_phone" appearance

Decimal fields:

  • Up to 15 characters (including the negative sign and the decimal point)
  • Will not store a leading 0 before the decimal point (unless it is the only number before the decimal point), nor a trailing 0 after the decimal point
  • Will not store a decimal point if there are no numbers after it

Text fields: Unlimited characters

Character entry is limited by hardware capabilities as opposed to software limits. These fields generally do not have trouble until several million characters are entered (somewhere around 25,000,000). For perspective, The Odyssey by Homer is about 611,000 characters, and it can be entered into a text field well.

Further reading: Collecting data - Mobile data collection

Web forms

As a mobile-first data collection platform, SurveyCTO’s current web form functionality has limited support for simultaneous and large scale data collection. SurveyCTO's web form feature was designed to replicate the mobile app experience as closely as possible, which has had some technical trade offs. While it is possible to comfortably run web surveys using SurveyCTO that have tens of thousands of potential respondents completing a form at different times, surveys where groups of respondents will complete a form at the exact same time (like in a computer lab) may experience "traffic jam" errors. These errors are inconvenient, but won't result in loss of data.

If you're experiencing any trouble with web forms, or are planning a large web survey, please get in touch with us in a support request.

Further reading: Collecting data - Web data collection, Designing for your target platform

Web form session storage

A partially filled out web form will save progress for a period, allowing a respondent to resume later without losing entered answers. This is designed to help limit loss of data, but this feature does have limits. Depending on how a web form is accessed, the session for a partially complete web form will expire after a certain amount of inactivity: 

  • Anonymous web form users will lose a partially complete web form session that is inactive for 48 hours.
  • Logged in web form users will lose a partially completed web form session that is unsaved after 120 hours of inactivity (a little over four days).
  • Logged in web form users who actively save their progress will never lose their session, unless the form is deleted on the server.

Other limits

These are not SurveyCTO limits, but the limits of software you may use with SurveyCTO

Further reading: Looking at data in Microsoft Excel, Publishing to Google Sheets


While not a limit, it is not recommended to have an expression (such as a calculate field's calculation) with more than 10 terms, since this can be very demanding on RAM. Instead, it is better to break the expression into multiple calculate fields. It also makes the calculation easier to read, and easier to troubleshoot.


Instead of:

selected(${field}, 1) or selected(${field}, 2) or selected(${field}, 3) or selected(${field}, 4) or selected(${field}, 5) or selected(${field}, 6)

You can use:

${field} < 7
The true limit on expressions depends on the specifications of the smartphones or tablets being used to collect data.

Further reading: Using expressions in your forms

Form length

For longer forms, a more powerful device will need to be used to handle the form. If you would like to test a device before you can create a form, check out our documentation on Maximum form length to try some examples. To make a form more efficient so it runs better on a device, check out our article on Optimizing form performance.

If your form is a bit complex, and you would like advice on how to simplify it, paid users can reach out to our 24/7 support for questions. Please include the form definition and all relevant files (see our article on what to share when submitting a support ticket).


If you're using webhooks, keep these structural limitations in mind when planning integrations.

Timeout: 5 seconds (all 2xx responses are treated as successful)

Retries: Every 5 minutes, unlimited until successful

Batching: None, one webhook call at a time

If the webhook responds reliably, there should be no duplicates. Learn more in our documentation.

Do you have thoughts on this support article? We'd love to hear them! Feel free to fill out this feedback form.


Article is closed for comments.