KoboToolbox for field survey work
Build a school visit form, test it on web and Android, review its submissions, and prepare the files and access plan a field team would need.
How to use this course
Read the modules in order on your first pass. Each one explains a task, shows a worked example, then asks you to try it. The knowledge check at the end has three attempts. A correct set of answers opens the next module. After the third complete attempt, you can review the answer key and continue.
The lessons, diagrams, quizzes and practice workbook are inside this HTML file. Your browser saves course progress locally. Official documentation links and activities on a KoboToolbox server need internet access.
The school visit example
You are preparing a short visit form for a team checking school facilities. The team has a list of school IDs. An enumerator visits a school, records consent from the person providing information, counts usable classrooms, notes water and electricity, and records each classroom in a repeat. A supervisor reviews the submissions, and an analyst exports the data.
| Practice field | Example value | Why it matters |
|---|---|---|
school_id | S001 | Joins the visit to the sample list |
consent | yes | Controls whether the interview continues |
classrooms_usable | 6 | Needs a whole-number validation |
rooms repeat | A01, A02, β¦ | One record per classroom |
school_gps | Practice location only | Tests device and location workflow |
You will build this form in stages. Early modules use a few questions. Later modules add logic, repeats, translations, export checks and permissions.
What you need
- A modern browser and a spreadsheet editor. KoboToolbox access is needed for the live exercises.
- An Android phone or tablet for the KoboCollect module. If you do not have one, read the device steps and complete the paper test plan.
- About 60β90 minutes per module if you complete the hands-on work. The capstone takes longer.
The starter contains the first questions. The completed example is an answer key for review, not a substitute for building and testing the form yourself.
Completion evidence
At the end, keep a copy of your XLSForm, a list of test cases and outcomes, an XLS export containing synthetic records, and a short note explaining who may submit or view data. These are more useful than a completion percentage alone.
Official KoboToolbox references
What KoboToolbox does
Platform, servers and accounts
- Describe a KoboToolbox project
- Choose a server for a team
- Explain where forms and submissions live
A project has a form and its data
KoboToolbox is a system for designing forms, collecting submissions and reviewing or exporting those submissions. A project contains one form, its versions, settings, media, collaborators and submitted records. A data collector uses either a web form or the KoboCollect Android app to complete that form.
Form: edit, preview, deploy, obtain collection links.
Data: table, reports, map, gallery and downloads.
Settings: sharing, media and project configuration.
The form is a definition. A submission is one completed record. Editing the definition does not change answers that collectors have already sent, although later edits to older records can be affected by a new form version.
Choose the server before creating team accounts
Current KoboToolbox account guidance describes the Global and European Union public servers. Some organizations have a private server. An account created on Global cannot be used to sign in to EU, and users who collaborate on a project need accounts on the same server.
| Server | Address for the web account | Use when |
|---|---|---|
| Global | kf.kobotoolbox.org | Your organization uses Global, or you are making an independent practice account |
| European Union | eu.kobotoolbox.org | Your organization requires or prefers EU hosting |
| Private | URL supplied by your administrator | Your organization operates its own KoboToolbox server |
From questionnaire to export
- Create a project and build or upload the form.
- Preview the draft and test each important response path.
- Deploy the form, then test a live submission.
- Give collectors the correct link or Android setup.
- Review submissions and export the format needed for analysis.
βUploadβ applies when your source is an XLSForm workbook. If you build directly in the Formbuilder, there is no separate workbook to upload before deployment.
Record your setup
- Write down the server your team uses. If you do not know, stop before creating a shared project and ask the project owner.
- Sign in to your practice account and locate the Projects page.
- In your notes, draw the sequence draft β preview β deploy β submit β review β export.
- State where a form definition ends and a submitted record begins.
Model response
The form definition contains questions, answer options and logic. A submission contains one set of answers collected with a deployed version of that form.
Module 1 check
Answer every item. A perfect score opens the next module. After three complete attempts, the course shows the answer key so you can continue.
Official KoboToolbox references
Your first project
Projects and the Formbuilder
- Create a practice project
- Find the project tabs
- Save and preview a form
Read the Projects page
The Projects page lists projects and their status. A draft is still being prepared. A deployed project can accept submissions under its access settings. The left menu also gives access to the question library. The controls for archive, sharing and deletion may appear near the project list; this course does not use them for practice.
In the current interface, opening a project leads to Summary, Form, Data and Settings. Summary gives links to edit or preview a form and, after deployment, to view the data.
Create the course project
- Choose New, then Build from scratch.
- Use the title School Visit Checklist β Practice.
- Describe it as βSynthetic training records only.β Choose a country and sector if your server asks for them.
- Open the Formbuilder. Add a Text question labelled βSchool IDβ and an Integer question labelled βHow many classrooms are currently usable?β
- Save. An asterisk by Save indicates unsaved edits. Preview both questions before continuing.
In the Formbuilder, add a question below an existing question, enter its label and choose a type. Question settings provide required status, hints, skip logic and validation. Once you choose a type, the Formbuilder does not let you convert that question to another type in place; plan the type first.
Type S001 as the school ID and 6 as the classroom count. A preview should accept both. Next try 0042A as the ID. This is why the ID is Text, even though some IDs contain digits.
Create and preview two questions
- Create the course project on your practice server.
- Set the question names to
school_idandclassrooms_usable. - Make School ID required. Leave classroom count optional for now; you will add a conditional rule later.
- Preview with
S001,0042Aand an empty classroom count. - Record what the preview accepts and any label or hint that needs clarification.
Expected result
Both IDs are accepted as text. An empty classroom count can continue while the field is optional. Preview does not yet create a server submission.
Module 2 check
Answer every item. A perfect score opens the next module. After three complete attempts, the course shows the answer key so you can continue.
Official KoboToolbox references
Questions and answer codes
Types, labels, names and choices
- Choose types from the answer needed
- Separate stored names from visible labels
- Write answer options that can be analyzed
Choose the type from the answer, not the wording
| Question | Type | Reason |
|---|---|---|
| School ID | Text | An ID may have letters or leading zeros |
| Usable classrooms | Integer | A whole-number count |
| Distance to the school in km | Decimal | Fractions such as 1.5 are possible |
| Main electricity source | Select One | One coded category |
| Facilities observed | Select Many | Several choices may apply |
| Visit date | Date | A calendar value |
| School entrance location | Geopoint | Coordinates and location metadata |
| Photo of a notice board | Image | An attachment, subject to consent and policy |
| Read the consent text | Note | Instruction with no answer |
The source slides say βNumberβ as a broad category. XLSForm distinguishes integer and decimal. Keep the distinction explicit because it affects input and validation.
Separate three names that learners often mix up
The question label is what the user sees. The question name becomes the stored field name. For a select question, each choice name is the stored answer code, while its choice label is what the user sees.
| Item | Value | Purpose |
|---|---|---|
| Question name | electricity | Export column |
| Question label | What is the school's main source of electricity today? | Field question |
| Choice name | grid | Stored code |
| Choice label | Grid connection | Visible option |
Use clear, unique question names with underscores instead of spaces. Decide choice codes before collecting real data. You can improve a displayed label later, but changing a stored code after collection can change what exported values mean.
Write a question a collector can apply consistently
βClassrooms?β is too vague. Use βHow many classrooms are currently usable for teaching?β and a hint such as βCount rooms that can host a class today; exclude rooms closed for repairs.β State a time reference where it matters. Include βDo not knowβ or refusal options only when the study needs them and the team has agreed how they will be coded.
Program three types
- Add
electricityas Select One with stored codesgrid,solar,generatorandnone. - Add
facilitiesas Select Many withwater,toilet,libraryandother. - Add
school_gpsas Geopoint, but use a synthetic or approved practice location. - Preview selecting two facilities, then inspect which codes would be stored.
Stop and check
electricity stores one code. facilities stores the selected codes. The labels can later be translated without changing those codes.
Module 3 check
Answer every item. A perfect score opens the next module. After three complete attempts, the course shows the answer key so you can continue.
Official KoboToolbox references
XLSForm from the inside
survey, choices and settings
- Read a workbook
- Connect a select question to its choices
- Upload and troubleshoot an XLSForm
Why move to a spreadsheet?
The Formbuilder is useful for learning and shorter edits. XLSForm is a spreadsheet definition of the same KoboToolbox form. It lets a team review many rows, edit longer choice lists, add translations and keep a versioned source file. Download a Formbuilder form as XLSForm when spreadsheet editing becomes more efficient, then upload the revised workbook to the project and preview it.
Read the three sheets
| Sheet | What it holds | Key columns |
|---|---|---|
survey | Questions, groups, repeats and logic | type, name, label, required, relevant, constraint, calculation |
choices | Rows for option lists | list_name, name, label |
settings | Form-level information | form_title, form_id, version, default_language |
Use the lowercase sheet names shown here. The settings sheet is optional for a simple workbook, but useful once a team manages versions and languages.
Follow the link from a question to its choices
survey sheet
type name label
select_one yn consent Does the respondent agree to participate?
choices sheet
list_name name label
yn yes Yes
yn no NoThe yn in select_one yn matches list_name = yn. The stored answer is yes or no. Logic must compare the stored code, not the visible English label.
select_multiple facilities uses every choices row whose list name is facilities. If one list name is misspelled, the question may have no options or the workbook may fail validation.
Upload and troubleshoot a workbook
- Make a copy of the XLSForm before changing it.
- Keep the column headers exactly as KoboToolbox expects.
- Upload through New β Upload an XLSForm for a new project, or replace the form in the practice project if that is your planned workflow.
- Read any validation error for its row number, question name or expression. Correct one cause, upload again and preview.
- Never deploy just because the upload succeeds. Preview and test the paths first.
A common mistake is using a column name from another platform. In KoboToolbox XLSForm the visibility column is relevant.
Find the source of four answers
- Download the starter workbook from Start here.
- Find
school_id,consentandclassrooms_usableinsurvey. - Identify the list used by
consent, then locate its choices. - Add a Text row named
respondent_rolewith the label βWhat is your role at the school?β - Save the workbook under a new filename and preview after upload.
Model answer
The consent row has type select_one yn. Its choices are the rows with list_name = yn. The new Text row belongs in survey.
Diagnose an XLSForm error from the row that caused it
When an upload fails, first read the named sheet and row in the error message. Do not replace the whole workbook or rename several fields at once. Compare the row with the question immediately before it and with the matching rows in choices.
| Symptom | What to inspect | Smallest useful test |
|---|---|---|
| A Select One question has no options | The list name after select_one and each matching list_name in choices | Correct the list name, upload, then open that question in preview |
| A logic expression names an unknown question | The spelling and case of the referenced name | Change the reference and test both sides of the rule |
| The form opens but a number cannot be entered | type, constraint and required status | Try a blank, a valid boundary and an invalid boundary |
| Export contains two columns for one concept | Whether a question name changed between versions | Compare old and new workbook versions; keep a documented column map |
Question names are data column names. Use short, stable names such as classrooms_usable. Avoid putting punctuation, spaces or a changing year in them. Labels can change when wording is improved; changing names during fieldwork needs an explicit data plan.
Module 4 check
Answer every item. A perfect score opens the next module. After three complete attempts, the course shows the answer key so you can continue.
Official KoboToolbox references
Skip logic and validation
relevant, required and constraint
- Write visibility rules
- Test a select-many condition
- Test boundary and missing values
Start with the rule in words
Write βAsk the respondent's role only when consent is Yes.β Then translate it into a true/false expression on the follow-up question:
relevant
${consent} = 'yes'${consent} reads the earlier answer. 'yes' is the stored choice name. When the expression is true, the question appears. Put the rule on a begin_group row to control an entire section.
Consent branch
Visibility, required answers and validation do different jobs
| Question to ask | XLSForm column | Example |
|---|---|---|
| Should this question appear? | relevant | ${consent} = 'yes' |
| Must the visible question have an answer? | required | yes |
| Is the proposed answer in range? | constraint | . >= 0 and . <= 120 |
| What should the collector see after an invalid answer? | constraint_message | Enter a count from 0 to 120. |
The dot means the answer to the current question. Do not use ${classrooms_usable} as a substitute for the dot when validating that same question.
Test boundaries and missing values
For a classroom count from 0 to 120, test β1, 0, 120 and 121. Check whether a blank answer is allowed. If the question is required, blank must stop completion; if it is optional, the range rule should not silently turn blank into zero.
Reject
Accept
Accept
Reject
In a real project, set a maximum that makes sense for the sample; 120 is only a teaching boundary.
Select One and Select Many need different tests
A Select One answer is one code, so ${electricity} = 'grid' is appropriate. A Select Many answer can contain several codes. Use selected(${facilities}, 'other') to show a text question when Other is selected alongside any other facility.
type name label relevant
text facility_other Describe the other facility selected(${facilities}, 'other')${facilities} = 'other' is unreliable when the answer includes both water and other.Expression drill
Write the relevant expression that shows the respondent section when the Select One question consent stores yes. The choices are yes and no.
Add two rules and test both branches
- Place
${consent} = 'yes'on the respondent question or its group. - Put
. >= 0 and . <= 120on the classroom count and add a clear error message. - Add
facility_otherand show it withselected(${facilities}, 'other'). - Preview consent No and Yes; facilities water only, Other only, and water plus Other; all four count boundaries.
Expected results
Respondent questions appear only for Yes. The Other text field appears for either selection containing Other. The count accepts 0 and 120 but rejects β1 and 121.
Test a change of answer, not only the first answer
A collector may select yes for consent, start the follow-up, then correct consent to no. Preview that exact path. The follow-up must disappear; check whether answers already entered there are cleared or retained in the saved record. Treat the observed behavior as a data issue, not just a screen issue. Repeat the test when editing a submitted record, because a later form version can affect editing differently from new entry.
consent=no: no respondent or facilities questions should be required.consent=yes,classrooms_usable=0: zero is a valid count and should not be confused with a blank.consent=yes,classrooms_usable=121: the constraint should stop submission with an actionable message.facilities=water other: the Other text should appear; change to water only and confirm the follow-up disappears.
Record the expected and actual outcome for each case. If a rule fails, point to the question name and expression that caused it. That gives a second form designer enough information to reproduce the issue.
Module 5 check
Answer every item. A perfect score opens the next module. After three complete attempts, the course shows the answer key so you can continue.
Official KoboToolbox references
Calculations and form structure
calculate, groups and repeats
- Create a derived value
- Choose a group or repeat
- Plan repeat exports
Calculate a value only after defining what it means
A calculate row stores a derived field and normally has no visible label. If a school reports six usable classrooms and two unusable ones, the total is eight. Write the relationship first, then the expression:
type name label calculation
integer classrooms_usable How many classrooms are usable?
integer classrooms_closed How many are closed?
calculate classrooms_total ${classrooms_usable} + ${classrooms_closed}If either source can be blank, decide whether blank means unknown or zero. Do not silently treat an unanswered count as zero unless the questionnaire specification says so. Test the calculation after changing and clearing each source answer.
Groups organize; repeats multiply rows
A group puts related questions together, such as βSchool facilities.β A repeat asks the same block for each item. For a classroom inventory, one repeat instance is one classroom.
type name label
begin_repeat rooms Classroom inventory
text room_code Classroom code
integer seats Number of usable seats
select_one yn in_use Is this classroom in use today?
end_repeatIf you want exactly the number entered in classrooms_usable, the repeat can use a repeat_count expression. Decide whether that count should be fixed or whether the collector may add and remove rows. Test what happens when the source count decreases after entries have been filled.
Read repeated data as a separate level
One school submission can have several classroom rows. In the standard XLS export, the main sheet has one school visit row and the rooms sheet has one row per classroom. The main CSV download does not contain repeat rows. The exported _index and _parent_index fields help link them.
| Main sheet | rooms sheet |
|---|---|
| S001, consent yes, 2 classrooms | A01, 30 seats, parent S001 |
| A02, 28 seats, parent S001 |
This table shows the idea; the real export uses system identifiers rather than the school ID alone for the parent-child link. Keep the school ID as a study identifier and preserve the export's system columns during the merge.
Record two classrooms
- Add
classrooms_closedand a calculate row namedclassrooms_total. - Create the
roomsrepeat withroom_codeandseats. - Enter rooms A01 and A02. Change one seat count, then check the saved repeat.
- Test the total with two numbers, one blank answer, and a corrected number.
- Write down how many main rows and repeat rows you expect from one school visit.
Model check
One completed visit gives one main row and two rooms rows. The intended behavior with blank inputs must be chosen and tested before launch.
Keep summary counts and repeat rows consistent
The school form asks for a summary count of usable classrooms and also has one repeat row per classroom. These answer different questions: the summary is the reported total; the repeat is the inventory actually entered. If the study expects every usable classroom to have an inventory row, define that rule before programming. If only selected rooms are inventoried, say so in the question label and do not compare the two totals as if they must match.
| Test record | Summary usable count | Repeat rows | Supervisor action |
|---|---|---|---|
| S002 | 2 | A01, A02 | Accept if both rows meet the inventory rule |
| S003 | 3 | B01, B02 | Ask whether a third room was missed or the count was wrong |
| S004 | 0 | None | Confirm that zero is plausible for this visit |
The completed example lets collectors add repeat rows and leaves this consistency review to the supervisor. It does not force a repeat count from classrooms_usable. A fixed repeat count can prevent accidental omissions, but changing the count after entering rows needs careful testing, especially when the count is reduced.
Module 6 check
Answer every item. A perfect score opens the next module. After three complete attempts, the course shows the answer key so you can continue.
Official KoboToolbox references
Long lists and languages
choice filters, translations and media
- Build a cascading choice list
- Keep stored codes stable across languages
- Check GPS and media requirements
Filter a long list from an earlier answer
Suppose a school visit first selects a province, then a municipality. A long municipality list is easier to use when it only shows options for the chosen province. In XLSForm, a column in choices stores the parent code, and choice_filter on the municipality question compares it with the answer.
survey sheet
type name label choice_filter
select_one province_list province Province
select_one muni_list municipality Municipality province_code=${province}
choices sheet
list_name name label province_code
muni_list m01 Municipality A p01
muni_list m02 Municipality B p01
muni_list m03 Municipality C p02The names p01, m01 and so on are illustrative. Check the exact spelling and codes in both sheets. Test at least two provinces, including one with no matching municipality, to find a blocked path.
Translate the respondent-facing text
Use language-specific columns such as label::English (en) and label::Filipino (fil). Translate choices, hints and error messages too. Stored question names and choice names remain the same across languages.
| name | label::English (en) | label::Filipino (fil) |
|---|---|---|
school_id | School ID | ID ng paaralan |
consent | Does the respondent agree to participate? | Pumapayag ba ang respondente na lumahok? |
These are examples of the column structure, not approved survey translations. Have the project's qualified translator review consent text and all terms whose meaning affects measurement.
Prepare for location and media questions
A geopoint question depends on device location services and field conditions. Decide where the collector should stand, how long to wait for a fix and what to do when a point cannot be collected. An image or audio question produces a file attachment. Test device storage and upload on the actual field method.
Test a small cascade
- Add two province codes and three municipality choices to a copy of the workbook.
- Set
choice_filteron municipality. Preview each province and record the options shown. - Add a second language to School ID, consent choices, one hint and one validation message.
- Preview every language; check that exported answer codes stay the same.
What should you catch?
A province with no matching municipalities gives the collector no usable option. A missed translation leaves one part of the form in the other language.
Module 7 check
Answer every item. A perfect score opens the next module. After three complete attempts, the course shows the answer key so you can continue.
Official KoboToolbox references
Test, deploy and update
Form versions and release checks
- Test the critical response paths
- Deploy and redeploy deliberately
- Explain how updates reach devices
Build a test matrix before deployment
A preview that follows one happy path misses most form errors. Make a small table of inputs and expected behavior before you publish. The school visit needs at least these paths:
| Case | Input | Expected behavior |
|---|---|---|
| Consent refusal | consent=no | Respondent and facilities section hidden |
| Consent granted | consent=yes | Follow-up section visible |
| Count boundary | β1, 0, 120, 121 | Reject, accept, accept, reject |
| Select Many | water plus other | Other text question visible |
| Repeat | Two rooms | Two rows in repeat export |
| Language | Switch language | Labels and messages translated; codes stable |
Use invented answers. Mark each result Pass or Fail and keep the test note with the form version.
Preview, deploy, then test a live submission
- Save all edits and preview the draft.
- Fix failed paths and preview again.
- On the Form page, choose Deploy.
- Open the deployed collection form and send one synthetic record.
- Confirm the record appears in Data and inspect its exported values.
Preview is a design test. A live submission checks the collection link, authentication, server receipt and export structure.
Understand redeployment
After you edit a deployed form, the Form page offers Redeploy. Saved edits are not public until redeployment. Web forms may ask the collector to refresh. KoboCollect users must download the updated form while connected.
| Change after collection starts | Possible effect |
|---|---|
| Change a question's data column name | New column appears; older values remain under the former name |
| Reverse choice code meanings | Old and new records become hard to compare |
| Add a required question | Editing an older submission may demand a new answer |
| Remove a question or add skip logic | Editing an older submission can affect earlier answers |
Run the pre-deployment test
- Use the matrix above and record your results.
- Fix every failed critical path. Then deploy the practice form.
- Submit one synthetic record through the method you intend to use.
- Find the record in Data and check its stored codes.
Release rule
Do not treat a successful upload or preview as proof that the field workflow works. The live test submission must reach the server and export as intended.
Write a release record that a field team can use
For each deployment, keep the form ID, version, deployment time, source workbook filename, change summary, tester, and a link or location for the test results. Add the action collectors must take. βUpdated formβ is too vague; βconnect to the server and download version 20260924 before the next visitβ is testable.
Form: school_visit_practice. Change: corrected the consent rule and added a count limit of 0β120. Tests: refusal, Yes branch, β1, 0, 120 and 121 passed in preview; one synthetic web submission appeared in Data. Collector action: refresh the web form or obtain the updated form in KoboCollect while online. Open issue: Android offline test pending.
When a field team reports a problem, ask which form version was on the device, whether the record was sent, and which test input reproduces the problem. Keep the older workbook so the team can compare behavior across versions.
Module 8 check
Answer every item. A perfect score opens the next module. After three complete attempts, the course shows the answer key so you can continue.
Official KoboToolbox references
Collect with web forms
Browser collection and offline mode
- Choose a web form mode
- Test authentication and offline behavior
- Check that a submission reaches the server
Choose the web form mode
KoboToolbox web forms run in a browser on a computer, phone or tablet. They can support online and offline collection, but the specific mode and device must be tested before fieldwork. On the Form page, the Collect data area offers modes including Online-Offline (multiple submission), online-only variants and View only.
| Mode | What it is for | Test before use |
|---|---|---|
| Online-Offline, multiple submissions | Field entry that may lose connection | Open and cache the form, enter offline, reconnect and confirm upload |
| Online-Only, multiple submissions | Repeated entries on a connected device | Behavior after interruption |
| Online-Only, single submission | One form at a time via a link | Whether a respondent can reopen or submit again |
| View only | Review without sending data | That no live submission is possible |
Older materials call these βEnketo forms.β Current KoboToolbox documentation calls them web forms and notes that Enketo powered earlier versions.
Authentication is a project decision
By default, deployed projects require sign-in to open and submit. You can share a project with named users and give Add submissions permission. For a public respondent link, the project owner can allow submissions without a username and password. That setting changes who can send data, so review it deliberately.
What an offline browser test must show
- Open the deployed form while online in the intended browser and mode.
- Disconnect the device and start a synthetic school visit.
- Save or submit according to that mode. Close and reopen the form only if your field procedure requires it.
- Reconnect and confirm the submission reaches Data exactly once.
- Repeat on the type of device collectors will use. Browser storage and private-browsing behavior can affect offline work.
Write a field instruction from your observed result. βWorks offlineβ is not specific enough to tell a collector what to do when a device has no signal.
Test one link and one interruption
- Open the practice project's web form in the intended collection mode.
- Submit a consent-No synthetic record while online.
- In Online-Offline mode, run an offline test with a second synthetic record if your device permits it.
- After reconnecting, inspect the Data table for both records and check that the offline record was not duplicated.
What to record
Record the web form mode, browser, device, whether sign-in was required, whether the offline entry survived, and the time it appeared on the server.
When the network returns, verify the result
An offline form may still be stored in the browser after the enumerator presses a button that looks like submission. The collector needs a clear distinction between βsaved on this deviceβ and βreceived by the server.β After reconnecting, use the modeβs submission queue or status screen, then check the project Data table for the synthetic school ID. Do not enter the same visit again simply because the first upload is slow; that can create a duplicate.
| Observed problem | Check next |
|---|---|
| Form does not open offline | Was it opened and cached while connected, in the same browser and profile? |
| Entry appears saved but not in Data | Is it waiting to send? Did sign-in expire? Is the device connected? |
| Two records share one school ID | Compare submission times and contents before deciding whether one is a duplicate |
| Collector used private browsing | Repeat the offline test in the intended normal browser profile; local storage may not persist as expected |
Put the result of these checks in the field guide for the actual device and browser combination. A desktop demonstration does not prove that a shared field tablet has the same storage behavior.
Module 9 check
Answer every item. A perfect score opens the next module. After three complete attempts, the course shows the answer key so you can continue.
Official KoboToolbox references
Collect with KoboCollect
Android setup and synchronization
- Configure the app
- Distinguish drafts, finalized records and sent records
- Test an offline interview
Prepare the Android app
KoboCollect is the Android app for field entry. The app connects to the KoboToolbox server, downloads deployed forms and later sends records. The URL used by KoboCollect is different from the website URL: the Global server uses https://kc.kobotoolbox.org/, while the EU server uses https://kc-eu.kobotoolbox.org/. A private server supplies its own address. The Form page's Android collection instructions show the URL for that project.
- Install the current KoboCollect app on a supported Android device.
- Configure its project with the KoboCollect URL and an account that has permission to add submissions.
- Download the practice form while connected.
- Check the form title and version before going offline.
For several devices, a QR code can copy settings from one configured device. Treat that QR code carefully because KoboToolbox documents that it can contain account credentials.
Know where a record is
| App state | Meaning | Next action |
|---|---|---|
| Draft | Entered answers can still be changed | Complete or correct the interview |
| Finalized / Ready to send | Data entry is complete on the device | Connect and send |
| Sent | The app reports transfer | Confirm receipt in the server's Data page |
Finalizing on the device and receiving a record on the server are separate events. A field close-out routine should check both.
Test the offline cycle
- Download the form while online.
- Turn off network connectivity. Start a school visit with invented values and save it as a draft.
- Reopen the draft, complete it and finalize it.
- Reconnect. Send the finalized record. Check the server Data table.
- Change the practice form, redeploy and download the updated form to check how a version change appears on the device.
Write a collector close-out routine
- List the steps from opening a downloaded form through server receipt.
- Name the screen where an unsent finalized form waits.
- State when the collector needs a connection: first download, updates and sending.
- If no Android device is available, write a test plan for a colleague to execute.
Model routine
Download the correct version; complete the interview offline if necessary; review and finalize; send when connected; confirm that the server shows the record. Resolve unsent work before the device is reset or reassigned.
Trace a missing Android submission
Start on the device. A record still in an open form is not finalized. A finalized record may be in Ready to send. After sending, it should appear in Sent; then confirm server receipt in the project Data table. Use the synthetic school ID and the time of completion to match the device record with the server record.
| Device state | Meaning | Next action |
|---|---|---|
| Form still open | The interview is unfinished | Complete and finalize it after reviewing answers |
| Ready to send | Saved locally; server receipt is not confirmed | Connect, send, then check Data |
| Sent, absent from the expected project | Needs investigation | Check the app's server and account settings, form ID and project permissions |
| In Data once | Server received a submission | Inspect the stored values and any attachments |
If the device reports a send error, preserve the record and error message while troubleshooting. Do not clear app storage or remove forms as a routine fix: locally stored work could be lost. Supervisors should record the device, form version, last successful send and affected school IDs before changing configuration.
Module 10 check
Answer every item. A perfect score opens the next module. After three complete attempts, the course shows the answer key so you can continue.
Official KoboToolbox references
Review and export data
Tables, reports, repeat files and QA
- Choose the right export
- Link repeat rows to main submissions
- Run a basic daily QA review
Read the Data page before exporting
The Data area includes a table of submitted records and may offer reports, map and media gallery views. Use the table to check that test submissions arrived, which form answers are blank, and whether unusual values need investigation. A chart or map is a quick view, not a complete quality review.
| school_id | consent | classrooms_usable | First check |
|---|---|---|---|
| S001 | yes | 6 | Compare with six room entries if the repeat is complete |
| S002 | no | blank | Confirm the follow-up section stayed hidden |
| S003 | yes | 0 | Confirm zero is a real observation, not a missing answer |
Choose the export for the task
| Format | Use | Limit to remember |
|---|---|---|
| XLS (.xlsx) | Spreadsheet review and repeat groups | Each repeat has its own sheet |
| CSV | Main records for statistical tools or databases | Main CSV does not include repeat rows |
| GeoJSON | GIS work with locations | Check GPS quality and privacy first |
| Media ZIP | Collected images and audio | Handle sensitive files under the data plan |
| SPSS Labels | Syntax for applying labels in SPSS | This is not a native Stata .dta export |
Use Data β Downloads, select export settings, click Export and then Download. Record the export date, project version and whether values and headers use names or labels. Do not assume a CSV contains every part of a hierarchical form.
Link a classroom row to its school visit
In an XLS export, the main sheet has one row per submission. The rooms sheet has one row per classroom entry. KoboToolbox documents _index and _parent_index for linking these levels. Retain these columns while checking or merging the data.
| Main sheet | rooms sheet | Interpretation |
|---|---|---|
_index=1, school_id=S001 | _parent_index=1, room_code=A01 | A01 belongs to S001 |
_index=1, school_id=S001 | _parent_index=1, room_code=A02 | A02 belongs to S001 |
A small daily QA review
- Compare expected and received visit counts by collector or area.
- Check missing IDs, duplicate school IDs and consent paths.
- Compare
classrooms_usablewith the number of room repeat entries. - Review outliers in counts and GPS points that fall far from the sample area.
- Document each query, correction and decision. Do not edit a record just to make a chart look plausible.
Inspect three practice submissions
- Export the school visit project as XLS and CSV.
- Count main rows and classroom rows. Explain any difference.
- Find
school_id,consentand the export's parent link columns. - Write three QA checks you would run every field day.
Model checks
For three visits with two rooms in one visit, expect three main rows and at least two room rows. A good check examines missing IDs, consent logic and room-count consistency.
Turn a suspicious export row into a query
Data review should produce specific questions for the field team. βBad dataβ gives no one a way to act. A useful query identifies the record, variable, observed value, expected range or relationship, and the decision needed.
S003, visit date 2026-09-24: classrooms_usable=3 but the rooms sheet has two inventory rows. Please confirm whether one room was omitted, whether the summary count is wrong, or whether the inventory was intentionally partial. Do not overwrite the raw export while this is unresolved.
For each export, record the project, export time, selected form version range and format. Compare submission count with the field log, check duplicate school IDs, missing consent, out-of-range counts, and repeat rows without an identifiable main record. A code such as grid is the stored answer; a translated label shown in a report is for reading. Keep those two representations distinct when merging data.
Module 11 check
Answer every item. A perfect score opens the next module. After three complete attempts, the course shows the answer key so you can continue.
Official KoboToolbox references
Sharing and data protection
Permissions and public access
- Map roles to permissions
- Test row-level access
- Check public settings before sharing links
Make a permission plan before inviting people
KoboToolbox has project-level settings and permissions for named users. A data collector may need Add submissions without access to all existing records. A supervisor may need View and Validate submissions. An analyst may need View submissions and downloads. A manager may need to edit the form or settings. Give each role the access it needs for its work.
| Role | Typical rights to consider | What to test |
|---|---|---|
| Enumerator | View form, Add submissions | Can send a record; cannot browse all records unless intended |
| Supervisor | View and Validate relevant submissions | Can access only the intended area or collectors |
| Analyst | View submissions, export | Can obtain the required fields under the data policy |
| Project manager | Manage project, if required | Can change settings; account ownership remains clear |
Permissions can imply other rights, so verify the actual behavior with a second test account. Row-level permissions can restrict access by submitting user or by a condition such as an area code.
Public form access and public data access are different
A form can be configured for submissions without a username and password. Separately, a project can allow anyone to view the form or view submitted data. Public submission access may be suitable for some respondent surveys; public data access is a much larger disclosure. Check both settings before sending any link.
Test the effective access
- Write down the owner and each collaborator's role.
- In a practice project, inspect Settings β Sharing without changing your live projects.
- Check the form's anonymous submission setting and the project's public data setting separately.
- Use a signed-out browser window or a test account to verify what an outsider or collector can actually see.
- Record the results in your launch checklist.
Project history can help trace changes, but it does not replace a permission test. A person with Manage project can alter access, so assign it deliberately.
Write and test a sharing plan
- Prepare a two-column matrix for one enumerator and one supervisor.
- State whether each may add, view, edit, validate or delete submissions.
- Decide whether the school visit form needs an anonymous link.
- Explain how you would test access without using a real respondent record.
Model principle
The enumerator needs to submit but may not need to see every school's data. The supervisor sees the records they review. Public data viewing stays off unless the study has explicitly approved it.
Test permissions with each role
Write down what each person must do before granting access. For the school pilot, a collector needs to submit records, a supervisor needs to see and resolve assigned data issues, and an analyst needs a controlled export. The project owner should retain authority over form changes and permissions. The exact permission switches depend on the chosen workflow, so test them with separate accounts on the same server.
| Role | Must be able to do | Must verify separately |
|---|---|---|
| Collector | Open the deployed form and submit a synthetic record | Whether submitted data can be viewed or edited |
| Supervisor | Find the test record and review the fields needed for QA | Whether access is to all records or only a defined subset |
| Analyst | Download the approved export | Whether media and identifying fields are included |
| Project owner | Manage form versions and collaborators | Whether any public access switch is enabled |
A sharing dialog shows intended permissions; a sign-in test shows effective permissions. Have each tester perform the task under their own role and record the outcome. If the form is available without sign-in, test separately whether its submissions can be viewed without sign-in. Recheck after any permission change.
Module 12 check
Answer every item. A perfect score opens the next module. After three complete attempts, the course shows the answer key so you can continue.
Official KoboToolbox references
Reference data and integrations
CSV lookup, linked projects and API
- Choose a lookup method
- Explain when data refreshes
- Protect private exports and credentials
Choose the data source from the update need
| Need | KoboToolbox mechanism | What to check |
|---|---|---|
| Look up school details from a prepared list | CSV in project media and pulldata() | Unique IDs; file version; device refresh |
| Use answers from another KoboToolbox project | Dynamic data attachment | Parent submissions; online sync delay; offline download |
| Refresh an analysis file regularly | Named synchronous export | Authentication; repeat format; refresh interval |
| Send new submissions to another service | REST Services | Destination, retries, duplicates and later edits |
Look up a school from a CSV
Prepare schools.csv with one row per school and a unique ID. Upload it to the project's media. A calculation can retrieve the school name when the collector enters the ID:
school_id,school_name,province
S001,Example School A,p01
S002,Example School B,p02
pulldata('schools', 'school_name', 'school_id', ${school_id})Test an ID that matches, one that does not and one that has leading zeros. KoboToolbox treats pulled CSV values as text; convert a value before numeric arithmetic. Updating the CSV or form requires a controlled refresh on field devices.
Linked projects are a different source
Dynamic data attachments use submissions from a KoboToolbox parent project rather than a standalone CSV. This can help a follow-up form use baseline data. It is not instantaneous in every setting. Current documentation describes an online sync delay and requires the child project to download parent data before offline use. Design a fallback for a newly submitted parent record that has not reached the field device yet.
Exports and REST Services solve other problems
A synchronous export provides a configured CSV or XLSX view for Excel, Power BI or another authorized client. Use XLSX if repeat data is needed. The JSON API is for scripts that handle raw records. REST Services can send a newly created submission to an external service; KoboToolbox says later edits to that submission are not sent by this feature. External systems therefore need a reconciliation plan if corrections matter.
Match four field needs to four tools
- School list prepared before fieldwork: choose a data source and state when it changes.
- Follow-up survey uses last month's submitted records: choose a source and describe the offline refresh.
- Daily dashboard needs repeat rows: choose an export format and access method.
- A notification system needs new submissions: describe how later edits will be reconciled.
Model choices
Use a CSV lookup, dynamic data attachment, authenticated XLSX synchronous export, and REST Services or a scripted API flow respectively. Test each refresh and failure path before using it with real data.
Plan how reference data reaches offline devices
A school lookup is only useful when the device has the reference file or linked data before the visit. Decide who owns the list, when it changes, and what should happen if an ID is absent. For an XLSForm CSV attachment, check the column headers, the exact filename in the expression, and whether the new file reached the deployed form. Then download or refresh the form on the intended device while online and test an ID that exists and one that does not.
- Start with
S001andS002in the practice CSV; confirm both return the expected school name. - Add
S003to the source file and update the project attachment or linked source according to the workflow. - Before refreshing the field device, test whether it still uses the earlier list.
- Refresh or redownload as required, then confirm
S003works andS999shows the planned missing-ID response.
For a dashboard or scheduled extract, define the same timing question: how often does it refresh, how is a failed refresh noticed, and who can access its output? Store credentials outside a shared form workbook and give each integration only the access it needs.
Module 13 check
Answer every item. A perfect score opens the next module. After three complete attempts, the course shows the answer key so you can continue.
Build and test the school visit
Guided practice and final check
- Complete the questionnaire
- Run a field test and export
- Prepare a handoff note for a pilot
The specification
A school facilities team will visit a fixed sample of schools. The form must identify the school, record whether the representative agrees to answer, collect facilities information only after consent, inventory classrooms, and produce an XLS export that an analyst can check. Use invented IDs and locations for this capstone.
| Section | Required fields | Rule |
|---|---|---|
| Identification | school_id, visit_date | School ID is text and required |
| Consent | consent | Stored codes yes and no |
| Respondent | respondent_role | Ask only after consent Yes |
| Facilities | electricity, facilities, facility_other, school_gps | Other text only when Other is selected |
| Classrooms | classrooms_usable, classrooms_closed, classrooms_total | Counts 0β120; total derived from answered inputs |
| Classroom inventory | rooms repeat with room_code and seats | At least two test entries |
The completed example workbook contains one implementation. Review it after your own attempt. Its counts and wording are for training, not an approved study instrument.
Part A: build and preview
- Copy the starter XLSForm and give the copy a new filename.
- Complete the identification and consent rows. Confirm that
select_one ynfinds its choices. - Add a group for the respondent and facilities section. Put
${consent} = 'yes'on thebegin_grouprow. - Add electricity and facilities lists with stable codes. Add
facility_otherwithselected(${facilities}, 'other'). - Add classroom counts with
. >= 0 and . <= 120and a clear error message. - Add
classrooms_totalas a calculation. Decide how it behaves when one count is blank and record that decision. - Add the
roomsrepeat. Keeproom_codeunique within one school visit. - Save, upload and preview the workbook. Fix any validation error before deployment.
Part B: run six test paths
| Test | Input | Expected result |
|---|---|---|
| 1. Refusal | S001; consent No | Respondent, facilities and classroom section hidden |
| 2. Standard visit | S002; consent Yes; 2 usable, 1 closed | Follow-up visible; total equals 3 |
| 3. Other facility | water and other selected | Other text appears |
| 4. Count boundary | β1, 0, 120, 121 | Reject, accept, accept, reject |
| 5. Repeat | A01 and A02 | Two classroom rows in export |
| 6. Change answer | Change consent Yes to No | Follow-up disappears; inspect any previously entered answer behavior |
Write down actual results. A test case passes only when the displayed form and stored values match the expected result.
Part C: deploy and collect
- Deploy the practice form after the preview passes.
- Submit at least two synthetic records through the web form, including one refusal.
- If Android is available, download the form in KoboCollect, complete a record offline, reconnect, send it and confirm server receipt.
- Record the deployed version and collection method for each test.
Do not use existing real projects or submissions. Do not delete anything from your KoboToolbox account to make room for this practice.
Part D: review the export
- Download XLS and identify the main sheet and
roomssheet. - Check the number of main submissions and repeat rows against your test log.
- Inspect
school_id, consent codes, optional blanks and classroom totals. - Use
_indexand_parent_indexto link a classroom row to its visit. - Write one query for any unexpected value or missing row. Keep the unedited export as evidence.
If S002 has two room entries, the main sheet has one S002 row and the repeat sheet has two rows linked to it. classrooms_total should equal 3 if the source counts were 2 and 1 and both were answered.
Part E: hand the project to a field team
Write a one-page handoff note with:
- Project server, owner, form version and date deployed.
- List of question names and stored codes that must remain stable.
- Collection mode, authentication method and device update procedure.
- Permission plan for enumerators, supervisor and analyst.
- Test matrix with results and open issues.
- Export procedure and daily QA checks.
A project is ready for a small pilot when the critical paths pass on the intended devices, test submissions reach the server, exports contain the expected structure, and access has been checked with the relevant user roles.
Keep an evidence pack
- Your XLSForm copy or saved Formbuilder source.
- Completed six-path test matrix.
- Synthetic XLS export with main and repeat sheets.
- One-page field handoff note.
Self-review questions
Can another person identify each field and stored code? Can they reproduce your test? Can they tell whether an Android record has reached the server? Can the analyst link the classroom rows? If any answer is No, revise the handoff before a pilot.
Independent extension
When the core capstone works, add a prepared school list with pulldata(), or add a province-to-municipality choice filter. Document how the reference data reaches a collector who will work offline. Test a missing school ID or a province with no matching municipality.
Module 14 check
Answer every item. A perfect score opens the next module. After three complete attempts, the course shows the answer key so you can continue.