Turn emails into Google Sheets rows
Every form gets an email address. Mail sent to it becomes a row - labels become columns, values become cells.
Status first: email-in is currently in setup
Straight up front: the email-in channel described in this guide is currently in setup and not yet live for beta accounts. The address format, parsing rules, and fallbacks below describe how it works as shipped in the product design, so you can plan the workflow now - but do not wire production mail to it until your dashboard shows the channel active. Everything else on this page (endpoints, webhooks, the embed) is live today; see how it works for the full pipeline.
The idea: an inbox that files itself
Plenty of lead flow still arrives as email. Legacy contact forms that only send notifications, booking confirmations, marketplace inquiries, "new signup" alerts from tools with no export - all of it lands in an inbox where it is read once and lost to analysis.
Email-in gives every SheetLink form a companion address:
slf_yourtoken@sheetlinkforms.comMail sent (or auto-forwarded) to that address is parsed and delivered through the same pipeline as an HTTP submission: screened, mapped to columns, appended as a row in your connected Google Sheet or Excel table, visible in the same delivery log. The inbox stops being the system of record; the sheet is.
How parsing works: Label: value lines
The parser looks for labeled lines in the message body:
Name: Ada Lovelace
Email: ada@example.com
Budget: 5000
Message: Interested in the analytical engine service.Each Label: value line becomes a field, and fields map to columns exactly like form fields do - names matching column headers map automatically, case and punctuation insensitive, with explicit per-field mapping available for the rest. This format is not exotic: it is what most form-notification emails already look like, which is the point. A notification from a legacy form tool usually parses with zero changes.
The fallback: unparseable mail is kept, not dropped
Not every message is a tidy stack of labeled lines. When parsing finds no usable Label: value structure, the message is not discarded - the row keeps the subject, sender, and body as fields instead. The philosophy matches the spam handling elsewhere in the product: never silently drop something that might be a lead. A messy row you can read beats a clean sheet missing a customer.
Practical consequence: you can point a forwarding rule at the address before you have perfected anything. Structured mail lands as clean columns; everything else lands intact for manual reading, and you tighten the format over time.
Setups this unlocks
- Legacy form rescue: a site you cannot edit sends notification emails - add a forwarding rule from that inbox to the token address, and historical-style notifications become structured rows.
- Vendor alerts: "new order," "new booking," or "new signup" emails from platforms without webhooks become a running ledger.
- Human-in-the-loop entry: field staff email a labeled template from their phone; the sheet fills itself. No app, no login, no form.
- One destination, many sources: the same sheet can receive HTTP submissions from your live form and emailed leads from everywhere else, because both channels share mapping and delivery.
Making forwarded mail parse cleanly
A few habits raise the share of mail that lands as tidy columns instead of the subject/sender/body fallback:
- One field per line. The parser reads
Label: valueline by line; two labels crammed onto one line read as one messy value. - Match labels to your column headers. Mapping is the same case- and punctuation-insensitive match used for form fields, so a label of
E-mailstill lands in an "Email" column - but inventing a new label per sender means manual mapping later. Agree on a template. - Keep the labels at the top. Signatures, disclaimers, and quoted reply chains below the labeled block are noise the labels should not have to compete with.
- Forward, do not screenshot. The parser reads the message body; an attached image of a lead is invisible to it (file parts are dropped on every channel).
- Test with one message first. Send a single labeled email, check the row and the delivery log, then switch on the forwarding rule for real traffic.
What to use while email-in finishes setup
If you need rows landing today, the live channels cover most email-adjacent cases:
- A direct form: replace the email-notification form with a form posting to your endpoint - the tutorial is at HTML form to Google Sheets without a backend. Include the honeypot in any form you build:
<input name="_slhp" tabindex="-1" autocomplete="off" style="position:absolute;left:-9999px">. - Platform webhooks: Webflow and Framer sites can deliver natively via
/w/webflow/slf_yourtokenand/w/framer/slf_yourtoken- no email leg at all. - A small script: anything that can make an HTTP POST can write rows now; the docs have fetch, Node, PHP, and curl examples.
Watch the dashboard (or the changelog) for the email-in channel going live. Beta access is free, invite required - join the waitlist.
FAQ
Is email-in available right now?
Not yet - it is currently in setup. The address format and parsing behavior described here are how the shipped channel works, but hold off routing production mail until it shows active in your dashboard. The HTTP endpoint, sl.js embed, and Webflow/Framer webhooks are live today.
What happens to an email the parser cannot understand?
It still becomes a row. When no Label: value lines are found, the subject, sender, and body are kept as fields, so the message is preserved for human reading rather than dropped. You lose tidiness, never the lead.
Do emailed rows go through spam screening too?
Email-in feeds the same pipeline as HTTP submissions, so delivery, field mapping, the formula-injection guard, and the delivery log all apply. Suspicious items follow the same rule as everywhere else in the product: quarantine for review, never a silent drop.
Can I auto-forward from Gmail or Outlook?
That is the intended pattern: a forwarding rule or filter that sends matching mail (for example, notifications from a legacy form) to your slf_yourtoken@sheetlinkforms.com address. Both Gmail and Outlook support conditional forwarding rules; set the condition to the sender or subject of the notification you want captured.
Does the sender need a SheetLink account?
No. Anyone (or any system) that can send email to the token address can produce a row - that is what makes it useful for field staff and third-party platforms. The token in the address is what routes mail to your form and its connected sheet.
Related guides: Send an HTML form to Google Sheets without a backend ยท Forms to a spreadsheet without Zapier (and why you might want that)