Though I made GAEAPIMonitor to keep track of APIs on our server for downtime, it has turn out to be more useful than that. I have started to use it to monitor page changes, such as for package tracking. You can find the latest changes I have added for page monitoring, as well as other new features highlighted below.

More descriptive alerts

DM Alerts now includes a link to preview the content, and a more meaningful error alert message. The preview link also includes description of content changes that cannot fit into Twitter 140 characters limit, and a button to remove the alert.

Content changes alert

You can configure GAEAPIMonitor to only receive alerts when there is significant content changes to the monitored page. This is done by specifying a minimum percentage change for each URL monitored. It also includes more meaningful description of content changes (showing what is added and removed) using google's diff-match-patch cleanup semantics feature.

Verifying error 408 to reduce false alerts

In the previous version, there were quite a lot of false alerts for ...

GAEAPIMonitor - Open source API monitoring tool on Google AppEngine

Being involved in a quite a bit of mobile application projects with server component, makes it difficult to ensure that both client and server are in good shape. Some important things to keep track of are the server down-time, broken API, API request times, etc. It can be a logistical nightmare and a bit of a headache, so I decided to make a Google AppEngine application to do the monitoring automatically.

GAEAPIMonitor is written in Python. It runs in AppEngine every 10 minutes with a cron job (configurable). Every time a check is initiated, it fetches all the API from DataStore, and dispatches each of them into separate Task Queues to ensure that all API checks are completed regardless of number of APIs required for checking. If a particular criteria is fulfilled, the application sends out a Twitter DM using Tweepy. If you are using Twitter for iPhone, you will probably get the alert immediately as a PUSH message. Content change alerts includes percentage change, calculated from Levenshtein distance using google-diff-match-patch library.


  • form to enter information about the API
  • API parameters entered in a form in JSON format
  • support HTTP GET and POST
  • sends alert when:
    • API request exceeds ...

Twitter bot to track Singpost registered package status

This is not a particularly useful project because Singpost does not update their package status often, sometimes up to 12 hours or longer. Anyway, I did not realize that until I started working on this. :p

@sgposttracker is a Twitter bot that runs on AppEngine. This is quite an easy project. It took me about 5 hours. It is coded completely in Python, with BeautifulSoup for HTML parsing, and Tweepy for Twitter API requests. This only works for registered package. Not able to figure out Speedpost packages.


to get status for package RRxxxxxxxxxSG The package status will be returned as a reply. You can also mention other twitter users if you want them to receive the reply

if you want to track status updates You will receive a tweet when there's a status change to your package.

to keep your messages private, use DMs

Singpost Registered Package status API

It's just a very simple API. If you want status update, just call Sample response in JSON

I may put more effort into this project if Singpost starts updating their status more often. For now, I have already received the package I ordered last Friday, so this project ...

Open Source Analytics App on AppEngine - GAEMobileAnalytics

SG Buses WP7 users' phone models [live analytics]

GAEMobileAnalytics is a Google AppEngine project written in Python that records and displays analytics. I started this project to record activity for one of my Windows Phone 7 application, SG Buses. This app is currently being use to test the project.

The source code for the project can be obtained from GitHub here. This project includes a Windows Phone 7 library so you can integrate easily with your existing app. Libraries for iOS and Android may not come soon unless I have a new app to test this with.


  • access to live data in chart format for embedding in websites
  • log number of new users daily
  • log total new users
  • log phone models and manufacturers
  • log events and event-specific parameters
  • generate charts for all of the above using Google Charts API

Sample charts showing live data

Total number of users in SG Buses WP7 [live analytics]

Total number of new users daily in SG Buses WP7 [live analytics]

Menu activity in SG Buses WP7 [live events analytics]

I have not documented the project properly yet. Step-by-step instructions should be coming soon. Let me know if you can help to test or ...