As developers, we have a bad habit of building a full-blown CRUD app just to collect early-access emails.
I’m currently building my new SaaS, and I wanted a waitlist that:
Costs zero dollars.
Gives me 100% control over the UI (no "Powered by" watermarks).
Requires no database maintenance.
Here is the "stupidly simple" stack I used: Vanilla JS + Google Apps Script + Google Sheets.
- The "Backend" (Google Apps Script) Create a Google Sheet, go to Extensions > Apps Script, and paste this. It acts as a serverless function that appends data to your sheet.
function doPost(e) {
try {
const data = JSON.parse(e.postData.contents);
const ss = SpreadsheetApp.openById("YOUR_SHEET_ID_HERE");
const sheet = ss.getSheets()[0];
// Custom fields for my SaaS waitlist
sheet.appendRow([
new Date(),
data.email,
data.name,
data.company,
data.pressure, // My specific niche field
data.city,
data.country
]);
return ContentService.createTextOutput(JSON.stringify({ result: "success" }))
.setMimeType(ContentService.MimeType.JSON);
} catch (err) {
return ContentService.createTextOutput(JSON.stringify({ result: "error", error: err.toString() }))
.setMimeType(ContentService.MimeType.JSON);
}
}
- The Frontend (Native Fetch) No heavy libraries. Just a clean async function to talk to your new API.
const submitWaitlist = async (formData) => {
const SCRIPT_URL = 'https://script.google.com/macros/s/XXXXX/exec';
try {
// We use 'no-cors' because GAS redirects can be tricky with standard CORS
await fetch(SCRIPT_URL, {
method: 'POST',
mode: 'no-cors',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify(formData)
});
console.log('Early access secured!');
} catch (error) {
console.error('Submission failed', error);
}
};
Why do it this way?
Zero Technical Debt: When the project scales, I can migrate to a real DB in 10 minutes.
Privacy: My data isn't sitting in a third-party startup's database. It's in my own Google Drive.
Speed: I spent 5 minutes on the backend and 2 hours perfecting the CSS (priorities, right?).
If you’re in the validation stage, don't let the "perfect stack" slow you down. Just get the emails and get back to building the actual product.
Top comments (0)