Skip to content

hbcondo/revenut-app

Repository files navigation

Supports Expo iOS Supports Expo Android Supports Expo Web

SaaS Revenue Forecasting in a Nutshell

Wiki | Demo | API

By Amar Kota - Hire me

✊ Motivation

Revenut is being developed as a lightweight, open source alternative to Stripe's mobile app after my SaaS1 experienced fraudulent activity in the form of card testing. Many other Stripe customers have voiced their problems with card testing too23 and although Stripe confirmed card testing has ceased on my website, the problem persists where fraudulent transactions and customers are still included in Stripe's mobile app reporting. As a result, the numbers and charts displayed simply do not reflect actuals.

Unfortunately Stripe is unable to modify the revenue data or financial reports on the dashboard at this point so the Stripe mobile app, as convenient and fast as it is, does not accurately display metrics including Gross Volume and New Customers.

I looked into using another SaaS analytics service but they all charge a premium amount and still do not provide some of the metrics I find useful for my freemium business model. I then decided to build Revenut and open-source it so fellow SaaS owners can get accurate and transparent SaaS metrics conveniently at no cost.

Stripe Revenut
Screenshot Stripe Mobile App Revenut Mobile App

✨ Features

  • Exclude disputed and refunded transactions for accurate revenue reporting
  • Login with existing Stripe username / password + MFA
  • Calculates unrealized ("paper") revenue based on the number of customers trialing your product
  • Calculates unrealized revenue for existing customers that are scheduled to pay their upcoming invoice
  • Calculates realized revenue for customers who paid their invoice

💻 Built With

🏃 Workflow

sequenceDiagram
    autonumber
    actor SaaS Owner
    SaaS Owner->>Revenut App: iOS / Android / Web
    activate Revenut App
    rect rgb(248, 239, 237)
      Note over Revenut App,Stripe Connect: One-Time Authentication
      critical whitelist
        activate Stripe Connect
        Revenut App->>Stripe Connect: Login with Stripe
        Stripe Connect-->>Revenut App: [authorization_code]
        deactivate Stripe Connect
      end
      activate Revenut API
      Revenut App->>Revenut API: [authorization_code]
      activate Stripe API
      Note over Revenut API, Stripe Connect: One-Time Authorization
      Revenut API->>Stripe Connect: Request access token
      Stripe Connect-->>Revenut API: [stripe_user_id]
    end
    par multiprocess async
      Revenut API-)Stripe API: /charges
      Revenut API-)Stripe API: /subscriptions
      Revenut API-)Stripe API: /customers
      Revenut API-)Stripe API: /account
    end
    Stripe API-->>Revenut API: Stripe API responses
    deactivate Stripe API
    Note over Revenut API: Calculate Metrics 
    Revenut API-->>Revenut App: Return SaaS metrics + [stripe_user_id]
    deactivate Revenut API
    Note over Revenut App: Save [stripe_user_id] to local storage
    Revenut App--xSaaS Owner: Display SaaS metrics
    deactivate Revenut App

🚦 Authentication

Revenut uses Expo's built-in Authentication package that has been configured to use Stripe's browser-based authentication via OAuth. This allows Stripe users to login with their existing Stripe credentials securely so Revenut can retrieve data required to formulate its metrics.

Revenut Authentication

🧭 Roadmap

SaaS owners can generate revenue from multiple sources including app stores, advertisements and more. Revenut should be updated to forecast revenue from these providers:

  • Stripe
  • PayPal
  • Google AdSense
  • Apple App Store
  • Google Play Store

👪 Contributing

If you like Revenut, please star this repo or consider sponsoring. If you want to make Revenut better, feel free to submit a PR, log an issue or contact me directly.

🔖 License

The Revenut source code is made available under the Apache 2.0 license.

🙌 Acknowledgements

Footnotes

  1. https://Last10K.com

  2. https://news.ycombinator.com/item?id=36197024

  3. https://news.ycombinator.com/item?id=35682534