App Store for Web Apps

Thursday, January 7, 2010

30 Comments

The “app store” concept has been very successful for Apple (iTunes App Store) and Google (Android Market) in the mobile space. But, what would an app store for web apps mean? During Google’s announcement for Chrome OS, Sundar Pichai, Vice President of Product Management, said “the Web offers hundreds of millions of applications” and that Google’s job will be “to make people aware of them.” (starts around 48:38). “Hundreds of millions” is a big number but in the context of 1.7 billion Internet users worldwide (with many users using multiple applications) the arithmetic “smells right.”  So, what would a web app store do? The purpose of any app store is to reduce the friction of connecting a user to applications. What are the areas of friction that can be greased?

Vital Stats and Payment

There are many companies that are working on digital wallets. A web app store could integrate with 1 or more of these. This means that the customer only needs to enter vital info once and, potentially, payment information once and then easily share that among all of the different applications purchased.

Customer Acquisition

The web app store creates a marketplace for applications that drives customers to the apps. This means that the application developer cedes a portion of the revenue of their app to the app store since the application developer will be incurring lower customer acquisition costs.

Aggregation

Most tasks take more than one application to complete. I wanted to create a favicon from a PNG logo and it took 3 tools to do the job. Being able to blend multiple applications together into a single holistic solution is extremely powerful since people buy solutions.

Web App Store Road Map

Instead of a closed web app store (like the iTunes App Store), let’s use an open standard. That way, applications can show up in multiple stores or be “added on” by other applications (like BigBrassBand does with Spreedly). The app owner should get to decide which web app stores they show up in and what the pricing is to that web app store. The API should be simple to implement, accessible over HTTP, and return results as XML.

With this in mind, I give the world the Web App Store API (draft). Web App Store Diagram

Here’s a summary (in a theatrical bent):

The Actors

  • App Store – The web app store. This could be a dedicated store or an application that wants to be able to include other applications as add-ons. Heroku’s AddOn’s page is a great example of this (you can buy SendGrid service, New Relic service, etc… as you are buying hosting or even after).
  • Customer – The person with money who buys applications!
  • App Owner – The application developer who is offering a web application for purchase.

The Props

  • Agreement – A ToS, Privacy Policy, or other legal notice the customer must agree to before purchase.
  • FeatureLevel – A feature level of the product that the app owner is selling. You’ve seen this before — Silver, Gold, Platinum, and Diamondium are all popular names for feature levels.
  • SecretKey – A secret string known only to an App Store and an App Owner. This is how an App Owner positively identifies which App Store is calling.

The Script

There are seven (7!) methods in the API. They are all implemented by the App Owner and called by the App Store.

  • featurelevels – the list of products available to the App Store. This could just be a static XML file.
  • agreements – the list of agreements that a customer must accept to purchase a product. The App Store promises (honest!) to make the customer accept these agreements before allowing the application to be purchased. This too could just be a static XML file.
  • customerrules – Does the App Owner require the customer’s e-mail address? Does the App Owner require a username? Are there custom fields that should be presented to the customer? These questions and more are answered by the return from this method — quite possibly a static XML file.
  • paymenttypes – the list of payment types (credit cards, Amazon FPS, PayPal [an Adaptive Payments Chained or Parallel payment could be very compelling here], etc…) that the App Owner supports. A static XML file? Almost certainly.
  • validatecustomer – This is an optional API and the first one that really, really needs to validate the SecretKey. It checks username uniqueness, that all required fields are present, etc…
  • submitcustomer – This takes the same arguments as validatecustomer and returns line items that will appear as a charge summary (product price, sales tax, etc…). This is everything that is required to generate a “Purchase Confirmation — Click Here to Purchase” page.
  • activatecustomer – This signs up the customer — just like if they had signed up at the App Owner’s site.

What next?

Dave Winer says on open standards that “someone goes first.” We’ve taken that first step. Now, it’s your turn.

