Depth and Discovery: Powering Visualizations with the Google Analytics API
By Chris Gemignani
November 17, 2009
Find more about:
visualizations
juicekit
googleanalytics
api
At Juice, we work with web analytics APIs large and small, from Google, comScore and Omniture. The Google Analytics API is our favorite. It powers the world's best, most widely deployed analytics site. And it powers Juice products like Concentrate (innovative search analytics) and Vasco de Gapi (a tool for exploring the Google Analytics API).
We were approached by the Google Analytics API team to find ways to explore new ways of looking at data with the API, and we were excited by the possibilities. We've been working on our own visualization framework, JuiceKit, that integrates the power of the Flare Visualization Library with Adobe Flex.
The result is Analytics Visualizations, two visualizations powered by the Google Analytics API that are free to use. You just need a Google account with access to Google Analytics data to explore your own data.
Referrer Flow
Curious about what sites are linking to you and what content is benefitting the most? Referrer Flow answers those question and shows how results change over time. Here is a brief video introduction:
Referrer Flow is a stream of daily treemaps showing pageviews and bounce rates for various groupings of your website's pages. You can group by combinations of page title, referrer and url. Clicking on the treemap will filter all the data by the page, referrer or url that you clicked on. Click again to clear your filter.
Keyword Tree
A list of top keywords isn't enough to really understand how people are searching and finding your site. Keyword Tree visually displays the most frequently used search keywords and how they are used together. Here's a video overview:
You'll see a frequently used search term at the center and the words and phrases that are most often used in combination with that word. Pick a different starting word by typing into the box in the upper right or selecting from the top word across the bottom of the screen. The words are sized by their frequency of use and colored by bounce rate (or % new visitors or average time on site). Roll over a word to see details about that combination of connected words.
Depth and Discovery
In designing these visualizations we focused on the question: how can we let users uncover the unexpected? That means designing targeted visualizations focused on limited well-defined issues. The Referrer Flow monomaniacally focuses on a single question "What pages are people viewing on your site and where are they coming from?" The Keyword Tree is laser-focused on word ordering and what that means for keyword performance.
The Google Analytics reporting tool is a great general-purpose reporting solution. It gives the advanced users everything they need to answer specific questions. However, its generality means it has limited ability to focus on two issues; depth and discovery.
The Google Analytics API is Google's solution to this problem. It's an opportunity both for businesses like ours that can create new ways of analyzing data, and for large sites that can use the API for integration, custom analytics, and more.
Thanks to Nick Mihailovski at Google for his gracious support, help and encouragement and Avinash Kaushik for inspiring this idea.
Programmatic Google Trends API
By Sal Uryasev
June 11, 2008
Find more about:
google
trends
api
programmatic
Updated October 21, 2009
Yesterday, Google released an update to their popular Google Trends tool. There are improvements over the previous version, but the biggest new feature is a new shiny button that lets you download all your data in the format of a CSV. This is a very cool enhancement. Where Google Trends was a geeky toy, it now takes the leap to integrate into analysts' reports and with that, edge its way onto managerial desks.
This python module is a quasi-API to make it easier to authenticate into Google Trends for those who want to squeeze the extra level of functionality out of their data. The advantage of programmatic access is that the data can be automatically trended and merged. It can be snuck into a 9:00 AM daily email to the VP of Marketing so that she knows to ramp up Google Adwords campaigns for some specific keyword. Also, by programatically pulling multiple reports, it is possible to create a wealth of data not visible in a single report. Using one keyword as a benchmark to merge multiple reports, we can do a meaningful comparison on tens or hundreds of relevant keywords.
To use the pyGTrends, the quasi-Google-Trends-API, you can download the latest version from github.
Here is an example of the most basic basic report that you can pull down from Google Trends. The connector function needs authentication info, and download_report needs to be passed a list of keywords.
from pyGTrends import pyGTrends
connector = pyGTrends('google username','google password')
connector.download_report(('keyword1', 'keyword2'))
print connector.csv()
You can, however, use pyGTrends to get any slice of data that you can pull down from Google Trends. To see the exact parameters that you should use, go to Google Trends, and navigate to the specific sufficiently-narrow report that you are interested in. Then, right-click on the CSV download, and save the link location. The different parameters should be discernible from the link. The following code downloads a report for banana, bread, and bakery keywords from April 2008, originating from the magnificent nation of Austria, and scaled using fixed scaling (aka the second download link).
connector.download_report(('banana', 'bread', 'bakery'),
date='2008-4',
geo='AT',
scale=1)
By default, the csv() function downloads the main part of the report, but there are a few additional parts stuck to the bottom of the CSV file. If you are interested in those, pass the section parameter to the csv() function. The following will return the Language section.
print connector.csv(section='Language')
Full recommended usage includes using either the csv.reader or csv.DictReader module.
from csv import DictReader
print DictReader(connector.csv().split('\n'))
Here is a snapshot from the new Google Trends to add some eye-candy to the post:

