How I Developed A $3.5K/Month Tool That Converts HTML To PDF

Published: January 6th, 2020
Cyril Nicodeme
Founder, PDFShift
$5K
revenue/mo
1
Founders
1
Employees
PDFShift
from Belfort, Bourgogne-Franche-Comté, France
started May 2018
$5,000
revenue/mo
1
Founders
1
Employees
Discover what tools Cyril recommends to grow your business!
Discover what books Cyril recommends to grow your business!
Want more updates on PDFShift? Check out these stories:

Hello! Who are you and what business did you start?

Hi! My name is Cyril Nicodème. I’ve always been passionate about computers and code. I’ve built and sold VoilaNorbert.com, Transferslot.com, and Selldom.io and I’m currently running Improvmx.com and PDFShift.io.

My first project that made money was VoilaNorbert. On my list of all the domains I bought, it arrives at the 48th position. Yes, it took me 48 failed project to finally build something that generated revenues.

This was some sort of trigger that led to easier “product to market fit” projects following it. I’m currently working on PDFShift.io. I currently have around 150 customers which bring around 3200$ monthly. On my list of domains, PDFShift comes at 70th, but after Transferslot, Selldom and ImprovMX.

how-i-developed-a-3-5k-month-tool-that-converts-html-to-pdf

I’m currently sitting at 79 domains, with a future project coming in 2020 for the 80th. ;)

What's your backstory and how did you come up with the idea?

I remember waking up in the middle of the night when I was younger and had school the next day, just because I had this project idea that was running through my mind and keeping me awake. I would spend one to two hours on the computer starting to write the idea, validating it online, seeing what was possible… and spend the following days implementing it with a passion and motivation that gives this incredible feeling.

I’ve played with many programming languages, started with PHP then moved to Java, Python. Nowadays, I’m very efficient with Python and can set up an API in a few hours with the main elements already present. For those wondering, I use a modified version of Flask that is available publicly at Github.

For PDFShift, I wanted to start a simple service that was right in my area of expertise. I have a simplicity to work with APIs and I always love to play with Stripe’s API, Mailgun’s API and all the other. I’ve implemented personal wrappers around the main mail sending service available (Postmark, Sparkpost, Mailgun, Sendgrid, …). The one tricky point for me was the communication with Chrome and how to provide the service with great performance results.

I knew from the start that it would be viable financially because I was not the first on the market, and a few others had a good position with a set of interesting customers (listed on their websites). My assertion was correct.

At the time, it was quite easy for me to work on PDFShift: I was working “full-time” on my other company, Reflectiv.net, but it was quite slow so I had the time to focus on other things. This is a great opportunity I have and I’m aware of this; having the possibility to work on your passion without worrying about finance is a blessing.

Take us through the process of designing, prototyping, and manufacturing your first product.

I had a vision in mind on how I would set up the code and the architecture in order for PDFShift to convert HTML documents to PDF fast, efficient, and scalable if necessary.

The first thing I did was to spend around two months half-time building the base code for the service, using Pyppeteer (an implementation of Puppeteer in Python) to communicate with Chrome.

Even though Chrome/Pyppeteer provides a lot of features that do the job really well for converting documents, it’s not all. There was a lot of work to implement before and after the Chrome processing.

For instance, Chrome doesn’t load the images in the header/footer of a PDF, so I had to build an HTML parser to get all the images elements and load them before sending the document to Chrome.

Then, once the document was converted, there were a few feature set I wanted to implement that wasn’t available at Chrome’s level, including watermark, encryption and a few specific features.

While I was working on the set of features, one thing I kept in mind was the simplicity. I didn’t want to have a product with tons and tons of features you can send that would make the end user more loss.

Offering too much can hurt a business. I focused on providing the core features and the ones I considered important. I decided that if a feature was missing, I would get feedback by a user at some point.

After two months of working on the API and making sure it was working efficiently, I built the website and set out for the launch.

Describe the process of launching the business.

The launch was a very exciting phase, even though it spread over the course of a few months.

My initial - and official - the launch was on May 22, 2018, where I wrote a post on IndieHacker about… launching. The post worked really well and gained more than 20 upvotes in less than two days, which gave me initial traction for the service.

how-i-developed-a-3-5k-month-tool-that-converts-html-to-pdf

I kept writing on IndieHackers about the life of PDFShift while keeping a general approach to the story in order to help others. I believe that it was more interesting - and helpful - to share general advice that can be applied while mentioning PDFShift to users. The strategy worked well with a few posts like :

(note: The number of upvotes might look low if compared with Hacker News or Reddit, but for Indiehacker, it was quite huge).

The strategy worked well and I started to gain a few users. I knew that I could launch PDFShift on ProductHunt, but I wanted to have around a thousand users first, to leverage that base of contacts hoping for some precious upvotes.

Almost 4 months later, on September 11, PDFShift was featured on ProductHunt. I managed to start at third place and launched a well prepared step-by-step campaign to gain the max upvotes I could. The steps included sending a newsletter to my users, of course, having the help of an influencer on Twitter, sharing the link on my social networks and on a few Facebook group, and writing an interesting article about the launch (not just “we launch on PH, go check it out!”) on both Reddit (/r/growmybusiness and /r/entrepreneurs) and IndieHacker. The articles worked quite well, which greatly help in gaining upvotes.

The overall strategy for the day helped me gain the first place and I finished first that day, the third of the week.

how-i-developed-a-3-5k-month-tool-that-converts-html-to-pdf

Since launch, what has worked to attract and retain customers?

Finishing first on ProductHunt clearly had a big impact on the user and customer acquisition. Even today, it’s still one of the main sources of user acquisition for PDFShift.

