I can't see people paying for an XLS file but if you can do it in Excel then it can be done as a web site/app. I'd recreate it this way, perhaps with the help of a coder from elance.com. Wordpress with a charting plug-in would be a good place to start. Add the pretty graphs and pie charts (Woopra is a good example of this) to help visualise the information. Charge a monthly subscription or a once off price.
You could offer each customer a unique email address where they could get the sales report sent, which the site would process before emailing them a PDF or a link to view. This would save people having to manually upload the file every month and add a valuable autopilot factor to the service, while justifying the subscription model.
Figure out a way to give part of the information (but not the important stuff!) for free so people can try it, which will also get you links/shares and improve your position on Google.
You might look into using Woopra in addition to Google Analytics. It has a lot of features that can actually help you build profiles on your site-visitors and links together things like page-visits, emails, chat sessions, product purchases, etc.
>With the error codes, yes, your API may be consistent and make sense that all errors are delivered back in an object key called "err", but in my api I do the exact same thing except the field is called "error". Then we move to Bob on the 2nd floors api and he always returns an "err" key, but if there are no errors it's blank. Janet's api returns the errors in an array so that more than one can be returned. You catch my drift?
You already live in this world. How would you fix it? Checking for status codes?
For example woopra:
woopra.track("signup", { company: "My Business", username: "johndoe", plan: "Gold" });
I don't see you checking for status codes. This is the sugar API. You can also do custom API calls to analytics hands on dirt API with status codes.
You will always have differences if you use multiple API, I can't see how you would solve them with status codes.
>By using the status codes, I know, if I get a 500 error, they fucked up. I know if I get a 404, I probably fucked up.
Well, but a 404 for me is:
A 500 is:
Is even a lot more understandable and you can take action easily.
But I don't see myself using checks for a 500 or 404 status codes in my web app. Why would I do:
api('user/login', {...credentials...}).then(function(res){})
I don't even know how it would should work with status codes. Maybe res.statusCode? But then I have to check for the correct status code AND error.