Financing your Free Software with Google AdSense

... or you have a new customer, Mister Free Software

If you are no longer a teenager and you develop free software, chances are that you have an hard time trying to make your paywork and your open source passion to play well together.

It actually depends on the way you contribute code. For some programmers it's just a distraction from the usual paywork time, small part of spare time spent for a good goal, having fun and learning something new. Other people think that most programming paywork is boring, and aim to spend as much time as possible writing free software. I'll focus on the last kind of programmer, the one that loves to write free software and more precisely the kind of free software he likes to write.

Actually for most programmers in the free software world to write software that's just free is not enough: they are hackers with specific interests, so they like to write a given type of software to solve a given problem. One may like to develop videogames, the other optimizing compilers, or security tools. So the software to write must be free and fun. This last point may appear obvious, but actually it isn't. For example you may be able to get a job into a software company where the software developed is licensed under the GPL. Just to say a name, you could get a work at MySQL AB.

This is for sure something nice, but it's not the same as to write free software with the philosophy of: What kind of problem I want to face today?. Also if you are in a company obviously you can't do what you like, you are told to develop a given feature, you like it or not, or to do some kind of boring work like to test if a given thing is passing every x.y.z standard, and so on. To make it short: it's not automagic that to write free software for a company is as fun as to write your unpaid software, where you are the only to decide what to do, in what language to do it, with what features and user interface, and so on.

It seems like that the only real world way to write software that's free and really fun to write, is to write it in your spare time. But wait, maybe you can change one thing: you could have more spare time to write software. What you need is some way to earn from your free software, in this way you can consider every dollar earned as paid by a virtual customer called Mister Free Software. Expecially if you are a freelancer this gets simple, the more you earn from your free software the more you will be able to spend time for this new cool customer! The problem now is... how to earn money from free software?

Ways to earn from free software

There are not so many ways to earn from free software, or better it's possible to compress all the ways in big categories. One of the most common ways is

1) Write cool software and make money selling services about it.

Let me tell this: it smells of a not so good idea. You are a programmer good at writing software. What you can do well is to write software, and what should you do in your time instead of writing more cool software? sell services. This is a good way to make money and create a little start-up, write cool software that's free and sell services, but it is absolutely not good for our goals: we want to write good software and have fun, not to create a service company. Let's try with another one.

2) Write free software with closed-source plugins.

That's more reasonable, even if there are a lot of people in the free software world that just don't want to have something to do with the closed-source idea. But speaking about the rest, it may work if your software is very well known and useful. Often there are alternatives to your program, and people will tend to use this alternatives if they provide an all-free solution. Of course you may be able to write a software that's so innovative, good and needed that this will work. Basically you need to have a Market outside the free software movement itself. That's not going to be easy, a small percentage of softwares are able to reach the point where people are happy to buy closed-source plugins, and this softwares require to be of some interest for companies. For example it's hard to sell closed-source plugins for an Instant Messaging client, still it's a nice piece of code that many programmers may like to write. So this other alternative appears to be more or less viable, but very hard to reach, and does not work for every kind of software. Also it may require a lot of hard work, so it's going to be more a full business that a way to get some money directly for what you are going to write because you like it. The next way is:

3) Write free software with a PRO closed-source version.

More or less the same reasoning of 2) applies.

4) Donations and micropayments.

Donations are what many are actually using in order to get some money, and it is nice. People use a given software, they find it useful and well coded enough to deserve some dollar. But unfortunately there are two limits about this: the first is that most users will just not pay nothing, so you need a very big number of users in order to earn a reasonable amount of money. The second problem is that currently there is no good micropayments service. If it was simple to charge the user for 10 cents every download it may be interesting. For the people downloading the software it's near to get it for free, but if your application does not suck and you get a decent number of downloads per month this is going to pay at least some hour of your work every week. Forgot it, the best you can use for now is paypal that is not pratical for micropayments: users need to register and the minimal amount that makes sense with this service is in the order of magnitude of a dollar. Too much to download a possibly useless software. So my guess is: donations are good if your application has a lot of users, while micropayments may be just a cool thing that still is not reality.

5) Sell win32 binaries

