Home > data > How to download your WordPress.com stats in CSV, JSON, or XML format

How to download your WordPress.com stats in CSV, JSON, or XML format

I wanted raw data about the popularity of my various posts on this blog to better determine what sort of topics I should post about. WordPress.com provides some nice aggregate stats, but I wanted more. After stumbling around the Internet for awhile, I cobbled together a way to download my blog data in either CSV, XML, or JSON format.

There are three steps:

  1. Get an API key
  2. Get your blog URL
  3. Construct the URL to download the data

Get an API key

Akismet is WordPress.com’s anti-spam solution. Register for an Akismet API key at http://akismet.com/wordpress/ by clicking on “Get an Akismet API key”.

Sign up for an account. If you choose the personal blog option, you can drag the slider all the way to the left and register for free. If you value the service that Akismet provides, you can pay more. When you complete the signup flow, you will be provided with a 12 digit ID. Copy this down.

Get your blog URL

Copy the full URL of your blog, minus the leading https://. For me this is developmentality.wordpress.com.

Construct the URL

There is a limited API for downloading your data at the following URL:


View this in a browser to see what the API parameters are.

API as of 2014/01/28

Construct the url


View this URL in the browser (or via wget / curl) and you should see the view data.

CSV rows returned

There are multiple data sources. From the documentation:

table String One of views, postviews, referrers, referrers_grouped, searchterms, clicks, videoplays

Here is some sample data from each table. Change the format param from csv to json or xml to get the data in different formats.





[{"date":"2010-02-05","views": 46}]


    <day date="2014-01-01">112</day>



"2014-01-28",369876479,"Three ways of creating dictionaries in Python","https://developmentality.wordpress.com/2012/03/30/three-ways-of-creating-dictionaries-in-python/",46


[{"date":"2014-01-29","postviews":[{"post_id":369876479,"post_title":"Three ways of creating dictionaries in Python","permalink":"http:\/\/developmentality.wordpress.com\/2012\/03\/30\/three-ways-of-creating-dictionaries-in-python\/","views":22},{"post_id":369875635,"post_title":"R - Sorting a data frame by the contents of a column","permalink":"http:\/\/developmentality.wordpress.com\/2010\/02\/12\/r-sorting-a-data-frame-by-the-contents-of-a-column\/","views":16}]}]


    <day date="2014-01-30"></day>
    <day date="2014-01-29">
        <post id="369876479" title="Three ways of creating dictionaries in Python" url="https://developmentality.wordpress.com/2012/03/30/three-ways-of-creating-dictionaries-in-python/">54</post>







    <day date="2014-01-30"></day>
    <day date="2014-01-29">
        <referrer value="http://www.google.com/" count="" limit="100">66</referrer>



"-","Search Engines","Search Engines","http://www.google.com/",1256


[{"date":"-","referrers_grouped":[{"referrers_grouped":"Search Engines","views":{"http:\/\/www.google.com\/":1305}}]}]


    <day date="-">
        <group domain="Search Engines" name="Search Engines">
            <referrer value="http://www.google.com/">1305</referrer>

Dates aren’t included so it’s the sum over the past N days, defaulting to 30. To change this, set the days URL parameter:






[{"date":"2014-01-30","searchterms":[]},{"date":"2014-01-29","searchterms":[{"searchterm":"encrypted_search_terms","views":159},{"searchterm":"dynamically load property file in mule","views":2}]}]


    <day date="2014-01-30"></day>
    <day date="2014-01-29">
        <searchterm value="encrypted_search_terms" count="" limit="100">159</searchterm>
        <searchterm value="dynamically load property file in mule" count="" limit="100">2</searchterm>







    <day date="2014-01-30"></day>
    <day date="2014-01-29">
        <click value="http://www.anddev.org/extended_checkbox_list__extension_of_checkbox_text_list_tu-t5734.html" count="" limit="100">2</click>


I am not sure what this format is as I have no video plays on my blog.


I hope you find this useful. I’ll make another post later showing how to crunch some of this data and extract meaningful information from the raw data.

  1. January 30, 2014 at 5:18 pm
  2. January 17, 2015 at 12:04 pm

    Hi Nick,

    Great post. I was wondering, is there a way to get a longer history of page views?


    • i82much
      January 17, 2015 at 12:06 pm

      Try setting ?days=999 or something like that. Not sure if it works

  3. May 31, 2015 at 5:46 am

    Great post!

    I have a question: is it posible to get the number of visitors to my blog?
    Thanks a lot!

    • i82much
      May 31, 2015 at 6:33 am

      I doubt it very much. In order to count unique visitors for all time, you would need unique stable identifiers logged and available to you.

      • May 31, 2015 at 7:15 am

        I refer the data that already appear on stats page

  4. February 21, 2021 at 8:35 pm

    Thank you so much!
    I had been struggling how to extract the raw data since wordpress “hid” this feature with Jetpack.

  1. May 9, 2014 at 9:02 am
  2. April 2, 2019 at 1:46 pm
  3. April 20, 2019 at 11:02 pm
  4. March 5, 2021 at 3:18 am

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s

%d bloggers like this: