How to use RapidPro to collect data on indicators

May 5, 2016

This post is to help you think through a number of steps if you want to use RapidPro to collect information on a set of indicators on regular basis. As a case we will look at how RapidPro and TracPro can be used for collecting information on indicators related to education.

Choosing the right indicators

Indicators are important as they help us describe or measure change. But when choosing indicators we need to be selective, and not create indicators for their own sake. We should constantly ask ourselves the question “Why is this indicator relevant and how will it help me measure or monitor progress and results?”. To use the well-known cliche: indicators need to be SMART: Specific, Measurable, Attainable, Relevant and Trackable.

Indicators related to education that could be monitored with RapidPro are for example:

  • Students attendance over time, e.g. on weekly basis, segregated by gender and/or grade, which we could compared against enrolment data
  • Teacher presence
  • Incidents of violence
  • Functioning WASH facilities, e.g. number of latrines in working order, availability of water, soap, etc.
  • Funds received by schools
  • Availability of books

How can RapidPro be used?

In the case of education monitoring (also called EduTrac), we could use RapidPro to regularly collect information on defined indicators in a systematic way. The collected data can then be displayed on a dashboard such as TracPro for monitoring and actionable purposes.

EduTrac is a real-time application that runs two core product components:

  1. RapidPro to manage contacts, groups, and communication with EduTrac end users, typically teachers, school administrators and parents, and
  2. A dashboard called TracPro that is used to display flow results for a set of indicators at the appropriate administrative level for the dashboard user (administrators, supervisors, partners, etc).

How does it work?

To illustrate the process involved in RapidPro, we will use an example in which we want to collect student attendance by gender, with the option of displaying that data against the total student attendance.

The first thing we need to do is to design a flow that interacts with reporters (e.g. teachers) to get the information we need.

1. In this example we use structured form to collect multiple data points in one SMS. The response should be submitted in such a way that RapidPro “knows” how to interpret the information. In our case, the first number represents the number of girls, and the second number represents the number of boys. The numbers are separated by a period (.).

In step 2, RapidPro waits for the contact to send the structured SMS which is stored as girls_boys.

In step 3, RapidPro takes the first piece of the SMS delimited by a period, e.g. 50 from “50.63”, and saves the result as the number of girls. This Rule Set looks like this:

RapidPro takes the second piece of data from the SMS in step 4, in this case 63 from “50.63”, and saves the result as the number of boys.

In step 5, RapidPro saves the total number of students using a Split by Expression step. RapidPro evaluates:

If the expression @(sum(flow.girls, flow.boys)) has a number, then categorise it as total and save the result as Total_Students.

The Rule Set for this looks like this:

In the last step (step 6) we send a message to the user referencing the total number of students as @flow.total_students and we use the values for @flow.girls and @flow.boys to calculate rounded percentages:


@(round(flow.boys/flow.total_students*100,1) which are returned to the user in the message.

In this example, the last message will look like this to the user:

From the flow above, the TracPro dashboard can now display the number of girls in attendance, the number of boys in attendance, or the total number of students. If we wanted to display female or male attendance as a percentage, we’d have to add a few steps to the flow:

In step 6, the percent girls and percent boys are displayed back to the contact, but they aren’t saved as flow variables, so they can’t be tracked in TracPro. Only saved variables can be displayed in TracPro!

To do so:

Add a step (7) in which RapidPro evaluates:

If the expression @(round(flow.girls/flow.total_students*100,1) has a number, then categorise as numeric and save the result as percentgirls.

The Rule Set for this looks like this:

In step 8 RapidPro evaluates the same for boys:

If the expression @(round(flow.boys/flow.total_students*100,1) has a number, then categorise as numeric and save the result as percentboys.

This message to the contact in step 9 is redundant, but it is just to check whether the calculations are correct. Once checked, it can be removed.

Now that percentgirls and percentboys are saved as flow variables, we can displayed them on TracPro. You can refer to the TracPro guide for more information on how to display polls and flow variables.

What format should the data be in?

When collecting data on indicators you need to think about the format the data is entered so that it can be easily analyzed for trends and performance issues. Most data collected in RapidPro will be open-ended, multiple choice (categorical), or numeric. When designing your flows in RapidPro, it’s important to think about how you want your data displayed in TracPro.


These responses could be displayed as a word cloud, where frequently used words are displayed larger than their less frequently used counterparts. In the example below, the RapidPro flow asks the contact to report on issues encountered at school and then waits for the response:

Rule Set in RapidPro:

The responses that are captured by RapidPro would look like this in TracPro:

Open-ended data aren’t always useful as we can only see separate words and not really understand the context.


Rule Sets can be used in RapidPro for branching contacts based on their response, but Rule Sets also affect the way data are displayed in TracPro. For instance, if we want specific categorisations to show in TracPro, the Rule Set in RapidPro has to be configured accordingly. In this example we ask contacts to indicate their main source of water.

Rule Set in RapidPro:

In TracPro the responses will be displayed like this:


When the Rule Set ‘has a number’ is selected in RapidPro, TracPro will display the numbers reported by the respondents. In this example we ask respondents to give us the number of P3 boys that are at school today with the question repeated on a weekly basis.

Rule Set in RapidPro

The total numbers over time will be displayed in TracPro as follows:

In TracPro we can see how many P3 boys are in attendance over time and compare the number against the enrolment data.


  • If you want to know more about EduTrac and how TracPro interacts with RapidPro have a look at this guide.
  • The flow used in this post can be downloadable here

We hope this post has been useful. In case of questions or comments you can reach us at, or join the RapidPro User Forum.