Popular projects like XChat are using this financing option that I guess may work well when there is a big user base in the Windows community. The application is released under a Free Software license, but binaries for windows are not available on the site. Only the not so easy to compile source code (expecially for most windows users) is provided. What the user can do is to buy binaries for a reasonable price, or download a shareware-alike demo version that works for a limited period of time or with limited features to test the application before to buy it. I've little information about how this system works, and I'll be glad if somebody with experience in this field can give some feedback that I'll include in this article. You can of course post your ideas on the comments section.

6) Advertising.

This is not new. Before free software and internet there were already tons of things provided free of charge for the user, earning just from ADs. Free newspapers, television programs, calendars, and every kind of stuff. Fortunately the media changes, so the product you give to the final user, but the earning scheme is still valid. This is how it works:

The user visits your project web page in order to download the program, or coming from a search engine (where you have a nice rank because the community and a number of bloggers did a nice work linking to your useful program). A percentage of this users will see relevant ADs and will click on them, as result you will earn some money to spend for your free software project. For you this works well because the main factor playing here is the number of visitors you are able to get, and the only way to get visitors is to write good programs. But your program just have to be good for users, it does not need to be good for companies that will then buy closed-source plugins, so you have a great freedom in what you want to code. There is a single constraint: you have to write software that's useful to a decent number of people, but this is anyway a sane way to focus your efforts. Still there are a lot of details to check to make sure this is a viable scheme. How much money (or better how many hours to spend for your free software project) you can earn this way? and what form of advertising is better to use? There are tons of affiliates programs around here, what is the best?

Google AdSense

Disclaimer: the AdSense service contract does not allow me to reveal the amount of my earnings, so the following will be guesswork based on what I heard around from various people running the service. You may experience very different earnings, this service works in a very different way in different sites and I see this every day in my own sites.

The AdSense program is not the only available on the internet but it is in general the best both in terms of how much you can earn, and impact from the point of view of the site's visitor. AdSense ADs tend to be very informative, fast to load and not annoying, expecially if the site is not overloaded with advertising. There are a number of AD formats so it is very likely you can find one that fits well in your current or future site layout. The question is, is it really the best you can get? Is it possible to earn more money with a different program where you can actually sell things related to your software project? As usually this depends on your project, for example the WordPress blog engine is sponsoring web hosting providers. Every time an user purchases web hosting starting from the WordPress home page link, the project earns some money. This makes sense because most WordPress users are naturally interested in hosting.

Following the same idea, GnomeMeeting may sell webcams via the Amazon Associates program, while a site about a programming language (be it an implementation of this programming language or a very important extension) may try to sell a book about programming on that language. If your software is not clearly related to something you can sell this starts to have little chances to work. The good news is that actually you can have AdSense units and other associates programs, but in general advertising works better then programs where you try to sell something in affiliation.

At this point you may wonder how much it is possible to earn with AdSense with different types of free software projects. Don't think this data is going to be very accurate, but there is a pattern in newsgroups, malinglists and online forums: people ask how much it is possible to earn roughly, and everybody will reply with "it depends". Sure it depends, but I think I can give an order of magnitude: if your project is about a topic where there is some advertising interest (i.e. not Scheme Continuations nor Haskell Monads) and it is well tuned to have some chances that interested users will see and click on ADs, you can earn from 10$ to 150$ for month if you have 100 unique visitors every day. I know... from 10 to 150 is not going to be an accurate guessing, but this is the best I can give you, and I'm sure there are people that will experience less than 10$ and more than 150$. This business is, as you can guess, strictly proportional to the number of visitors you get, so the other parameters being fixed, with 1000 unique visitors every day you can earn from 100$ to 1500$ dollars for month, and so on.

What is interesting is that you can try to change the other parameters in order to make your earning nearest to 150$ and not 10$. The rest of this article will try to give some advice about how to optimize your project for AdSense. Before to continue I want to stress a point: to have 1000 unique visitors a day means you have a very successful free software program. This is not common, so what you can expect from most projects is 100 or 200 dollars for month. Not so much but you will be able to pay for a domain name, and have some hour every month to spend for your nice free software customer, and being it a very special customer I bet you will charge very little for hour when you work for him.

