One of the fastest ways to build trust as an indie hacker is to show real revenue.
One of the fastest ways to create a privacy problem is to do it badly.
That is the whole game.
Plenty of founders want the upside of building in public:
- credibility
- social proof
- audience growth
- better conversion on landing pages
- stronger partnership and hiring conversations
But they freeze because they assume the only options are:
- share nothing, or
- post raw Stripe screenshots everywhere
Neither is good enough.
You can absolutely share Stripe revenue publicly without exposing customer data, invoice history, individual payments, or operational details that should stay private.
You just need to publish the right layer of information.

First principle: share aggregates, not records
If you remember one idea from this article, make it this one:
Public proof should be aggregate-level. Private operations should stay record-level.
That means you can safely publish things like:
- current MRR
- total recurring revenue trend
- subscriber count ranges
- month-over-month growth
- revenue milestones
- verified payment-source badges
And you should usually keep these private:
- customer names
- email addresses
- billing addresses
- invoice PDFs
- failed payment details
- refund reason notes
- plan-level discounts tied to specific customers
This is not just about being nice. It's about respecting customer trust and not accidentally turning your analytics stack into a public leak.
Why Stripe screenshots are a bad default
Founders do this all the time:
- open Stripe
- take a screenshot
- crop a bit
- post it on X
Feels fast. Feels real. Usually sloppy.
The problem with raw Stripe screenshots is that they often reveal more than founders think:
- customer initials or avatars in side panels
- invoice IDs
- payment statuses
- payout timing
- account balances
- product names you haven't launched yet
- coupon and pricing experiment details
Even when you blur part of the image, you still create a second problem: screenshots are weak proof.
Anyone can edit them. Anyone can cherry-pick the time range. Anyone can crop out the ugly part.
So the screenshot is risky and lower-trust than a proper verified public metric page.
What you should share instead
The ideal public revenue view answers one question:
Is this builder showing a real business signal without exposing customer-level data?
A strong public revenue page usually includes:
- current verified MRR
- data source such as Stripe or Stripe + Polar
- public project or builder name
- optional historical trend summary
- clear separation between recurring and one-time revenue
- public-facing context about what the builder is building
That gives the audience what they need:
- proof
- context
- credibility
without leaking what they absolutely do not need:
- customer records
- raw finance operations
- internal business admin details
The Stripe permission model matters
This is where a lot of people get lost. They think public revenue sharing means giving some tool dangerous access to the whole Stripe account.
No.
The safer pattern is a restricted read-only API key.
That is already the model described in Makerfolio's Stripe integration flow at /integrations/stripe: create a restricted key with only the minimum read permissions needed, then calculate and display the public aggregate from there.
The relevant principle is simple:
- the integration reads the minimum necessary subscription metadata
- the product stores only what it needs for verification and display
- customer-identifiable data does not need to become part of the public profile
This is how you get the upside of verification without the downside of oversharing.
What a safe public Stripe setup looks like
Here is the architecture indie hackers should aim for.
Layer 1: Stripe stays private
Stripe remains your source of truth for:
- customers
- invoices
- payment events
- refunds
- subscriptions
- taxes and operational finance details
This layer is private.
Layer 2: an analytics/verification layer reads the minimum necessary data
This layer calculates things like:
- active subscriptions
- normalized monthly recurring revenue
- total recurring revenue by project
- high-level counts
This layer should not expose raw customer tables publicly.
Layer 3: the public profile displays only safe aggregates
This layer is what you share on:
- your personal site
- your waitlist page
- your X bio
- Indie Hackers posts
- launch threads
- investor or partner intros
That public layer can say:
Verified MRR: $4,280
Source: Stripe
Project: ExampleApp
without saying:
Customer: [email protected]
Last invoice: #8F2A19
Plan: enterprise-discount-test-v2
Come on. That second version is operational leakage, not transparency.
What to publish publicly
If you want a concrete list, publish these first:
1. Current verified MRR
This is the strongest trust signal because it shows the business is alive now, not six months ago.
If you need help calculating it correctly, start with How to Calculate MRR from Stripe.
2. Revenue trend context
You don't need a perfect chart. Even short context helps:
- up 18% month over month
- flat for two months because of churn
- growth driven by annual plan conversions
3. Project and product context
Tell people what the number belongs to.
Good:
$2,140 verified MRR for a B2B form builder
Weak:
$2,140 MRR
4. Verification source
If the number is pulled from Stripe, say so clearly. That is what changes the message from "claim" to "evidence."
5. Optional public profile metadata
Things like project count, build-in-public notes, and links to demos or signup pages are totally fair game.
What to never publish carelessly
Let's be brutally clear here.
Do not publish these casually:
- screenshots that include live customer lists
- MRR dashboards that reveal internal segmentation by account
- invoice lists with timestamps and identifiers
- refund logs
- failed payment queues
- customer support comments pulled from billing notes
- pricing experiments still in progress
Why? Because transparency is not the same thing as operational self-sabotage.
Customers are buying your product, not opting into public case-study treatment by default.
The best public formats for Stripe revenue
There are a few formats that work especially well for founders.
Format 1: public builder profile
This is the strongest format because it gives one durable URL you can reuse everywhere.
That is also why a page like /public-builder-profile matters. It turns revenue proof from an ephemeral social post into an evergreen credibility asset.
Format 2: milestone post with proof link
Good example:
We crossed $3k MRR.
Main driver was improving activation on our free trial.
Verified profile: [link]
This works because the social post gives emotion and the profile gives trust.
Format 3: landing-page proof block
Instead of dumping testimonials everywhere, you can add a clean proof block:
Built by a founder with verified recurring revenue
Again: aggregate, not records.
Why verified public revenue converts better than generic marketing copy
This is the part founders underestimate.
Customers are exhausted by vague SaaS language.
"Loved by teams." Sure.
"Powerful workflow automation." Fantastic.
"Trusted by modern companies." Okay, dude.
But a verified MRR signal communicates something far more useful:
real people pay for this repeatedly.
That does not guarantee quality. It does create a much stronger starting point for trust than copywriting adjectives ever will.
This is exactly why the build-in-public ecosystem values verified proof so much. You can see the same logic in the existing Makerfolio content on why sharing real revenue numbers builds more trust than marketing copy and in the glossary entry for Build in Public.
A privacy-first checklist before you share anything
Use this before posting revenue publicly.
Public-proof checklist
- Are you sharing an aggregate rather than a raw record?
- Does the image or page hide all customer identifiers?
- Are invoice IDs, emails, and plan notes invisible?
- Are you publishing the current recurring metric, not a vanity gross-sales number?
- Can the viewer understand the source of truth?
- Would you be comfortable if a paying customer saw the post?
If you fail that last question, stop.
Stripe vs verified profile vs screenshot
| Format | Trust | Privacy risk | Reusability | |--------|-------|--------------|-------------| | Raw Stripe screenshot | Medium | High | Low | | Cropped screenshot | Low to medium | Medium | Low | | Verified public profile | High | Low | High |
That's the whole argument in one table.
Screenshots are temporary and fragile. Profiles are durable and linkable.
If you are just starting, share less detail and more consistency
A lot of founders think they need a giant number before going public.
Nope.
At the early stage, consistency matters more than size.
You can share:
- your first paying customer
- your first $100 MRR
- your first 10 subscribers
- your first flat month and what you learned
Just do it with the right abstraction layer.
That is what makes your proof feel serious instead of performative.
Final answer: yes, you can share Stripe revenue publicly and stay privacy-safe
Here is the clean answer.
Yes, you can share Stripe revenue publicly without exposing customer data if you publish verified aggregate metrics instead of raw operational records.
That means:
- keep Stripe itself private
- use restricted read-only access where needed
- calculate safe public aggregates like verified MRR
- avoid raw screenshots that expose customers or invoices
- link to a durable public revenue page instead of dumping backend views on social media
If you want the practical version, your stack should look like this:
- Stripe for payments
- a privacy-safe verification layer for calculation
- a public builder profile for sharing proof
That's the move.
If you want to keep going, read these next:
Share proof. Protect customers. Build trust without being reckless.