Scaling with Bitcoin: Automating identity verification

One of the biggest challenges we face as an international cryptocurrency Wallet and Exchange is identity verification. This turned out to be a serious bottleneck for us when Bitcoin reached a new peak in popularity at the end of 2017.


As part of Luno’s onboarding-pod, this was our team’s problem to solve. We have a developer for each platform (web, iOS and Android), a designer, a backend developer, and a product owner. Together, we take care of the entire onboarding process from verifying your email address and phone number, to levelling up an account so you can deposit local currency and buy Bitcoin.

The price rally of 2017 unearthed bottlenecks in our manual processes

Cryptocurrency markets can be highly volatile: In 2017, there was growing demand around cryptocurrencies that it caused a 3000% increase in the value of Ethereum when some major wall-street players announced they were getting involved. Rising worries about North Korea’s nuclear threat sent even Japanese investors, usually known to keep cash “under their mattresses”, flocking to alternative assets like crypto.


This excitement in the market should’ve been an easy win for us right? Wrong. With increasing demand we started identifying bottlenecks in our processes. The market price for most cryptocurrencies was “going to the moon”. Suddenly, Luno was observing a significant increase in customers reaching their deposit limits but urgently wanting to buy more Bitcoin.

Even though the Luno Exchange had been designed to scale up, but a sudden exponential influx of new applicants added thousands to our backlog. What used to be a healthy maximum two-day turnaround-time for customers now turned into a week, two weeks or even a month.

Why? Let’s take a look at our verification process.

Auto-humatic verification — Susan and the humans

For the most part, identity verification is very straightforward:

  1. A customer’s ID number and name are captured.
  2. An identity report validating an applicant’s address, date of birth, name and mortality is retrieved from a localised third party identity verification service.
  3. Verification proceeds if a match is found.
  4. Supporting documents may be requested.

This usually runs automagically. We’ve even given the myriad of automation solutions throughout our infrastructure an affectionate name: Susan.

“She” is responsible for anything we can train her to do. At the time, along with the verification procedure mentioned above, she had the ability to review any documents uploaded through advanced machine learning techniques and Google Cloud Vision. She could also check for simple things that would reject documentation, such as black and white documents, name spelling mismatches, identity report mismatch and cases where an identity was found on a sanctions list.

Only things that couldn’t be auto-classified needed to be handled manually.

In 2017, however, the number of unclassifiable applications grew exponentially: Susan kept passing roughly the same percentage of uncertainties to her human counterparts for manual evaluation but they simply don’t work nearly as fast as she does! (Sorry, humans.)

For some customers with all their docs in order, the turnaround was still near instant. (Go Susan!) All the others, however, needed to go into a queue to get human eyes on their situation and this queue became longer, because of innocent mistakes on one hand, and fake documentation on the other.

That’s how our response time grew from hours to days to weeks — not ideal at all.

Why did we even need a multi-level verification system? Why didn’t we just switch off verification, or at least loosen the reigns and allow more people to buy Bitcoin? We certainly would’ve seen more happy customers.

Why crypto-wallets like Luno need complex verification steps

Luno always aims to work collaboratively with banks, but it can be a complicated relationship at times. We have hundreds of thousands of customers depositing and withdrawing money in their local currencies to and from our bank accounts. To protect themselves from fraud, embezzlement and partnering with criminal activities, banks are regulated to track every penny coming in and out.

Exchanges like Luno are not yet regulated in the same way by the government, but to protect our customers, we self-regulate.

Alleviating pressure with more humans

As we continued through the crypto-craze, the length of our verification queues continued to grow. Each agent was responsible for around 4000 verifications. It was too much, but loosening verification was absolutely not an option.

At the same time, the continuous incoming stream of new customers didn’t really allow us to redevelop Susan either. The quickest and, in the end, only viable solution at the time seemed to be: Add more humans. We decided to hire temporary staff to come in as data capturers. Every available space in the office was occupied.

With this temporary solution in place, we managed to get through the end of 2017. But what happened next?

Making verification processes scalable

By January 2018, we were settling down to stable growth so we decided to start the year with a design sprint.

As onboarding-pod, our team’s purpose was to:

  1. Come up with one or more creative solutions to our identity verification problems and then
  2. Iron out as many of the wrinkles we could potentially face before beginning to build or code anything.

After a design-sprint with the entire team, one of the areas we identified for improvement was, unsurprisingly, automation. We started researching other vendors who specialise in helping financial institutions onboard customers. c. This involved scanning through a lot of documentation and implementing them on a trial basis.

In the end, we settled on Onfido, because:

  1. They had international support
  2. Their pricing system was one we could work with
  3. We could integrate with them directly server to server, keeping unnecessary SDK from being added to our frontend
  4. They have success stories from comparable clients.

Onfido describes themselves as “The world’s best identity verification engine for enterprises” but what we liked the most was that Onfido kind of works like Susan on steroids (Sorry, Susan). It’s trained on a far larger sample of international data and is better at handling edge cases so that we can get results far faster and far more accurately.

Onfido is very good at picking up on any discrepancies in the document type and rejecting fraudulent cases without the need for our human team to get involved.

Testing Onfido

In order to test whether Onfido would hold up in Luno’s specific use case, we first ran a couple of experiments:

The rate at which Onfido could update the status of a document made it look quite good:

  1. Onfido can indefinitely scale up the number of documents it can handle per second.
  2. Humans, on the other hand, can process only a limited number per minute, require training, office space, equipment and — of course — sleep.

What about the quality though? Can machine learning really identify everything a trained human agent can?

To test this, we added customers verified by Onfido to a quality assurance queue. The reviewers compared Onfido’s judgement to our policy rules and the decisions our own agents would have made. To our amazement and delight, Onfido didn’t even break a sweat! In the first 19 out of 20 cases, Onfido was spot on.

(The one grey area case was a selfie on top of a mountain — unlikely to be a live photo from the registration, which is one of the requirements we have.)

Collaboration of the giants: Susan and Onfido

So has Susan “cached” out, sipping virtual cocktails somewhere on a virtual island?

Not quite. Since Onfido is a paid service, it makes sense for Susan to handle fast, easy and obvious wins. Anything she has a problem with, she hands off to Onfido for a second opinion. Our human agents now only become involved if both of our autonomous giants are unable to make a decision!

Our engineering teams are always looking for ways to help us scale globally, to help upgrade the World to a better financial system. If you’re interested in helping us solve interesting challenges like this, click here to see our current software engineering openings.

Did you find this useful?