If you think 100 dollars for month are too little, think that it is enough for a programmer doing software about webcams to buy a new webcam every month, like the author of an application useful to control some kind of device (like an mp3 player) under Linux may be able to buy the new model every six months (assuming it costs 600$). In general this is able to buy you a new laptop every year, and of course if your service to the community is very high (so your program is well know, and you get a lot of visitors) this is going to be more than 100$ for month.

Is it really polite?

Thanks to spammers that nowadays lives between search engines results (where you have to dig to find real sites), in general we have a bad feeling about advertising. To mix something of noble like free software with advertising may not appear to be a good move from an ethical perspective: this is in my opinion an error. First of all, there are different forms of advertising. To fill a site with animated gifs that are of no real interest for the user is much different than to publish discrete text advertisements with content that is most of the times very related and of great interest for the users.

The advertisements published in my own sites sometimes are so pertinent that I'm tempted to click because I'm very interested to check what they are offering, and I'm forced to avoid to click just because it's not a good idea to click on your own site's ADs!

From the point of view of the project user, some AD should not really change his experience. If he is not interested anyway there is the download link to get the application for free and go away. The ADs will have the nice side effect that this application will be more likely to be developed in the future thanks to the resulting earning. Instead if the user finds some AD interesting, it is more or less a service more the project is giving. Bad and Good advertising are so different to range from the annoying to the service, and in my opinion Google AdSense is good advertising.

Selecting a project

If you are already developing a free software project you can't tune this aspect, that's the topic of your free software project. The best you can do is to try advertising hoping they will work well for your project. Instead if you plan to develop a new project you can select it in order to have decent chances to work well with the financed-via-advertising model. This are some guidelines:

Develop an application with a large hypothetical user base

In theory you can do what you want, given that there is an hypothetical user base big enough to get at least 100 unique visitors every day. What I mean is that if you plan to write a new macro system for the Scheme programming language, for good that it can be, you will hardly reach this goal, while with a simple PHP application like a blog engine, a wiki, or a web forum that works well you are likely to reach the goal with not too much efforts. This shows that to support your development via advertising is not like to have fully freedom on what application do develop, you need an user base, but it's a reasonable compromise.

Select topics where advertising is working

Remember that the number of visitors is just one of many factors that will influence your earning. Another very important factor is the topic of your application. It can be everything but it must have a good number of people that want to advertise about it, so you will earn more every click. I don't what to touch the details here, but basically advertisements shown with the AdSense program are the one inserted (and paied) by people using the AdWords program of Google. This program works in a way that advertisers wanting to advertise about topics where many others want to advertise, have to pay more for every click (or incoming visit). The result is that if you select an hot topic for your application, advertisements that are displayed in your site will earn more for every click received (Google will share some amount of the earning with you).

You may wonder how it is possible to check if a topic is hot. Just try a search with google using different keywords related to your topic, and check how many ADs are displayed in the Sponsored Links column on the right. If you see few advertisements chances are that this is not a good topic to pick. A better solution may be to directly go in to the Overtune Bid Check Tool, enter your keywords and check the Bid (Bid means the highest price an advertiser will pay at any given time for a click).

Sometimes you just want to develop some kind of application that does not play well with advertisement, and of course you are free to do it, but just to see how extreme things can be, recently I wrote a Tcl Interpreter that will hardly earn even one dollar in 30 days so I just didn't added Adsense in the site at all. This is from the point of view of the source code length and complexity the biggest of my free software projects, and still it is not good to earn a single dollar, just to show how efforts alone are not enough to make a project successful from the point of view of the financed-via-advertising model. You need to select the right thing.

You may start to think that this latest advice limits even more the field of what kind of application you can develop using this financing model. Actually most applications with a good user base are likely to be in a field where there are closed source implementations of the same idea, that is, companies interested in advertise about this topic. This means that if your application has many users it's likely that advertising will also work.

Make your application special

Even if you pick a field where there are already a good number of free software applications, you can still get decent results. What you need is to create the application so that's not just a bad copy of something already working, it must be somewhat different in a way that a percentage of users may like it enough to switch to your application instead to use the old one. For example one of my latest free software projects is a Web Log Analyzer. I wrote it for desperation in order to check the site statistics, but turned out to be a quite sucessful application itself, I guess the reason is that's very different in some aspect: it is very easy to use at the point that there isn't a configuration file, and focuses more on useful stats specifically about the Google search engine instead of eyecandy. You can try this approach in most applications. Today there are many free software applications that are working well, but with a so insane user interface, configuration file, compilation stage, or other aspects of the easy-to-use factor that you may get some market share point just making it bloat-free and simple to use.

