We talk a lot about building from data. Here's what it looks like in practice, from connecting a data source to having a working app your team can use.
The scenario: a RevOps team at a 50-person SaaS company. They track deals in HubSpot, process payments through Stripe, and maintain a Google Sheet with manual enrichment data (notes from sales calls, customer segment tags, contract terms that don't fit neatly into the CRM). Every week, someone reconciles all three into a master spreadsheet. That process takes about 4 hours.
Step 1: Connect the data
In Gainable, you create a dataset and add your sources. In this case, three connections: HubSpot (via OAuth), Stripe (API key), and Google Sheets (authorize access and select the spreadsheet).
Each connector pulls the schema: field names, data types, sample records. You can preview the data before committing. The Google Sheet has columns like "Company Name," "Deal Stage," "Contract Value," "Sales Notes," "Segment." HubSpot has its own deal fields. Stripe has payment records with amounts, dates, and customer IDs.
You hit sync. The data flows in.
Step 2: Watch the DataAnalyzer work
This is where the "show me your data" approach becomes tangible. The DataAnalyzer agent examines all three sources. It reads the field names and data types. It identifies relationships: the "Company Name" in Google Sheets maps to the company field in HubSpot. The customer email in Stripe matches contact records in HubSpot.
It notices that "Deal Stage" has values like "Prospect," "Demo Scheduled," "Proposal Sent," "Negotiation," "Closed Won," and "Closed Lost." Pipeline data. It sees "Contract Value" as a currency field. "Segment" as a category with values like "SMB," "Mid-Market," and "Enterprise."
From this analysis, it proposes a unified data model. One clean structure that merges contacts, deals, and payments from all three sources. Fields are normalized. Duplicates are identified. Relationships are mapped.
You didn't write a prompt. You didn't describe your app. The data described it.
Step 3: The app gets built
The Build Agent takes the data model and generates the application. Here's what you get:
A deal pipeline view as a Kanban board, with cards moving across columns that match your actual deal stages. Each card shows the company name, contract value, and assigned rep.
A list view with all records, sortable and filterable by segment, stage, rep, or date range. Click any record to see the full detail: every field from all three sources, merged into one view.
A dashboard with charts built from your numeric fields. Revenue by month. Deals by stage. Pipeline value by segment. Average deal size over time. These aren't generic sample charts. They're built from your data, showing your numbers.
Forms for adding and editing records. Fields match your data model. Dropdowns are populated from your existing values. Date pickers for date fields. Currency formatting for money fields.
Collaboration features: comments on individual deals, team chat within the app, and file attachments on records (for contracts, proposals, or call recordings).
Role-based access: set up views so each sales rep sees their deals, managers see their team's pipeline, and the VP of Revenue sees the company-wide dashboard.
Step 4: Refine with prompts (if you want to)
The app is working. Your data is live. But maybe you want to adjust a few things. This is where prompting enters the picture, as the iteration layer.
"Add a filter for Enterprise deals only on the dashboard." Done. "Move the revenue chart above the pipeline chart." Done. "Add a calculated field that shows days since last activity." Done.
These are small, specific refinements to an app that already works. You're not describing the whole app from scratch. You're fine-tuning details. This is what prompt-based editing should be: a precision tool, not the starting point.
Step 5: Share it with your team
The app runs on a full stack: Node.js, Express, MongoDB, with a responsive UI built on Alpine.js, DaisyUI, and Tailwind. Real-time updates via WebSockets mean that when someone adds a deal, the dashboard updates for everyone instantly.
Share the link. Team members sign in. Each person sees the views configured for their role. The weekly 4-hour reconciliation spreadsheet is replaced by a live app that stays current.
What didn't happen
Nobody wrote code. Nobody designed a UI. Nobody spent hours crafting the perfect prompt. Nobody debugged a broken integration.
The 4-hour weekly reconciliation process was replaced because the data, which already contained the structure and relationships, was the starting point. The AI's job was to read that structure and build accordingly.
This is what data-first means in practice. If you have data in Google Sheets, HubSpot, Stripe, or any combination of sources you're reconciling manually, try the quickstart. Connect your data, see what gets built, and decide from there.