Pulldata() stopped working on ODK Collect Apps after CSV update (still works on Enketo)

I have an XLSForm (Nutrition Entrepreneurs – Sales Data Collection Tool – Year 2 – TLTN.xlsx) that uses pulldata() to auto-populate fields from a lookup CSV (nsa_list.csv).

It used to work perfectly on both ODK Collect (Android) and Enketo.
After I replaced/updated the CSV file, the form continues to work fine on Enketo, but on ODK Collect the pulldata fields stay blank.


2. Steps to reproduce the issue

  1. Upload the XLSForm and nsa_list.csv to KoBo/ODK server.

  2. In ODK Collect (Android):

    • Delete any old Blank Form.

    • Get Blank Form again (to refresh media).

    • Open the form and enter a valid id_key value (e.g., 20473).

  3. Observe: On Enketo, related fields populate correctly (e.g., NSA name, district).
    On ODK Collect, the same fields remain blank.


3. What I have tried to fix the issue

  • Incremented the form version and re-uploaded.

  • Deleted and re-downloaded the blank form and media on Collect.

  • Verified CSV exists on the device at:
    Android/data/org.odk.collect.android/files/projects/<project>/forms/<form-id>-media/nsa_list.csv

  • Confirmed that the file name matches exactly (nsa_list.csv, all lowercase, .csv extension).

  • Re-saved the CSV as UTF-8 (no BOM).

  • Checked that the lookup key (id_key) and header names match exactly.

  • Turned ON “Automatically download media” in settings.

  • Cleared cache and form data in Collect → Experimental → Reset cache.

  • Tested the same form in Enketo — all values populate as expected.


4. Form and CSV details

  • Example pulldata() calls in the XLSForm:

    pulldata('nsa_list', 'NSA_Name', 'id_key', ${id_key})
    pulldata('nsa_list', 'District', 'id_key', ${id_key})
    pulldata('nsa_list', 'GPS_Latitude', 'id_key', ${id_key})
    
    
  • CSV header row:

    id_key,NSA_Name,Mobile_Number,District,Upazila,Union,Village,SME_Registration_Year,GPS_Latitude,GPS_Longitude,UUID_code,unique_name,staff_name
    
    
  • Test entry:
    id_key=20473NSA_Name=Shimu Begum, District=Barishal, Upazila=Babuganj, etc.


5. Expected vs actual

Platform Expected (auto-filled fields) Actual result
Enketo All pulldata() values appear correctly :white_check_mark: Works
ODK Collect Fields stay blank :cross_mark: Not working

6. Environment

  • Server: KoBoToolbox (EU server)

  • App: ODK Collect v2025.x.x (latest)

  • Device: Android latest

  • Enketo: Works as expected

I'm sorry to hear you're experiencing issues.

The attached data files look like they may contain personal data so I have removed them. If they were test data, let me know and I can put them back.

I tried your form with ODK Central and Collect and when I enter in the id key 20473, I see the values you expect.

The only thing that comes to mind as a possible explanation is that several versions ago ODK Collect started using ETags to cache form attachments. If Kobo is setting ETags incorrectly, you could be getting a stale form attachment. What happens if you delete the Collect project and recreate a new one? Could you also please make sure to try with ODK Collect v2025.3.2?

1 Like