How to place ADs

ads placement map I think the image on the left explains very well how you should place ADs on your site as your first try. In this map the white colored spots are the one with very low CTR (Click-through ratio, that's the percentage of visitors clicking on the ADs). Yellow, Orange and Red are respectively better. As you can see the best place to put ADs is just above the primary content of your page. In some way there is a tention between discretion and results, because the less disturbing places where to put ADs are low CTR spots. Because this makes a big difference I suggest to place ADs where they work very well. Free software users are smart, they are usually much more skilled than the average internet surfer and they perfectly know what is an ADs and what is not. If you make the ADs more visible you will not get the effect that users will click them for error. If you put your ADs in a not so visible place what may happen is that most users will not click because it's too hard to notice an interesting AD.

Another thing to consider is that you can place up to three AD units in a single page, and you can select from a number of different formats like you can see in this Google page so it is possible to distribute little ADs units in different zones of the page in order to be both discrete and visible. The best thing to do is to try to reach a balance between user experience and CTR.

An important point about ADs placement is that the above image is just a general idea about how things are working in the big picture of all the sites running the AdSense program. Every site is different, so you should start placing your ADs following this image, and experiment from time to time changing position to see what result you get.

ADs colors

You can select text, background and link colors for every single AD unit. Usually what works best is to use the same background of the rest of your site, and text and links as similar as possible with the rest of your site. Note that there is a visible text "ADs by Google" near to every AD unit, so this is not a trick to deceive your visitors, it's just to fight what is called Ads blindness. Basically people that spend many time around the web start to automatically filter ADs that are boxed into a strong border: they end skipping everything that looks like an AD. Using the same background and text color of the rest of your site you avoid an early skipping of ADs. Just to make it more clear, this is a not so smart color combination:

While this is a better one (for this web page at least):

Getting ADs that match your site content

There are two main type of visitors in a free software web site. The first type is composed of visitors reaching the site typing directly the url of the project in the browser bar, or via freshmeat, or some other kind of link. They now before to visit the site that it is about a software project about a given topic.

The second type of visitors follow links from search engines, most of them are searching information or services about the topic of your site, but not everybody need some software. This second type of visitors are very likely to click on an ADs if it well matches your site content, because this is a way to continue to search. Another thing to take in mind is that this two different kind of visitors in the average are different. The first contains people with better computer skills of the second, that more likely uses Firefox or even Linux.

A number of different reports like this show that Firefox users click four time less on ADs compared to Internet Explorer users. This means that in order to maximize your earning you must take care that your site is a good way for users coming from search engines to reach more information by clicking on the ADs. The only way to do it is to ensure that your ADs are matching your site content. Note that this also works well with the first type of users, the more technically skilled ones: they are more likely to find interesting ADs if there is a good match between the site content and the ADs. How to help Google's auto matching technology?

Be patient

After your site is online you need to relax some week, Google needs to crawl your site well (intially you may see just Public Services ADs). With the time ADs will get better, as Google is able to tune the ADs shown based on their CTR. After things stabilize, if you are not happy there is something else you can do.

Use section targeting

Recently Google added the ability to use a specially formatted HTML comment in order to give hits to the AdSense crawler about what section is releavent content in your page, and what instead just headers and in general less on topic stuff.

For example it could happen that a Wiki site about a Python extension shows ADs about professinal wiki systems and not about Python or Programming, because the header and the footer contain things like "PyFooBar Wiki system", or text like "You can edit every page of this site bacause it is a Wiki". Section targeting could be able to fix the problem. To use it put the relevant text of your pages between comments like

<!-- google_ad_section_start -->
<!-- google_ad_section_end -->

You can add how many sections you like. This is a nice feature but google may ignore it at all, also I suggest that you try the vanilla way (no section targeting at all) to start and switch to it only if the ADs are not matching very well the site content.

Use competitive ADs filtering

Sometimes Google starts to show some ADs in your site that you find just not interesting for your users even if it is matching the site content. If this happens you can instruct Google to never show this ADs in your pages using the competitive ADs filtering feature in the AdSense administration panel. As you can guess from the name this feature is mainly conceived to help filtering of ADs about competitive products. As free software developer you instead want that users will explore closed source alternatives using ADs on your site, because you are not loosing a paying customer, but instead earn more.

Use this feature with care as you may end with fewer possible ADs to display in your site that may turn in a lower CTR (or even in Public Service ADs shown, the non paying ones that Google will use when there is nothing of better to show).

How to increase the number of visitors

As already stated, being fixed the rest of the variables, your earning will be proportional to the number of visitors reaching the site of your free software project. This means that if you can get more visitors, you can earn more. What you want is not random visitors, but visitors interested on your project or at least on the software category or topic of your project: this are good visitors in general, but also are better from the point of view of advertising. To get more visitors is not simple, but not so hard following few rules:

Don't create a poor site, but a content rich one

I saw a lot of free software projects sites where there is something like: This is my fooBar project that can do this, click here to download. There is only one goal for an user to reach a web site like this: to download the program. Also to have so little text in a web page makes AdSense wonder what's the topic of your site so non matching advertisements are more likely to be displayed.

Another problem with sites poor of content is that it is less likely to get visitors from search engines, and remember that this kind of visitors are likely to be interested (and to click) in your advertisements since they are searching for something.

Write quality documentation and put it online

One of the usual complain about free software is that sometimes documentation is poor. Well if you plan to finance your free software project using advertisement you have a very good reason to write good quality documentation and put it online. You may add just the reference man page in the project tarball, and put all the rest of the documentation like HOWTOs, tips, comparisons with other products, on-line under a non free software license (that's, this information can only be read in your site). If you don't like to do so, but you want to ship the full documentation with your project under a free software license, it is still a good idea to put online the documentation as it helps a lot to get visitors via search engines, and in general is a good service for the user that will be able to explore the features of the program without to donwload anything (and also will have the good effect of a longer permanence on your web site that will make the probability of and AD clicked bigger).


While many tech people on internet are able to write and read english, and often perform their searches directly in english, there is still a very big percentage of people not speaking english, or at least not being comfortable enough with english to search information in their mother language. To translate your site in different languages can be a win, expecially if you include French, German, Japanese and if possible Italian and Spanish.

Run an on-line forum

This is something free software projects should have anyway regardless of advertising. It is natural that not everything the user need is included in the documentation, and a public forum allows users to exchange comments and suggestions. Of course don't think that you can run the forum without to care about what users are posting: most of the times you need to reply, so there is some work involved, but the result can be nice. Just make sure that the forum program you are using plays good with google and can be customized enough to include AdSense advertisements.

Many projects are already running an help mailing list, it's just a matter of selecting a different media (the web instead of the email).

Another idea can be to run a Wiki about your project, or directly build the main site using a Wiki. For big projects a Wiki sometimes become a wonderful resource with a big number of pages, and as you can guess if this happens your AdSense earning will grow a lot. One of the best free software projects Wikis I ever seen is The Tcler's Wiki.

Note that AdSense experts and Google itself noted that on-line forums tend to have very low CTR compared to other type of sites. Google published a map to drive ADs placements specifically for forums that you can see on the left.

Release often

Don't wait to add a lot of new features to your project before to release the next version. This is not good for users that need to wait a lot of time before to be able to use the new features, and it is bad for you that can't get feedbacks about the new features and their stability incrementally.

This works well for our advertising goals too for many reasons: users know it is likely to find something of new in your project's site so they visit your pages more frequently. You can post on Freshmeat every new release, so you get more site visitors, and (more important) new long term users for your project.

Post your project on digg once it reaches a good maturity level

Another way to advertise your program is to post it on Digg once a good usability level is reached. If you got digged you will get a lot of visitors, and a percentage of this will become new users and maybe even contributors.

Use your other projects as a way to advertise your new project

If you already run some free software project, link to your new project from it to make users aware you are developing something of new. If users trust your ability as programmer they will try the new application. Also this helps you to get indexed better in search engines.

Packages VS web sites

You may wonder what's the effect of being included in some major Linux distribution like Debian or as part of the FreeBSD ports. The result is likely to be more users of your free software project, but you may wonder if this can lower the number of visitors of your web site. After all what is needed to install your application is just apt-get install fooBar. Fortunately this is likely to don't affect at all the number of visitors in a bad way (but on the contrary, it's a good thing for your project). Actually users installing your application from a package can either don't know about it, so you have a chance to get a new user, or already know about it, and in the latter case being the package not available what he will do is just to reach your site to download the tar.gz of your program (and it is very unlikely that somebody with this goal will click on an AD). Being inserted in a software distribution makes your program more known and simpler to install, so it's just a good idea.

What you can do as user

If you are not a software developer, but just a free software user please let me tell this: you are an hero if you reached this part of the article :). But here there is some information for you, and what you can do if you like the idea of advertisements as a way to finance free software.

Help your favourite free software projects to get indexed

Link your favourite projects sites from your site, blog, whatever. This way the project will get more visits both directly (following your link) and indirectly because search engines will better rank the site. The result is that the project will earn more money that are more hours developers will have available to spend in order to improve the project.

DO NOT click on ADs you are not interested just to help

What you should NOT DO is to click on the ADs if you are not really interested but just to help the project: this may have the inverse effect. You alone can't change a lot the earning of the project, instead advertisers may notice that there are a lot of clicks from this site with a low conversion (that is every N incoming visits a too little percentage of visitors purchased something), and try to advertise in a different site (note that with AdWords, the program where advertisers setup ADs that will be shown in sites partecipating in the AdSense program, it is possible to select the site where the ADs will appear). It is also very important to take the conversion at a good level to make sure this form of advertising works, this will encourage advertisers to put money on it.

Quality content

It's always told to me that what advertising needs is quality content. Not spam sites, but very informative pages where users can find useful information and continue to search for more information (or vendors related to the topic of the page) clicking into ADs. A good free software project is a program users can get free of charge, with a free license (so with many rights included) and the whole source code. Often this software is of good quality and very useful. I think this is quality content, and actually that clicks originating from free software projects sites are well performing for advertisers. Free software users are in the average different, they tend to click more when they are interested in something, and less at random.

What I may like to see in the future is an affiliate program specifically designed for free software developers, where it is possible to link AD units with a given software category, so that advertisers can have the ability to show ADs directly on free software sites about specific topics. Google's auto-matching technology works well enough for the average site, but free software sites can be categorized in a much more specific way, because a web page can contain a very large number of possible things, while a free software project site is about some kind of software that's simple to define in a precise way. What I mean is that google's current technology may show ADs about CVS clients for windows in the download page of a security related free software project: this makes very little sense. A more specific affiliate program for what can be a large enough fraction of interesting sites on the whole internet may solve this kind of problems and advantage both free software developers and advertisers.

Chitika - a new alternative to Google Adsense

Good news for people writing free software that is directly related to some kind of product. Chitika, a new online advertising company, entered the market with an interesting product called eMiniMalls. Basically it's a banner about a product very similar to the banners of amazon associates, where there is a photo of the product and the best price. What's new is that Chitika will pay you per click, not just when the user purchase the final product, and that's a strong difference. For a demo of the service or to apply Click Here and you will use me as referral. For people too busy to check the demo this is a static image of one of the banners they provide:

Fortunately tabs in the banner are not bogus, they really work (javascript magic of this web 2.0 era). I tested this new advertising program in few sites, my impression is that while the CTR is not as high as with Adsense, the earning-per-click is better. It's really worth to try on free software based products like gphoto.

Promotional button

If you are a free software developer, like this financing model and plan to use it with your applications, you could add the following button to your web site linking to this article.

About the author

I'm Salvatore Sanfilippo (aka antirez), a freelance software developer based on Sicily, Italy. I'm the author of Hping, Visitors, The Jim Interpreter, and few other free software projects. If you want to contact me just write an email to <antirez (at) gmail (dot) com>.

Apply with Adsense or Chitika eMiniMalls

Get Chitika eMiniMalls

Copyright (C) 2005 Salvatore Sanfilippo <antirez (at) gmail (dot) com>
All Rights Reserved