39 comments | Show all comments only the last 5 are shown
yadab das said:
The PyGTrends.py API looks really fascinating to me. I have almost converted the Code to Java and will publish this week with a Swing Interface. Any better suggestions on that?
Archie said:
Hi Yadab! Could you please share the Java code you have written? I am also working on it. Please contact me by email.
aavaliani (at) gmx.net
Gautham Ramachandran said:
The PyGTrends.py API is really awesome. I have a question though. Does Google frown upon iterative pings to Google Trends to pull Relative traffic. To make it more specific, if I have 2,000 keywords and I code iterative pulls from Google trends, do I stand a chance of getting banned?
Gautham.
Sal Uryasev said:
Yes and No.
I believe that Google tends to be generous regarding use of their services. They want people to get the maximum utility out of the products, but they don't want their generosity to be abused. The login requirement for downloading the Google Trends data is probably there just for that reason. The cap is probably quite large, but there certainly is one. I wouldn't build a webservice (without having users use their own account). You may have more luck if you lump many keywords per call, and spread out your data gathering over longer periods of time.
James Solo said:
This Python script is great and provides an excellent solution. However, I have never used Python before so I was hoping someone could email (james.solo |AT| mathworks.com) me step by step instructions on how to modify this script to work with keywords of my choice ( I have 40 total ) and to grab data from 2004 to-date using the "CSV with relative scaling" data file.
Many thanks,
James
Arjun said:
I have been using the pyGTrends module and have encountered problems when using keywords with more than one word. For instance, "air express" was one of the keywords. It has a search history--when I manually download the data from Google Trends, the historical data shows up fine. However, when I use the pyGTrends module, the data comes out as all zeroes.
The same problem occurs with all keywords/phrases that contain more than one word. Is pyGTrends compatible with only one-word keywords, and if not, how do I fix this problem?
If someone could email me, arjunrmodi at gmail dot com, that would be great. Thanks.
A said:
Great module.
Sal Uryasev said:
Arjun: It should work now. Thanks for pointing it out!
CurtD said:
Hi,
I am wondering if you Google Gurus know of how to attack a project I am trying to accomplish. I want to be able to run a script, query, software that can give me the answer to something like the following.."I want to know what search terms have been searched 1500 a day on average and have less than 200,000 results". The 1,500 and 200,000 are variables that can be changed. It would be cool to be able to have a drop down menu to say "last 30 days" "last 90 days" etc. I have posted this project on Elance and Guru and I have mostly gotten "never heard of it, can't be done." Some talked of building a library through API and then running queries on it. Does this query exist or how can I go about getting it done?
Sal Uryasev said:
Hey Curt,
The problem lies with the fact that Google Trends does not have any absolute numbers. You can only get results as they are relative to other results.
It appears to be an intentional omission. The only way to get at that data could be to get hired as a Google employee.
Clemens said:
Hi Sal,
This is really a great tool. I am facing the same issue as Arjun. I am not able to extract keyword combinations for phrases with e.g. two words. Single keywords work fine...
You mentioned, that this issue has been resolved. I downloaded the latest version from github, can you give me some advise how to extract keyword combinations, or how to adjust the code respectively.
Thanks in advance, this is really a great work.
Johan said:
Hi,
The code has (obviously) changed with later versions which makes the instructions above harder to follow. Where to enter the keywords, in this line?
def download_report(self, keywords, date='all', geo='all', geor='all', graph = 'all_csv', sort=0, scale=0, sa='N'):
I have never used Python before...
atleta said:
The lib does not work correctly at the moment. It messes up the headers, the header for the first column (e.g. 'Week') is not inserted by the code as it generates the headers from the first line, while the all tables ('sections') have one more column whose name you actually use to identify the section. Thus one solution is to insert the requested section name as the name of the first column.
Sal Uryasev said:
Thanks for the bugfix atleta. I implemented your idea.
Sal Uryasev said:
Clemens,
You can just enter two-word strings wherever you would enter one-word strings: 'google analytics' instead of 'banana'
Johan,
The 'self' is a pythonic reference to the object itself.
There is a bit more of a description here:
http://www.ibiblio.org/g2swap/byteofpython/read/self.html
Gautamm said:
I really loved this and it works great.
I have one question though, whenever I put in a single query it splits it into alphabets. How does one circumvent this?
Sal Uryasev said:
Hey Guatamm,
The first parameter to download_report needed to be a list or tuple, so something like ('bread') would have had to be ('bread',) or ['bread']. Python can be slightly annoying, where it can treat parentheses as simply parentheses, unless there is a comma to make it a tuple. I added in a small fix so that is no longer necessary, if you want to re-pull the code from git.
redneckjedi said:
Sal,
This is great, and it was working great for me. However, after a few calls in an iterative script, I started getting a 503 Service Unavailable message. I'm guessing they figured out I was running a script. Any idea how to get around this?
Sal Uryasev said:
Hey Redneckjedi,
I like your name.
My best guess is to try drastically slowing down your iterative script with sleep(x). Making multiple repeat calls is probably not built into Google's design, so my guess is that you're hitting some sort of rate limit. Google tends to be generous with this sort of stuff, so by spacing out the calls, it may help quite a bit.
redneckjedi said:
Thanks Sal. That's what I've been trying, and it works now that I'm on a different computer with a different IP. Any idea on how long I'll have to wait before I can run it on my original machine?
Sal Uryasev said:
I have no idea... sorry. If you find out though, this might be a good piece of information to stub into the post above.
atleta said:
redneckjedi: I've also run into this. No idea for how long they will ban your IP but you could use a proxy in the meanwhile.
Sal Uryasev said:
It looks like it is just a daily limit. There is a forum discussion about it here: http://www.thirtydaychallenge.com/forums/general-chat/5364-google-trends-limit-wtf.html
pstobbs said:
Hi Sal
Great tool- very useful indeed, many thanks.
I'm new to Python but pulled together a little code to cycle through different keyword inputs. It seemed to be working fine but then I ran into the issue mentioned by redneckjedi unfortunaltely. I had included a sleep(10) but clearly that wasn't enough and I am now getting Http Error 503: Service Unavailable. When I access the site manually I am greeted with a captcha so I can still run the queries manually just not through the script- has anyone else come across this? I hope the block will stop soon and I will then add a much longer sleep. I only have about 20 or so keyword sets which should be ok I think?
Anyone any ideas how long the ban lasts?
cheers
Piers
Below is my rudimentary loop which I'm sure could be improved upon
#----- import pygtrends
import sys
sys.path.append('c:\\python_code')
from pyGTrends import pyGTrends
connector = pyGTrends('username','password')
#----- initiate output file
import time
final_output = str()
#-----load csv inputs file
import csv
gtrends_input = csv.reader(open("google_trends_inputs.csv","rb"))
gtrends_input_list = []
gtrends_input_list.extend(gtrends_input)
#---- define loop
loop_range = range(1,len(gtrends_input_list))
for x in loop_range:
#---- parameters
tmp_row = gtrends_input_list[x]
tmp_terms = tmp_row[:5]
tmp_geo = tmp_row[5]
#---- save parameters to output
final_output = final_output + tmp_geo + '\n'
#---- get data
connector.download_report((tmp_terms),geo=tmp_geo,scale=1)
#---- append output
tmp_output = connector.csv() + '\n'
final_output = final_output + tmp_output
time.sleep(100)
print 'done',x, tmp_terms, tmp_geo, tmp_symbol
#---- end loop
#---- output
outfile = open('output.csv','w')
outfile.write(final_output)
outfile.close()
Dheeru said:
My IP was blocked for a day after submitting less than 100 queries.
Bas said:
resp = self.opener.open(self.url_ServiceLoginBoxAuth,params).read();
print " resp ::"+resp;
Im getting the response from google that says "Your browser's cookie functionality is turned off. Please turn it on". ie, not able to login to google account for trends.
Please help me out.
Sal Uryasev said:
Alright.
It turns out that Google changed their Login algorithm. Where in the past I could construct a unique 11-digit ID out of thin air, the new algorithm matched the 11-digit ID against one written into a cookie.
The reason why jcp20 were failing some of the time is probably due to Google rolling out their new login algorithm, and some of the calls would hit an older server, while others would fail on a new server. The data pulls should work consistently at this point.
I have also simplified the convenience functions, with the expectation that the user uses the csv.reader or the csv.DictReader features of the standard library.
Recommended example:
from csv import DictReader
r = pyGTrends(username, password)
r.download_report(('pants', 'skirt'))
d = DictReader(r.csv().split('\n'))
Josh said:
This is a great idea--I've been waiting for google to roll out their long promised API...
Has anybody but Dheeru experienced the limitations of this API. I would like to set up a datasource to integrate cleanly into a cakePHP app, but it doesn't seem worth the while if google cuts off access to an account/ip(?) after a small number of queries.
Anybody have any specifics on this?
SivaThumma said:
No doubt, This code is an excellent start.,
But As-it-is I tried your code, I am getting
Exception("Could not find requested section") [line number:101]
Can anyone reply on what should I do exactly ?
I would Thank anyone who takes kindness to mail me at sivatumma@hotmail.com.
Saravanan said:
Hi Sal,
Thank you so much for the wonderful code - really looks promising.
A quick question..I had used the following script
from pyGTrends import pyGTrends
from csv import DictReader
r = pyGTrends('my email', 'passwd')
r.download_report(('spain', 'wine'))
print DictReader(r.csv().split('\n'))
As a result of it, one "pyGTrends.pyc" got created and output was printing as "<csv.DictReader instance at 0x8b8998>". I didn't see any error display btw..
How do i get the CSV output of the report? Could you please assist with me on this?
Thanks
David said:
I have the same questions as the above.
also, is there a document for using this API.
Thanks
Aloysius Adrian said:
I want to ask about section in csv function. I was trying to get a certain csv, but the interpreter stops at line 115 that produces error message : "KeyError: 'main'"
I want to ask about the other parameter. I can not print the csv because of the section parameter there.
Thanks.
Sal Uryasev said:
The DictReader module is a Python convenience module for reading data into a dictionary. Its use is optional.
One thing that can be done if there are any issues is to print connector.raw_data, and that would display the direct result from Google Analytics. Google sometimes displays additional username/login related problems that the module may not have accounted for.
David said:
From yesterday, This script can't do print connect.csv(). It always returns "Could not find requested section" error. Do you know where the problem is?
I also download the original script in case I modify anything but the error remains.
Thanks
Aloysius Adrian said:
@David
I, also, can not get the connect.csv()
I contacted Mr. Uryasev, and he suggested that I try print connect.raw_data
I did that, but the result/output was : "You must be signed in to export data from Google Trends"
I wonder if you also get that kind of output..
Eric Wilson said:
I have the same problem as David and Aloysius. If anyone has overcome this, please let me know.
D'Artagnan said:
How do you select multiple years? e.g. 2008 2009 I've tried 2008-2009 and 1/2008 12m but no luck...
David Drace said:
Thanks so much for this. I've just launched a site that uses this API to build a U.S. map tracking "flea" search activity, indicating flea prevalence. Have a look: http://banfieldfleafighter.com.
To do this, I set up a cron to poll Google Trends once every morning and write a small CSV file. This file gets parsed by PHP and fed to Flash with every visit to the site.
Aside from the very occasional "Cannot parse GALX out of login page" error, it works like a charm.
Sherin seo said:
Great post..It will be really helpful in my reporting structuring !!!Can u just update something about Machros???I am little confused about it!!
For sherin--> www.copperbridgemedia.com ..
Add a comment
Juiced Google Analytics Python API
By Sal Uryasev
May 2, 2008
Find more about:
google
analytics
python
api
pygapi
Due to the release of an official Google Analytics Data Export API, this module is now deprecated. We have an alternative python module based upon the real analytics API here, and an exploring tool with an automatic code generation capability here.
It is not official. It is not from Google. It is, however, very functional and very here. I present to you pyGAPI, the Juiced Google Analytics Python API. This module allows you to pull information from your incarnation of Google Analytics and employ it programatically into your reporting code.
Let us use iPython to peek through some code using pyGAPI.
In [3]: from datetime import date
In [4]: import pyGAPI
In [5]: connector = pyGAPI.pyGAPI(username, password, website_id="1234567")
Here we create a pyGAPI object. Behind the scenes, pyGAPI logs into Google Analytics, and downloads an identifier cookie. website_id is optional. If omitted, pyGAPI accesses the first website on the account's list. To get a list of all the site IDs to which your site has access, run the function connector.list_sites().
In [6]: connector.download_report('KeywordsReport', (date(2008,3,10), date(2008,3,31)), limit=5)
Download a report into your pyGAPI object. KeywordsReport is the name of the report. It is followed by a tuple containing the start and end dates in python date format. limit is an optional parameter that specifies the number of entries that pyGAPI should pull down. By default, it will pull in all the entries up to a maximum of 10000. Lowering this number will certainly improve performance. The entries returned are ranked by Visits, so you should get the most significant values of the bunch.
In [7]: print connector.csv()
Keyword,Visits,Pages/Visit,Avg. Time on Site,% New Visits,Bounce Rate,Visits,Subscribe,Solutions,Goal Conversion Rate,Per Visit Goal Value
juice analytics,356,5.935393258426966,314.061797752809,0.38764044642448425,0.29494380950927734,356,1.0,0.16292135417461395,1.1629213094711304,0.0
excel training,142,1.971830985915493,98.0774647887324,0.908450722694397,0.6901408433914185,142,1.0,0.0211267601698637,1.0211267471313477,0.0
excel charts,77,1.7922077922077921,95.0,0.9090909361839294,0.7792207598686218,77,1.0,0.03896103799343109,1.0389610528945923,0.0
excel skills,72,1.6527777777777777,75.29166666666667,0.9444444179534912,0.7083333134651184,72,1.0,0.0,1.0,0.0
colbert bump,70,1.3142857142857143,113.77142857142857,0.6428571343421936,0.8428571224212646,70,1.0,0.0,1.0,0.0
This function displays your report in a nice excel-ready CSV format.
In [8]: print connector.parse_csv_as_dicts(convert_numbers=True)
[{'Avg. Time on Site': 314.06179775280901, 'Per Visit Goal Value': 0.0, 'Bounce Rate': 0.29494380950927734, 'Keyword': 'juice analytics', 'Visits': 356.0, 'Pages/Visit': 5.9353932584269664, 'Subscribe': 1.0, 'Solutions': 0.16292135417461395, '% New Visits': 0.38764044642448425, 'Goal Conversion Rate': 1.1629213094711304}, {'Avg. Time on Site': 98.077464788732399, 'Per Visit Goal Value': 0.0, 'Bounce Rate': 0.69014084339141846, 'Keyword': 'excel training', 'Visits': 142.0, 'Pages/Visit': 1.971830985915493, 'Subscribe': 1.0, 'Solutions': 0.021126760169863701, '% New Visits': 0.90845072269439697, 'Goal Conversion Rate': 1.0211267471313477}, {'Avg. Time on Site': 95.0, 'Per Visit Goal Value': 0.0, 'Bounce Rate': 0.77922075986862183, 'Keyword': 'excel charts', 'Visits': 77.0, 'Pages/Visit': 1.7922077922077921, 'Subscribe': 1.0, 'Solutions': 0.038961037993431091, '% New Visits': 0.90909093618392944, 'Goal Conversion Rate': 1.0389610528945923}, {'Avg. Time on Site': 75.291666666666671, 'Per Visit Goal Value': 0.0, 'Bounce Rate': 0.70833331346511841, 'Keyword': 'excel skills', 'Visits': 72.0, 'Pages/Visit': 1.6527777777777777, 'Subscribe': 1.0, 'Solutions': 0.0, '% New Visits': 0.94444441795349121, 'Goal Conversion Rate': 1.0}, {'Avg. Time on Site': 113.77142857142857, 'Per Visit Goal Value': 0.0, 'Bounce Rate': 0.84285712242126465, 'Keyword': 'colbert bump', 'Visits': 70.0, 'Pages/Visit': 1.3142857142857143, 'Subscribe': 1.0, 'Solutions': 0.0, '% New Visits': 0.6428571343421936, 'Goal Conversion Rate': 1.0}]
This function goes the extra step and converts the CSV into a dictionary for easier programmatic use. By default, all entries will be returned as python strings. Setting convert_numbers to True, as we did here, will additionally parse the dictionary to turn all numbers into float values.
In [9]: print connector.list_reports()
('ReferringSourcesReport', 'SearchEnginesReport', 'AllSourcesReport', 'KeywordsReport', 'CampaignsReport', 'AdVersionsReport', 'TopContentReport', 'ContentByTitleReport', 'ContentDrilldownReport', 'EntrancesReport', 'ExitsReport', 'GeoMapReport', 'LanguagesReport', 'HostnamesReport', 'SpeedsReport')
This gets a list of all the reports that I have successfully tested thus far. All site-specific reports should work. A couple site-section specific reports should be included in the next update of pyGAPI.
Google is great and will release a real API soon, but until then you can download pyGAPI.
13 comments | Show all comments only the last 5 are shown
sandro turriate said:
the api looks super friendly yet powerful, I'm so glad someone finally made these reports available programatically, awesome stuff man!
Son Nguyen said:
I wonder if this violate Google Analytics' TOS and how long before Google changes something that things break apart.
Sal said:
There is certainly a risk that something could/would break. Google, however, is a company that takes the high road in terms of programming and in doing what is best for the web. The code behind the Google Analytics website is very elegant, while pyGAPI does not do screen scraping for any of the real work. The data is pulled through the data exporting system. I would say that it is unlikely that the API would break without a major overhaul of the entire GA system.
I can't specifically speak towards the TOS, but pyGAPI is doing the equivalent work of an underpaid temp who simply logs in and downloads all the requested reports. The poor temp is just getting a break. Read the TOS and use pyGAPI at your own risk.
Chris Gemignani said:
Son Nguyen,
It is far more likely that Google will provide a supported API that would supercede this. That would be the Googley thing to do.
Similar APIs have been produced around Gmail without interference. If things break, we, the community will fix it.
Tom said:
Using the example above shouldn't it be connector.list_sites() to get a list of all the site id's. Also for me this only returning the first site.
The report list, connector.report_list(), seems not to be comprehensive here's a better one:
Google Analytics Reports
-Visitors-
VisitorsOverviewReport
GeoMapReport
VisitorTypesReport
LanguagesReport
-Visitor Trending-
VisitsReport
UniqueVisitorsReport
PageviewsReport
AveragePageviewsReport
TimeOnSiteReport
BounceRateReport
-Visitor Loyalty-
LoyaltyReport
RecencyReport
LengthOfVisitReport
DepthOfVisitReport
-Browser Capabilities-
BrowsersReport
PlatformsReport
OsBrowsersReport
ColorsReport
ResolutionsReport
FlashReport
JavaReport
-Network Properties-
NetworksReport
HostnamesReport
SpeedsReport
UserDefinedReport
-Traffic Sources-
TrafficSourcesReport
DirectSourcesReport
ReferringSourcesReport
SearchEnginesReport
AllSourcesReport
KeywordsReport
-Adwords-
AdwordsReport
KeywordPositionReport
OfflineAudioReport
CampaignsReport
-Content-
ContentReport
TopContentReport
ContentByTitleReport
ContentDrilldownReport
EntrancesReport
ExitsReport
Sal said:
Thanks for catching the errors Tom!
You are correct on all three counts.
I fixed the upload so that it correctly displays list_sites() if you have more than one site in your list, and i fixed the typo here in the blog.
I'll peek through the list of reports to make that more exhaustive as well.
Matt Webb said:
This is awesome work. Do you think this python script could work in conjunction with superkaramba on Linux?
Rodrigo said:
This is great. I put this together with a Samurize desktop to display Analytics data on my desktop.
Thanks!
Ludovic said:
Very nice work. Very useful to, let's say get your most visited pages without having to maintain parallel accounting. May I ask you to licence it to an OSS licence and put it on Google Code ? Would be great.
Sebastian said:
Hello,
it work well! Great.
How can i pull the "keyword" or "country" report for a specific URL?
(use segmention)
Thanks
Thierry said:
Awesome work !
Random said:
There is now an actual analytics API:
http://code.google.com/apis/analytics/docs/gdata/gdataDeveloperGuide.html
Sal said:
I wrote a Python API wrapper that I call 'degapi' for the new analytics API to replace this old code. I have yet to put up a post and link about it, but it can be found here: http://suryasev.github.com/python-degapi/
There is an automatic python code generator for this API at http://vascodegapi.juiceanalytics.com