Comment on this open API below: Critique, point out what’s missing, suggest things to change. By firing this standard in the crucible of a public discussion, we can end up with something we all want to use and not have to live with arbitrary store rules laid down by Google or Apple.

VIEWING 30 Comments:
teich
6 months ago

Interesting idea. First blush, I wonder if a standard will work, or if the customizations necessary for each “store” (like our add-on catalog) will mean that there's so little transportation that it's not worthwhile.

Some specific feedback – how about JSON instead of XML? We're 100% JSON.
I think there may be two actors (or more) missing:
* the app itself. Separate from the app owner, the app is a running service with it's own lifecycle and needs
* the service that is running this stuff. Big Brass Band isn't the app store. You have an app store on big brass band, like we do with our add-ons. those concepts are separate though. Once is the catalog, the other is the integration of services actually running.

There needs to be an API callback FROM the app back to the store. If the app changes something (a server dies and has a new IP address, username is changed, update to some object, etc) the running service needs to know about it.

Probably a lot more, but off the top of my head that's what comes to mind.

Mark L. Smith
6 months ago

You know, I prefer JSON over XML myself. I think that would be a good change

Regarding the rest…

I had envisioned the app store standard as something that would not have a lifecycle beyond the completion of the sales transaction — things like user name changes, server changes, etc… would be out of scope of this standard. Now, one thing lacking in that is that if you want to cancel, update payment info, etc… you have to do that at each service. This seems like obvious territory to get into.

Talk to me more about the callback from the app back to the store. Why would the store need to know about a new IP address on a server?

This is great feedback. Let's keep rolling…

Adam Wride
6 months ago

In the case of a real app store (not like BigBrassBand), there would be a full handoff of the customer to the app vendor (the app vendor would be managing their own payment processing, for example).

For an application, like BigBrassBand or Heroku, that is using a 3rd party app for a specific internal purpose it would be very useful to get back a reply from the app vendor with some key info (like the newly created API key; this is similar to how BigBrassBand works with Spreedly now; we sign up a new user and automatically configure that new user within BigBrassBand using their newly created Spreedly account).

Mark L. Smith
6 months ago

That makes sense. So, to support that case, activatecustomer needs to return an ID parameter that has meaning to the application. Sound right?

Adam Wride
6 months ago

Or at least the ability to pass some type of payload (do we need to dictate
whether it is an id or more than that?). What if I wanted to pass an id,
short site name, plan info etc?

Mark L. Smith
6 months ago

Since it will be application specific, then I guess it can return anything it wants. How about create a section in the JSON for grouping all of that together? Call it “AppCustomerInfo”.

Adam Wride
6 months ago

That works I think.

Adam Wride
6 months ago

Just found an app store at Shopify: http://apps.shopify.com/

At this page: http://api.shopify.com/billing.html it says that they take a 20% cut and they are doing all the billing. That seems quite generous – to the app owner. The trick though is that most applications already have their own billing system, so now the app owner has to deal with, effectively, a second billing system.

Here's the API: http://api.shopify.com/

natedog
6 months ago

I'll have to think more about this as I don't have a ton of feedback either way unfortunately. One thing that just came to mind is something with what we are doing with http://tgethr.com. In a nutshell it's supposed to replace people using a private Google Group which hasn't been updated in years. A thing that people seem to really need out there is this mail hook to other services. We've added them now for Unfuddle and for Dropbox. I can see then for example doing something like this web app store integration with Unfuddle like the Shopify app store is doing.

If we are helping sell unfuddle as a bug tracking service, it would be real nice for our users to buy or at least signup for a free subscription and automatically populate a lot of their data for them into Unfuddle.

Made me lookup this again too http://thesmallbusinessweb.com/

Mark L. Smith
6 months ago

Ok. So I will convert all output to JSON and add an AppCustomerInfo return to activatecustomer.

Mark L. Smith
6 months ago

It's interesting because some people would not want to deal with another billing system and some people would want the app store to handle all of the billing for them (instead of needing to handle their own).

I think the Web App Store API spec should handle both cases.

ntalbott
6 months ago

