ODK data quality: monitoring ODK Central fieldwork every day

ODK data quality is protected in two places: the form, where constraints, required questions and relevance stop many errors at entry, and a daily review of what reaches ODK Central. Central lets you filter submissions, mark them Has issues, Approved or Rejected, edit them with the changes shown in each submission's history, and export them or read them through OData. Checks across submissions, such as duplicate IDs, interview length, outliers, enumerator patterns and back-checks, you run yourself on each new batch, by enumerator.

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

ODK Central stores your submissions and gives you the tools to review them one at a time. It doesn't compare them with each other, so a household interviewed twice or an enumerator finishing every interview in eight minutes stays invisible until someone checks. Daily ODK data monitoring, read enumerator by enumerator, catches those problems while the team can still go back.

What ODK gives you

In the form

In ODK Central

ODK's guide to managing submissions in Central covers review states, edits and exports in full.

What ODK Central leaves to you

A daily monitoring routine by enumerator

1. Pull what arrived

After the day's uploads, download new submissions: through OData, filtered on submission date, or as a CSV export with a date filter. Keep a copy of each download unchanged; it is the raw data. Then add it to everything received so far, because most checks compare the new interviews with the old ones.

2. Run the checks

CheckWhat it catchesODK fields 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; the audit log for single questions
OutliersValues far from the rest: typos, wrong units, extra zerosNumber questions, compared within village or team
RangesValues outside what the form allowsYour constraints, run again over all data
Missing answersInformation that should be there and isn'tQuestions that must be answered when they're relevant
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, journeys no one could makeYour geopoint question and its accuracy
Enumerator patternsInterviews copied or inventedAll answers, grouped by enumerator
Back-checksAnswers that change when someone else asks againThe back-check form, matched on your ID

For interview length, remember that end minus start includes time the form sat saved and unfinished, and depends on the device clock. Flag interviews far below the median length rather than below a fixed number, and use the audit log to see where the time went. The high-frequency checks guide covers each check, and the outliers guide explains the two usual ways to measure “far from the rest”.

3. Make one table per enumerator

One row per enumerator: interviews today and in total, median interview length, flags per 100 interviews for each check, and the share of don't-know answers. Compare each person with the others working in the same area, since a remote village can make honest interviews look unusual. Use an enumerator question in the form; the submitter name in Central only identifies the enumerator if each one has their own app user.

Patterns matter more than single flags. One short interview is a question; a third of someone's interviews running short, with answers that barely vary and no “don't know” anywhere, is a reason to back-check that person's work first.

4. Mark what needs a look in Central

Use review states to track the follow-up. Set each flagged submission to Has issues with a comment saying what to check, send the list to the supervisor, and set it to Approved once it's explained or fixed, or Rejected if the interview should be dropped. Agree with the team what each state means before fieldwork starts, so Approved means the same thing to everyone.

Cleaning ODK Central data

You can correct in Central or in your cleaning code; pick one. Central's edits keep a version history on the server, and exports show the latest version. Cleaning after export keeps the downloaded data untouched, with each correction written as code or as a row in a log: the submission's instanceID, the question, old value, new value, who decided and why. Doing both leaves corrections in two places that no single record explains.

Either way, the final cleaning should rebuild the clean dataset from the raw data in one run. If your study has personal data, de-identify before sharing; the guide to de-identifying survey data covers what to remove.

Running the checks with DataFlow

DataFlow is a desktop app that runs this routine on every sync. It connects to ODK Central with the server's https address and the email and password of a Central account. It exchanges them for a session token, keeps only the token in your computer's keychain, and asks you to sign in again when the token expires. You choose the project and form from lists. If the form was uploaded as an XLSForm, DataFlow downloads it and sets up checks from its questions, choices and constraints.

Each sync reads new submissions through Central's OData feed, oldest first, starting after the newest submission date it has already seen. Answers inside groups keep their question names, and repeat groups become numbered columns that checks can still read row by row. The submitter comes in with each submission. DataFlow only reads from Central: it never changes a submission or its review state. Syncs can run on a timetable, such as every two hours through the working day.

SurveyLoopr, managed ODK Central hosting from the makers of DataFlow, connects the same way through a SurveyLoopr account, so no ODK password is typed into DataFlow. The integrations page lists every connection.

Step by step

  1. Prepare the form. Add constraints, required questions, an enumerator question and the start and end metadata. Add the audit log if you want time per question.
  2. Agree how review states are used. Decide what Has issues, Approved and Rejected mean for this survey, and who sets them.
  3. Pull new submissions every day. Use OData or a CSV export filtered by date after the day's uploads, and keep each download unchanged.
  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. Build the enumerator table. Interviews, median length and flags per 100 interviews for each enumerator, compared with others in the same area.
  6. Mark flagged submissions Has issues. Add a comment saying what to check and send the list to the supervisor the same day.
  7. Record corrections and close the loop. Log each correction with who and why, set resolved submissions to Approved or Rejected, and rebuild the clean data from the raw download.
  8. Compare back-checks each week. Match back-check answers to the original interviews and count differences per enumerator and per question.

Questions

Does ODK Central check data quality?

It enforces the form's constraints and required questions at entry, and gives you review states, comments and edits for each submission. It doesn't run checks across submissions or compare enumerators, so duplicates, interview length, outliers and back-checks need checks of your own.

What do the review states in ODK Central mean?

Received is a new submission and Edited is set when someone edits one. Has issues, Approved and Rejected are set by project managers and administrators. Rejected submissions are still exported unless you filter them out.

How do I monitor ODK data by enumerator?

Add an enumerator question to the form, then build a table with one row per enumerator: interviews, median length and flags per 100 interviews for each check. Compare each person with others working in the same area.

Can I edit submissions in ODK Central?

Yes. Edits are made in the browser, each one creates a new version, and the activity feed shows what changed. Leave a comment explaining each edit, and choose either Central or your cleaning code as the one place corrections are made.

How do I get ODK Central data into Stata or R?

Download the CSV export, a zip with the main table and one file per repeat group, and import it. Or read the OData feed: ruODK for R and pyODK for Python connect to it directly.

Can DataFlow connect to ODK Central?

Yes. Sign in with the server's address and a Central account's email and password; DataFlow keeps only the session token. It reads new submissions on each sync and never writes to the server.

Read next