As indie devs, we leverage a variety of services to keep track of keys we've given out, press we contact or want to contact, vendors we've talked to, customers we've interacted with, and fellow developers/artists/etc. we follow.
Here's our list:
- Highrise: a free-for-small-setups Customer Relationship Manager (CRM) in which we store customer, press, and vendor contacts and email discussions. Highrise was originally developed by the makers of Basecamp and Campfire, and still has that clean UX.
- Promoter: a free-for-tiny-setups system to track press mentions of your games.
- presskit(): a free, self-hosted PHP tool to create a presskit for your company and its games — descriptions, screenshots, videos, press quotes, awards, etc.
- distribute(): a free, centrally-hosted tool that houses game keys and provides an interface through which press can request them. Requests are vetted to ensure they aren't from randos, and shows the reach/audience size of the folks requesting keys.
All four of these services can talk to each other, but it's not always the clearest to figure out how.
Promoter to Highrise
Highrise has press contact info, emails, and notes. Promoter has press contact info and game keys. When we send emails containing keys, we're sending keys that are stored in Promoter, and BCCing our account email addresses from both services.
To be able to move more smoothly between contacts in each system, you can put your Highrise API key into Promoter on the studio's account settings page. Each contact in Promoter will have a link to its entry in Highrise. This seems to be based on whether the names match, which can make it imprecise (we send emails to lots of "Editors").
A simple integration, but nice for navigating in the sense of "I sent this person a key. What else did we talk about?"
Promoter to presskit()
Promoter also has mentions (reviews, previews, reddit mentions, YouTube videos). presskit() wants to display cool quotes about your game. Don't waste time copy-pasting and redeploying your presskit. (Because you wouldn't be editing on your live server, would you?)
In Promoter, edit your product and check the box to integrate with presskit(). Grab the XML it provides and paste that into your game's XML in presskit(). If all your quotes are from articles that are in Promoter, you can remove the quotes section in your XML. Then redeploy presskit().
For each review you want a quote from, put the quote into the "favorable quote" box on its page and check it as a public review. You should see it on your presskit() once you save.
presskit() to distribute()
presskit() is where we hope press land when they decide they want a key or assets from us. distribute() contains our game keys and has the ability to validate the creds of journos. The last thing we want is for press to land on presskit() and not have an easy call to action to get a key.
This took me a hot damn minute to figure out, because it doesn't seem to be documented, even though the actual work is easy.
distribute() generates a key file for each game in it, downloadable from its edit page. Download that file and drop it into the game's directory in your presskit() installation. That's it. You'll then have a little form on your game page in presskit() for press to request keys.
The Missing Link
What keeps this circle from being closed is that we don't have an automated way to log that one of those keys was redeemed and connect that with the press contact.
We can see (in Humble, at least) that a gift key was redeemed, and we can manually check Promoter to see who we sent that to. We might then put a note on the contact in Highrise that they redeemed a key. Steam doesn't provide information on individual keys at all.
It would be amazing if a tool existed that could poke into Steam and Humble and connect that back to Highrise and/or Promoter.
Should we build it?
Can we build it? Not with currently available services. Steam, Humble, Desura, and Indie Game Stand don't offer up APIs for extracting sales info (or I'd have already built the über sales dashboard I dream of). Screen scraping isn't an option, either — some of these services have two-factor authentication.
In the imaginary world in which one could, this could be something the lives in Promoter and checks whatever stores do have APIs available and close the loop. It could also be a separate service that connects with Promoter, Highrise, and the storefronts.
But I really, really want to build this.
Integration Is Tight
- Highrise has contacts and notes.
- Promoter has contacts, promocodes, and reviews.
- presskit() shows selected review quotes and is where press want to see all details on a game.
- distribute() has the slickest way for press to request codes.
With the bit of work described above, we got these services talking to each other in time for the release of Ossuary to Steam, which was invaluable even if the setup isn't perfect.
Any questions about how to link them together? Did I miss a cool way to close the loop?