How to increase the performance of a form?


I have a form that have 8 Questions.
But in one question it gets data from an external file (select_one_from_file) that has nearly 3000 records. Added a filter to improve the performance.
But still when we get to the next Question the performance is lagging.(ie When I enter a number in an integer field, it is taking some seconds for the number to appear in the form)

I have other forms that has more than 75 questions. Need to use the same datasets file and worried about its performance.

Can you please suggest ways to increase the performance of a Form ?


Performance of Collect depends on how performant your device is and the complexity of logic and how many fields that logic touches. On a modern Android device, ODK can handle 75k rows in an external data set, so what you are describing is unexpected.

Can you share the form and the external file? Also, what device are you testing the form on?

1 Like

Hi @yanokwa,

Found the issue, it is because of the calculate field we are using.
I have 9 calculate fields in this form. If the calculate field is removed then the form works fine.

I need the calculate field, as I need the data in the Submission sheet.
Is there any other way to improve the performance and reduce the data lag issue.

Attached the External file(sample) and the Test form.
datasets_Test.csv (1.6 KB)
Test Form.xlsx (59.6 KB)

What device are you testing the form on?
Samsung A50
Poco X4 Pro


Out of curiosity, roughly how many seconds is it taking? What is the relationship between the integer field you are describing and the entities in your CSV file? There should only be a lag if it's directly involved in the lookup.

That said, we know these kinds of performance issues are possible and we hope to make some improvements to that for the summer Collect release. Your best bet right now is to use pulldata to get the values from your CSV instead of instance().

Solved the issue by moving that question to separate group and all others to a separate group.

@LN Thank you for your reply.
It is taking 3-4 Seconds for the value to be seen.
Will try using pulldata and update.

1 Like