

This is a Data App that collects structured product submissions from a team, validates them, queues them for approval, and writes approved entries directly to a Keboola table. I built it with Kai in one conversation.
No Google Sheets. No broken column headers. No emailing CSVs.
If you've ever needed your team to submit structured data - new products, budget inputs, campaign briefs, vendor details - and the spreadsheet approach keeps falling apart, keep reading.
You probably think of Data Apps as dashboards (if you think about them at all) - charts, filters, tables. But here's what most users didn't use them yet: Data Apps can also collect structured data and write it back to your Keboola project.
Here's what you can built:
Tab 1: Submission Form. A simple form layout for submitting a new Shopify product. I required basic info (name, description, category, vendor from a dropdown menu). On the right: pricing input, quantities, and image URL. Every required field is validated before the submission goes through. I can add a small info note for each field to explain what's expected from user.
Tab 2: Approval Queue. This tab is for a manager. You can set up authorization so only a specific email can access it. Once a submitted item lands here, the user has two options: Approve or Reject the product. Only approved products are pushed to a storage table in Keboola.
Tab 3: Saved Data. I wanted to see how the submitted data looks, so I added a view of everything that's been written to Keboola Storage, pulled directly from the table. Below you can also see how it looks in Keboola Storage itself.

And this is how the table looks in Keboola Storage:

The key part: when you approve an item, it writes directly to a Keboola table using the Storage API. From there, a flow can pick it up and push it anywhere - Shopify, your ERP, a data warehouse, wherever your pipeline goes.
The app is password-protected by default. Share the URL and password with your team. They submit, you approve, data flows into Keboola.
You can also change authentication to SSO (requires Keboola login) if you want to control access by user. This is useful when you need to know who approved what.
The form-validate-approve-write-back pattern works for anything where you need structured input from people who shouldn't be touching your data pipeline directly:
Same pattern every time: Kai builds the form, you define the fields, approval adds governance, write-back connects it to your pipeline.
You always have the option to write code on your own, but why do it when there's a quicker way - Kai. Our AI engineer can build a Data App from scratch in a minute or two. To be fair, it took me probably 2 prompts to create the app interface, deploy it, and check that the table is writing the right inputs into Storage. From there, probably 25 minutes to figure out how I can submit inventory levels to Shopify (I needed to find out which field the Shopify API requires). Still, all you need to do is open the side panel with Kai and explain what you want.
Check out more: Build an Interactive Dashboard in 5 Minutes with Kai
Based on first prompt, Kai created the full Streamlit app: two-column form, dropdown menus populated with brand names, European price format enforcement (comma as decimal separator, rejects dots), minimum character counts, and required field checks.
This is where Data Apps are so much better than a CSV file. For each input field, I predefined what's accepted - only numbers in the price field, comma format enforced, dots rejected. Kai normalizes prices into format I want before writing to Storage, so the transformation downstream always receives clean data. No more failed transformations because someone typed a price wrong.
You probably don't want everyone writing products directly into Shopify. So this step lets responsible human to check what matters before anything gets written to Storage. All products get reviewed first.
For each product, app shows up as a card with summary. Your user can Approve or Reject. Rejected items are tracked separately.
This is the step that connects your Data App to the rest of your pipeline. I asked Kai to connect the "Approve" button to a Keboola Storage table. When user approves a product, the data writes directly to a table using the Storage API.
Kai can set this up automatically: it creates the output bucket if it doesn't exist, formats the data, and uses incremental loading so new products get added without overwriting existing ones. I also asked for a third tab that shows a live view of everything already saved - pulled straight from Storage.
From the storage table, any flow in Keboola can pick up the data and push it downstream - in this example to Shopify, but it can be an ERP, a data warehouse, or wherever your pipeline goes.
Open Kai in your project and try something like:
Build a Data App with a form where my team can submit [what you need].
Include validation for number input, an approval queue, and write approved entries
to a Keboola table.
Kai will handle the code for you.