8 comments | Show all comments only the last 5 are shown
Tim said:
Great examples of innovative use of the GA API guys, really impressive, thanks for posting.
One issue I have with the keyword tree, however, is that with a large volume of long-tail keywords, it is quite easy to get the report to extend way beyond the confines of the initial view - zooming out renders the keywords completely unreadable.
Thus I am stuck with the 'middle ground' keywords, whereas what I really want to look at is the gold at the top and bottom, which contains the optimisation opportunities.
A simple scrolling interface might solve this issue?
Thanks,
Tim.
Chris Gemignani said:
Thanks Tim. We've heard that feedback loud and clear. One thing you can do--that I regrettably didn't include in the video--is click on a word with children to collapse the tree. Just try clicking on words in the keyword tree to see what I mean. In the meantime, we'll work on making the tool pannable.
Tim said:
Thanks Chris - yes, I'd seen (and liked) that functionality, however if you're trying to analyse a very common kw for your site (such as 'Review' - we are a reviews website), then there are just a lot of single words used before this.
Also, clicking words along the bottom sometimes makes the whole display disappear off the right-hand side of the screen! :)
Great stuff though, love the general look and feel, really prompts some 'fun' investigation.
Cheers,
Tim.
DSLR said:
I'm new with GA and co. but your tool is really useful, at a glance you can read a lot of things...To improve readability of both views (referrer flow in particular) you can add a "loupe", a magnifier on screen movable by mouse to expand details of the chart. Thanks again from Italy!
Affan Laghari said:
Hello,
Excellent tool though it doesn't need my praise! It would be very helpful though if you can add an option to select start/end dates and some conversion metric. That can help find valuable patterns over longer periods.
Btw, I found you people from Avinash's blog and have been roaming around on your other tools namely Vasco de Gapi, Concentrate Me and JuiceKit. Rare to find such intelligent tools. Please keep up the good work.
yulia said:
Hi guys, found your site through Avinash's blog. I love the keyword tree tool. Been playing with it all day...
Question -- is there a way to print the trees? Also, is there a way to scroll? Those would be nice functionalities... Sorry if they are already there and I'm just too slow to find them :)
Thanks for the great (and really useful) tools!
Jean said:
Hello,
Is Juicekit still actively developped ? In the git repo the last commit date is August 30, 2009.
Does juicekit work with flex 4 and Flash Builder 4 beta ?
Hope this fantastic tool will continue to improve.
Sal Uryasev said:
Hey Jean,
Juicekit is under very active development, as we actively use it internally for all our work. If you investigate the unstable branch, you will notice a number of new features and improvements. There is also more work on an internal branch that should get merged in. As far as I know, we do not have a stable release ETA, but I know that we want to do one.
said:
Add a comment