I've been thinking about this a lot over the past few days; some thoughts:

First, this is a problem that has a bunch of the indicators for a Wicked Problem. Can you point to places or industries where this has worked where there hasn't been a central vendor who controlled the underlying context and forced vendors to use the system? The iPhone works because Apple owns the iPhone hardware and software (their stranglehold on the approval process is an orthogonal issue – even without it, they would still centrally define and control the distribution and execution mechanism). Salesforce, again, controls the underlying platform, which allows them to provide (i.e. force) a common way for vendors to offer their wares. I guess in general, the problems around this seem to be very little about API and technology, and much more about business processes and finding mutual benefit.

Second, on the topic of mutual benefit, the only thing I'm seeing in this API for the consumer is the “digital wallet” aspect, but past history seems to indicate that that's nowhere near a strong enough measure to drive uptake of a new payment tech. Having a marketplace that brings in sales sounds great to vendors, but it'll only be great if there's a significant driver for adoption by the consumer. The aggregation stuff could drive adoption, but that's an even harder problem to solve, and this API doesn't address it at all.

In general, I'm thinking over Spreedly's integration with B3, and not seeing an easy way to abstract it to this level. Maybe I'll see it after we do more integrations – and if I do, I'll be all over it! – but for now I admit to not feeling it. From Spreedly's perspective, we'd love to power something like this, but only if we can MVP it first and know that the demand is there.

Just my initial $0.02 – I'll be watching to see what else develops in the space for sure!

ntalbott
6 months ago

Oh, this also made me think of Web Hooks. Definitely worth checking out when designing an inter-app web API.

Mark L. Smith
6 months ago

Great feedback, Nathaniel.

To your point on places or industries where there is an analog, I'll cite two:
1. Back when I used to ride a pterodactyl to the Big Insurance company I worked at (see… it was a long time ago), we did several deals just like this with banks: the bank would offer our insurance products when people opened up a new account. It turned out to be very lucrative for the insurance company, it was a new profit center for the bank, and a good deal for the consumer — the deals on insurance offered through the bank where the best to be had. But, each integration with each new bank was a custom effort and had a lot of cost involved.

2. Today, I see these kinds of deals in my AmEx statement online — there's services offered at a pretty good discount if I go through AmEx.

In both of these cases, it's the same problem that this API is attempting to address — the aggregation relationship exists at the original point of purchase. After that, I have (and, really, expect) independent relationships with each vendor.

The value in having a standard API is the friction for doing aggregation deals goes way down. If you had a vendor that wanted to aggregated your service, how many subscriptions would they have to drive to make it worth it? If the technical implementation is already in place meaning the cost to support the deal is very low or zero, you might be willing to support a lot more smaller deals.

In regards to the consumer, this API contains no digital wallet of its own but does support digital wallets from PayPal and Amazon (for sure) and probably any others. I don't see this as a consumer play.

You mention that this API doesn't address aggregation. Help me define terms — what do you mean by aggregation in that context?
One of the reasons we wanted to go ahead and put this API spec out is that we're seeing a lot of need for us ourselves — we've got many more integrations ahead of us and if we have this need, I've got to believe that others do as well. I think there are some real world analogs here as well –

Mark L. Smith
6 months ago

Is there a particular place where you think call backs make sense?

Recurly
6 months ago

This is an intriguing idea- and I think one that is beginning to finally coalesce as greater levels of openness and inter operation are being embraced by developers. This collaborative approach to solving the multiple challenges around enabling a user to find an app, and then purchase it in a seamless and secure is something we definitely support. We'd love to find out more as this develops and see where we may be able to assist. So far, sounds good :)

Josh Pyles
6 months ago

Interesting concept. It's surprising it hasn't been done, but at the same time I think it's probably because of the nature of web applications. They don't really run on any particular platform. I don't know if the public will favor this type of way to purchase web apps vs. the traditional way, but I think it's worth trying.

Adam Wride
6 months ago

I believe the way it works out is the standard just makes the web app stores possible. It would then be up to the folks who run the web app stores to make it worth their while.

