The Interledger Community 🌱

Cover image for Geo-limited monetization: integrating Web Monetization and GeoIP services — Grant Report #2 (Final Report
Bill Thompson
Bill Thompson

Posted on

Geo-limited monetization: integrating Web Monetization and GeoIP services — Grant Report #2 (Final Report


When Tim Berners-Lee created the HTTP status codes, hidden amongst the now notorious 500 and 404 errors he defined a relatively unknown error code: “402: Payment Required”. This was born out of an expectation that people would pay for access to pages on the World Wide Web once the requisite technology had been developed.

After three decades, it still remains “Reserved for Future Use”, despite several attempts to implement it.

The Web Monetization API (WMA) is a proposed internet standard which aims to finally bring the 402 error code to fruition. It defines a mechanism through which users can stream micropayments and send tips to websites, creating a new revenue stream for online services.

WMA is a Javascript browser API which allows payment streams to be opened while a user is visiting a website. This is distinct from the general concept of website monetisation, which is the process of converting a website’s traffic into revenue through a variety of means.

While the BBC has no plans at the moment to use the WMA, as part of its broader remit to explore new technologies BBC Research & Development decided to investigate its functionality as a potential mechanism for monetising non-UK properties.

This is of interest because the BBC ‘s funding mechanism means that it does not put adverts on its UK services, including the website. However, it does seek to generate income when people from outside the UK visit BBC properties, for example by serving the home page with paid advertising.

Because the BBC has to distinguish between UK and non-UK audiences when generating income, our specific goal was to investigate the utility of the current implementation of the WMA as a way to monetise websites that use GeoIP mapping to implement geographic restrictions on the services they offer users.


Using the funding provided, we created an internal team led by senior producer Ian Forrester and research engineer Iain McClenaghan, reporting in to Head of Public Value Bill Thompson. They set out to examine the potential of these technologies, building a prototype using the WMA to see if it was possible to limit micropayment requests to visits from non-UK site visitors.

Having completed a wide-ranging literature review to get an understanding of the context and ramifications of adding payments to the web, we built a number of demonstrators, ending with a prototype that uses the WMA.

Having assembled the technical understanding and support systems needed to deploy a geo-linked monetised site, we ran our trial with live users.

Initial Research

Currently, WMA is enabled by adding a link to the head of a web page. This includes the payment pointer to which WMA Provider should instantiate a payment stream.

It is then up to the website to decide how to use WMA. It can be entirely passive monetisation, providing the same experience to paying and non-paying visitors while funds are transferred in the background, or it can be exclusionary and implement a hard paywall for visitors so that non-monetised users see different content.

For the first stage of our experiment, we set up a series of demonstrations of web monetisation using the React module published by Coil. This was used to implement a GeoIP based system for determining payment rate in which the rate can be linked to a country’s relative purchasing power. The payment system was then used to provision advertising, exclusive content, and a full paywall on a demonstration site, as part of the preparatory work for building the trial site.

In the process of this work some unexpected features of the WMA were encountered. Because the Coil extension relies on reading the Payment Pointer (the Interledger address to which funds should be transferred) it is possible to edit the extension and send funds to an arbitrary wallet. This could be done either by editing and compiling a new version of the extension, or by injecting the appropriate tag into a non-monetised page. We have shared these results with Interledger.

Finally, we developed a trial protocol to allow authenticated BBC users to visit our demonstration website and receive visual feedback of which country the site believed they were visiting from, and the payment rate for that country.

This has formed the basis of our final trial.

The Interledger Protocol has been designed to enable the transfer of arbitrary amounts of money between currencies with low overheads. The Interledger Foundation state that their vision is to have “a more equitable and creative global society through an open payments network in which anyone can seamlessly earn, share, buy, sell and trade with anyone else in the world” [5].
WMA is a Javascript browser API which allows for payment streams to be opened while browsing a website. It builds on top of the Interledger Protocol to allow for arbitrarily small amounts of money to be sent, which allows websites to charge per second of content viewed by a user.
WMA operates through the interaction of three parties: the User, Receiver, and Provider (also known as a Sender). The User is the party who has accessed a monetised website in their browser; the Receiver is the account which the website wants funds deposited into; and the Provider is the intermediary who pays into this account on behalf of the user.

The basic interaction of these entities is shown here:
How Coil works

User Trial

We used the Coil extension, which constrained our use cases. In order to use Coil, a user must sign up to a $5 per month subscription. This allows them $5 worth of credit to spend on WMA-enabled websites. They must also download Coil’s browser extension, which handles the instantiation of a micropayment stream using the Interledger Protocol.

When the user visits a monetised site, Coil instantiates a stream of $0.0001 per second to the site’s WMA Receiver [19]. With $5 per month to spend, this rate provides enough money for around 30 minutes per day. Once a user has reached $4.50 of usage (12.5 hours), Coil then throttles the amount sent per second in order to not go over the $5.

