37
19 Comments

From $0 to $10k/mo with a Geoparsing/Geocoding API in Under Two Years

Hello! What's your background, and what are you working on?

I'm Ervin Ruci, an Ontario-based developer and "entrepreneur" (since 2005). I grew up in Albania during the communist period, was fond of math and physics in high school, and won prizes at science olympiads, but never learned any practical coding skills. (There were no computers to hack.)

I came to Canada (Mount Allison University in Sackville, New Brunswick) as a student in 1996 from Albania (via Greece). I studied Math and CS. Those were my most formative years. As an MTA student I experimented with filmmaking, creative writing, radio shows, photography, learned to code, and wrote lots of code, from compilers to execute IBM650 machine code in modern computer architecture, to building online academic degree robot advisors.

I landed my first full-time programming/web design job in 1998 (while a second-year student, as the University's webmaster). Looking back using the internet archive, my design skills were lacking, and my coding skills so-so. I think I've designed perhaps the worst-looking university website in history.

I finished my CS degree part time in 2001 and moved to Ottawa, Ontario to start a new job at the Canadian Internet Registration Authority (CIRA) as a software developer, a position I held until 2005. (I did not touch web design there.) CIRA also paid for my graduate studies (at Carleton University). The problems I studied provided inspiration for a number of hobby projects I would start later on. (My thesis was on a class of 3SUM-HARD problems in Computational Geometry.)

I don't think I would be here giving this interview today were it not for this academic and work experience.

I started a number of hobby projects and companies after I quit CIRA in 2005, mainly in the "local search" area. One of my biggest successes was FoodPages.ca a local restaurant guide which was getting over 1 million unique visitors per month by 2008.

Now I count it among my failures, although it still pays for the hosting cost and even turns a small profit. I don't know why, perhaps this field is now dominated by just a few big players, Google Maps mostly, or I just have no clue about SEO. Either way, the internet is littered with the corpses of dead companies. I've made just a modest contribution to the pile with FoodPages and another half a dozen or so.

I moved back to Albania in 2008 and worked at the University of Vlora (my hometown) as a Computer Science lecturer and in various administrative positions, managing my side businesses at the same time.

From 2008 until 2011 I led the development of the University's online administration system (built from scratch by me and a student). I also built online learning and randomized testing modules for the programming classes I was teaching.

I quit and moved back to Canada in 2012 because of some bizarre events I've documented in my blog.

Within a month of coming back, I was hit with a copyright/trademark infringement lawsuit brought about by Canada Post over the provision of a free crowdsourced database of postal codes (under Creative Commons Attribution 2.5 Canada License) and the use of (according to them) the trademarked term "postal code" on one of my websites. They dropped it in 2016.

In 2016 I started working on geocode.xyz, a worldwide geocoding/geoparsing API, utilized by thousands of users (both free and commercial) to parse and geocode locations from freeform text.

My revenues are a bit over $10k per month and growing 50% YTD.

Home page

What motivated you to get started with Geocode XYZ?

With the threat of court-imposed personal bankruptcy gone, I refocused on open problems I wanted to solve. Putting world literature on a physical map of the world is one such problem. It involves parsing books for locations mentioned in a geo context, a process also known as geoparsing.

According to Directions Magazine, geoparsing is an almost magical, complex technological process that relies on data to put geo-information into context. There was little in the way of a reliable geoparsing API, so I figured I could probably create one.

Look around! Identify a problem you'd like to work on, and if you feel inspired don't be afraid to reinvent the wheel.

This is how books.geocode.xyz and the API powering it, geocode.xyz, came to be. As it turned out, other startups were in need of such an API, especially those hovering around the intersection of big text data and geospatial analysis.

Books.Geocode.XYZ:

Books.Geocode.XYZ

What went into building the initial product?

$1.

My finances were shabby after 5 years of legal wrangling, so even more than usual, I had to start with super-minimal costs (using a free tier t2.micro server on AWS). The only cost was the geocode.xyz domain name, which I bought during the .xyz promotional sale for $0.99. The total startup costs were therefore about $1 ($0.99 + tax).

Prior to this I had bootstrapped geocoder.ca, a geocoding API for Canada and the US. Geocode.xyz was a complete re-write, re-invention of geocoder.ca. It is a good idea to re-invent things and/or expand them in different directions, before they become outdated and die. Remember Yahoo? (They also built a geoparsing engine: the now defunct Yahoo Placemaker.)

It took me about 3 months to write the initial working software. It was limited to just a few European countries, had no batch geocoding functionality and no business model (i.e. no pricing page). A lot of time was spent identifying data sources and writing code to integrate those data sources into the main data pipe, and then testing/fine tuning everything.

It helps to step back, do nothing, and relax. While doing that, I might think of an interesting problem I can probably solve. In that case, I work at it in small incremental steps.

I've received no external funding, neither for geocode.xyz nor any of my previous companies. Everything I've ever done is self-funded. The only major cost is my time, but I'm certain that I generate more value working on my own projects rather than holding an engineering day job.

The codebase is over 100,000 lines of code, written in C and Perl.

How have you attracted users and grown Geocode XYZ?

I launched at the end of 2016 on the 2016 Perl Advent Calendar. Other than that, or speaking at conferences, I've done no marketing, SEO, press, PR, mass emails, or any of those things.

Most customers come from word of mouth for such a niche product. I'm also happy with current growth patterns, and I don't bother thinking much about marketing, pricing models, etc. I think the only way to "grow" a product is to have it work better. Users will be "attracted" to the product if that condition is met — eventually.

Here's a look at some of our users:

Geocode.XYZ Users

Geocode.xyz currently serves about 1.5 million requests per week, most of them free users, but enough paying users too.

Most users use JSON output from the API, and quite a few use the batch geocoding (HTML) API. I also offer an XML and a CSV API, but very few use either one. (Here's a content-type breakdown of the users. XML users in orange account for about 4%.)

What's your business model, and how have you grown your revenue?

I offer both a free and paid version of the API:

  • Throttled API access is free. API
  • Unthrottled API Pricing for pay-per-use access is 0.0025 EUR per credit. LOG IN to buy credits (1 credit = 1 API Call).
  • Unlimited API Access Monthly Subscription: 100 EUR per month. LOG IN to subscribe. (You may cancel at any time).
  • Unlimited and Unthrottled Geocode Server on AWS with standard AWS licensing costs. Run this software on your own server.

The pricing is in Euros because it was originally aimed at the EU market and I never got around to changing it, or creating country/region-based pricing options.

API Clients pay via Paypal or Stripe (recurring payments are all handled by Paypal, some CC transactions by Stripe). I've kept API pricing at nearly 1/10th the pricing of my nearest competitors. I can do that because my running costs are minimal.

AWS Marketplace is another revenue stream, clients pay for their own instances on the AWS cloud running my software. (I receive a software licensing fee billed by the hour).

Geocode.xyz is now two years old and revenue is up over 50% from a year ago.

Business expenses are going up a little bit. I use a cluster of load balanced AWS spot instances now — they are cheap, but not free.

What are your goals for the future?

My goal is to create useful solutions to certain problems, and enjoy the freedom to do whatever I want with my time as a result.

As for the future of geocode.xyz, I'd like the software to scale in order to parse millions of books for creating the most comprehensive map of world literature to date.

I'm currently adding new features, such as the integration of open elevation data into the API, adding support for intersection geoparsing (still not out of alpha), IPv4 & IPv6 address geocoding (just released), autocomplete and fuzzy geoparsing (todo), performance optimizations (ongoing), etc.

With over 1TB of base application data and a rapidly growing customer base, scaling is the number one task.

What are the biggest challenges you've faced and obstacles you've overcome? If you had to start over, what would you do differently?

Lack of data was and still remains the biggest obstacle.

The state of open data is not evenly spread throughout the world. (Openstreetmap.org and Openaddresses.io are major sources, and lots of open government data have been released in recent years — I would not have created this business without them.)

Time and timing are other challenges.

  • Time: building something that works well takes a lot of time mostly spent in testing / fine-tuning mode.
  • Timing: there is no point working on a problem when the demand for its solution is far off in the future. Timing is now right for geocode.xyz — data science is a fast growing field in need of such APIs. Still, it is not clear to me which aspects of the API are more valuable to work on right now. Identifying them is a challenge so I need to figure out a better way to get feedback from users and especially from those who almost became users.

On to the technical aspect, I've made a few poor design decisions with Unicode, causing the API not to work as well for some non-ASCII languages. Parts of the system will have to be re-written until they work better in these cases. As the codebase grows larger, that is yet another challenge.

Apart for some technical/design decisions, If I had to start over, I'd do everything exactly the same way.

A super-lean startup like geocode.xyz with no funding but a good idea on how to solve a problem, is a fun project, even if it is still just a little hack.

But then again, it is more realistic to think I'll do only what I can, not what I wish I could.

Have you found anything particularly helpful or advantageous?

It helps to step back, do nothing, and relax.

While doing that, I might think of an interesting problem I can probably solve. In that case, I work at it in small incremental steps.

It is advantageous to work while well-rested. I get more done during short bursts of creativity, as opposed to a long work haul.

What's your advice for indie hackers who are just starting out?

Look around! Identify a problem you'd like to work on, and if you feel inspired don't be afraid to reinvent the wheel.

Each time I hear, 'Don't reinvent the wheel.'

The biggest successes of the last 13 years have been re-inventions, such as a massive gossip board (Facebook) and a massive billboard (Google).

I have a feeling they (and many others) are about to be re-invented again.

Where can we go to learn more?

Technical conferences have been good learning experiences for me.

Check out my talks at FOSDEM 2016 and TPCiA 2017.

I don't believe people can be inspired or learn much from business books/pamphlets/resources on "how to be entrepreneurial" or "how to start this or that." Entrepreneurs reading books about entrepreneurship are like romantic people reading romance novels for inspiration.

I don't see myself as an "entrepreneur" either, just someone with problems to solve. Some of the solutions I come up with end up with a business plan. Some don't.

I don't believe people can be inspired or learn much from business books/pamphlets/resources. Entrepreneurs reading books about entrepreneurship are like romantic people reading romance novels for inspiration.

I do, however, enjoy reading publications such as Indie Hackers to get a condensed briefing on how other people find inspiration. I like to study people, and inspired and driven people are interesting.

In most cases I read how inspiration breeds invention, which in turn breeds validation, and there is nothing hackers seek more than validation, which in turn breeds inspiration. I don't believe one can "learn" to be creative or inspired with the goal of obtaining the sought-after validation. I believe anyone with an innate ability can create something from nothing. I also believe I could be wrong.

I believe in nothing, among many other things, unlike some who believe in something, and nothing else.

  1. 1

    I was searching for fellow Albanian IndieHackers to maybe host a meetup.

    Surprisingly we have the same name, had the same intention (serve our country of birth). I wish that when you returned you didn't get involved with the public sector. Albania does need us (the country, not the government).

    Still wish you all the best in your career, regardless of your location.

  2. 1

    Thanks for sharing this, Ervin!

    I'm working on an ingredient parser API (backstory), so this information was helpful. In particular, it hadn't occurred to me to offer customers the ability to self-host through AWS Marketplace.

    I'm curious about how you created your Terms of Use. Did you work with a lawyer or just write them yourself?

    1. 1

      Hi Michael. I created them myself. (Needs some polishing as you can see :)
      AWS self hosting was initially provided for people complaining that the API was too slow. People needed to realize that it costs a lot of money to purchase the right memory/cpu combo for higher performance levels.

      1. 1

        Oh, interesting. I'm afraid to do that for fear that I'm going to leave out something important and get in legal trouble, but I'm more inclined to if others are doing it and it's working out okay so far.

        Some of the others I found seem to just be cookie cutter that directly contradicts the sales copy on the page. Like this one says it can't be used for commercial purposes, but it's clearly a B2B product. I liked yours because it was clear that it was custom for your product.

        1. 1

          It is safer to be brief and to the point, than to go on and on with legal lingo. When I was sued the TOS came up for discussion in the discovery phase.
          Having a clean and short TOS was an advantage in that situation.

  3. 1

    what do you do better that google geocoder does not already?

    1. 1
      1. Licensing (Google restricts use of their API data - you can not store their geocodes)
      2. Google is not the gold standard either.
        Try this:
        https://geocode.xyz/13+Avenue+FR DE LA JOSNIERE+LE DORAT?geoit=json

      {
      "standard":{
      "stnumber":"13",
      "addresst":"AVENUE DE LA JOSNIERE",
      "city":"Le Dorat",
      "prov":"FR",
      "countryname":"France",
      "postal":"87210",
      "confidence":"0.5"
      },
      "longt":"1.07657",
      "latt":"46.21766"
      }

      Run the same on google: https://maps.google.com/maps/api/geocode/json?address=13+Avenue+FR DE LA JOSNIERE+LE DORAT
      {
      "results" : [],
      "status" : "ZERO_RESULTS"
      }

  4. 1

    Hi Ervin, thanks for sharing your experience. Just want to ask a couple of things. Firstly, how did you price the monthly subscription? If a client hammers your site for a month, might their cost exceed the subscription? Also, do you use any NLP packages for named entity extraction before the geocoding? Thanks.

    1. 1

      I did not do much pricing research, just saw a site charging $1000 per month for a subscription with a cap of 100,000 API calls / month, and decided to set my pricing at 1/10th of that. Users do hammer my site each month - mostly free users, if the load exceeds some parameters the load-balancer automatically adds new AWS Spot instances to the pool. So far, it has not been a major problem - this setup currently handles about 5 million requests per month. (btw, I did have a case where a client was abusing the API with close to denial of service behavior - in that case that client's requests are all redirected to only one of the load balanced nodes. Worst case scenario, the client will crash its own service, nobody else's)

      I've built my own NLP package for named entity extraction. It works well, but is still a work in progress.

  5. 1

    Hi Ervin, I just read about the lawsuit with Canada Post that you had to face a few years ago from this thread on HN (https://news.ycombinator.com/item?id=16853203). The HN wasn't related to your specific case, but your case was cited due to the assistance that CIPPIC provided.

    Could you comment on what was like to go through such an ordeal and how you were able to get the support that you did to help you fight this legal mess?

    1. 1

      I know Michael Geist from my days at CIRA (he used to be in the board on Directors then). When I got the Cease and Desist from CanadaPost, I contacted him for advice and he put me in touch with CIPPIC.
      They helped by connecting me with a firm that was going to work pro-bono on the case (RIDOUT & MAYBEE LLP). I would have almost certainly gone bankrupt without their help.

      As to the ordeal - they were suing me personally and named every little project I was involved with in the lawsuit, not just geocoder.ca. They referred to them as the "Ruci websites" in an amended statement of claim in 2013: https://eruci.com/2013/04/23/k2c-1n5/
      RBC Bank cancelled my business line of credit because I was a high risk customer (if you get sued by a crown corporation in Canada - the assumption is that you are done.) Some clients cancelled their accounts on geocoder.ca thinking it was not going to be around for long. I got fed up and almost went to work for ESRI in Redlands Calif. at some point in 2015 (for their ARCGIS online geocoding division), but they also rescinded the offer upon learning of my various legal problems.

      By this point I had almost written geocoder.ca off and was thinking of moving back to Europe and starting a new business there. That's when I bought the geocode.xyz domain name for $1.

      1. 1

        Thanks for sharing that. When I read the story about Geocoder initially on Indie Hackers, I wasn't aware of the history. When your site was referenced on Hacker News, I recognized your site's name. What an ordeal you must have went through!

    1. 1

      Yeah, there are a few bugs.

  6. 1

    I don't believe people can be inspired or learn much from business books/pamphlets/resources. Entrepreneurs reading books about entrepreneurship are like romantic people reading romance novels for inspiration.

    That was awesome. You sir are amazing.

  7. 1

    I not long finished switching a client over to Geocodio but I would've been interested in checking this out if I'd known. Glad it's doing well!

    1. 1

      Co-Founder of Geocodio here, hope you don't mind if I jump in! Nice to hear that you just switched a client over to us. Feel free to reach out if we can ever help with anything or you have suggestions. [email protected]