One of the things that I could see happening is bundling of applications. Imagine buying a specific version of Basecamp that comes bundled with myBalsamiq. Or maybe every paid version of Basecamp (http://www.basecamphq.com) also comes with the time tracking/invoice app Harvest (http://www.getharvest.com). Or like we're doing at BigBrassBand, buy BigBrassBand with Spreedly for only $X more.

The trick is to keep the standard simple enough that people will use it and feature complete enough that it works for +80% of the apps.

It's a tough problem, but worth solving.

Nick Pettit
6 months ago

This just hit TechCrunch:
http://www.techcrunch.com/2010/01/13/getapp-app...

There's always room for competition though.

ntalbott
6 months ago

Not in particular, no; I first saw Web Hooks in use in DabbleDB and really liked the way they did it. Worth looking at/thinking about when designing inter-app API's.

ntalbott
6 months ago

Your examples kind of illustrate my point I guess: in both the insurance company and the AmEx case, there's a central entity dictating the API. It might be “open” in the published sense, but it wasn't created in an ad-hoc, open source manner. Not saying that's bad, I just wonder if a laissez faire approach works for this kind of standard.

I totally agree that this could be a coup in terms of lowering the cost of doing co-marketing/co-sales deals. Bring it on! But at the same time, the pre-release Partners API that Spreedly exposes (and B3 uses) already attempts to do that. Not sure yet how it will pan out as we land other partners, but it will be interesting to see if it turns into something general purpose.

When I said this didn't address “aggregation”, I meant the actual work of integrating application A with application B. In other words, your use case of creating a favicon from a PNG isn't really helped by having the three tools bought from the same place or even at the same time – what really makes it easier is someone wrapping those three tools up into one seamless workflow.

Really interesting stuff to think about! Another resource to check out is the http://thesmallbusinessweb.com/ – they've taken an interesting approach to trying to solve this problem.

Adam Wride
6 months ago

Great link. The listing of SaaS in once place is great, but from what I can tell you can't actually buy anything through them directly (you still have to jump over to the vendor's website). Is that right?

We should pull GetApp.com into this conversation =)

Adam Wride
6 months ago

Just (re)found this “store” at Apple. http://www.apple.com/webapps/

This was way back before there were iPhone apps and you had to create apps for the iPhone using the web. This is a store in the sense that it is a directory (and probably pushes some number of users to the apps), but they are not selling the apps – so not really a store =)

Adam Wride
6 months ago

Another data point. OneForty just launched their premium Twitter apps store. Here's the TC coverage: http://www.techcrunch.com/2010/01/14/oneforty-r...

Here's a link to the technical info: http://oneforty.com/pages/seller_guide#sell

Important points:
1. oneforty is acting as the store and the processor
2. They only support one-time purchases just ask this API would support (they do plan to support recurring transactions in the future though)
3. They have a sandox to test the connection http://sandbox.oneforty.com before passing real transactions.

Mark L. Smith
6 months ago

Once we do shake this API spec out a bit more, doing a sandbox is a good idea. It can call into the app to show what the App Store would see.

Adam Wride
6 months ago

According to Gartner (http://www.gartner.com/it/page.jsp?id=1282413) Apple owns 99.4% of the app store market.

We gotta break into that!

Via: http://www.readwriteweb.com/archives/app_stores...

Mark L. Smith
6 months ago

Or maybe not 99%: http://bit.ly/7W8Qvt

Regardless, big!

Adam Wride
6 months ago

Another post worth adding to the mix: The app store: The new “must-have” digital business model

http://blogs.zdnet.com/Hinchcliffe/?p=1172

Post a NEW Comment :

WHAT DO WE DO?

Your business is spitting out lots of data that you either ignore or spend too much time looking through.

BigBrassBand relates and presents your data in an action oriented format so that you:
1) do the things you need to be doing to be successful,
2) reduce the amount of time it takes to do those things and
3) have more time to spend building your product, going to conferences, or playing with your kids.