KoboToolbox data quality checks and cleaning

KoboToolbox data quality depends on two things: the rules you build into the form, and the checks you run on the data once it arrives. Kobo checks answers as they are entered and lets you edit submissions and mark them Approved, Not approved or On hold, but checks that compare submissions, such as duplicate IDs, interview length, outliers and differences between enumerators, run on an export. Clean from a saved copy of each export and record every correction, so the raw data stays as it came in.

By Mehrab Ali, founder of DataFlow · Updated 2 November 2026

KoboToolbox is built to get forms into the field quickly, and its quality tools act on one submission at a time: the form's rules at entry, then the data table, where you can edit a submission and set its validation status. Checks that compare submissions with each other, or enumerators with each other, happen after you export, and how well they work depends a good deal on the export settings you choose.

What KoboToolbox gives you

In the form

On the server

Kobo's help centre covers viewing and validating data and exporting it in detail.

What Kobo leaves to you

Export Kobo data so checks can read it

Many problems with cleaning Kobo data start with the export settings. Set these once under Data, Downloads, Advanced options, and save them with Save selection as, so every export comes out the same:

Every export also carries system columns. _uuid identifies the submission and is the one to match on across exports. _submission_time is when the server received it, _submitted_by is the account that sent it, and _validation_status is the status set in the table. _index is only a row number made at export time, so never use it as an ID. Kobo can also give you a link that refreshes a saved export in Excel or Power BI, which suits dashboards; for cleaning, keep a dated copy of each download.

The checks to run on each export

Run them over the whole export each time, not only the newest rows: a duplicate or an outlier often only shows up against what came before. The high-frequency checks guide explains each one.

CheckWhat it catchesKobo columns to use
Duplicate IDsA household interviewed twice, or a form sent twiceYour household or respondent ID
Interview lengthInterviews too short to be realstart and end
OutliersValues far from the rest: typos, wrong units, extra zerosNumber questions, compared within village or team
RangesValues outside what the form allowsYour validation criteria, run again over all data
Missing answersInformation that should be there and isn'tQuestions that must be answered when they're shown
Don't know and refusalsInterviews with too many don't-know or refusal answersYour codes, such as -99 and -98
“Other, specify”Typed answers that match an option already on the listThe text question after each “other” choice
Logic rulesAnswers that contradict each otherPairs such as land owned and its size
GPSMissing or inaccurate points, interviews far from their villageThe location question's latitude, longitude and precision columns
Enumerator patternsInterviews copied or inventedYour enumerator question, or _submitted_by
Back-checksAnswers that change when someone else asks againThe back-check form, matched on your ID

Interview length from start and end

Kobo forms have no field like SurveyCTO's duration, so length is end minus start. That includes any time the form sat saved and unfinished, and both times come from the device clock, so a wrong clock gives nonsense. Treat very long interviews as a question, not an error, and look hard at very short ones: once a few dozen interviews are in, flag those far below the median length and see whose they are.

Use validation status as your to-do list

Validation status works well as a tracker for checks you run outside Kobo. Put each flagged submission On hold, send the list to the field team, then mark it Approved once the problem is explained or fixed, or Not approved if the interview should be dropped. Because the status is exported, the next export shows what is still open, and analysis can leave out the Not approved submissions.

Cleaning Kobo data without losing the raw data

  1. Save every download as it came, with the date in the file name, and don't edit it. That file is your raw data.
  2. Write each correction as code (Stata or R) or as a row in a correction log: _uuid, question, old value, new value, who decided and why.
  3. Build the clean dataset by applying the corrections to the raw export, so anyone can run it again and get the same result.
  4. Decide whether corrections happen in Kobo or in your log, not both. If some are edits in Kobo and others are lines in a script, no single record explains the final data.

Personal data needs the same care: names and phone numbers in a Kobo export travel with every copy of the file. The guide to de-identifying survey data covers what to remove before sharing.

Using DataFlow with KoboToolbox

DataFlow has no KoboToolbox connection yet. It connects directly to SurveyLoopr, SurveyCTO and ODK Central; Kobo data comes in by importing an export. The workflow:

  1. Create a project and add your XLSForm, the same file you deployed in Kobo. DataFlow reads its questions, choices and constraints, finds start and end, and sets up checks before any data arrives.
  2. Download the XLS export with the settings above and import it. DataFlow uses _uuid as the submission key, and you pick the column that names the enumerator.
  3. Each day, download a new export and import it into the same project, or save it over the file you imported and sync. Submissions already there are matched by _uuid, new ones are added, and the checks run again over everything.
  4. Work through the flags and approve corrections. They sit on top of the imported data, which is never changed, and the download includes a Stata do-file that rebuilds the clean data from it.

Two limits to know. DataFlow reads the first sheet of an Excel file, so rosters that Kobo puts on their own sheets aren't checked yet. And because imports are by hand, daily checking depends on someone downloading the export each day. The integrations page shows what connects today.

Step by step

  1. Build checks into the form. Add validation criteria for impossible answers, required questions, an enumerator ID question, and the start and end metadata.
  2. Save one export setting. XLS, XML values and headers, groups in headers off, dates and numbers stored as text. Save it so every download matches.
  3. Download every day and keep each file. Save each export with the date in its name and never edit it. It is the raw data.
  4. Run the checks over all submissions. Duplicate IDs, interview length, outliers, ranges, missing answers, don't-know share, "other, specify", logic rules and GPS.
  5. Read the flags by enumerator. Count flags per enumerator per 100 interviews and compare each person with others in the same area.
  6. Put flagged submissions On hold. Set their validation status to On hold and send the list, with each _uuid and question, to the field team.
  7. Log corrections, then approve. Record each correction outside the raw export, rebuild the clean data, and mark resolved submissions Approved or Not approved.

Questions

Does KoboToolbox have data quality checks?

It checks answers as they are entered, with validation criteria and required questions, and lets you mark submissions Approved, Not approved or On hold. It doesn't run checks across submissions, such as duplicate IDs, interview length, outliers or enumerator comparisons, so those run on an export.

How do I clean KoboToolbox data without losing the original?

Keep every export as downloaded and never edit it. Write each correction as code or as a row in a log with the _uuid, question, old and new value, who decided and why, then rebuild the clean data from the raw export.

What does _validation_status mean in a Kobo export?

It is the status someone set in the data table: Approved, Not approved or On hold. It is useful for tracking which flagged submissions have been reviewed, and for leaving Not approved submissions out of analysis.

Should I export KoboToolbox data as XLS or CSV for cleaning?

XLS, with XML values and headers. Kobo puts each repeat group on its own sheet in an XLS export, while CSV exports leave repeat groups out. Turn off group names in headers so columns match your form.

How do I find duplicate submissions in KoboToolbox?

Check your own household or respondent ID across all submissions. Every submission has its own _uuid, so a household interviewed twice only shows up on your ID. Decide which interview to keep and record why.

Can DataFlow connect to KoboToolbox directly?

Not yet. Import Kobo's XLS export instead: DataFlow matches submissions across imports by _uuid, runs the checks on each import, and keeps the imported data unchanged.

Read next