← Blog

CityWalker in two months

CityWalker went live on 30 April as v2.2.0. On 30 June, the app is at v2.9.2 with 242 total downloads. I started recording analytics events on 13 May using Aptabase. The analysis below is based on data from these two points.

Acquisition

On average, 3 to 4 users onboard daily. This has been fairly consistent. Apart from one Reddit post on r/Wandelen, there have been no further posts. The acquisition is quite organic.

The conversion from store views is a decent 40%. This is high but can be explained by the low number of actual people (6 to 7) who view the Play Store page. So even though the conversion from viewed to downloaded is good, the main challenge is to get more users to visit the CityWalker store page.

Engagement

Monthly Active Users (MAU) is at 109 average, up 36% over the last 28 days. Daily Active Users (DAU) is at 12.5, up 30%. The DAU to MAU ratio is around 11%, which is reasonable for a walking app where most users do not walk every day.

The retention by walk number is more interesting. Of users who complete their first walk, 46% come back for a second. The drop from walk 1 to walk 2 is the biggest leak. But the pattern becomes much healthier after that. Walk 2 to walk 3 loses only 5%. Users who walk twice tend to keep walking.

Walk # Users % of Walk 1 Drop
1 41 100%
2 19 46% -54%
3 18 44% -5%
4 15 37% -17%
5 12 29% -20%

By walk 6 to 10, retention sits at around 23%. By walk 21 to 30, it is around 11%. There is a sharp drop at the start and it settles down later.

Based on this analysis I have recently shipped a redesigned walk summary screen specifically aimed at the walk 1 to walk 2 conversion.

Other observations

It is difficult to find one metric that gives a good idea of how the app is doing. Using trial and error, I am trying to come up with a few indicators.

1. Failed city downloads

At launch around 50% of city downloads were failing. After multiple iterations to refine analytics on what was failing exactly, and a few fixes, the number is down to 35%. I am keeping an eye on this. The aim is to bring it under 10%.

2. Total number of walks

For a walking app, the number of walks completed is a natural thing to track. Walks have been growing steadily with the number of users. The last full week saw a dip. The heat wave in Europe and North America may be a factor, but I do not have enough data to be sure.

Week Walks Onboarded Walks/user
May 18 – May 24 34 30 1.13
May 25 – May 31 39 22 1.40
Jun 01 – Jun 07 56 43 1.36
Jun 08 – Jun 14 68 43 1.43
Jun 15 – Jun 21 87 52 1.49
Jun 22 – Jun 28 73 56 1.45

3. Walks per user

Total walks can be skewed by power users. A different way to track app usage is walks per user. This also helps in understanding engagement. The number has moved from 1.13 to 1.45 over the last six weeks. Slow but consistent climb.

4. Stability

Crash and ANR (Application Not Responding) rates have been low. One crash in 90 days. Four ANRs in the last 30 days, three of which were the same bug fixed in 2.7.9.

Help and blog

Alongside the app, there is a help section on citywalker.app covering common questions about finding your city, unified cities, streets-only mode, data collection, exporting walks, and reporting map issues. There are also two technical blog posts on how coverage is calculated and what counts as a walkable street. Most of these pages exist because users asked questions that needed a clearer answer.

CityWalker Region Seeds

CityWalker's city boundaries come from a seed file I maintain in a public GitHub repository. When the app loads a city, it pulls the latest seeds from there. This means I can ship a new city or fix a boundary without a Play Store release, and users get the update when they open the app the next time.

The seeds are under ODbL, the OpenStreetMap license. Anyone can use them, contribute to them, or fork them. The catalog has grown from version 1 to version 36 over the past two months. Each new seed was added because at least one user was already walking on a radius download there, waiting for a proper region to exist.

Walkers around the world

CityWalker has been downloaded by users from 49 countries, and users from 24 of those countries have completed at least one walk.

Most users are concentrated in Europe and North America, but I see users from Asia, South America, and Australia.

A handful of power users do most walks. One user has already completed over 100 walks.

What I do not measure

I strip the city name from failed download events. I see that the failure happened and the reason category. I do not store GPS coordinates in events. The closest I get is the IP-based region tag Aptabase derives, which is country and sometimes a coarse administrative region.

The result is that I can see when things are broken, but I cannot always see for whom or where. For a privacy-first walking app, I have to accept that tradeoff. Users do reach out via email with feedback, and that has resulted in multiple fixes and a few new features.

What I am shipping next

Improvements on the Suggest a Walk feature, which suggests loops of fixed durations to help you cover the maximum of your city.

A view-on-computer feature at citywalker.app/view that lets users see their map on a computer through a QR-based ephemeral relay. Client-side decryption, no server persistence.