They also have a tipping feature, which allows users to send larger amounts of money (in the range of $1—$10) which they have added to their account.

How it works

The Coil extension works by examining the HTML of each website a user visits. It looks for a WMA meta tag on the active browser tab in the form:
<meta name='monetization' content='\$'>

Once it finds the meta tag it extracts the payment pointer from it, and then opens an ILP payment stream to that address. During this time, a ‘monetizationpending’ event is emitted which websites can use to detect monetisation is attempting to start.

On establishing a connection, a ‘monetizationstart’ event is emitted, which can allow for a site to confirm the payment stream has begun.

At this point micropayments are sent over the ILP stream every second, and each payment triggers a ‘monetizationprogress’ event for websites to react to. These were the events we were seeking to track.

Initial Experiments

We ran several experiments which required an integration with our internal GeoIP system, so we have created an example of conditionally enabling Web Monetization which uses a free GeoIP service.

This code is considered the main contribution of this trial’s implementation and as such is free to inspect, at However, Coil’s decision to stop operating and transfer its IP to the ILF will affect the functionality of the code. The rest of the experiment reuses publicly available modules (such as and standard React and Bootstrap components.

The integration code
The integration code

We began with a simple counter that tracked the WMA process through ‘MonetizationStartEvent‘ and ‘MonetizationProgressEvent‘. The former is emitted when “The first non-zero payment is successfully sent”, and the latter is emitted when “an ILP packet with a non-zero amount has been fulfilled by the page’s Web Monetization receiver”. This used the npm module developed by Coil co-founder and CTO Ben Sharafian to access this state via React, including a counter function which this demo makes use of. The basic counter is shown in the figure:

Example of WMA counter
Example of WMA counter

The flat pricing of $0.0001/s ($0.36/h) implemented by Coil is based on a US-based conception of what an acceptable cost is. As a proof of concept, a GeoIP based system for determining payment rate was developed in which rate can be linked to a country’s relative purchasing power. This relied on accessing the client IP address and sending it to the BBC’s GeoIP service to produce an ISO country code based on the best estimation of a user’s location. This was combined with’s measure of Purchasing Power to provide an estimate of how much $0.36 per hour is equivalent to around the world, and this was then used.

The Coil extension does not allow the payment rate or amount to be modified as it is controlled on their server, but it can be modified on the client side for the purposes of demonstration. The results are combined into a GeoIP component which displays a user’s country code and price per hour:

GeoIP Component
GeoIP Component

We also experimented with dynamically showing adverts through manipulating the site CSS, offering visitors access to exclusive content via monetisation, and implemented a Paywall where the “exclusive content” is the entire article, as opposed to just one element of it. This was done to show that WMA can be easily used to implement paywalls that could be potentially exclusionary if implemented across the web.

Example of website showing adverts
Example of website showing adverts

Example of website where monetisation has hidden adverts
Example of website where monetisation has hidden adverts

Example of non-monetised website without exclusive content
Example of non-monetised website without exclusive content

Example of monetised website with exclusive content
Example of monetised website with exclusive content

Example of non-monetised website with paywall
Example of non-monetised website with paywall

Example of monetised website with paywall
Example of monetised website with paywall

The User Trial

A major issue with a hypothetical implementation of website monetization for the BBC is to avoid charging UK residents for BBC services as our funding mechanism does not allow this. Conducting a trial to show this is possible using the BBC’s GeoIP systems would provide evidence as to the feasibility of this. However, the underlying accuracy of such a trial is likely to be the same as the accuracy of the GeoIP system.

In order to conduct the trial, the Variable Rate demonstration described earlier was adapted. Rather than adjusting the payment rate based on GeoLocation, the injection of the monetisation meta tag was controlled instead.

A simple client/server system was designed to deliver this system as an online trial, the architecture of which is shown below. We developed a trial protocol to allow authenticated BBC users to visit our demonstration website and receive visual feedback of which country the site believed they were visiting from, and the payment rate for that country.

Diagram of trial architecture
Diagram of trial architecture

We had originally hoped to run the trial using one our public-facing sites, asking existing Coil users to visit the site and complete our survey. However BBC infosec requirements and concerns about gathering enough participants prompted a change of direction and we set up the trial site on one of our testing servers and limited access to BBC staff.

This also allowed us to give participants access to a pre-loaded trial account so that if monetisation is active when they visit they are not personally paying, which had been a concern over a public trial.

For the trial we wanted to:

  • Establish whether GeoIP accurately detects location of participants
  • Establish whether a mechanism to turn WebMon on or off based on this is effective

We set up a website which estimates the location of participants through their IP address and will switch Web Monetisation off or on depending on whether they are in the UK. Participants were asked to enter the country they are actually accessing the website from, and to select whether or not the Coil extension has begun to stream money. The site then reported back the estimated and actual (reported) location of the participant, along with whether the system enabled monetisation and whether the participant observed monetisation.

The trial welcome screen
The trial welcome screen

The trial screen
The trial screen

For each trial participant we collected

  • The GeoIP estimated location
  • The participant’s self-reported location
  • Whether the participant thought monetisation was triggered
  • Whether Coil was active We shared details of the trial widely across BBC internal communication channels with an explainer text (see box)

The explainer text reads:
Web Monetisation is a technology which allows websites to receive “micropayments” from users - this can mean anything from a hundredth of a penny, to a couple of pounds. This works similarly to some phone contracts, where you could pay per second for a call, or a make a one-off payment to send a text.
This means that instead of having a paywall, websites could charge per second of use. The current rate used for this is $0.36 per hour (that’s one hundredth of a cent per second). When we’re used to a largely free internet, this can seem like a scary idea.
It’s our job at BBC R&D to pick apart the technology and the consequences of using it, and that’s why we are running this trial. We’re trying to see whether the systems the BBC uses to detect what country you are in can be linked to Web Monetisation technology - not just to see whether the BBC could avoid charging UK residents; but also to explore if more equitable rates could be offered in countries where $0.36 per hour is not a fair price.
To take part in this, you need to download the Coil extension and activate the account we’ve given you by going to and following the instructions (no credit card needed). To test it is working, open this website: and then open the Coil extension. It should tell you you are streaming payments to the site. If not, get in touch and we can help you out.
You’re then ready to go to and fill in the two questions we need to help out!

Trial Results

A successful interaction was defined as one where the user’s reported location and the location provided by the GeoIP system matched, in addition to the user’s report of Coil’s activity matching the system’s report. The proportion of successful interactions was 54%, as seen in the following figure:

Success rate of GeoIP Experiment
Success rate of GeoIP Experiment

The ways in which these interactions failed was explored, as shown in this figure:

Results of GeoIP Experiment
Results of GeoIP Experiment


The data available indicate that it is feasible to exclude users from being monetised when they are identified as being in the UK by the GeoIP service. When GeoIP was incorrect, it was due to situations such as someone in Spain being identified as being in France. No one in the UK had a GeoIP failure.

There was one instance of a user being outwith the UK but Coil not activating, probably because it had not been properly installed by the user. The most common error was someone in the UK thinking they were monetised when they were not.

These data points indicate that the experimental set up and/or Coil itself are not clear enough in their operation. The complexity involved in setting up participants introduces a high chance of error, as well the potential variation in participants equipment, and ease of accessing the Coil extension from a participant’s browser.

In particular, half of UK participants held the perception that the page had been monetised, which highlights the risk to the BBC that people in the UK would think they are being charged for services. Only two participants from outwith the UK took part due to being limited to internal recruitment, but it is notable that GeoIP was incorrect for both of them.


Given the uncertain future of its funding model the BBC has a large degree of motivation to explore alternative funding sources. The potential for website monetisation, and WMA specifically, to bring in profits from all of its online properties is attractive, though it should not do this without considering the impacts of such a decision on society.

We already make use of revenue sources such as advertising when displaying the website in particular countries, and it is possible that this could be replaced/supplemented with WMA through any of the models explored above.

We have demonstrated that the Interledger Protocol, as implemented through Coil, can interact with the commercially provided GeoIP system used by the BBC to restrict WMA activation to visitors from outside the UK, in line with the BBC’s regulatory requirements. More work needs to be done to determine whether the error levels here would be acceptable for a more public deployment, so that if independently of the BBC, this technology becomes mainstream, its use could be considered.


While the underlying Interledger Protocol presents a novel method for transferring money, it does not seem like it was chosen entirely for its technical suitability. The complexity it adds to WMA’s implementation is considerable, leading to security vulnerabilities in the recommended workflow.

In addition, while it purports to be a solution to the ad-driven model of internet funding, in practice it relies on nothing but the goodwill of website owners to implement their desired “exclusive content” model; leaving the specification open to paywalls as well the option to co-exist with advertising and data harvesting.

Whilst arguments can be made that the Internet is already a two-tiered system which financially and socially excludes people from society, it is not clear how WMA would do anything but worsen this situation. The financial pressure of paying to access websites coupled with the psychological pressure of making a cost-benefit analysis of every hyperlink would have a significant toll on people, and this may mean that even if the technical issues around control of WMA could be properly addressed the BBC would not choose to deploy the technology as it does not conform to our wider mission and public purposes.


We have successfully tested the web monetization API in conjunction with the BBC’s preferred GeoIP solution, finding limited accuracy and a degree of user confusion over Coil-based monetisation. Our trial design, though limited, has given us valuable data to feed into BBC R&D’s ongoing research-based advice to the BBC about emerging technologies and their utility and challenges.

The trial has demonstrated that as currently implemented the Web Monetization API does not seem to offer a viable path towards monetising geo-restricted websites in a way that meets the BBC’s needs.

Top comments (0)