<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Arsalan Noorafkan</title>
    <description>The latest articles on DEV Community by Arsalan Noorafkan (@arsalan_bruin).</description>
    <link>https://dev.to/arsalan_bruin</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4032148%2F4b5d6023-8b88-408c-9d5f-307424cb78d1.png</url>
      <title>DEV Community: Arsalan Noorafkan</title>
      <link>https://dev.to/arsalan_bruin</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/arsalan_bruin"/>
    <language>en</language>
    <item>
      <title>Free open source data tools for SaaS founders</title>
      <dc:creator>Arsalan Noorafkan</dc:creator>
      <pubDate>Thu, 20 Aug 2026 13:29:17 +0000</pubDate>
      <link>https://dev.to/arsalan_bruin/free-open-source-data-tools-for-saas-founders-43ig</link>
      <guid>https://dev.to/arsalan_bruin/free-open-source-data-tools-for-saas-founders-43ig</guid>
      <description>&lt;p&gt;Quick disclaimer before anything else: I'm a developer advocate at Bruin, and I run our startup program. I'll explain what I get out of this at the end, because it's the first thing I'd want to know.&lt;/p&gt;

&lt;p&gt;Most early SaaS startups have their data scattered across tools that don't talk to each other. Stripe has your billing. GA4 and Search Console have your traffic. Your product database has usage. Each tool has its own dashboard, and each dashboard only shows you its own slice.&lt;/p&gt;

&lt;p&gt;I've built free, open source templates that pull those sources into one warehouse (BigQuery), clean them up, and give you reporting models you can actually query. No paid tier required to use them.&lt;/p&gt;

&lt;p&gt;Here's the Stripe template. You generate it with one command:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;bruin init stripe my-stripe-pipeline
&lt;span class="nb"&gt;cd &lt;/span&gt;bruin/my-stripe-pipeline
bruin run
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That ingests Stripe into BigQuery and builds three layers:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;raw&lt;/strong&gt;: Stripe tables copied as-is&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;silver&lt;/strong&gt;: cleaned customers, subscriptions, invoices, payments, refunds&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;gold&lt;/strong&gt;: reporting models like MRR, MRR movement, new and churned
customers, and plan mix&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Each source table is one small asset file. This is the whole thing that pulls Stripe subscriptions into your warehouse:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;raw.subscriptions&lt;/span&gt;
&lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;ingestr&lt;/span&gt;
&lt;span class="na"&gt;parameters&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;source_connection&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;stripe&lt;/span&gt;
  &lt;span class="na"&gt;source_table&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;subscriptions&lt;/span&gt;
  &lt;span class="na"&gt;destination&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;bigquery&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Want a different Stripe table? Change &lt;code&gt;source_table&lt;/code&gt; to &lt;code&gt;invoices&lt;/code&gt; or&lt;br&gt;
&lt;code&gt;charges&lt;/code&gt;. Want a different source entirely? Swap the connector. Bruin has built-in connectors for a long list of sources, so ingestion is mostly picking the table and letting it run.&lt;/p&gt;

&lt;p&gt;There are templates for Stripe, GA4, GSC, and a few more, covering sales, marketing, finance, and product/web analytics. I'm adding more.&lt;/p&gt;

&lt;p&gt;This is most useful in two situations I keep running into:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;You've hit the limit of what a tool's built-in dashboard shows you, and you want to ask a question it can't answer.&lt;/li&gt;
&lt;li&gt;You want to combine sources into one report. For example, once the GA4 template sits next to the Stripe one, splitting MRR by the acquisition channel that brought each customer in is just another SQL file. Stripe can't show you that on its own, because the channel lives in GA4.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Free technical support
&lt;/h2&gt;

&lt;p&gt;I'm also offering free help to get started. It's a 1 to 2 hour online session where I walk you through the setup and we get your first pipeline running against your own data. No catch on this one either.&lt;/p&gt;

&lt;h2&gt;
  
  
  So what do I get out of this?
&lt;/h2&gt;

&lt;p&gt;Fair question, and I'd rather answer it than have you wonder.&lt;/p&gt;

&lt;p&gt;My job is to grow usage of our open source tools. That's the number I'm measured on, and the number our investors want to see go up. That's the whole deal. If you use the templates and they help, that's a win for me, whether or not you ever pay us anything.&lt;/p&gt;

&lt;p&gt;We do have a paid managed cloud service. For most early stage startups, it's probably not relevant yet. The open source stack runs fine on its own, and that's what these templates are built on.&lt;/p&gt;

&lt;p&gt;Everything is here: &lt;a href="https://getbruin.com/startups/" rel="noopener noreferrer"&gt;https://getbruin.com/startups/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;And if you go through it and something is confusing or broken, tell me. That feedback is worth as much to me as the usage.&lt;/p&gt;

</description>
      <category>startup</category>
      <category>opensource</category>
      <category>data</category>
      <category>saas</category>
    </item>
  </channel>
</rss>
