Analytics transforms data into answers – the kind of answers every company deserves. Unfortunately, a lot of companies a) can't find an analytics service that's right for their specific needs, and b) don't have the resources to develop their own analytics infrastructure. That's why we started Keen IO. Basically, we built it, so you don't have to. And we made it powerful, flexible, and scalable enough that you can use it however you need to – even if those needs change over time.

We help our customers get
the answers they're looking for.

And we do it quicker, easier, cheaper, and more precisely than they could on their own.

Send all your data – any event, from any source, and as much as you want.

Keen IO was built to collect and store huge amounts of event data – those constant little interactions that happen all day, every day, in your apps. You send ‘em, and we store ‘em in our cloud database, so you can play around with them whenever you’d like.

Collect data from any source

If it connects to the internet, you can use Keen IO to grab data from it: Websites, web apps, servers, mobile devices, cars, smartwatches, electronic kangaroo tracking collars – it's all good!

  • Data collection is quick and painless. Use our super-simple REST API, our ready-made SDKs, or one of the, like, 8 other tools we've built.

Learn more about our data collection APIs

Grab exactly the data you need

Event data can be anything – signups, upgrades, impressions, purchases, errors, shares. The arbitrary JSON format we use makes it easy to grab exactly the data you're looking for, with all of the custom properties you've been dreaming of.

  • Event data is Big Data. That's why we build a massively scalable, super-resilient event data backend. Send us your worst. We can handle it.

Learn more about data modeling

 import io.keen.client.net.Client

 var prjSettings = new ProjectSettingsProvider("YourProjectID", writeKey: "YourWriteKey");
 var keenClient = new KeenClient(prjSettings);

 // Publish an event!
 var aPurchase = new
  {
      item = "norwegian ridgeback dragon",
      category = "magical animals",
      username = "Hagrid",
      price = 7013,
      payment_type = "dubloons"
  };

 keenClient.AddEvent("purchases", aPurchase);
 import io.keen.client.scala.Client

 val client = new Client(
  projectId = "projectId",
  writeKey = Some("writeKey")
 )

 // Publish an event!
 client.addEvent(
   collection = "collectionNameHere",
   event = """{
   price: 50.00,
   user: {
     id: "020939382",
     age: 28,
     gender: "M"
   },
   artist: {
     id: "19039",
     name: "Meshuggah"
   },
   venue: {
     id: "A93DJ",
     name: "Slim's",
     city: "San Francisco",
     state: "California"
   }
 }"""
 )
 // Register your client.
 [KeenClient sharedClientWithProjectId:@"projectId" andWriteKey:@"writeKey" andReadKey:nil];

 // Build your event properties as a dictionary.
 NSDictionary *ticketPurchase = @{
     @"price" : @(50.00),
     @"user" : @{
         @"id" : @"020939382",
         @"age" : @(28),
         @"gender" : @"M"
     },
     @"artist" : @{
         @"id" : @"19039",
         @"name" : @"Meshuggah"
     },
     @"venue" : @{
         @"id" : @"A93DJ",
         @"name" : @"Slim's",
         @"city" : @"San Francisco",
         @"state" : @"California"
     }
 };

 // Add your event to the "ticket_purchases" collection.
 [[KeenClient sharedClient] addEvent:ticketPurchase toCollection:@"ticket_purchases"];
 // Send us your tracked events.
 [[KeenClient sharedClient] uploadWithFinishedBlock:nil];
 // Register your client.
 KeenClient.initialize(getApplicationContext(), "projectId", "writeKey", null);
 // Build your event properties as a Map.
 Map<String, Object> userData = new HashMap<String, Object>();
 userData.put("id", "020939382");
 userData.put("age", "28");
 userData.put("gender", "M");
 Map<String, Object> artistData = new HashMap<String, Object>();
 artistData.put("id", "19039");
 artistData.put("name", "Meshuggah");
 Map<String, Object> venueData = new HashMap<String, Object>();
 venueData.put("id", "A93DJ");
 venueData.put("name", "Slim's");
 venueData.put("city", "San Francisco");
 venueData.put("state", "California");
 Map<String, Object> ticketPurchase = new HashMap<String, Object>();
 ticketPurchaseData.put("price", 50.00);
 ticketPurchaseData.put("user", userData);
 ticketPurchaseData.put("artist", artistData);
 ticketPurchaseData.put("venue", venueData);
 // Add your event to the "ticket_purchases" collection.
 KeenClient.client().addEvent("ticket_purchases", ticketPurchase);
 // Send us your tracked events.
 KeenClient.client().upload();
 // Register your client
 $client = KeenIOClient::factory([
     'projectId' => $projectId,
     'writeKey' => $writeKey
 ]);

 // Build your event properties as an associative array.
 $ticketPurchase = [
     "price" => 50.00,
     "user" => [
         "id" => "020939382",
         "age" => 28,
         "gender" => "M"
     ],
     "artist" => [
         "id" => "19039",
         "name" => "Meshuggah"
     ],
     "venue" => [
         "id" => "A93DJ",
         "name" => "Slim's",
         "city" => "San Francisco",
         "state" => "California"
     ]
 ]

 # Add your event to the "ticket_purchases" collection.
 $client->addEvent( "ticket_purchases", [ "data" => $ticketPurchase ] );
 // Register your client.
 Keen.configure({projectId: "projectId", writeKey: "writeKey"});

 // Build your event properties as a JavaScript Object.
 var ticketPurchase = {
     price: 50.00,
     user: {
         id: "020939382",
         age: 28,
         gender: "M"
     },
     artist: {
         id: "19039",
         name: "Meshuggah"
     },
     venue: {
         id: "A93DJ",
         name: "Slim's",
         city: "San Francisco",
         state: "California"
     }
 }
 // Add your event to the "ticket_purchases" collection.
 Keen.addEvent("ticket_purchases", ticketPurchase);
 # Initialize the Keen Client.
 keen = Keen::Client.new(:project_id => "project_id", :write_key => "write_key")

 # Build your event properties as a hash.
 ticket_purchase = {
     :price => 50.00,
     :user => {
         :id => "020939382",
         :age => 28,
         :gender => "M"
     },
     :artist => {
         :id => "19039",
         :name => "Meshuggah"
     },
     :venue => {
         :id => "A93DJ",
         :name => "Slim's",
         :city => "San Francisco",
         :state => "California"
     }
 }
 # Add your event to the "ticket_purchases" collection.
 keen.add_event("ticket_purchases", ticket_purchase)
 # Initialize the Keen Client.
 keen = keen.client.KeenClient("project_id", write_key="write_key")

 # Build your event properties as a dictionary.
 ticket_purchase = {
     "price" : 50.00,
     "user": {
         "id": "020939382",
         "age": 28,
         "gender": "M"
     },
     "artist": {
         "id": "19039",
         "name": "Meshuggah"
     },
     "venue": {
         "id": "A93DJ",
         "name": "Slim's",
         "city": "San Francisco",
         "state": "California"
     }
 }
 # Add your event to the "ticket_purchases" collection.
 keen.add_event("ticket_purchases", ticket_purchase)
 // Register your client.
 KeenClient.initialize("projectId", "writeKey", null);
 // Build your event properties as a Map.
 Map<String, Object> userData = new HashMap<String, Object>();
 userData.put("id", "020939382");
 userData.put("age", "28");
 userData.put("gender", "M");
 Map<String, Object> artistData = new HashMap<String, Object>();
 artistData.put("id", "19039");
 artistData.put("name", "Meshuggah");
 Map<String, Object> venueData = new HashMap<String, Object>();
 venueData.put("id", "A93DJ");
 venueData.put("name", "Slim's");
 venueData.put("city", "San Francisco");
 venueData.put("state", "California");
 Map<String, Object> ticketPurchase = new HashMap<String, Object>();
 ticketPurchaseData.put("price", 50.00);
 ticketPurchaseData.put("user", userData);
 ticketPurchaseData.put("artist", artistData);
 ticketPurchaseData.put("venue", venueData);
 // Add your event to the "ticket_purchases" collection.
 KeenClient.client().addEvent("ticket_purchases", ticketPurchase);
 // Send us your tracked events.
 KeenClient.client().upload();