Other than PH, what really worked well for me was Quora. I spent a lot of time answering all the questions related to PDF conversion to HTML, sharing code, point of view, etc. Quora is one of the primary sources of new users today, which is now an almost passive work (I frequently check for new posts, but they are quite rare).

Another channel that worked really well for me was AlternativeTo. I added PDFShift to the site but also leveraged it: I offered my users free credits in exchange for a star, and more in exchange for a review. This strategy really worked well and PDFShift now has some awesome reviews.

As of today, these three services are my main - passive - source of user acquisition, which is really nice. I frequently try to challenge these with other means, like Google Ads, influencer outreach, but I haven’t found a better alternative yet. This is the challenge of every company right? Trying to increase your growth :)

How are you doing today and what does the future look like?

After a year and a half, PDFShift is bringing around 3,2k$ of monthly revenues. When deducing all the costs related to run the service, I make around 1k$ per month of profit.

The costs include the servers, around 250$ per month, Google Ads, at 500$ per month plus an entrepreneur I work with to improve the performance of the ads, also at 500$ per month. Customer.io costs me around 150$ per month. Their pricing is quite high, but I believe it’s worth every penny (more on that later). The rest of the costs are shared between the office place I rent, accountant fees, and various smaller services I use.

The servers are hosted at OVH, a French company that provides a great set of servers for an honest cost. I am currently working on changing the infrastructure in order to be able to easily scale each part of the server horizontally. Currently, there are two main points: the API which handles the requests and responds to the basic ones, and the Processors, servers that run Chrome and do the conversion. I can already scale the Processors how I want, but I will soon be able to do the same with the API, which will give me great flexibility for future growth.

Growth is my main focus right now. Even though I’m really happy with were PDFShift is at today, I’d love to cross the 5k$ MRR mark in order to get a salary from it. I don’t have the ambition to make a multi-million dollar business. I like the service and love the effort/gain ratio I get out of it, so as long as I can have a salary, everything will be perfect.

Through starting the business, have you learned anything particularly helpful or advantageous?

There are two things I learned that challenged how I saw things.

The first is about hiring people. Even though I don’t have hired a lot, I did work with a few people to help me with PDFShift.

My initial thought was to hire people for 10$ an hour for simple tasks, thinking “it’s simple, there is no need to pay more.'' Of course, it didn’t work well and I had to find someone else.

The second time, I hired a person at 50$ an hour for the same job, and it was impressive. The quality of the work was immensely better, and, at my big surprise, the same job was done in less time. In the end, the cost is almost similar, without the burden to wonder about the quality.

The second is about Customer.io. I wanted a way to reach out to my users and track how my emails were received (opens/clicked). When I first saw Customer.io for the first time, I quickly closed the tab once I reached the pricing: “Starting at 150$”.

But one day, I decided to still give it a try. I can’t recall what made me change my mind, but it was so worth it.

Since then, I moved almost ALL my emails campaign, including the password reset and payment failures, etc, to Customer.io. This gives me the advantage to set up a drip campaign before losing my customers, to see how many and how well each email was received, giving me room to improve on the subject and content. Their templating system gave me the possibility to adapt the email to the end-user: Adding an “upgrade” CTA to free member, customized messages based on their specific data.

In the end, Customer.io is set in such a way that I have triggers for when my users miss a payment or can’t make PDFShift work correctly, which increase the user success and reduce churn. I don’t know how much they saved me, but I’m confident it’s more than 150$ per month :)

how-i-developed-a-3-5k-month-tool-that-converts-html-to-pdf

All in all, the main lesson I learned here is that price should not be an issue if you can afford it. Sometimes, taking the more expensive one might be a great decision you’ll make … and if it’s not the case, you are not married to them ;)

What platform/tools do you use for your business?

Well, Customer.io for starters.

I also rely on Mailgun for sending emails. It’s free and does the job quite well. Since I moved most of my emails to Customer.io, I don’t rely much on them anymore but I still use them for sending very specific emails (like Payment success notification that includes an attachment - which I can’t do with Customer.io).

I also use ProveSrc, a service that displays the events on your site. I use it to share the recent purchases made on PDFShift. (You can see it if you go on the homepage, it will appear at the bottom left). I noticed an increase in conversion as soon as I started using this so I kept it ever since.

I can’t start a project without relying on Amplitude too. I send all my key metrics there, which, in turn, gives me a nice dashboard where I can have a quick overview of how well the service is running.

how-i-developed-a-3-5k-month-tool-that-converts-html-to-pdf

All my servers are using Sentry to track all the errors that occur. This service is amazing: you get notified as soon as something break (and it always does in ways you wouldn’t have expected!) and their traceback and variable dump gives you an easy way to reproduce the bug and fix it. Truly amazing service.

Finally, the most important service I use, and on which this tweet from François Grante resumes it well:

embed:tweet

What have been the most influential books, podcasts, or other resources?

When someone asks about the best book I’ve read about entrepreneurship, I always say The hard thing about hard things from Ben Horrowitz. It’s truly a roller coaster of an entrepreneur, starting a small project and ending in a big and unexpected exit.

Another book I loved reading was The Road Ahead by Bill Gates. The book was written in 1995 but yet, Bill Gates managed to describe things that weren’t present at the time with an accuracy that struck me.

Advice for other entrepreneurs who want to get started or are just starting out?

Yes, one: SHIP IT! You can not imagine how many projects, how many hours I spent on each of them, just to finally never really releasing them. Because I had a better “pivot” idea because I had a better “yet another project” because I didn’t think it would be ready.

This will be the most stupid statement, but awfully so true for so many of us:

If you don’t ship it, you will never make it work. So push your work, make it live, even if it’s not that great, and iterate on your user’s feedback. These will be more precious than all the ideas you have, and will immensely help you move forward.

Where can we go to learn more?

If you have any questions or comments, drop a comment below!