Despite remarkable efforts, Internet access is still not a reality for all demographic groups across many regions of the globe. In many cases, basic cell phone coverage is still the best that is available.

In these scenarios, collection of information by SMS has been the method used by Ushahidi Platform deployers, in order to reach their audience.

One of the issues with SMS is that it’s not a great tool to fill in forms. In Ushahidi Platform, as soon as a survey includes a field other than “Description”, there’s an additional step needed to dissect each received SMS message and fill in the survey fields with that data. This is the process that some teams know as structuring. This is intensive manual work that causes a burden on teams, and at Ushahidi we love nothing more than making life easier to users of the technology we produce.

USSD for easy structuring

With USSD technology, filling each of the survey fields is done naturally by the target users, directly on their phones. Each of the questions in the survey will be asked on the user’s phone in succession. The technology works on both smartphones and feature phones.

We have recently been fortunate to have Timothy Olaleke working with us under a Google Summer of Code internship for the last months, putting together a Ushahidi Platform component that allows rendering nearly any Platform survey as a USSD flow on user’s phones.

Here are some of the highlights that describe what Timothy was able to accomplish:

  • The solution is delivered as a server-side service (henceforth “Platform USSD service”), written in Python, which communicates to a separate Ushahidi Platform installation.
  • There are some limitations in the types of fields that can be filled in the survey with USSD. Image fields are a prominent example of that.
  • Location fields can be filled by entering addresses (instead of coordinates). The address is sent to OpenStreetMap’s nominatim service, for geocoding into coordinates.
  • The service presents end users with hints to correctly format their answers and also validates their inputs. If the end user provides an answer that cannot be parsed into the survey field, the service will immediately repeat the question. This greatly reduces the frustration of having to answer the complete survey again just because something went wrong with one answer.
  • At the moment, Africa’s Talking is the only supported phone network gateway provider.

Please check out the video in this blog post, demonstrating Timothy’s work in action.

Cool! How can I give this a try?

Although the solution is still a first approach and not fully polished in conjunction with the Ushahidi Platform product, it certainly is functional. All this is open source and available for you to lay your hands on:

If you are interested in testing this on your project, please do reach out to us:

We would love to see USSD in Platform being further developed. Here are some things that come to mind:

  • We would like to work this into a feature available to all Ushahidi Platform users, regardless of their technical ability.
  • We would like to better integrate this with Platform’s existing SMS capabilities, in order to allow deployment admins to send followup messages to USSD reporters.
  • We would like to see compatibility for more USSD gateway providers included.
  • The Platform API USSD Service repository is open to contributions! We are very much looking forward to receiving feature requests and contributions.

Huge thanks go to…

  • Timothy personally for his great work! 🙌
  • Google Summer of Code for sponsoring the internship.
  • The Digital Impact Alliance for supporting Ushahidi’s participation in Google Summer of Code 2019

Internships at Ushahidi

We love working and learning with students! Although there are no open internships at the moment, we plan to have new internship opportunities in the future. If you want to hear from us when we open an application process, please reach out to

And as always, if you would like to know more about Platform and possibly get involved in the project, please feel free to check out anytime our intro docs and a few good first issues to start with!