Documentation

Connect your forms to Google Sheets in minutes.

Follow these steps to get your marketing or product forms logging reliably to your team's Google Sheet.

1. Share your Google Sheet

Open the sheet where you want to log submissions and click Share. Invite our service account email with Editor permissions. This lets FormSheet read headers and append new rows.

Service account email:formsheet-service@your-project.iam.gserviceaccount.com

2. Add your site in the dashboard

Inside the FormSheet dashboard, create a site for each domain you collect leads from. We allowlist domains to prevent spoofed requests. You'll get a unique public key and ingest URL for each site.

3. Sync headers and map fields

Visit the Sheet tab for your site and click Test access. We fetch the header row so you can map each form field (e.g. email, message) to the correct column. We always store __ts automatically for timestamps.

4. Choose an integration method

Drop-in snippet

Paste the generated <script> snippet into the page with your form. FormSheet hooks the submit event, converts fields to JSON, and POSTs to the ingest URL. No extra configuration required.

Fetch from your stack

POST JSON directly to https://formsheet.app/api/ingest/<SITE_ID>. Include the X-Public-Key header with your site's key. This works for server actions, edge functions, or Node/Go services.

fetch("https://formsheet.app/api/ingest/SITE_ID", { method: "POST", headers: { "Content-Type": "application/json", "X-Public-Key": "YOUR_PUBLIC_KEY", }, body: JSON.stringify({ name: "Ada Lovelace", email: "ada@example.com", message: "Love what you built!", }), keepalive: true, });

5. QA with logs

Use the Event Logs page to confirm the payloads we received. You can replay failed submissions, filter by site or status, and copy payloads for debugging.

Final sanity check

Ready to launch? Confirm your sheet sharing, header mapping, and snippet install.   Submit a live form—the Event Logs page will confirm the payload within seconds.