Analyze, visualize, find answers.

Once you've sent us some events, that's when the real fun can begin. Our powerful analysis API lets you perform any sort of query you need today – and any you might think of in the future. And our visualization tools help you chart that data and transform it into answers.

Ask the questions you want to ask.

Unlike other analytics services, which usually only offer pre-defined reports, Keen IO gives you the tools to measure exactly what you want. Any property, any query, any way you'd like it.

  • Our intuitive query API has a ton of built-in resources that allow you to do all the analytics must-haves: Counts and sums, mins and maxes, averages, all that jazz.
  • Create queries on the fly and get responses back in real-time, no matter the size of your dataset. Because you shouldn't have to wait for answers.
  • Combine elements of our analysis APIs to build the dashboard of your dreams. Segment data by timeframe, interval, and groups. Create funnels and cohort analyses. Measure conversion and engagement. Make magic happen.

Learn more about our data analysis APIs

Make answers tangible with embeddable charts and metrics

We make it easy to draw metrics, line charts, pie charts, and funnels with our JavaScript SDK, but you can also use your Keen IO data with any charting library to customize your look and functionality as you see fit.

Learn more about our data visualizations

 var data = new Keen.Metric("ticket_purchases", {
     analysisType: "count",
     timeframe: "previous_7_days",
     groupBy: "venue.state"
 });

 data.draw($("myElementId"), {
     title: "Ticket Purchases by State"
 });
 var series = new Keen.Series("ticket_purchases", {
     analysisType: "count",
     timeframe: "previous_7_days",
     interval: "daily"
 });

 series.draw($("myElementId"), {
     label: "purchases",
     title: "Daily Ticket Purchases"
 });
 var s1 = new Keen.Step("download app");
 var s2 = new Keen.Step("create account");
 var s3 = new Keen.Step("ticket purchases");

 var funnel = new Keen.Funnel([s1, s2, s3], {
     actorProperty: "user.id"
 });
 funnel.draw($("myElemendId"), {
     title: "User Life Cycle Funnel"
 });
 var metric = new Keen.Metric("ticket_purchases", {
     analysisType: "sum",
     targetProperty: "price",
     timeframe: "yesterday"
 });

 metric.draw($("myMetric"), {
     label: "Yesterday's Total Revenue"
 });

$7.3k

Yesterday's Total Revenue

Share whatever you want, with whoever you want – it's your data, after all!

Because your analytics are available by API, what you do with them is entirely up to you. Share them with your team, your customers, your partners, your investors, whoever! Spot trends. Show value. Test. Debug. Make data actionable.

White-labeled analytics for your customers

Keen IO was built for white-labeled analytics – you can share data on your website, your customer's website, your mobile app, or wherever else you might need it.

  • Share full data for internal use, or securely filter it out into custom dashboards for your customers.

Learn how our customers have white-labeled their analytics

Extract data painlessly

We made it simple to extract full-resolution events by API or .CSV download, any time you need them. It's your data – you should always have access to it!

Learn more about easily extracting your data

So, what are you waiting for? It only takes a few minutes and a few lines of code to start collecting the events that really matter to you.

Sign Up Free