Connect FlutterFlow to Baremetrics by routing all API calls through a Firebase or Supabase proxy that holds your Bearer API token — the token has full read access to your revenue data and must never ship in the app bundle. Once proxied, use FlutterFlow API Calls to fetch MRR, ARR, churn, and active customer counts from Baremetrics' REST API, parse them into a Data Type, and bind to stat cards and a chart for a founder-facing SaaS metrics dashboard.
| Fact | Value |
|---|---|
| Tool | Baremetrics |
| Category | Analytics |
| Method | FlutterFlow API Call |
| Difficulty | Intermediate |
| Time required | 35 minutes |
| Last updated | July 2026 |
Build a Founder-Facing SaaS Metrics Dashboard in FlutterFlow with Baremetrics
Baremetrics is built for one thing: showing SaaS founders their subscription health in plain numbers. MRR, ARR, churn rate, LTV, active customers, new subscriptions, cancellations — all computed automatically from your Stripe or Recurly billing data. You connect your billing source once, and Baremetrics does the math continuously. For a FlutterFlow app, this means you can build a mobile dashboard that puts your key metrics on your phone — the founder's 'morning coffee' view of the business, updated daily.
This is the only tool in this analytics category that you do not send data to. You exclusively read data out. There is no SDK, no event tracking, no session recording — just a REST API you query with GET requests. The Baremetrics API at `https://api.baremetrics.com/v1` is organized around sources (your connected billing integrations) and metric endpoints scoped to a source. The first call you always make is GET /sources to find the sourceId of your connected billing integration. Every subsequent metric call uses that sourceId as part of the path.
The sole security challenge — and it is the whole security story for this page — is the Bearer API token. This token grants read access to all your revenue data. Placing it in a FlutterFlow API Call header compiles it into the app binary. Any user who downloads the app can extract it with standard tools and read your MRR, customer list, and churn data. The solution is straightforward: deploy a one-function Firebase Cloud Function or Supabase Edge Function that holds the token and proxies requests to Baremetrics. Your FlutterFlow app calls the proxy, never Baremetrics directly.
Metrics change slowly — MRR updates when subscriptions change, not on every page view. Cache the proxy response in Firestore or Supabase and refresh on a daily schedule rather than hitting the API every time the dashboard opens. This keeps costs low and respects any rate limits Baremetrics applies per account.
Integration method
Baremetrics exposes a REST API at `https://api.baremetrics.com/v1` authenticated by a Bearer token from your account settings. Because this token grants read access to your full revenue data, it must never appear in a FlutterFlow API Call header — it would be compiled into the app binary. Instead, deploy a Firebase Cloud Function or Supabase Edge Function that holds the token and forwards requests to Baremetrics. Your FlutterFlow API Call group targets the proxy. The proxy responses are parsed into a lean Data Type and bound to stat card widgets and a chart on a founder-facing mobile dashboard.
Prerequisites
- A Baremetrics account with at least one billing source connected (Stripe, Recurly, etc.)
- A Baremetrics API token from Settings → API (paid Baremetrics plan required for API access)
- Your Baremetrics sourceId — retrieved via GET /sources (see Step 3)
- A FlutterFlow project with a dashboard screen ready to build
- A Firebase or Supabase project for the proxy (required — the Bearer token must never be in the client)
Step-by-step guide
Get your Baremetrics API token and understand the source model
Log in to your Baremetrics account and navigate to Settings → API. Baremetrics generates an API token for your account — copy it and store it securely (a password manager, not a text file). This is a full-read-access token for all your revenue data. Treat it with the same security posture as your Stripe secret key. Before building anything in FlutterFlow, understand Baremetrics' source model. Every Baremetrics account has one or more billing sources: each source corresponds to a connected billing integration (Stripe, Recurly, Braintree, etc.). All metric endpoints in Baremetrics are scoped to a sourceId — for example, `GET /v1/{sourceId}/metrics` not `GET /v1/metrics`. This means you must first call `GET /v1/sources` to discover your sourceId, then use it in all subsequent metric calls. You can find your sourceId right now to save time during setup. Open a REST client or your browser's developer console and make a GET request to `https://api.baremetrics.com/v1/sources` with the header `Authorization: Bearer YOUR_TOKEN`. The response is a JSON object containing a `sources` array. Each source has an `id` field (like `d5b2e3a1-...`) and a `provider` field (like `stripe`). Note your primary source's `id` — you will hardcode it in your proxy or FlutterFlow API Call configuration. If you have a sandbox or test account, note that test API tokens and live API tokens hit different data. Mixing them returns empty metrics. Baremetrics does not have a separate base URL for sandbox vs live — the distinction is at the token level. Verify that your Baremetrics plan includes API access. API access is available on paid Baremetrics plans. If the API returns 401 on a valid token, your plan may not include API access — check Baremetrics' current plan features or contact their support.
Pro tip: The sourceId for your main billing source rarely changes — once you find it, hardcode it in your proxy function as an environment variable rather than fetching it dynamically on every dashboard open. This saves one API call per session and eliminates the risk of the sources endpoint returning stale data.
Expected result: You have the API token and the sourceId for your primary billing source written down and stored securely. A test GET request to Baremetrics' sources endpoint returns your connected billing sources, confirming the token is valid and API access is enabled on your plan.
Deploy a proxy to hold the Bearer token
The Baremetrics API token must never appear in a FlutterFlow API Call header. FlutterFlow compiles API Call configurations into the app binary — an Authorization header with a Bearer token is visible to anyone who decompiles the APK or IPA. A founding team's MRR, churn rate, and customer list becoming publicly readable is a real risk, not a theoretical one. Deploy a Firebase Cloud Function or Supabase Edge Function that holds the token in server-side secrets and forwards requests to `https://api.baremetrics.com/v1`. The function accepts a `path` query parameter from your FlutterFlow app (like `/{sourceId}/metrics`), appends it to the Baremetrics base URL, injects the Bearer token from the secret, and returns the response. Store the API token using Firebase's secret manager (`defineSecret`) — this encrypts the secret at rest and makes it available only inside the function during execution. The sourceId can be stored as a regular environment variable since it is not sensitive, or hardcoded in the function if it is stable. Add CORS headers to the proxy response for FlutterFlow web builds. Native iOS and Android builds do not need CORS headers, but if you ever export the FlutterFlow project as a web app or use Run Mode in the browser, CORS will be required. Also add caching in the proxy: check Firestore or Supabase for a cached response for the requested path. If the cache is less than 6 hours old, return the cached response without calling Baremetrics. Metrics change slowly — there is no reason to hit the Baremetrics API multiple times per day for the same dashboard data. This is also where RapidDev can help if you want a more sophisticated caching and refresh architecture — the team handles FlutterFlow API integrations every week and offers a free scoping call at rapidevelopers.com/contact.
1// Firebase Cloud Function (Node.js) — Baremetrics API proxy2const { onRequest } = require('firebase-functions/v2/https');3const { defineSecret } = require('firebase-functions/params');4const axios = require('axios');56const BAREMETRICS_TOKEN = defineSecret('BAREMETRICS_TOKEN');7const SOURCE_ID = 'YOUR_SOURCE_ID'; // not sensitive, can be env var89exports.baremetricsProxy = onRequest(10 { secrets: [BAREMETRICS_TOKEN] },11 async (req, res) => {12 // CORS for web builds13 res.set('Access-Control-Allow-Origin', '*');14 if (req.method === 'OPTIONS') {15 res.set('Access-Control-Allow-Headers', 'Content-Type, Authorization');16 return res.status(204).send('');17 }1819 const token = BAREMETRICS_TOKEN.value();20 // Allow path override; default to metrics endpoint21 const path = req.query.path || `/${SOURCE_ID}/metrics`;2223 try {24 const response = await axios({25 method: 'GET',26 url: `https://api.baremetrics.com/v1${path}`,27 headers: {28 Authorization: `Bearer ${token}`,29 Accept: 'application/json',30 },31 params: req.query.params32 ? JSON.parse(req.query.params)33 : {},34 });35 return res.json(response.data);36 } catch (err) {37 return res.status(err.response?.status || 500).json({38 error: err.response?.data || err.message,39 });40 }41 }42);Pro tip: Add authentication to the proxy itself — require a Firebase ID token or Supabase JWT so only signed-in users of your FlutterFlow app can trigger Baremetrics queries. Without auth on the proxy, anyone who discovers the function URL can query your revenue data through the proxy without needing the Baremetrics token directly.
Expected result: The Cloud Function deploys and appears in the Firebase Console. Calling the function URL with `?path=/{sourceId}/metrics` returns a Baremetrics metrics JSON response, confirming the token, proxy, and source routing are working correctly.
Set up a FlutterFlow API Group for the proxy
With the proxy deployed, create the FlutterFlow API integration. In the left nav, click API Calls. Click + Add and select Create API Group. Name it BaremetricsProxy. In the Base URL field, paste your deployed Firebase Cloud Function URL (or Supabase Edge Function URL). Do not add any Authorization headers here. Authentication is handled by the proxy function — the FlutterFlow API Call authenticates to your proxy (optionally via a shared secret or user JWT), and the proxy authenticates to Baremetrics. Add the first API Call: click + Add Call on the group. Name it GetMetrics. Set the method to GET. In the endpoint field, use `/` and add a query variable named `path` with a default value of `/{YOUR_SOURCE_ID}/metrics`. This lets your FlutterFlow app pass different Baremetrics paths to the proxy as needed. Add optional variables for `start_date` and `end_date` to enable date-range filtering — Baremetrics metrics endpoints accept date parameters to return metrics for a specific period. Add a second API Call: name it GetCustomers. Set the path variable default to `/{YOUR_SOURCE_ID}/customers`. This will power the customer lookup screen. In the Response & Test tab for GetMetrics, click Test. If the proxy is working, you will receive a Baremetrics metrics JSON response. Paste this into the response body field and click Generate JSON Paths. Baremetrics metrics responses are nested — the response typically includes a `metrics` object containing sub-objects for different metric types. Map the fields you need: MRR (usually `metrics.mrr.value`), ARR, active subscriptions count, and churn rate. Create a Data Type named BaremetricsSummary with fields: mrr (Integer), arr (Integer), activeCustomers (Integer), churnRate (Double), newMrr (Integer).
1{2 "group_name": "BaremetricsProxy",3 "base_url": "https://YOUR_REGION-YOUR_PROJECT.cloudfunctions.net/baremetricsProxy",4 "calls": [5 {6 "name": "GetMetrics",7 "method": "GET",8 "endpoint": "/",9 "query_params": {10 "path": "/{sourceId}/metrics",11 "params": "{\"start_date\": \"{{startDate}}\", \"end_date\": \"{{endDate}}\"}"12 },13 "variables": [14 { "name": "sourceId", "type": "String" },15 { "name": "startDate", "type": "String" },16 { "name": "endDate", "type": "String" }17 ],18 "json_paths": {19 "mrr": "$.metrics.mrr.value",20 "arr": "$.metrics.arr.value",21 "activeCustomers": "$.metrics.active_subscriptions.value",22 "churnRate": "$.metrics.churn_rate.value",23 "newMrr": "$.metrics.new_mrr.value"24 }25 },26 {27 "name": "GetCustomers",28 "method": "GET",29 "endpoint": "/",30 "query_params": {31 "path": "/{sourceId}/customers"32 },33 "variables": [34 { "name": "sourceId", "type": "String" }35 ]36 }37 ]38}Pro tip: Baremetrics metric values for MRR and ARR are returned in cents (integer) rather than dollars. Divide by 100 in a FlutterFlow inline function or custom transformer to display dollar amounts. For churn rate, Baremetrics returns a decimal (0.02 = 2%) — multiply by 100 to display as a percentage.
Expected result: The BaremetricsProxy API Group and GetMetrics call appear in FlutterFlow's API Calls panel. The Test tab returns a Baremetrics metrics response and JSON Paths are mapped to the BaremetricsSummary Data Type fields.
Parse the metrics response and bind to stat cards
With the API Call working, build the dashboard screen in FlutterFlow. Create a new screen named MetricsDashboard. Add a Column as the main layout container. At the top, add a Row containing a Text widget displaying the business name or 'My SaaS Metrics' as the screen title, and a small Text widget showing the last-updated timestamp from a Supabase or Firestore cache record. Below the title, add a GridView or Wrap widget with five stat card children. Each stat card is a Container with a rounded border, a label Text at the top, and a value Text in the center. Create five cards: MRR, ARR, Active Customers, Monthly Churn %, and New MRR. Bind each card's value Text to the corresponding JSON Path field from the GetMetrics API Call response — for MRR, bind to the `mrr` field parsed from `$.metrics.mrr.value`, then divide by 100 in FlutterFlow's Binding expression editor to convert cents to dollars. Add conditional color to the churn card: use a Conditional Expression in the Container's background color property. If the churn rate (decimal from Baremetrics) is greater than 0.02 (2%), set the background to a light red; if less, set it to light green. This gives the dashboard an at-a-glance health signal. Below the stat cards, add an optional line chart widget (FlutterFlow has a built-in Chart widget or you can use the fl_chart pub.dev package via a custom widget). Bind it to a GetMetrics call with a date range of the past 12 months and monthly granularity — the Baremetrics metrics endpoint supports time-series data with `start_date`, `end_date`, and `granularity` parameters. Set the GetMetrics API Call to fire On Page Load. Add a loading state: show a CircularProgressIndicator while the API call is in progress and hide the stat cards. Show an error message if the call fails.
Pro tip: Baremetrics MRR values are in cents — always divide by 100 before displaying dollar amounts. In FlutterFlow's Text widget binding, you can use an inline function: `(getMetrics.jsonBody['metrics']['mrr']['value'] / 100).toStringAsFixed(0)` to display a rounded dollar amount without decimal places.
Expected result: The MetricsDashboard screen loads and displays five stat cards populated with real Baremetrics data. The churn card changes color based on the churn rate threshold. A loading spinner shows while the API call is in progress. All values match what you see in the Baremetrics web dashboard.
Cache metrics and gate the dashboard behind authentication
Baremetrics metrics change when billing events happen — new subscriptions, cancellations, upgrades. In practice this means metrics might change a handful of times per day, not continuously. Querying Baremetrics every time a founder opens the dashboard is wasteful and risks hitting rate limits. Implement a cache. In Firestore or Supabase, create a collection or table named `baremetrics_cache` with fields: sourceId (String), metricsJson (JSON or String), lastUpdated (Timestamp). After each successful GetMetrics API call, write the response JSON and the current timestamp to this record. On dashboard load, first read from the cache. If the cache is less than 6 hours old, use the cached data and do not call the proxy. If the cache is stale, call the proxy, update the cache, and display the fresh data. Implement this caching logic in FlutterFlow using a Conditional Action flow: On Page Load → Read Firestore cache document → Conditional: if `lastUpdated` is within 6 hours → use cache → else → call GetMetrics → write cache → display. This pattern eliminates redundant API calls and makes the dashboard feel instant even on slow connections. For authentication, the dashboard should only be accessible to the app owner or authorized team members. Add a role check: read the signed-in user's role from Firestore or Supabase and navigate to MetricsDashboard only if the role is `owner`, `admin`, or `team`. FlutterFlow's navigation actions support conditional routing — add a Conditional Action before navigating to MetricsDashboard that checks the user role and redirects to a 403 screen if unauthorized. Verify the complete flow: sign in as an authorized user, navigate to the dashboard, confirm data loads. Sign in as a non-authorized user and confirm the dashboard is not accessible. Check Firestore to confirm cache records are being written and read correctly.
Pro tip: Show the cache age ('Updated 3 hours ago') below the stat cards so the founder knows whether they are looking at live or cached data. A simple `DateTime.now().difference(lastUpdated).inHours` expression in FlutterFlow's Binding editor gives you the hours since last update.
Expected result: The dashboard loads instantly from the Firestore cache on subsequent opens. The cache timestamp is visible below the stat cards. Opening the dashboard as a non-authorized user shows a 403 screen rather than revenue data. The proxy is only called when the cache is older than 6 hours.
Add a schedule refresh and confirm end-to-end data accuracy
Daily automatic cache refresh keeps the dashboard current without requiring the founder to manually trigger a refresh. FlutterFlow itself does not support scheduled background tasks on mobile, but a Firebase Scheduled Cloud Function or Supabase cron job can call the baremetricsProxy function on a schedule and write the response to the Firestore cache. In Firebase, create a second Cloud Function triggered by Cloud Scheduler on a daily schedule (e.g. 6 AM UTC). This function calls the baremetricsProxy (or directly calls Baremetrics with the token) and writes the response to the Firestore cache document. When the founder opens the FlutterFlow app in the morning, the cache is already fresh from the scheduled refresh — the dashboard loads instantly with today's metrics. Before considering the integration complete, verify data accuracy by comparing the values in your FlutterFlow dashboard against the Baremetrics web dashboard side by side. Check: MRR, active customer count, and churn rate for the current date. If values differ, the most likely cause is a date-range mismatch — ensure the API call is requesting the current period rather than a historical range. Baremetrics metrics endpoints require explicit date parameters or default to a specific period (verify the default in Baremetrics' current API documentation). Also verify the cache is being read correctly — open the dashboard on two devices simultaneously and confirm both show the same values from the cache rather than triggering two independent API calls. The Firestore read should return the same document to both devices.
1// Firebase Scheduled Cloud Function — daily Baremetrics cache refresh2const { onSchedule } = require('firebase-functions/v2/scheduler');3const { defineSecret } = require('firebase-functions/params');4const { initializeApp } = require('firebase-admin/app');5const { getFirestore } = require('firebase-admin/firestore');6const axios = require('axios');78initializeApp();910const BAREMETRICS_TOKEN = defineSecret('BAREMETRICS_TOKEN');11const SOURCE_ID = 'YOUR_SOURCE_ID';1213exports.refreshBaremetricsCache = onSchedule(14 { schedule: '0 6 * * *', secrets: [BAREMETRICS_TOKEN] },15 async () => {16 const token = BAREMETRICS_TOKEN.value();17 const db = getFirestore();1819 try {20 const response = await axios.get(21 `https://api.baremetrics.com/v1/${SOURCE_ID}/metrics`,22 { headers: { Authorization: `Bearer ${token}` } }23 );2425 await db.collection('baremetrics_cache').doc(SOURCE_ID).set({26 metricsJson: JSON.stringify(response.data),27 lastUpdated: new Date(),28 });2930 console.log('Baremetrics cache refreshed successfully');31 } catch (err) {32 console.error('Cache refresh failed:', err.message);33 }34 }35);Pro tip: Set the scheduled refresh to run a few hours before the founder's typical morning check. If they check at 8 AM in their timezone, schedule the refresh for 5 AM UTC (or adjust for the relevant timezone). This ensures the dashboard is never showing stale data when they open it.
Expected result: The scheduled function runs daily and updates the Firestore cache document. The FlutterFlow dashboard loads instantly on each open, showing data from the daily refresh. The data matches the Baremetrics web dashboard values for the same date.
Common use cases
Founder mobile dashboard — daily SaaS metrics at a glance
Build a FlutterFlow app that a SaaS founder opens each morning to see their current MRR, ARR, month-over-month growth, churn rate, and active customer count. Data is fetched from Baremetrics via a proxy and cached in Firestore — the dashboard loads instantly from cache and refreshes in the background. Stat cards change color based on thresholds: green for growth, red for churn above target.
Build a dashboard screen with five stat cards: MRR, ARR, active customers, monthly churn rate, and new MRR. Bind each card to a different Baremetrics metric field from the API response. Add color logic so the churn card turns red when churn exceeds 2%. Add a last-updated timestamp below the cards showing when the data was last fetched.
Copy this prompt to try it in FlutterFlow
Team ops app with customer health view
Build an internal FlutterFlow app for a small SaaS team where any team member can look up a customer's subscription status, LTV, and plan from Baremetrics using the customers endpoint. Useful for CS agents, account managers, or founders who want customer context before a call without logging in to the Baremetrics web dashboard.
Add a customer lookup screen that calls the proxy for GET /{sourceId}/customers/{customerId} using a customer ID entered in a text field. Display the customer's plan name, MRR contribution, subscription start date, and status. Add a list of the customer's recent events (upgrades, downgrades, renewals) from the events endpoint.
Copy this prompt to try it in FlutterFlow
Investor report companion app with historical MRR chart
Build a FlutterFlow screen that shows a monthly MRR chart for the past 12 months fetched from Baremetrics' metrics endpoint with a monthly granularity. The chart shows the MRR trend line and marks months with significant events (new enterprise contracts, churn spikes). Used when presenting to investors on a mobile device without needing to open a laptop.
Create a chart screen that queries the Baremetrics metrics endpoint for MRR over the past 12 months with monthly granularity. Parse the time-series response into a list of month/value pairs. Bind the list to a line chart widget showing MRR trend. Add the current ARR as a headline stat above the chart.
Copy this prompt to try it in FlutterFlow
Troubleshooting
Proxy returns 401 Unauthorized from Baremetrics
Cause: The Baremetrics API token stored in the proxy secret is invalid, expired, or belongs to a test account when you are querying a live data endpoint. Baremetrics tokens are account-specific — a token from one account cannot access another account's data.
Solution: Go to Baremetrics Settings → API and verify the token value. Copy it fresh and update the Firebase secret using `firebase functions:secrets:set BAREMETRICS_TOKEN`. Redeploy the function. Also confirm your Baremetrics plan includes API access — a 401 on a syntactically valid token sometimes indicates a plan restriction.
Metric endpoints return 404 — path not found
Cause: Most Baremetrics metric endpoints are scoped to a sourceId. A request to `/v1/metrics` without a sourceId prefix will 404. The path format must be `/v1/{sourceId}/metrics`.
Solution: Ensure your proxy is prepending the sourceId to the path. Make a test GET to `https://api.baremetrics.com/v1/sources` (with the Bearer token) to confirm your sourceId. Update the hardcoded SOURCE_ID in your proxy function or the default value of the `path` variable in your FlutterFlow API Call.
MRR or ARR values look wrong — off by 100x or showing zero
Cause: Baremetrics returns MRR and ARR in cents (integer). A $10,000 MRR is returned as `1000000`. Displaying the raw value without dividing by 100 makes the numbers appear 100x too large. Zero values may indicate the date range in the API request is returning an empty period.
Solution: Divide MRR and ARR values by 100 in FlutterFlow's binding expression or in a transformer before displaying. For zero values, verify the date range parameters in your GetMetrics API Call — ensure `start_date` and `end_date` cover the current billing period. Check Baremetrics API docs for the default period if no dates are specified.
Dashboard shows cached data from several days ago — cache not refreshing
Cause: The scheduled Firebase function may have failed silently, or the cache write to Firestore encountered an error. The FlutterFlow app is correctly reading from cache but the cache itself is stale.
Solution: Check Firebase Console → Functions → Logs for the scheduled function. Look for errors in the last run. Common causes: Baremetrics API rate limit hit during the scheduled call, or Firestore write permission denied. Also add a manual 'Refresh' button to the FlutterFlow dashboard that triggers a GetMetrics call and cache write, bypassing the schedule when fresh data is needed immediately.
Best practices
- Never place the Baremetrics Bearer token in a FlutterFlow API Call header — always use a Firebase or Supabase proxy. This token exposes all your revenue data.
- Always call GET /sources first to obtain your sourceId — hardcode it in the proxy after initial discovery rather than fetching it dynamically on every request.
- Cache metrics responses in Firestore or Supabase and refresh on a daily schedule — Baremetrics data changes slowly and there is no reason to hit the API on every dashboard open.
- Divide MRR and ARR values by 100 before displaying — Baremetrics returns monetary amounts in cents, not dollars.
- Gate the metrics dashboard behind an auth check — revenue data should only be visible to authorized team members, not all users of the FlutterFlow app.
- Add a visible 'last updated' timestamp to the dashboard so the viewer knows whether they are looking at live or cached data.
- This integration is read-only — Baremetrics derives its data from your billing source (Stripe, Recurly). To influence Baremetrics data, make changes in your billing platform, not in Baremetrics directly.
- Add a manual refresh button alongside the scheduled cache refresh so founders can fetch fresh data immediately after a significant billing event without waiting for the next scheduled run.
Alternatives
Mixpanel tracks user behavior and product events, making it better for understanding user actions — complementary to Baremetrics' financial metrics rather than a replacement.
Looker is a full business intelligence platform that can model and visualize data from multiple sources including Stripe — more powerful than Baremetrics but significantly more complex to set up and maintain.
Tableau provides advanced data visualization capabilities for complex analytics across multiple data sources, while Baremetrics offers simpler out-of-the-box SaaS-specific metrics without requiring SQL or data modeling.
Frequently asked questions
Does Baremetrics push data to my app or do I pull it?
You pull from Baremetrics — all integration is read-only GET requests to the Baremetrics REST API. There is no webhook or push mechanism for the metrics API. This is by design: Baremetrics is a reporting layer that computes metrics from your billing source, not an event stream. Your FlutterFlow app queries the API (via a proxy) whenever you want fresh data.
Can I send billing events from my FlutterFlow app directly to Baremetrics?
No — Baremetrics does not accept billing events from your app directly. It reads from your connected billing source (Stripe, Recurly, etc.) and computes metrics automatically. If you want Baremetrics to know about a billing event, it must go through your billing platform first. For example, if your app initiates a subscription via Stripe, Baremetrics picks up that subscription from Stripe automatically — you do not need to notify Baremetrics separately.
What Baremetrics plan do I need for API access?
API access is included on paid Baremetrics plans. The exact plan tier that includes API access may vary — check Baremetrics' current pricing page or your account settings for confirmation. If your Settings → API page does not show an API token, your current plan does not include API access. Contact Baremetrics support or upgrade to a plan that includes it.
How often should I refresh the Baremetrics data in my FlutterFlow app?
Daily is typically sufficient for a founder metrics dashboard. Baremetrics metrics (MRR, churn rate, active customers) update when billing events occur — new subscriptions, cancellations, upgrades — not on a fixed schedule. For most SaaS businesses this means metrics change a few times per day at most. Refreshing the cache once per day via a scheduled function is appropriate. If you need near-real-time data after a specific event, add a manual refresh button.
Can multiple team members use the same FlutterFlow dashboard safely?
Yes, as long as they are all signed in to the FlutterFlow app with authorized accounts and the proxy has appropriate access controls. The Baremetrics token stays in the Firebase proxy — team members' devices never touch the token directly. All team members call the same proxy, which enforces auth, calls Baremetrics, writes to the shared cache, and returns the same metrics. Gate access by checking user roles in Firestore or Supabase before allowing navigation to the metrics screen.
Talk to an Expert
Our team has built 600+ apps. Get personalized help with your project.
Book a free consultation