Use Case

Manage customers across your micro-SaaS portfolio

You're running three, five, maybe eight small products. Each one has paying customers. But you have no idea who those people are across the portfolio — and no way to find out without opening eight different admin panels. TinyCRM gives you one table for all of them.

The problem

Your customers are invisible at the portfolio level

Every product in your portfolio has its own user table, its own admin dashboard, and its own mental model. When you log into App A you see App A's customers. When you log into App B you see App B's customers. There is no view that shows you the full picture — who your customers actually are as people, not as rows in a particular database.

The overlap problem is even worse. A customer paying $9/month on App A and $19/month on App B looks like two completely separate people. You cannot tell they are the same human being. You might even send them conflicting support responses because the person on your left screen and the person on your right screen have the same email address, but you never made the connection.

And identifying your best cross-product customers — the people who love what you build enough to pay for multiple things — is practically impossible. You would have to export CSVs from every product, load them into a spreadsheet, deduplicate by email, and rebuild that analysis every time you want an answer. Most indie hackers never bother. They run blind.

The solution

How TinyCRM solves portfolio visibility

1

Create one project per product

Inside TinyCRM, create a project for each of your products. Each project gets a unique API key. The structure mirrors your portfolio: one project per app.

2

Install the SDK in each app

Add two lines to each product’s sign-up or activation route. When a customer joins, call identify() with their email. The SDK handles the rest.

3

Email becomes the merge key

TinyCRM automatically merges records by email address. If alice@example.com signs up for three of your products, she appears as one row in your dashboard — not three.

4

See project badges per customer

Each customer row shows coloured project badges for every product they use. At a glance you can see who is in App A only, who is in both App A and App B, and who uses your entire portfolio.

5

Filter across the portfolio

Filter by project to see product-specific customers. Or filter to show only customers who appear in two or more projects — your most engaged portfolio users.

Portfolio insights

What you unlock when you can see the whole picture

Cross-product customers

See exactly who uses more than one product. These are your highest-trust customers — the people who keep coming back regardless of which thing you built.

Revenue concentration

Store each customer’s plan or MRR as a JSONB param and filter to find your most valuable customers across all products in a single query.

Churn risk signals

Spot users who stopped using one product but still use another. Reach out before they disappear entirely. Their activity on App B tells you they’re not gone — just drifting.

Upsell opportunities

Find free users on App A who are already paying customers on App B. They’ve proven they’ll pay for your work. That’s the warmest possible lead for an upgrade conversation.

Code example

One customer, three products, one dashboard row

Each product calls identify() independently using its own API key. TinyCRM merges all three by email — no coordination required between your apps.

App A — newsletter tool

import { TinyCRM } from "tinycrm-sdk";

const crm = new TinyCRM({ apiKey: process.env.APP_A_TINYCRM_KEY! });

// Called in App A's sign-up handler
crm.identify({
  email: "alice@example.com",
  name: "Alice Chen",
  status: "paid",
  params: { plan: "pro", mrr: 9 },
});

App B — link-in-bio tool

import { TinyCRM } from "tinycrm-sdk";

const crm = new TinyCRM({ apiKey: process.env.APP_B_TINYCRM_KEY! });

// Called in App B's activation webhook
crm.identify({
  email: "alice@example.com",
  status: "free",
  params: { source: "producthunt", referral: "friend42" },
});

App C — analytics dashboard

import { TinyCRM } from "tinycrm-sdk";

const crm = new TinyCRM({ apiKey: process.env.APP_C_TINYCRM_KEY! });

// Called in App C's trial-start route
crm.identify({
  email: "alice@example.com",
  status: "trialing",
  params: { trial_ends: "2026-03-29", plan: "starter" },
});

// Result in TinyCRM dashboard:
// alice@example.com  [App A] [App B] [App C]  last active: just now

Frequently asked questions

How many products can I track with TinyCRM?

Unlimited. You create one TinyCRM project per product and install the SDK in each. There is no cap on the number of projects, and all projects are included in the $9/month plan.

Can I see which customers overlap across multiple products?

Yes. Because TinyCRM merges customers by email, a person who uses three of your products appears as one row with three project badges. You can filter the dashboard to show only customers who appear in more than one project.

Does TinyCRM calculate MRR across my portfolio?

Not directly. TinyCRM is a customer database, not a revenue analytics tool. You can store MRR as a JSONB param on each customer-project relationship and then filter or export by that value, but the aggregation is left to you.

Is there a per-product fee?

No. The $9/month plan covers your entire portfolio regardless of how many projects you create. You pay once, you see everything.

Ready to see your entire portfolio in one place?

14-day free trial. No credit card required. Works with any backend.