We pioneered the fintech market with one of the first stocks performance apps

Stocks - photo 1

It’s always better to see how it works with your own eyes than to read about it, right?

A Postindustria internal project, the Stocks+ app for iPhone & iPad became the one of the first finance app for up to date stock and portfolio information at the touch of a button. The app was truly pioneering, going live in 2011before Apple had even made their own Stocks app.

Today Stocks+ is an industry leading resource, providing tracking prices, market indices, mutual funds, ETFs, currency rates, crypto, commodities, futures, and bonds. If a user owns shares, Stocks+ will display investment performance via total earnings, and percentage gained. 

If you want to know more about how we successfully achieved this challenge – you can find our detailed PDF case study here.

The (not-so-novel) challenge: 
Make money_

One major focus of Postindustria internal projects is a B2C app business model, focusing on free apps that grow organically and are monetized using ads. 

So for Stocks+, the more sessions and pages users load, the more ads are shown – and the more revenue is generated. The real challenge, then, was to keep users in the app, loading pages. One idea for increasing engagement was to recommend more stocks so their portfolio becomes bigger, increasing the probability of price alerts generated and the overall time spent in the app.

Another challenge was that of scale and load; too many requests were sent to the data source when US markets were open. At the busiest times so many user devices requested backend data returns, users would experience long load times – or even a time-out. In mobile, these are cause for deleting the app.

In another effort to increase user growth, Postindustria wanted to invented a “differentiator” feature which would make the app stand out of hundreds of similar ones on the App Store and Play Store.


Performance improvement (‘Too many requests’):

  • Postindustria’s backend engineers introduced a 2-level caching system – Nginx and memcached – so the vast majority of repeated requests returned cached results saving valuable time and load.
  • The Postindustria team also segmented data sources for optimal performance. Then, quotes would be requested from one data source, historical data from another source, and stock news from the third.

The “differentiator” feature:

Postindustria invented a feature called ‘Tycoon Insights’, which allows users to get an inside scoop at top trades of the most popular US stock market gurus. Once  one of these ‘tycoons’ made a trade, Stocks+ would notify all users who follow that investor. 

This feature allows a customer to copy other investors’ buys or sells, essentially mimicking the ideal trades to achieve success:

Stocks - photo 8

Engagement boosting recommendation system:

Postindustria analyzed existing recommendation solutions on the market, and found that most of them were designed to work with explicit datasets – e.g. ratings or some other “valued” interactions. For Stocks+ this was not the case, as datasets contain only lists of symbols, added by each user to their portfolio. 

Given the simplicity of mobile deployment on iOS, on-device recommendations were likely to be an effective option. The Postindustria decided to use Turicreate, a Tensorflow-wrapping library introduced by Apple – as it allowed simplified deployment to CoreML models, while at the same time offering more flexibility than the GUI tool CreateML. 

The data dump taken from the production environment has a pretty simple structure, containing only user ids and ids of symbols, selected by particular users for their portfolios. In order to preserve users’ privacy, we randomized their ids during the dump. Despite the dataset not having particular user data, the Postindustria team wanted to keep it totally anonymous, as the only data vital for Stocks+ goals was user grouping based on common symbols.

We started by analyzing and cleaning the data. The initial dataset, grouped by user ids showed the following statistical indicators:

count  315168.000000
mean        9.308255
std        22.113467
min         1.000000
25%         3.000000
50%         4.000000
75%         9.000000
max      2921.000000

As there are a few predefined tickers automatically created for every user, the Postindustria team decided to remove them in order to focus on significant user interactions. This removal provided the following indicators:

count  194642.000000
mean       10.548361
std        27.340036
min         1.000000
25%         2.000000
50%         4.000000
75%        10.000000
max      2918.000000

Then Postindustria filtered users from the first quartile, (having less than 3 symbols in portfolios) in order to focus on more active users. The final indicators were:

count    126520.000000
mean         15.488484
std          32.864674
min           3.000000
25%           5.000000
50%           8.000000
75%          16.000000
max        2918.000000

Later the team tested smaller datasets, truncating more users and using 10 symbols per portfolio as a threshold – but it didn’t provide a significant increase in recall values.

After testing a few predefined models offered by Turicreate, the Postindustria team wound up using ItemSimilarityRecommender – as it provided the best recall results on the datasets. After training, the model is stored on disk and, if necessary, can be exported to the CoreML model.

Since model training takes only a matter of seconds, the Postindustria team decided to leverage short retrain cycles to keep the model up-to-date with current user behavior. This approach led to the idea of deploying a model with a simple web API to the server, in order to simplify model updates. 

To achieve this Postindustria created a web-interface, wrapping the model. To make suggestions, the team employed the `recommend_from_interactions` method, allowing predictions without needing additional context that new users wouldn’t have anyway. The team built the web interface using the Flask framework, providing a simple API and the ability to hot-reload the model.


Downloads and users: 

In the last 12 months

  • the number of app downloads has increased by +386%
  • net revenue from in-app purchases increased by +194% and 
  • number of subscriptions also increased by +79%

Revenue from ads:

In the last 6 months, revenue from major ad partners has increased by +36% compared to the previous 6 months. 

The number of Monthly Active Users has increased by +138% in the last 12 months (from 78k to 186k users) compared to the previous period.


Stocks+ is an example of Postindustria’s pioneering spirit, and ability to invent, iterate, and suceed. Many of the features were the first of their kind, in a nascent App Store environment where many questions didn’t yet have answers – so ingenuity and fast learning were key to success. 

Book a strategy session

Get actionable insights for your product


    We’ll reach out to schedule a call