Unsupported extension: LambdaCase (Haskell, Cabal)

If you landed here, you are probably new to Haskell and somehow ran into this error message while installing something using cabal:

"Unsupported extension: LambdaCase"

You’re probably using a version of Haskell that’s too old (like whatever came on your default *nix installation).

LambdaCase was added in 7.6.1. It is a purely syntactic extension.

You should use Haskell Platform instead of whatever ghc you’ve got on your machine now.

If you’re running Ubuntu 12.04 (Precise) or earlier (“cat /etc/lsb-release” to find out what version you are running), your package manager ships with a Haskell Platform that includes a GHC that is too old.  If that’s the case, you can install GHC directly.

Thanks to Iceland_jack, jle`, and kqr in #haskell for pointing me in the right direction when I ran into this.

Which Problems To Solve First In Real Estate Tech

In response to a previous post I wrote about why real estate is an attractive industry for tech founders, Phil Lang of Suitey responded with why real estate tech is actually not that great a choice (HN comments).

This is the response I wrote, which was too long for HN.


Clumping “real estate” as a class of problems or companies is crazy. It’s like saying “science is easy” or “science is hard”. There are a lot of problems and solutions, small and large, that are easy or difficult, lucrative or not.

Real estate broadly has a lot of areas: residential sales, residential rentals, commercial sales, commercial rentals — which you can break down into single family, multifamily, privately owned and managed, part of a huge portfolio — then further provide solutions to the buyer/renter, seller/lessor, or any of the intermediary agents like brokers, service providers like bankers, advertisers, etc.

There’s a lot going on and of course its crazy to say that it’s all easy or all hard. My point is mostly that there are many (not all) shockingly easy, lucrative problems to solve compared to the companies that capture the lion’s share of the attention in tech circles (and probably venture financing from Sand Hill Road).



1. We have *HARDER/EASIER* problems to solve

My note was about tech problems being trivial. They’re essentially solved tech problems with no bleeding edge development required. I don’t think you or rubyn00bie disagree with this.

You had several comments in this section, which I’ll respond to in turn.

A. “real estate is people centric” : I mostly agree, with the obvious disclaimer that “real estate” is a lot of things and some of them aren’t people centric. For example, the best listing site on the planet doesn’t need a lot of human interaction. Apartmentlist.com and craigslist.com don’t do better with a charismatic salesperson. The people centric components won’t (or can’t) be solved by technology solutions. Not only is solving people problems with tech “hard”, it might be impossible. I advocate finding the problems you CAN solve and shooting for them.

B. “Making any change to the industry requires working within a very entrenched, highly regulated system that is set up to keep tech out of the industry” : Some components are highly regulated and some aren’t. It’s really easy to create a rental application site that can be used without dealing with much regulation. Others that require little maneuvering of regulatory hurdles:

  • Tenant/landlord communication portals for maintenance requests
  • Autogenerating tax documents for landlords (this is a bad idea for other reasons, but not regulatory)
  • Even online rent payments isn’t that hard — regulatory issues are with handling money, not real estate, and it’s been done, is a solved problem, though admittedly a pain in the ass.
  • Internal tools for managing the pipeline/status of existing deals for commercial and residential sales and rentals. For example, Rentjuice (now zillow) helped leasing agents manage leads. No regulatory issues.
  • Listing/search sites – There are some instances where having a license is helpful here and some instances where there are constraints on the usage rights for data, but again, its possible to create these sites without regulatory hassle. This is my least favorite class of real estate tech startups to pursue though, but the difficulties here are not regulatory.

Of course, there are many problems in this space that DO suffer from regulatory issues. Pursuing those doesn’t fit my startup goals. I think there’s plenty of prize outside of that set though, so my advice is to skip those unless you already have an unfair advantage in that space. Once
you DO crack it though, it becomes a barrier for competitors against you.

I don’t believe your comment that a “regulated system is set up to keep tech out of the industry” is at all accurate. While it’s true that there are entrenched financial interests who want to protect their pie, its not about keeping tech out, and it’s certainly not “set up to keep tech out”.

Almost everyone in real estate, and especially the governing bodies and associations think tech is both valuable AND the future. There’s just no consensus on what the tech solutions look like, who is going to execute it. Partnering with the right insiders here would dramatically increase the odds of success and I assure you that they won’t be fighting to keep it out.

Pay them and they’ll invite you into the club. Real estate is about dollars. Period.

2. The bar for excellence is *LOW/HIGH*

Your comment does not explain why the bar for excellence is high. I claim the bar for excellence is low because competing solutions are crap. The average person who has been hanging out in the tech/startup circles has a much more developed, opinionated sense of product. The startup crowd creates better product than people outside that circle (*huge generalization, but I’ll stand by it*).

Beating the software incumbents is easy. Beating faxes, scribbled pen and paper solutions, and manila folders & filing cabinets in a property managers office is taking candy from a baby.

Hence, the bar for excellence in product is low.

Your other objection centers around usability for a subset of prospective users.

“The median age of a broker in the US is 57. They are on the brink of social security checks and medicare. Creating an app or service that a 57 year-old will easily be able to use is a challenging task”

My advice to aspiring real estate founders – Don’t make product for that person.  You can not make the perfect product for EVERY person. You are a resource constrained small organization that has to play smart. Make SOME people ecstatic instead of trying to make EVERYONE “kind of happy”.

The problem you described is that some people aren’t familiar with tech, period. The sales job of tech to non-tech people is hard. Support of tech to non-tech people is expensive. With every passing year it gets easier (luddites retire, new tech generation buys more real estate, tech penetration in business in general expands). So if you’re adamant about serving EVERYONE, apply this strategy:

First, solve the problem for people who already get tech. It requires less work and less teaching customers. After they are comfortably paying your bills, then tackle the median 57 year old broker. By then, a median broker will have had a few more years of being forced to use technology in other areas of life anyways so your job will be easier.

There are more tech-savvy people that are NOT your customer today than you can possibly reach.  Getting hung up because a solution can’t serve everyone today is bikeshedding.

I know that sounds dismissive, and I don’t want to trivialize this problem, as it *is* particularly pronounced in real estate. [Please excuse ageist commentary ahead].

In general:

  1. Real estate is expensive.
  2. Buying real estate requires wealth
  3. Accruing wealth takes time
  4. Accumulated wealth increases with age
  5. Technology adoption is inversely correlated with age [link so I can possibly weasel out of the ageism critique]

tldr: old people don’t use iphones and old people have all the real estate.

I had a customer for my online rental application company that called me (back when I was doing phone support), furious that my website wasn’t working when she typed in the URL. After about 5 minutes on the phone I realized she was typing a URL into the “to” field in her Microsoft Outlook instance. I had to explain to her that she needed to open a web browser. This happens. A lot.

Obviously, that makes it a bit tricky. Since there are plenty of tech-enabled candidates that aren’t using tech in real estate than we can reach: cater to the people who WANT your product, you’ll save yourself the headache of explaining how computers work.

It’s important for founders to evaluate why they are founders. Your job is to create a profitable business. “Great product for everyone” sounds positive, but it comes at an astronomical cost (whatever it costs to do something impossible). It’s far more effective to acknowledge that you can NOT do so, and treat your product as a curated set of features for a subset of the total population. Again, create a few raving fans instead of many disappointed critics.

3. “The market is becoming saturated with an alphabet soup of tech products” vs “The market is huge and terribly underserved by tech”

I had written that the market is underserved by tech. Basically I’m saying that people aren’t USING tech yet. You’re saying that there’s a ton of crap options out there. I don’t think these are mutually exclusive.

I also don’t really think there are THAT many outside of the rental search space compared to say, the number of social apps, bar recommendations, bill splitters, and especially when you compare the number of products relative to the economic size of the prize. Yes, there are a handful (I published a list of 100 or so apps in the space about a year ago), but most of them are (a) crap, (b) just shells of websites that nobody uses.

Less apps, bigger pie.

4/5. “The prospective customers are difficult to round up”+”It’s relatively difficult to engage the people in the space” vs “It’s relatively easy to reach players in the space”

I think your point is: “They’re busy and its hard to get their attention.”

I agree with this 100%.

Convincing someone to use a new product involves:

  • (A) Finding them
  • (B) Convincing them

Yes, (B) is hard. Getting their attention is hard. Convincing them of anything is hard. These are not unique to real estate customers.

However, I can buy a list of names, email addresses, mailing addresses, phone numbers, company names for many real estate niches. Want a list of just apartment complex owners in Tacoma? No problem!

That’s not an option if your market is “startups”. Customer.io can’t just buy a list of new startups easily, or without scraping it (which is still an incomplete set). Why did I choose customer.io? Because I like them and I want to give them a backlink. Yay!

Each market has its own challenges, of course, but I enjoy that in real estate, IDENTIFICATION of potential prospects is a problem that CAN be solved with money (whether you want to or not is a different question).

6. Good data is hard to come by

Hell yes. The data will get better. It’s not good today. There will be rewards for the people who CREATE good data (or liberate the existing data, but existing data is low fidelity).

Until then, my response is: Don’t solve data dependent problems. Rent payments, for example doesn’t require listings.

If youre a startup and you want to get data, don’t spend the “months (if not years) of regulatory hurdles to get the data”. Just partner with someone who has it. Even if you give up some of your wins, you’ll save yourself the headache.

*   *   *

I’m always interested in meeting other real estate founders or anyone interested in chatting about startups. Drop me a line.

Why Real Estate Tech Is So Attractive For Founders

Why I think real estate tech is one of the most attractive spaces:

1. We have EASIER problems to solve.

People are still doing things with pen and paper or impossible to manage excel solutions. online and mobile is a huge win for operators and they have mostly the same needs. there are very few TECHNICAL challenges in this space — development is essentially applying a known solution to a new problem space.

2. The bar for excellence is very low.

Just google for the real estate solution to any problem. The highest hits are just old companies that move very slowly. If any of their websites showed up on Hacker News, people would shred them for design and “looking sooooo web 1.0″. But they’re killing it because there isn’t an alternative that customers know about.

Consider this: the iPhone has only been around since 2007 in ANY capacity, and in the last 3 years, consumer facing apps have completely changed. These companies haven’t and are unlikely to. User interface and usability are still new ideas outside of Silicon Valley.

Beating the incumbents at product is surprisingly easy.

3. The market is huge and terribly underserved by tech.

Each of:

  • apartment discovery (like craigslist and other listing sites)
  • rental applications and tenant screening
  • rent payments
  • rental management software
  • commercial
  • residential sales process management

is worth on the order of a billion dollars a year in revenue.

Traction in one vertical facilitates traction in adjacent verticals. the prize is huge. The failure case is a lifestyle business.  There is a known, straightforward path to linear growth with very low risk of failure.

4. The prospective customers already all agree that they need better tech solutions.

Every landlord in america knows that in the coming years they’ll be switching to online applications and online rent payment. there’s no question of IF. Only WHEN. The challenge is that its hard to convince people to move TODAY.  The market is slowly shifting now, but there will be a cusp where the tides turn and people start switching en masse.

5. It’s relatively easy to reach players in the space.

I at least have the *option* of looking them up in the phone book. This is not true for a lot of other software products. “All hobbyist photographers” for example, is not an easy group to find.

*     *     *

Contrast these features to industries where there are relatively FEW dollars, customers need to be convinced that the product is needed at all, there are tons of really smart people working on it.

Instagram and Snapchat:

  • arguably have a market that spends zero dollars (claiming total US adspend as their market size is a joke),
  • are in a space with WAY more talented peers (sorry vaultware.com, I’m going to have to say I’d rather have an engineer from the photo team at Facebook),
  • have problems that are on the bleeding edge of tech so that they have to INVENT new solutions (I will never have to invent a database for my real estate problems, and realtime async stuff isn’t important for me), and
  • don’t have an obvious need or solve a clear business problem (how many people are *still* saying “I don’t get the point of Twitter”?)
  • it’s not possible to look up their prospective customers in a list (get me an email list of all 13-16 year old teenagers with a Nexus 4).

Real estate has an easier path to positive EV outcomes with a massive upside tail. That’s my flavor.

Teatro: Seminyak, Bali – Jan 12, 2014

Excellent kitchen, perfect execution, courteous, polite table staff.

Prices are more expensive than listed on the website.   This was ten course tasting + amuse + mignardises without wine pairings for 1250k IDR (about USD$103) . With wine pairings it would have been about double.  Wine is weirdly expensive in Bali.

It was nice to see the “upscale dining” side of Bali after a lot of the local street food.  Seminyak has a ton of fancy pants upscale dining establishments that would be interesting to try.  At the high end, it’s food for foreigners at foreigner prices.  In contrast, you can eat in the street for as low as 10k IDR (about USD$0.80) and get a pretty tasty meal.



Fancy menu cover. As good a place to start the photo show as any.



Sunny Side Up Quail Egg on Crostini With Bacon Butter

Basically really tasty, tiny breakfast amuse bouche. Crostini was perfectly crunchy with a little bit of chewiness in the middle. Bacon bits in the butter that was slathered on the crostini. The bacon was, well, bacony and delicious.



Peking Duck Bun

A tiny Chinese style bao, black from the inclusion of squid ink in the dough, stuffed with duck, topped with a drop of hoisin.  The bun was charcoal black and perfectly soft, but not mushy. Tiny drop of hoisin was perfect and not overwhelming as hoisin can so often be.



Chili Pepper and Sea Salt Butter with Rye

Underwhelming, but we weren’t really here for the bread and butter. The butter was excellent, but the chili pepper didn’t really come through. The rye bread was average at best, and easily the most boring component of the night. I would have expected better bread given how much attention to detail was paid to every other element of the meal. If you’re coming to Teatro for the free bread, I would recommend another establishment. If, however, you’re going for the amazing 18 plate tasting menu, you’re in the right place.



Fennel and Garlic Soup with Cauliflower Croquette

Very buttery and creamy, but the frothiness makes the soup feel lighter. The cauliflower “croquette” was really just a perfectly broiled piece of cauliflower.  Delicious, well balanced.

One interesting thing to note was that all the dishes at this point were perfectly sized.  The soup here was excellent, but richer with every spoonful.  I remember thinking that if there were any more, it may have gotten too rich, but they gave just enough to saturate my palate with this flavor.



Bedugul Tomato Confit

A local tomato confit served with a chilled, poached tomato, beet, arugula, really good balsamic vinegar and olive oil.  Acidity and sweetness were a nice, fresh reprieve from the creamy fennel soup that preceded this course.



Foie Gras “en Terrine”

2 pieces of foie gras with a sangria gelee topping. The sangria gelee was interesting, but easily overwhelmed by the flavor of the foie gras. Alone, the sangria gelee had a sweetness and an interesting bitterness. It’s not clear to me that it was important to be *sangria* gelee so much as “sweet red wine flavored” gelee. One was topped with a strawberry, the other with a candied marcona almond.  Very generous portions, and again just the perfect amount to not make you feel overwhelmed by the richness.



Tuna Toro Tartare

Fatty tuna, wrapped in cucumber strips, served with a sweet and spicy vinaigrette. High quality ingredients, but I think its a waste to cut up toro like this. The smooth, creamy richness of good tuna toro is highlighted by big pieces. Chopping it up basically takes away from the awesomeness of the marbling (I have the same rant about kobe beef burgers). Another miss here was that the put the sauce inside the cucumber roll as well, which slightly obscured the subtleness of the tuna (tuna doesn’t have that strong of a flavor). I’d have preferred a lighter touch on the preparation, but I think this is something that most customers would enjoy.

Again, nice menu construction by the kitchen.  The acidity of the viniagrette and the crisp, coolness of the cucumber (and the celery curl in the back of the photo) act as a nice counterpoint and reset the palate after the foie gras course.



Pan Seared Atlantic Scallop

Served with a cannelle of edamame relish, a soy braised daikon slice, avruga caviar, and sabayon. Beautiful plating, I was really excited by this dish. Scallop was perfect. Edamame was a bit mushy and I don’t understand the selection as a complement to the scallop, but I like edamame so it was still good. The braised daikon was too salty.  Not inedibly so, but definitely out of balance with the dish. This was the *ONLY* item in the whole meal that I felt was definitely overseasoned.  Seemed like they just dropped too much soy or salt in their braising liquid and didn’t taste the resulting daikon.  Avruga “caviar” is a synthetic “caviar” that doesn’t actually have fish roe at all.  It’s herring, squid ink, water, and some stablizers that are made into balls, probably by some sort of spherification process that the molecular gastronomy folks use.  It’s fishy (because it’s fish, duh), but it doesn’t have the same crunchy outside shell with briny insides that actual fish roe tends to. I personally think kitchens use this because restaurant goers don’t know this and the deep black color makes them feel like they are getting some rich caviar. Still a tasty dish, generally careful execution by the kitchen, but not a fan of the dish design.



Pineapple Sorbet with Pineapple Lemongrass Foam

Garnished with a dehydrated pineapple flower. Excellent pineapple sorbet in the bottom of this sea of foam. Foams don’t excite me, but this was as good a foam as any other.  The lemongrass bits that you see on top of the foam were too strong for the light flavor of the foam.



Coral Trout Topped with Panko

Served with blackened cassava root, baby ferns, broiled cauliflower florets and coconut curry.  I’m a sucker for coconut curry and fish, so this was a huge win.  Also the charred cassava root was awesome — creamy inside, burnt and charry and bitter on the outside.



“Pekin Duck Two Ways”

The menu said this was “Pekin Duck Two Ways”, but it’s clearly not. Pan seared duck breast with beetroot orange sauce, with lentils and celeriac puree. Perfectly cooked duck, but came out a bit colder than it should have.  At this point in the meal we realize that the chef either really likes beets or won a a fridge full of beets in a contest recently and is trying to unload them on his diners.



Kiwami 9+ Beef Cube Roll.

Okie. This is the “holy shit are you serious?!” dish of the night. Kiwami 9+ beef is basically awesome Wagyu. Think the marbliest of marbley beefs.  It was pretty red, and some people might like it a little less so, We did ask for it medium rare, so that could be a kitchen misstep.  Center was slightly warm, arguably needed a little more time to get to medium rare, but it was perfect for me.

And what’s that? A *huge* piece of smoked, seared foie gras on top of the delicious, unctuous wagyu cut? This was a very generous cut.  Foie is amazing.

This course was really rich. I love foie and I love fatty steaks so I was in bliss, but reasonable humans who want to live past next week without heart problems would have a case for claiming this dish was too rich. The kitchen wasn’t even *trying* for balance on this one. Every element on the plate is rich, creamy, buttery, and unctuous.



Simple Lime Sorbet

A necessary palate cleanser after the beef course.  This was actually not included in the menu, but when we found out that the next course was lamb, we asked to take a break between the 2 red meats and requested a palate cleanser. A light, citrusy 10 minute respite between heavy meat courses.



Lamb Rack

Lamb medium rare, served with eggplant caponata, sweet potato and beet root puree, and charred leeks.  Awesome, but at this point I’m stuffed and ready to change gears away from proteins. Very happy that dessert is next.



Flourless Valrhona Chocolate Cake

Quite fudgey, dense, but small. Served with vanilla gelato, hazelnut crumbles, and tart red raspberry gelee drops.



Banana Bread, Glazed Mango, Toasted Meringue



Oatmeal Cookie, Chocolate Hazelnut Butter, Graham Cracker Crumble


Dark chocolate bon bon shell filled with liquid caramel

I usually think things like this are too sweet, but the caramel was just perfect.  Not too sweet.


* * *


So, you know… Just another average Sunday night dinner…


Ruby Doesn’t Give A Shit About Your Charm And Wit

One of the things I really like about programming is if you miss a period or a comma, it matters. There is this objective standard (the code works or it doesn’t).

Lets say these college guys with their dating app are good looking and incredible sales people, that might get tons fellow students to go to their unbounce page, but as far as coding a web app you can’t schmooze your way to working code. If the code doesn’t work you can’t just get by on your charm and wit.

Ruby doesn’t give a shit about your charm and wit.

It’s refreshing and empowering.

(published without permission from an email thread with my friend ML)

How To Bid For CPC Campaigns (aka “Stop Doing Adwords Wrong”)

There Is A *Right* Answer

For each keyword in a CPC campaign, there is one single, *correct* amount to bid for a click. All other amounts are wrong. Many people bid the wrong amount. The consequence of this is lost profits.

Most online CPC bidding advice says things like:

  1. “Bid however much you would want to pay for someone to come to your site”
  2. “If you’re unsure what bid to start with, try setting a max. CPC bid of US$1″ (really, this is what google says. thanks for nothing. https://support.google.com/adwords/answer/2471184?hl=en)
  3. “Bid less than max bid = conversion rate x profit per sale”

However, most advertisers don’t know:

  • how much a click SHOULD be worth for them
  • what their conversion rate is
  • how to use campaign results as feedback to further optimize their campaign

The most important points are that at any given time there is a *right* bid that:

  1. Maximizes total profit,
  2. Can be experimentally estimated

This amount is not static and changes over time, but it’s possible to constantly correct towards the optimum bid.



Profit Per Keyword

Google gives advertisers the ability to group keywords together and apply the same bidding strategy across a group. This is great for manually managed campaigns because the amount of effort it would take to individually, manually optimize each keyword in a large campaign is unreasonable.

Thankfully though, computers are really good at doing repetitive data analysis very quickly. This approach to CPC campaign management is one where every keyword in the campaign is managed completely independently, by a computer program (this is the basic approach, but in practice, it’s sensible to group similar keywords with insufficient volume to avoid data sparsity).

Profit Per Conversion


This graph should be uncontroversial. It is a line graph of the amount of profit earned per conversion (y-axis) vs the CPC (x-axis).

A. An advertiser who bids $0 will earn the total amount of their conversion value for each conversion that is made through the advertising campaign.

B. An advertiser who bids $N will earn the conversion value – the cost per click (CPC) times number of clicks it takes to receive a conversion (1/conversion rate) for each conversion that is made through the advertising campaign. Profit per Conversion = Conversion Value – (Cost Per Click) * (1 / Conversion Rate)

C. The x-intercept is the Breakeven Point, which occurs when Conversion Value = (Cost Per Click) * (1 / Conversion Rate). This is the point where the amount of money spent on clicks exactly offsets the value earned through a conversion. Spending more than this leads to negative ROI campaigns. Spending less than this is positive ROI.

Note: This is the actual CPC, not the max bid. In practice, you just use the max bid as a proxy for the actual CPC, which will be lower than your max, and assume there is some secret function that Google uses to convert your max bid into a realized CPC.


How Many Clicks (or Conversions) Can You Buy?


Google is in the business of selling adspace in open auction. All other things constant, by bidding more money, an advertiser can get better placement and more clicks.

A. Bidding zero will give an advertiser no exposure and therefore no clicks.

B. Increasing the bid will increase the number of clicks the advertiser receives. This increase is non-linear.

C. There is a ceiling on the number of clicks that can be bought for any particular keyword or query (even if you had a billion dollars to spend tomorrow, you couldn’t buy a million clicks for the keyword [elephants in pant suits never eat donuts] because there isn’t enough search volume to sell you that many clicks).


Total Profit Per Keyword


Multiplying the information from the preceding graphs gives us the total profit earned for a particular keyword.

For example:

Conversion Rate = 5%
Conversion Value = $10.00

For this particular example keyword, increasing CPC linearly increases total clicks purchased such that every 5 cents higher the CPC bid is results in 100 more clicks over the measurement time period.

  • 0 clicks * 5% CR * $10 Conversion Value – 0 clicks * $.125 CPC = 0
  • 250 clicks * 5% CR * $10 Conversion Value – 250 clicks * $.125 CPC = 93.75
  • 500 clicks * 5% CR * $10 Conversion Value – 500 clicks * $.25 CPC = 125.00
  • 750 clicks * 5% CR * $10 Conversion Value – 750 clicks * $.375 CPC = 93.75
  • 1000 clicks * 5% CR * $10 Conversion Value – 1000 clicks * $.50 CPC = 0
  • > 1000 clicks == >1000 clicks at >$.50 == lose money

A. zero spend == zero clicks == zero conversions == zero profits
C. this is the max profit CPC price. paying this amount for clicks balances total traffic and price per visit in a way that maximizes profit.
B & D. there are 2 ways to make less than the maximum amount of money. B: buy less traffic and pay less per click or D: buy more traffic, but at a higher cost per click. B is safer because small errors don’t result in losses.
E. the other way to make no money is to buy a lot of traffic but spend the total conversion value on generating traffic (breakeven CPC ( $10* 1 conversion per 20 clicks) == 50 cents/click).
F. lose money — spend more money on traffic than you recover through the conversions. whenever you hear someone say “we tried adwords, but it didn’t work for us”, this is where they were on the curve.



It’s important to note again that you can’t look up the information to set your CPC bids or calculate it theoretically — it has to be determined experimentally. There’s nothing you can do to just start with the perfect campaign. You will make your best guesses, experiment, then use the feedback to estimate the shape of the curve.

That means you will start by running suboptimal campaigns, then use the information to get closer to optimal. The better your initial guesses, the less money you’ll spend in the “curve discovery/estimation” part of the process.

If you already have conversion rate data, you can start by applying the site global conversion rate as your estimated conversion rate for each keyword, then that gives you point E, the breakeven spend CPC.

If you don’t have any conversion rate data, now’s as good a time as any to start buying traffic to see what the conversion rate is. You may lose money doing this, but you should treat this expense as a cost of information. Once you have some basic conversion rate data, you’ll be able to estimate your breakeven spend CPC. Being cheap here is a mistake. You pay less for worse data. Since this is information you want to base your campaign on, consider it an investment in your future.

Once you’ve estimated point E for the keyword, your goal is to test various CPC levels. To do this, vary your max bid over several time periods, and at each CPC level, recording the profit generated by that keyword. Assume that the profit vs CPC curve qualitatively fits the model above, then use the collected data to estimate what the curve looks like.

Do this around 1/3 E, 1/2 E and 2/3 E. In the example above, if you have a a $0.50 breakeven CPC price given your global (as opposed to keyword) conversion rate, try 16 cents, 25 cents, and 33 cent CPC’s to see what the corresponding profits are. Use these results to estimate the maxima for each keyword in your entire portfolio independently.

Each keyword in the portfolio should convert at a different rate. This process will help estimate the CPC amount that maximizes the profit for a keyword while accounting for the different conversion rate for each word.

Additionally, if there’s reason to believe that there are different Conversion Value or LTV’s for different keywords, you can use this information as well to optimize. However, in practice you need a lot of conversions for this data to be reliable and except for the highest volume sites, this will be difficult to execute, so it’s easier to just use the same keyword. Obviously this depends on the kind of site you have: An electronics retailer that bids heavily on product name keywords to sell those should probably use the actual profits generated by the keyword (TV’s are more expensive than USB cables). A SaaS product that has one price can probably just plug in their product price.



Because the correct bid price for a keyword is a function of changing inputs outside of your control, for each keyword you should be constantly re-assessing whether the “optimal price” estimate is correct.

To do so, slightly change bid prices after you have enough conversion data at a specific bid price. As the CPC’s change you will be constantly traversing up and down the curve to either: (a) discover that the shape has changed, or (b) confirm that the shape is still as you estimate.

You should stay NEAR the optimal bid price as you probe the curve for information in order to take advantage of what you’ve learned. When the shape changes, you’ll adjust your bids to the new maximum.


Alternate Curve Shapes

Not all keywords can or will be profitable (lots of competition for ads, low conversion rate, low conversion value).
Some will be always profitable (your searchers are already looking to give you money, high conversion value, high conversion rates, no competition in the keyword space).

The following 2 are just special cases of the general shape described above.

Always Lose

Joe’s company “Get Face Punched, LLC” sells a coupon for $1000 that entitles the holder of the coupon to be punched in the face by Joe. He advertises on Google Adwords. He’s disappointed in his 0% conversion rate.


For a product that converts too poorly, no bidding strategy can turn a profit. Every dollar spent is a dollar lost. Joe can’t turn a profit because he just never converts. He can fix this by changing other non-bidding elements (the product, the landing pages, the ads, etc) to change the shape of the Profit vs CPC graph.

Similarly a product whose Conversion Value is too low won’t be able to turn a profit — It’s hard to pay money for traffic and recoup it without collecting any money back.

In the case of free products, they may operate at a short term loss, but the operator needs to know what price they are willing to pay for a conversion, whether or not it corresponds to future financial returns.

The method of traversing to find the optimal CPC bid will still work for a keyword like this.  As you continue to traverse to higher ground, the optimal CPC will turn out to be $0.00, and you will effectively never bid for this keyword. As a shortcut during the optimum CPC discovery stage, whenever the measured profitability of a keyword at a given CPC is negative, halve the CPC instead of doing small traversals.

Always Win

Sarah’s company “Insanely Comfortable Luxury Bed” sells $50,000 handmade beds made from angel wings and confer amazing sexual prowess on its purchasers. It’s a small market, but pretty much everyone who ever looks for it online has already made the buying decision. Her conversion rate is insanely high at 50% and there’s not a lot of competition for “angel wing beds make me a sex god(dess)” so her CPC’s are shockingly cheap.


In contrast, with a product that converts awesomely, the payout is massive, or competition is scarce, it’s actually hard to *lose* money. While there’s a theoretical breakeven point at extremely high CPC’s, the conversion rate is too high and there isn’t enough competition to ever drive costs high enough because Google will ultimately cap the effective CPC at the highest competing bid.

Additionally, since there is a cap on the number of clicks available for google to sell, for low volume keywords, hitting that cap means you can’t spend any further.

The same traversal method for finding the optimal CPC bid works here as well. You’ll continually bid more for clicks until you’ve reached the end and there are no more buyable clicks.  Bidding higher through Google adwords won’t result in higher actual CPC’s because you’ll have outbid the competition. Also, once you’ve purchased all available clicks, you won’t be able to spend anymore so the CPC bid will settle into the maxima at the top of the line segment.


Improving non-CPC-Bidding Problems Leads to Curve expansion

The correct amount to bid is a function of a lot of things, including:

  • the keyword
  • quality score
  • competition
  • day, time, place, device
  • conversion rate
  • conversion value (based on your landing page, your product awesomeness, other factors)

All these things are subject to change at any time.

For a given situation/world, there IS one single optimal bid price. That does NOT mean that for a given keyword there’s only one bid price.

It’s probable that unoptimized ads/landing pages will show that a lot of keywords have NO profitable bid opportunities. By improving conversion rate, quality score, ad copy, or any number of things, it’s possible to change the shape of the ad keyword profit curve, which necessitates recalibrating the keyword bid.

The specific bid price is just one small component of the process that can be optimized. It ensures that given your existing campaign, you’re allocating your ad spend in the most capital efficient way (The biggest possible piece of an existing pie)

However, changes to the campaign can expand can increase the available opportunities (making the pie bigger):

  • better ads/relevance lead to higher click-through-rates, higher Quality Scores, and lower bid prices for the same position, therefore growing profits and stretching the breakeven point to the right.
  • better landing pages can be tested to improve conversion rate, which decreases the cost per conversion and grows profits and stretches the breakeven further to the right.



  • In practice the curve isn’t so pretty and the falloff from the peak may not be symmetric.
  • If in doubt and uncertain of the actual shape for the keyword, its safer to underbid than overbid (lose money the other way, read about 1/2 kelly betting)
  • The shape of the curve can be improved, increase total max, by doing things on-site to improve conversion rate, improving your actual ads to also improve conversion rate, working on your quality scores, etc.
  • Google will curb your actual CPC — this plots actual CPC not bids. for example, i can’t pay 50 bucks for a single click of an obscure keyword because the bidding system will just have me outbid the highest bid. As a result, advertisers are protected from the most devastating failure cases (i.e. WAAY far to the right on the CPC/x-axis where the total profit would be hugely negative).
  • You need to be able to buy enough clicks in a steady enough environment in order to credibly estimate the shape of the curve. So low volume keywords will either be impossible to estimate, or you’ll have to combine them with other keywords to form a basket of keywords for which the shape can be estimated. This comes at the price of fine-grained keyword specific pricing control. If you bucket keywords that perform differently and estimate the shape of the aggregate click portfolio, you’ll end up with a shape that could be qualitatively different so you might not be appropriately estimating a peak (it could be multi-modal with many local maxima instead of a single global maximum).

Also, the corollary to this is that there’s a correct amount to spend, and it’s based on your correct CPC amount. It’s “however many clicks google will give you at the specified CPC price”. The budgeting advice that sounds like “As much as you feel comfortable spending in a day” is bad advice.  It’s the right advice for campaigns that are designed to be negative expected value. The right advice for campaigns that are positive EV (those that make money) is “spend as much as Google will let me”.

(thanks, http://www.onemotion.com/flash/sketch-paint/ for letting me make pictures.)

Smooth Online Signatures (Open Source)

Try signing this pad with your mouse

Wanted: Embeddable Signatures

Rocket Lease provides rental application software so landlords can screen their tenants with an online application rather than a paper application.

I wanted to incorporate a digital signing process into the application similar to the iPad payment kiosks that allow you to trace your signature with your finger. That's not a requirement for online signature validity, but it more closely mirrors the paper signature process that landlords are used to and there's something about physically drawing your signature that makes many people feel like it's more legitimate. (Electronic signature validity is a whole separate blog post)

I generally try to borrow rather than build, but since nothing seemed to fit the bill, I looked into customizing an existing open source solution. For Rocket Lease, if that reduces objections to using an online application, that's a win. Plus, it just seemed like fun.

Existing solutions at the time either:

  • Required me to direct my users away to a third party site/service for signing
  • Charged more than I wanted to pay
  • Didn't have the signature smoothing component

All the credit belongs to the incredible work by Thomas Bradley, who authored the original signature library and Square for the blog post that outlined the approach.

My fork is available on my github here: https://github.com/ezl/signature-pad

Capturing Signatures

Signatures are basically recorded as a series of (x,y) coordinates on a canvas, which can later be used to regenerate the signature.

However, an array of (x,y) coordinates doesn't capture the curves of a signature. if the sampling rate isn't sufficiently fast, you'll end up with jagged line segments.

Thomas Bradley's signature library seemed to be the most active, best supported, best documented open source library, but the rendering approach left jagged signatures and I wanted the smooth style signatures I was seeing in other apps (that I would have to pay for).

Try signing this canvas using the original library, which draws linear segments between sampled points:

Example: Linear Interpolation (Original)

Using the blog post by Square as a guide, I compute bezier curves (this is the same thing as the pen tool in Photoshop) that pass through the sampled points, then retrace it when the pen lifts. There are a few complications, which I'll describe below.

Example: Bezier Curves (constant pen width)

The first problem I ran into was that the sampling rate was actually too FAST. With a touchpad, there is some measurement noise that causes some of the jagged lines in the original library. Smoothing the curves removes the angles, but it still renders a wavy/squiggly signature. To counter that, I use only a subset of the sampled points, which are uniformly sampled (There are smarter approaches, but this was the easiest and least invasive to the original library).

When drawing linear segments between sampled points, you can immediately stroke a path from the n-1th point to the nth (last) point. You'll end up with the jagged linear segment approximation of a signature as described above, but the benefit is that "ink" stroke ends where your mouse cursor is, much like the ink path of a signature of a pen on paper.

With bezier curves, however, the last 2 points are insufficient for determining the shape of the arc between the last 2 points. Given the last 2 sampled points n-1 and n, we actually need to know the location of point n-2 (the third to last point we sampled -- we know this) and n+1 (the next point that WILL be sampled in the future -- obviously we *don't* know this) to trace the correct Bezier curve.

So to draw the right segment, you always have to be lagging the mouse cursor in order to trace the correct path, which makes the signature feel less responsive to the end user.

To resolve this, I'm stroking the sampled path with linear segments, then once there is enough information to render the curve, I erase the linear segments and stroke a bezier in it's path. Erasing by drawing a white line over the original segments weirdly doesn't cover up the previous line though and it results in weird "ghost" markings that outline where the previous segments were.

You'll notice this if you try signing the smoothed pad above again. To highlight it, just scribble over the whole pad many times and you'll see what I'm referring to. The hacky "fix" for this was to restroke the sampled path on the mouseup (or touchend) event.

Here is an example of the difference between the smoothed and unsmoothed signatures when I sign on the touchpad on my Macbook Air

Regenerating Smooth Signatures

Finally, just an example of 2 signatures the difference between the 2 methods of rendering signatures.

These signatures are generated from the same underlying data.

If you look closely, you'll see that there are kinks in the first signature, but the second one is a smooth stroke from beginning to end.

Linear interpolation between sampled signature points

Bezier curves that pass through all sampled points, fixed stroke width

Further Work

There are admittedly a lot of mistakes I made and hacky shortcuts I took, but for now this is sufficient for the business needs of Rocket Lease.

The first few things I would work on are:

  • Better subsetting of the recorded data or better sampling
  • Variable width signatures (this is implemented very crudely, and I didn't discuss it in this post. The first signature pad in the post uses it though)
  • Fix the part that renders the trailing bezier path -- Currently it actually still traces 4 point beziers which have cusps between them, then waits til the mouseup event to stroke the full path -- this is wrong, but most people don't really notice.

Email Me

I blog because I like connecting with smart people.

If you are interested this or what I'm doing with online rental applications at Rocket Lease, please say hello.

Say Hello To Me!

Customer Interviews As An Excuse For Inaction



A friend of mine hired a business coach recently, and I’m pretty sure her only credential was having read The Lean Startup.

She kept telling him to do cusomter interviews and get customers. 3 months later, he’s still product-less and searching. Half the ideas he kicks around could be built, tested, and deployed in 48 hours and traffic bought for less than the cost of her consulting fees.

This is a rant about Lean zealots who blindly apply “Talk to customers first”.

I think that’s the right approach a lot of the time, but I’m a lot less hard-line than many proponents of “Lean”.

Basically, a *sane* rule is “validate as fast as possible”.

This really means: “form a falsifiable hypothesis, then pursue whatever course of action gives you a verdict that is ‘true’ or ‘false’ while spending the smallest number of resources (usually money and time)“.

For 90% of people, this is “get customers first”. For 90% of developers, this is “get customers first”. So “get customers first” is an awesome rule. But sometimes its faster to just build it (for example, already have an audience, takes 3 days to deploy). If so, just build it.

“Get customers first” is the right thing to say, but the underlying logic is “find out as fast and cheap as possible if you’re chasing a dead end”.

Never launching is just as sure a way to fail as building the wrong thing.

(thanks rz for the email thread that led to this)

Rocket Lease Update Sep 2013

3 months ago I published a detailed status report on the state of my company, Rocket Lease. This is the next public post in this series.

Read to see:

  • Summary / TLDR
  • Product Description
  • Sales Numbers
  • Experiments
  • What Rocket Lease is Doing Differently / Why Rocket Lease is Winning
  • Issues / Problems
  • Going Forward


Summary / TLDR:

Rocket Lease does online rental applications.

  • Continued growth since the 1 year report.
  • Approaching a 200k revenue rate.
  • Paid user acquisition channels appear effective, though expensive and time consuming.
  • Many lessons learned.

Plan: Take lessons learned to improve product and increase ability to operate with limited resources.


Rocket Lease provides online rental applications for landlords and property managers to screen prospective tenants for their rental properties.

In the US residential housing rental market, the standard practice for most lessors (landlords, property managers, leasing agents/brokers) is to collect information about a prospective applicant (such as name, address, social security number, date of birth, employer, past landlords, etc.), then use this information to order reports such as credit reports, background checks, employment or income verification, etc.

88% of these applications still occur on paper.

Rocket Lease makes it easy for these lessors to use a browser based application form and can automate components of the screening process.

This is easier for renters, who get frustrated with:

  • Having to physically deliver a completed, hand-written application
  • Not having a fax machine to fax back a copy (nobody has these at home anymore)
  • Not having a scanner
  • Not having Adobe Acrobat installed to complete scanned or PDF applications
  • Having to get money orders or write paper checks for small application fee amounts (on the order of $20 to $50 typically).

This is easier for lessors, who have problems with:

  • Not having an established process for applications or accounts with tenant screening vendors (independent, non-professional landlords)
  • Not being able to read applicant handwriting
  • Delayed reporting (credit report vendors take anywhere from “instant” to “72 hours” to deliver results)
  • Forgetting to deposit checks – Bank runs to deposit $35 checks are often not even worth the hassle for many landlords

Read more on the business model in the 1-year status post.

Sales Numbers

Jan 2013: $1595
Feb 2013: $1270
Mar 2013: $2325
Apr 2013: $4230
May 2013: $5660
Jun 2013: $6240
Jul 2013: $10320
Aug 2013: $13740

Gross Profits
Jan 2013: $622.93
Feb 2013: $534.86
Mar 2013: $1095.15
Apr 2013: $1873.8
May 2013: $2377.23
Jun 2013: $2760.12
Jul 2013: $4386.10
Aug 2013: $5701.56

Note: I used to track the ratio of free/$15/$35 applications because I thought they have different contributions to Rocket Lease profitability, but I’ve basically stopped and I only look at the sales number now. The “Gross Profits” number is the total sale price – cost of procuring the reports from our vendors – credit card processing fees by Stripe.

This is the starting number from which all the other business expenses, including rent, salaries, marketing expenses, subscription fees for software tools we use, professional services like legal and accounting, etc. get deducted from.


  1. SEO / Content Marketing
  2. Paid User Acquisition
  3. Affiliate Program

SEO / Content Marketing (Early, but hopeful)

I’m committed to building up a decent inflow of organic traffic. I think this is important because people are becoming landlords every day. People are forced to move for their jobs and can’t sell a house. Successful people are interested in investing in rental property. 1-2% of the residential real estate market turns hands every year. In the past, new landlords and property managers may have asked friends or peers for advice on managing rental properties. Now, people search online. New landlords become big landlords. Once people have a process in place that works for them, they don’t really switch often. I want to snag them at the root.

In the last few months, Kevin Espiritu (thanks Kevin!) has been helping with an expansive content marketing strategy. He’s done a lot to make the blog much more presentable and a better resource. In order to target new landlords, we’ve crafted a content strategy around content we think new landlords might ask. The idea is to cast a wide net around these sorts of long tail search questions that can catch the attention of new landlords (who are good candidates for people who don’t have existing, entrenched application processes in place or might generally be searching for a better solution).

Results so far are underwhelming, but this is important to Rocket Lease and I never expected SEO to be an instant game. I’m patient and confident that this will slowly generate results for us that overwhelm all of our other lead generation tactics.

Paid User Acquisition (Promising, on hold)

We engaged a user acquisition specialist who brought some interesting ideas to the table. He was able to push a lot of people in the funnel, and is largely responsible for the big sales jump in July and Aug. I’m not sure how scalable this approach is and the cost is high. Moving forward, we’re putting this on hold so we can explore higher value paths going forward. On both sides, we agree that there’s an interesting idea here, but it’s time consuming and therefore not necessarily the best allocation of time/money.

Affiliate Program (Killed)

Affiliate programs seemed to make a lot of sense — Pay people to convert users for us that we might not otherwise reach. In practice though, this was a failure, so I’ve temporarily suspended this program. Basically, the majority of affiliates were either:

  • brokers and leasing agents who put affiliate links on their site — This is good for us because of the backlinks, but I don’t know that it generated any revenue for us through referred users.
  • spammers — a handful of mass email marketers who indiscriminately emailed huge mailing lists or scraped emails. While this admittedly drove both traffic and signups for us, the ratio of complaints was disconcerting and this was generally difficult for us to regulate.

It also generated inquiries that ended up spending a lot of my time on support, but resulted in virtually no ROI. The generated revenue, on the other hand came coupled with complaints. Ultimately I think this ended up being a major distraction, so at least for now, this is a dead program.

What Rocket Lease Is Doing Differently (And Why Rocket Lease Is Winning)

  1. Insane customer service
  2. I write software
  3. Philosophy of aggressive experimentation
  4. Single Founder

Insane Customer Service

This is totally unscalable, but I believe it has been instrumental in helping Rocket Lease get where we are. I personally answer every email, and I do so within 24 hours on weekedays (usually much faster). I personally try to call back as many customers as possible and we have phone support (whenever I’m in the office).

Using customer.io has helped tremendously as well, and I’ve had conversations with over 15% of our users.

Some customers are often shocked to EVEN GET A RESPONSE AT ALL, much less from the company founder, and as fast as I try to respond. I admittedly get a lot of help from template responses to common questions, but I always personalize the answers. This is amazing because the reality is that most companies just don’t care or don’t try that hard. They treat it as a company VS customer battle rather than genuinely trying to help. The bar for excellence is shockingly low in some ways, and all it takes sometimes is *actually trying*.

Customers complain or make recommendations. Initially it was hard for me to hear these complaints, but I’ve learned to turn them into opportunities to improvement. As a result I’ve started a lot of meaningful conversations with our customers and Rocket Lease is constantly evolving to better meet their needs.

* Note: I’ve also had some prospective customers express disappointment or anger that a personal callback has taken over 3 hours or informed me that because they did not receive support on a Sunday they would never use Rocket Lease. My approach is that I try to be sympathetic and explain our situation.

Realistically, if I call Bank of America or even a restaurant down the street, I know that I will often get NO response, much less a thoughtful callback, so if this is a demand of these prospective customers, at this current time we just can’t support them yet. At some time in the future, I would love to be able to offer that level of support.

I Write Code

While I am no longer the primary developer on Rocket Lease (thanks, CHR, you’re invaluable!), I am actively involved in planning and all feature discussions and am still writing code almost every day. The reason why this is valuable is because it helps me know what sorts of things are possible and how difficult it would be to make changes/improvements when I’m talking to customers.

Single Founder

This is both (a) why Rocket Lease is winning, and in the next section you’ll see (b) why Rocket Lease is struggling.

“Single Founder” is a doubled edged sword. The biggest 2 benefits are:

  1. I can act decisively and quickly without debate. I’ve seen and advised other startups that seem riddled with indecision and discussion. Some prudence and discussion is healthy, of course. I rely on friends and advisors to help me in that capacity, but at the end of the day there’s no fallout if I unilaterally decide on a course of action.
  2. It’s cheap to operate. Since I’ve started Rocket Lease (and before that, L with RZ and WC), I’ve kept a list of as many other real estate startups as I could find. Many have come and gone. They raise small amounts of money, have investors to answer to, and have more people that have to stay both fed, aligned in vision, and are simultaneously forgoing the opportunity cost of regular employment income. With three co-founders in a new startup venture, there are three people that might decide they want to go back to that cush job, and that’s yet another conversation that can lead to company death.

Philosophy of Aggressive Experimentation

Starting a company is a big endeavor. It’s just plain arrogant of any founder or CEO to think he/she knows everything or can craft the perfect product for a wildly varying heterogeneous user population.

I don’t know what the best product looks like, what the most important features are, how everyone is going to use it, what the best emails to write are, or the best signup button color is.

I am a landlord, so I have a few ideas that serve as a good starting point, but after that, my approach is to assume that I know nothing and start asking my customers and trying things out. I’m confident we have pretty close to the best product on the market in our niche, and users and prospective users are happy to tell us how to make it even better. That gives them a better experience in the future and makes them feel better about helping a company that actually cares about them.

We try lots of new things out. A lot of things fail. Some of them succeed. Ultimately, we’re happy to fail and learn if it gets us to higher ground faster. And it has.

Issues / Problems

  1. Single Founder
  2. Scalability / Customer Service Load

Single Founder

As a single founder, my biggest problem is that there’s only one of me. While some founders may be good at juggling multiple major projects, I’ve come to understand that if I want to succeed or complete high quality deliverables, I need to give my full focus to whatever task is in front of me.

This is a problem, because I feel that Rocket Lease has done as well as it has (and will ultimately win) because of the 3 things listed above. In the past, that’s been fine because they’ve largely come at different times in Rocket Lease’s life cycle. Before the product existed, I was largely just writing code. As Rocket Lease was trying to get customers, I was constantly running different experiments to test acquisition tactics and improve conversion/customer activation. As we got customers, I repeatedly and talking to customers about things to change and integrating that back into the product. As the codebase became more stable and we turned the dial up on traffic, I could spend full days on extremely high-touch customer support.

In the long run, though I can’t do all those things. While product is table, we’ve learned a LOT of lessons in the last 3 months that I think necessitate some rethinking about the product so we can make the experience substantially better. I can’t craft the new version of Rocket Lease and experiment and support at the same time.

Proposed Solution: I have 2 people that I’ve been actively talking to about bringing on board to help reduce some of the burden so I can focus on whatever task I need. While single founder is definitely difficult, there are benefits as well. I find it is important for single founders to do their best to replace the value that is provided by cofounders. Great cofounders provide a lot of value in different ways. For me it’s been crucial to think about the most important roles that a cofounder would fill and find proxies for them in friends, advisors, contractors, and hopefully, in anyone who ultimately joins the Rocket Lease team.

Scalability / Customer Service Load

As mentioned, the particular brand of customer support that I’m serving right now is unscalable, and frankly, running me ragged.

Like, I’m assuming, many other companies, there are a lot of repeat questions. I use template response letters, but ultimately, many of the repeat questions are just a symptom of the User Interface failing to adequately convey the right information to new customers. We’ve learned a lot, and these lessons will factor into UI/UX improvements that hopefully reduce the support load.

Proposed Solution: Better UI/UX, product improvements that remove some of these questions, explainer/onboarding tutorials for new users.

Going Forward

Professional property managers and brokers account for 15%-20% of our total users, but account for nearly 50% of the sales. Additionally, once they’ve gotten the hang of it, their support load is nearly negligible (Almost all support comes while onboarding customers because they have questions about the process when they’re using it the first time). I’d like to consider experimenting with re-focusing on professional property managers and have a couple of ideas for how to approach it.

I also have a clear idea of some of the changes that need to be made to take Rocket Lease to the next level for our current and future customers. Unfortunately, that comes at a user acquisition, but its a necessary improvement. Because the rental season is drawing to a close as we get into the holiday season, I think it’s prudent to take the opportunity to invest in this change now.

It’ll hurt to see sales numbers decline, but there’s no better time to bite the bullet. It’s going to be slow for Rocket Lease going forward with the holiday season, but I can’t wait to get more property managers on board with a new and improved iteration of the product.

Pay-Pad vs PaidHQ vs Sales Tracker for Stripe: Comparison of Stripe Mobile Apps

TLDR: Pay-pad is the most expensive, but the best. The price difference really shouldn’t matter for an app you use every day to run your business.

Rocket Lease processes payments through a 3rd party credit card processor called Stripe.

I like knowing when people are processing payments on the site.  There’s no real utility to that, except that I just love that gratification of thinking: “oh hey, we just made some money.” There don’t seem to be any apps that do this in the Android app store, so I rigged up a custom notification sound whenever I get an email about a stripe payment.

However, I had heard of these 3 apps that provide push notifications for iOS on new charges, so when I got a shiny new iPhone5 last week I was pretty excited about getting one of these apps.

The apps in question:

  1. $9.99: Pay-Pad
  2. $6.99: PaidHQ
  3. $2.99: Sales Tracker for Stripe


Screen Shots:

Transactions/Charges list

Photo Jun 06, 10 40 17 PMPhoto Jun 07, 11 44 15 AM


Pay-Pad on the left. Clear delineation between days, which is nice to me, and the full timestamp, which is actually useful to me.  Bonus points if they displayed the charge.description instead of the crazy ch_23hf9we3f style hash, which doesn’t provide me a lot of value at first glance. Extra bonus points if it displayed the customer description too (a lot of people don’t use customers in stripe though, so understandable UI decision to exclude it).

PaidHQ on the right, displaying just price and date. I can’t distinguish any of my charges.


Dashboard page:

Photo Jun 07, 11 44 52 AMPhoto Jun 07, 12 15 42 PM


Pay-pad on the left: 7 day graph, 13 week graph, 12 month graph. I like all of these — I like seeing how I”m doing day over day, and especially the weekly and monthly trend. Admittedly they don’t change often, but the visual representation is really nice. At the top of this dashboard page it also has day and week total for charges and customers, like the paid HQ app.

Paid HQ on the right: Daily total on the top (if you scroll over it has customers and monthly total) and just a rehash of the payments list on the bottom. Not any more useful than the actual payments and customers pages.


Specific feature comparisons:

Realistically, only Pay-Pad and PaidHQ are competitors in terms of functionality. These 2 apps are designed to let you modify and dig into your transaction and customer information. Sales Tracker for Stripe, on the other hand, is a stripped down notification and quick summary view of your Stripe account.

The first 2 are interactive, the latter is strictly notification and display.

I’ve only listed differences between the apps.


  • Multiple account support — if you have multiple stripe accounts, for different sites, then Pay-pad is the only option.
  • Timestamp on charges in charges list — I like looking over my recent payments. Pay-pad puts full timestamps on the charges, which I like. PaidHQ, in contrast, only puts the date, so if I want to know what time a transaction occurred, I have to select the charge item in the list to open up a page to view the details.  My app processes a lot of the same dollar volume transaction each day, and I often know approximately when the charge I’m looking for happened, so having this be in the main list improves my user experience tremendously.  This alone makes PaidHQ a non-starter for me.
  • Visual dashboard — Pay-pad has a visual dashboard with graphs that include your last 7 days, week over week information. I really like this visual feedback. In Comparison, PaidHQ has a dashboard as well, but it just combines the list of transactions and list of customers.  Replicating the functionality of other pages wasn’t enough of a value add to warrant creating a dashboard.
  • Gives me too many push notifications that I don’t care about and doesn’t give me a way to change the push notifications I want, specifically:  (a) “transfer created”-when stripe creates an order to pay out money they’ve processed for me, (b) “customer created”-usually this happens when a new person processes a transaction. I only care about the transaction, and I don’t need two push notifications for this event, and (c) “customer updated”- when a customer modifies their information. I don’t care about these events at all and I can’t turn off the notifications for them.

Paid HQ

  • Allows timezone localization — Stripe displays all timestamps in Greenwich Mean Time, which means that (a) I have to adjust the timestamps in my head and (b) if I want to look at my day over day numbers in the transaction list, I have to adjust for the fact that some of the transactions from the current day actually belong to the previous day). Timezone localization lets me think in the current time zone, which is a nice feature.
  • Allows filtering by date ranges on each of the lists (charges, customers, transfers) — I really like this feature, it was the only thing that I really wish Pay-Pad had. However, in practice, the mobile stripe app isn’t really designed for doing detailed analytics anyways, so if you’re doing some data crunching, you’ll be on a computer anyways and analyzing the raw data from stripe.  Nice feature, but realistically I would rarely need to use it on mobile when I couldn’t also look at it online.
  • Swipe screen edge to show menu — I like this, but its not a big deal.
  • On customers, display the customer.description field from Stripe. By default, stripe creates unintelligible hashes for each object type (customers, charges, etc) that look like “cus_23f9hw9ae32hw3asdd5″.  Paid & Pay-Pad both display this by default in the customer and transaction views, but in my opinion there’s really not a point to make this primary. On the customer view, Paid also displays the customer.description, which for me is the customer’s email address. This would let me look at a glance to see who is processing payments.

Payment Tracker for Stripe

  • Cheapest, and provides push notifications.  So if that’s what you’re looking for only, then this is the most economical solution.
  • However, the UI is a little slow because it is a wrapped html5/jquery mobile app.


Improvement requests:

I alluded to this above, but trying to display payment description rather than the payment id hash would be a much nicer for human consumption. All the apps use the id by default, and I think its because stripe ALWAYS has an id, but it doesn’t always have a charge.description or a customer.description.  First, I don’t think the hash is particularly useful for a mobile viewer anyways because you’re not going to copy and paste it somewhere to do anything with it AND they aren’t the types of strings that humans can process and remember easily.

The optimal solution would be to display the object.description field instead, and if it doesn’t exist, i’d say its a toss up between displaying some default text, NOTHING, or the object id.

In my opinion, the perfect list item for a charge displays: charge amount, charge description, and customer description if it exists, and full timestamp.



This is an app you’re hopefully going to be looking at every day. I have only had these apps for 6 days, and I check pay-pad multiple times a day. Price sensitivity on a regularly used app that you use to monitor the health of your business is silly, especially at a price point under 10 bucks.

Honestly, even if you don’t need the interactivity and just want a dashboard + notifications, my opinion is that you should still be getting the 9.99 Pay-Pad app for sheer functionality.

PaidHQ might be “prettier” to some people (I’ll admit I like the flat, simple, popular aesthetic more than Pay-Pad’s) but Pay-Pad just has better display for reporting transactions and the graphical dashboard. For most uses, viewing transactions is THE SINGLE MOST IMPORTANT thing you’ll do when dealing with Stripe (duh, its a payment processing app), so I think this makes Pay-Pad the no-brainer choice.

Get it here: www.pay-pad.com