[{"data":1,"prerenderedAt":1376},["ShallowReactive",2],{"content-query-qCbtnk9tEz":3,"content-query-W4RtfFQaoh":1176,"content-query-yP1cWMns5L":1201,"content-query-M5aWdXgQKx":1205,"content-query-eJ9XWy0CGH":1212,"content-query-UP87PRcOMw":1225,"content-query-7VgBfxLOWV":1229,"content-query-Z6fTkbgt1D":1251,"content-query-9giMhwHrGj":1258,"content-query-j8GGVgf9na":1265,"content-query-G03kJtQzJS":1278,"content-query-1mvwAKmUBq":1297,"content-query-No6iPTj4EO":1320,"content-query-zRSmsuVl55":1330,"content-query-MsdmgXewTK":1334,"content-query-BMhIInEJl2":1341},{"_path":4,"_dir":5,"_draft":6,"_partial":6,"_locale":7,"title":8,"description":9,"intro":9,"type":10,"layout":11,"tags":12,"body":15,"_type":1169,"_id":1170,"_source":1171,"_file":1172,"_stem":1173,"_extension":1174,"sitemap":1175},"/docs/tutorials/email/google-sheets","email",false,"","Email to Google Sheets","Parse email to a Google Sheet automatically. Give an inbox a unique address, parse each message to JSON, transform the fields, and append a spreadsheet row.","tutorial","doc",[13,14],"Email","Webhook Forwarding",{"type":16,"children":17,"toc":1159},"root",[18,34,63,70,75,105,134,139,475,488,494,505,519,524,530,550,874,922,928,946,952,963,1040,1053,1059,1072,1078,1088,1106,1123,1135,1141,1153],{"type":19,"tag":20,"props":21,"children":22},"element","p",{},[23,26,32],{"type":24,"value":25},"text","You receive structured emails all day — order confirmations, inbound leads, contact-form notifications, monitoring digests, scheduled reports — and you want each one captured as a row in ",{"type":19,"tag":27,"props":28,"children":29},"strong",{},[30],{"type":24,"value":31},"Google Sheets",{"type":24,"value":33},". Copy-pasting is tedious, and reaching for Zapier or a hosted email-parsing SaaS is overkill for something this mechanical.",{"type":19,"tag":20,"props":35,"children":36},{},[37,46,48,54,56,61],{"type":19,"tag":38,"props":39,"children":43},"a",{"href":40,"rel":41},"https://webhookrelay.com",[42],"nofollow",[44],{"type":24,"value":45},"Webhook Relay",{"type":24,"value":47}," does it directly. Add an ",{"type":19,"tag":38,"props":49,"children":51},{"href":50},"/email-to-webhook",[52],{"type":24,"value":53},"email input",{"type":24,"value":55}," to a bucket and you get a unique address. Every message sent there is ",{"type":19,"tag":27,"props":57,"children":58},{},[59],{"type":24,"value":60},"parsed to JSON",{"type":24,"value":62},", optionally reshaped by a transform, and delivered to a destination that appends a spreadsheet row. No polling, no glue server, no IMAP.",{"type":19,"tag":64,"props":65,"children":67},"h2",{"id":66},"how-it-works",[68],{"type":24,"value":69},"How it works",{"type":19,"tag":20,"props":71,"children":72},{},[73],{"type":24,"value":74},"The whole pipeline is a single hop:",{"type":19,"tag":76,"props":77,"children":80},"pre",{"className":78,"code":79,"language":24,"meta":7,"style":7},"language-text shiki shiki-themes github-dark","inbound email  ──▶  Webhook Relay  ──▶  Apps Script Web App  ──▶  appendRow  ──▶  Google Sheet\n (any sender)       (parse + transform)   (doPost endpoint)        (one row)      (in your sheet)\n",[81],{"type":19,"tag":82,"props":83,"children":84},"code",{"__ignoreMap":7},[85,96],{"type":19,"tag":86,"props":87,"children":90},"span",{"class":88,"line":89},"line",1,[91],{"type":19,"tag":86,"props":92,"children":93},{},[94],{"type":24,"value":95},"inbound email  ──▶  Webhook Relay  ──▶  Apps Script Web App  ──▶  appendRow  ──▶  Google Sheet\n",{"type":19,"tag":86,"props":97,"children":99},{"class":88,"line":98},2,[100],{"type":19,"tag":86,"props":101,"children":102},{},[103],{"type":24,"value":104}," (any sender)       (parse + transform)   (doPost endpoint)        (one row)      (in your sheet)\n",{"type":19,"tag":20,"props":106,"children":107},{},[108,110,116,118,124,126,132],{"type":24,"value":109},"Webhook Relay ",{"type":19,"tag":38,"props":111,"children":113},{"href":112},"/docs/email",[114],{"type":24,"value":115},"receives emails as webhooks",{"type":24,"value":117},": you get a unique address like ",{"type":19,"tag":82,"props":119,"children":121},{"className":120},[],[122],{"type":24,"value":123},"\u003Cuuid>@in.webhookrelay-mail.com",{"type":24,"value":125},", each email is parsed into a structured JSON document, and that document is POSTed to your bucket outputs. A small ",{"type":19,"tag":38,"props":127,"children":129},{"href":128},"/docs/webhooks/functions",[130],{"type":24,"value":131},"transform function",{"type":24,"value":133}," picks the columns you care about, and a Google Apps Script Web App writes the row.",{"type":19,"tag":20,"props":135,"children":136},{},[137],{"type":24,"value":138},"The parsed payload includes everything you'd want as a column:",{"type":19,"tag":76,"props":140,"children":144},{"className":141,"code":142,"language":143,"meta":7,"style":7},"language-json shiki shiki-themes github-dark","{\n  \"from\": \"alice@acme.com\",\n  \"from_name\": \"Alice\",\n  \"recipient\": \"8c2f...@in.webhookrelay-mail.com\",\n  \"to\": [\"orders@yourco.com\"],\n  \"cc\": [],\n  \"subject\": \"Order #4821 confirmed\",\n  \"date\": \"2026-06-28T11:59:00Z\",\n  \"message_id\": \"\u003C...>\",\n  \"text\": \"Plain-text body...\",\n  \"html\": \"\u003Cp>HTML body...\u003C/p>\",\n  \"headers\": {},\n  \"spf\": \"pass\",\n  \"dkim\": \"pass\",\n  \"dmarc\": \"pass\",\n  \"attachments\": []\n}\n","json",[145],{"type":19,"tag":82,"props":146,"children":147},{"__ignoreMap":7},[148,157,182,204,226,250,264,286,308,330,352,374,388,410,431,452,466],{"type":19,"tag":86,"props":149,"children":150},{"class":88,"line":89},[151],{"type":19,"tag":86,"props":152,"children":154},{"style":153},"--shiki-default:#E1E4E8",[155],{"type":24,"value":156},"{\n",{"type":19,"tag":86,"props":158,"children":159},{"class":88,"line":98},[160,166,171,177],{"type":19,"tag":86,"props":161,"children":163},{"style":162},"--shiki-default:#79B8FF",[164],{"type":24,"value":165},"  \"from\"",{"type":19,"tag":86,"props":167,"children":168},{"style":153},[169],{"type":24,"value":170},": ",{"type":19,"tag":86,"props":172,"children":174},{"style":173},"--shiki-default:#9ECBFF",[175],{"type":24,"value":176},"\"alice@acme.com\"",{"type":19,"tag":86,"props":178,"children":179},{"style":153},[180],{"type":24,"value":181},",\n",{"type":19,"tag":86,"props":183,"children":185},{"class":88,"line":184},3,[186,191,195,200],{"type":19,"tag":86,"props":187,"children":188},{"style":162},[189],{"type":24,"value":190},"  \"from_name\"",{"type":19,"tag":86,"props":192,"children":193},{"style":153},[194],{"type":24,"value":170},{"type":19,"tag":86,"props":196,"children":197},{"style":173},[198],{"type":24,"value":199},"\"Alice\"",{"type":19,"tag":86,"props":201,"children":202},{"style":153},[203],{"type":24,"value":181},{"type":19,"tag":86,"props":205,"children":207},{"class":88,"line":206},4,[208,213,217,222],{"type":19,"tag":86,"props":209,"children":210},{"style":162},[211],{"type":24,"value":212},"  \"recipient\"",{"type":19,"tag":86,"props":214,"children":215},{"style":153},[216],{"type":24,"value":170},{"type":19,"tag":86,"props":218,"children":219},{"style":173},[220],{"type":24,"value":221},"\"8c2f...@in.webhookrelay-mail.com\"",{"type":19,"tag":86,"props":223,"children":224},{"style":153},[225],{"type":24,"value":181},{"type":19,"tag":86,"props":227,"children":229},{"class":88,"line":228},5,[230,235,240,245],{"type":19,"tag":86,"props":231,"children":232},{"style":162},[233],{"type":24,"value":234},"  \"to\"",{"type":19,"tag":86,"props":236,"children":237},{"style":153},[238],{"type":24,"value":239},": [",{"type":19,"tag":86,"props":241,"children":242},{"style":173},[243],{"type":24,"value":244},"\"orders@yourco.com\"",{"type":19,"tag":86,"props":246,"children":247},{"style":153},[248],{"type":24,"value":249},"],\n",{"type":19,"tag":86,"props":251,"children":253},{"class":88,"line":252},6,[254,259],{"type":19,"tag":86,"props":255,"children":256},{"style":162},[257],{"type":24,"value":258},"  \"cc\"",{"type":19,"tag":86,"props":260,"children":261},{"style":153},[262],{"type":24,"value":263},": [],\n",{"type":19,"tag":86,"props":265,"children":267},{"class":88,"line":266},7,[268,273,277,282],{"type":19,"tag":86,"props":269,"children":270},{"style":162},[271],{"type":24,"value":272},"  \"subject\"",{"type":19,"tag":86,"props":274,"children":275},{"style":153},[276],{"type":24,"value":170},{"type":19,"tag":86,"props":278,"children":279},{"style":173},[280],{"type":24,"value":281},"\"Order #4821 confirmed\"",{"type":19,"tag":86,"props":283,"children":284},{"style":153},[285],{"type":24,"value":181},{"type":19,"tag":86,"props":287,"children":289},{"class":88,"line":288},8,[290,295,299,304],{"type":19,"tag":86,"props":291,"children":292},{"style":162},[293],{"type":24,"value":294},"  \"date\"",{"type":19,"tag":86,"props":296,"children":297},{"style":153},[298],{"type":24,"value":170},{"type":19,"tag":86,"props":300,"children":301},{"style":173},[302],{"type":24,"value":303},"\"2026-06-28T11:59:00Z\"",{"type":19,"tag":86,"props":305,"children":306},{"style":153},[307],{"type":24,"value":181},{"type":19,"tag":86,"props":309,"children":311},{"class":88,"line":310},9,[312,317,321,326],{"type":19,"tag":86,"props":313,"children":314},{"style":162},[315],{"type":24,"value":316},"  \"message_id\"",{"type":19,"tag":86,"props":318,"children":319},{"style":153},[320],{"type":24,"value":170},{"type":19,"tag":86,"props":322,"children":323},{"style":173},[324],{"type":24,"value":325},"\"\u003C...>\"",{"type":19,"tag":86,"props":327,"children":328},{"style":153},[329],{"type":24,"value":181},{"type":19,"tag":86,"props":331,"children":333},{"class":88,"line":332},10,[334,339,343,348],{"type":19,"tag":86,"props":335,"children":336},{"style":162},[337],{"type":24,"value":338},"  \"text\"",{"type":19,"tag":86,"props":340,"children":341},{"style":153},[342],{"type":24,"value":170},{"type":19,"tag":86,"props":344,"children":345},{"style":173},[346],{"type":24,"value":347},"\"Plain-text body...\"",{"type":19,"tag":86,"props":349,"children":350},{"style":153},[351],{"type":24,"value":181},{"type":19,"tag":86,"props":353,"children":355},{"class":88,"line":354},11,[356,361,365,370],{"type":19,"tag":86,"props":357,"children":358},{"style":162},[359],{"type":24,"value":360},"  \"html\"",{"type":19,"tag":86,"props":362,"children":363},{"style":153},[364],{"type":24,"value":170},{"type":19,"tag":86,"props":366,"children":367},{"style":173},[368],{"type":24,"value":369},"\"\u003Cp>HTML body...\u003C/p>\"",{"type":19,"tag":86,"props":371,"children":372},{"style":153},[373],{"type":24,"value":181},{"type":19,"tag":86,"props":375,"children":377},{"class":88,"line":376},12,[378,383],{"type":19,"tag":86,"props":379,"children":380},{"style":162},[381],{"type":24,"value":382},"  \"headers\"",{"type":19,"tag":86,"props":384,"children":385},{"style":153},[386],{"type":24,"value":387},": {},\n",{"type":19,"tag":86,"props":389,"children":391},{"class":88,"line":390},13,[392,397,401,406],{"type":19,"tag":86,"props":393,"children":394},{"style":162},[395],{"type":24,"value":396},"  \"spf\"",{"type":19,"tag":86,"props":398,"children":399},{"style":153},[400],{"type":24,"value":170},{"type":19,"tag":86,"props":402,"children":403},{"style":173},[404],{"type":24,"value":405},"\"pass\"",{"type":19,"tag":86,"props":407,"children":408},{"style":153},[409],{"type":24,"value":181},{"type":19,"tag":86,"props":411,"children":413},{"class":88,"line":412},14,[414,419,423,427],{"type":19,"tag":86,"props":415,"children":416},{"style":162},[417],{"type":24,"value":418},"  \"dkim\"",{"type":19,"tag":86,"props":420,"children":421},{"style":153},[422],{"type":24,"value":170},{"type":19,"tag":86,"props":424,"children":425},{"style":173},[426],{"type":24,"value":405},{"type":19,"tag":86,"props":428,"children":429},{"style":153},[430],{"type":24,"value":181},{"type":19,"tag":86,"props":432,"children":434},{"class":88,"line":433},15,[435,440,444,448],{"type":19,"tag":86,"props":436,"children":437},{"style":162},[438],{"type":24,"value":439},"  \"dmarc\"",{"type":19,"tag":86,"props":441,"children":442},{"style":153},[443],{"type":24,"value":170},{"type":19,"tag":86,"props":445,"children":446},{"style":173},[447],{"type":24,"value":405},{"type":19,"tag":86,"props":449,"children":450},{"style":153},[451],{"type":24,"value":181},{"type":19,"tag":86,"props":453,"children":455},{"class":88,"line":454},16,[456,461],{"type":19,"tag":86,"props":457,"children":458},{"style":162},[459],{"type":24,"value":460},"  \"attachments\"",{"type":19,"tag":86,"props":462,"children":463},{"style":153},[464],{"type":24,"value":465},": []\n",{"type":19,"tag":86,"props":467,"children":469},{"class":88,"line":468},17,[470],{"type":19,"tag":86,"props":471,"children":472},{"style":153},[473],{"type":24,"value":474},"}\n",{"type":19,"tag":20,"props":476,"children":477},{},[478,480,486],{"type":24,"value":479},"See the full ",{"type":19,"tag":38,"props":481,"children":483},{"href":482},"/docs/email/payload",[484],{"type":24,"value":485},"payload reference",{"type":24,"value":487}," for every field.",{"type":19,"tag":64,"props":489,"children":491},{"id":490},"step-1-create-a-bucket-and-add-an-email-input",[492],{"type":24,"value":493},"Step 1: Create a bucket and add an email input",{"type":19,"tag":20,"props":495,"children":496},{},[497,499,503],{"type":24,"value":498},"In the dashboard, create a bucket, then add an ",{"type":19,"tag":27,"props":500,"children":501},{},[502],{"type":24,"value":53},{"type":24,"value":504}," to it. Webhook Relay generates a unique address:",{"type":19,"tag":76,"props":506,"children":508},{"className":78,"code":507,"language":24,"meta":7,"style":7},"8c2f1e3a-...-d9b4@in.webhookrelay-mail.com\n",[509],{"type":19,"tag":82,"props":510,"children":511},{"__ignoreMap":7},[512],{"type":19,"tag":86,"props":513,"children":514},{"class":88,"line":89},[515],{"type":19,"tag":86,"props":516,"children":517},{},[518],{"type":24,"value":507},{"type":19,"tag":20,"props":520,"children":521},{},[522],{"type":24,"value":523},"Anything sent to that address is parsed and forwarded to the bucket's outputs. Set up forwarding to that address from your provider, or use it directly as the destination on your forms and order system.",{"type":19,"tag":64,"props":525,"children":527},{"id":526},"step-2-deploy-a-google-apps-script-web-app",[528],{"type":24,"value":529},"Step 2: Deploy a Google Apps Script Web App",{"type":19,"tag":20,"props":531,"children":532},{},[533,535,540,542,548],{"type":24,"value":534},"Create a Google Sheet, open ",{"type":19,"tag":27,"props":536,"children":537},{},[538],{"type":24,"value":539},"Extensions → Apps Script",{"type":24,"value":541},", and replace the default code with a ",{"type":19,"tag":82,"props":543,"children":545},{"className":544},[],[546],{"type":24,"value":547},"doPost(e)",{"type":24,"value":549}," handler that appends a row:",{"type":19,"tag":76,"props":551,"children":555},{"className":552,"code":553,"language":554,"meta":7,"style":7},"language-javascript shiki shiki-themes github-dark","function doPost(e) {\n  const sheet = SpreadsheetApp.openById(\"YOUR_SHEET_ID\").getSheets()[0];\n  const email = JSON.parse(e.postData.contents);\n\n  sheet.appendRow([\n    email.date || new Date(),\n    email.from,\n    email.subject,\n    email.text,\n  ]);\n\n  return ContentService\n    .createTextOutput(JSON.stringify({ status: \"ok\" }))\n    .setMimeType(ContentService.MimeType.JSON);\n}\n","javascript",[556],{"type":19,"tag":82,"props":557,"children":558},{"__ignoreMap":7},[559,590,652,688,697,715,743,751,759,767,775,782,795,841,867],{"type":19,"tag":86,"props":560,"children":561},{"class":88,"line":89},[562,568,574,579,585],{"type":19,"tag":86,"props":563,"children":565},{"style":564},"--shiki-default:#F97583",[566],{"type":24,"value":567},"function",{"type":19,"tag":86,"props":569,"children":571},{"style":570},"--shiki-default:#B392F0",[572],{"type":24,"value":573}," doPost",{"type":19,"tag":86,"props":575,"children":576},{"style":153},[577],{"type":24,"value":578},"(",{"type":19,"tag":86,"props":580,"children":582},{"style":581},"--shiki-default:#FFAB70",[583],{"type":24,"value":584},"e",{"type":19,"tag":86,"props":586,"children":587},{"style":153},[588],{"type":24,"value":589},") {\n",{"type":19,"tag":86,"props":591,"children":592},{"class":88,"line":98},[593,598,603,608,613,618,622,627,632,637,642,647],{"type":19,"tag":86,"props":594,"children":595},{"style":564},[596],{"type":24,"value":597},"  const",{"type":19,"tag":86,"props":599,"children":600},{"style":162},[601],{"type":24,"value":602}," sheet",{"type":19,"tag":86,"props":604,"children":605},{"style":564},[606],{"type":24,"value":607}," =",{"type":19,"tag":86,"props":609,"children":610},{"style":153},[611],{"type":24,"value":612}," SpreadsheetApp.",{"type":19,"tag":86,"props":614,"children":615},{"style":570},[616],{"type":24,"value":617},"openById",{"type":19,"tag":86,"props":619,"children":620},{"style":153},[621],{"type":24,"value":578},{"type":19,"tag":86,"props":623,"children":624},{"style":173},[625],{"type":24,"value":626},"\"YOUR_SHEET_ID\"",{"type":19,"tag":86,"props":628,"children":629},{"style":153},[630],{"type":24,"value":631},").",{"type":19,"tag":86,"props":633,"children":634},{"style":570},[635],{"type":24,"value":636},"getSheets",{"type":19,"tag":86,"props":638,"children":639},{"style":153},[640],{"type":24,"value":641},"()[",{"type":19,"tag":86,"props":643,"children":644},{"style":162},[645],{"type":24,"value":646},"0",{"type":19,"tag":86,"props":648,"children":649},{"style":153},[650],{"type":24,"value":651},"];\n",{"type":19,"tag":86,"props":653,"children":654},{"class":88,"line":184},[655,659,664,668,673,678,683],{"type":19,"tag":86,"props":656,"children":657},{"style":564},[658],{"type":24,"value":597},{"type":19,"tag":86,"props":660,"children":661},{"style":162},[662],{"type":24,"value":663}," email",{"type":19,"tag":86,"props":665,"children":666},{"style":564},[667],{"type":24,"value":607},{"type":19,"tag":86,"props":669,"children":670},{"style":162},[671],{"type":24,"value":672}," JSON",{"type":19,"tag":86,"props":674,"children":675},{"style":153},[676],{"type":24,"value":677},".",{"type":19,"tag":86,"props":679,"children":680},{"style":570},[681],{"type":24,"value":682},"parse",{"type":19,"tag":86,"props":684,"children":685},{"style":153},[686],{"type":24,"value":687},"(e.postData.contents);\n",{"type":19,"tag":86,"props":689,"children":690},{"class":88,"line":206},[691],{"type":19,"tag":86,"props":692,"children":694},{"emptyLinePlaceholder":693},true,[695],{"type":24,"value":696},"\n",{"type":19,"tag":86,"props":698,"children":699},{"class":88,"line":228},[700,705,710],{"type":19,"tag":86,"props":701,"children":702},{"style":153},[703],{"type":24,"value":704},"  sheet.",{"type":19,"tag":86,"props":706,"children":707},{"style":570},[708],{"type":24,"value":709},"appendRow",{"type":19,"tag":86,"props":711,"children":712},{"style":153},[713],{"type":24,"value":714},"([\n",{"type":19,"tag":86,"props":716,"children":717},{"class":88,"line":252},[718,723,728,733,738],{"type":19,"tag":86,"props":719,"children":720},{"style":153},[721],{"type":24,"value":722},"    email.date ",{"type":19,"tag":86,"props":724,"children":725},{"style":564},[726],{"type":24,"value":727},"||",{"type":19,"tag":86,"props":729,"children":730},{"style":564},[731],{"type":24,"value":732}," new",{"type":19,"tag":86,"props":734,"children":735},{"style":570},[736],{"type":24,"value":737}," Date",{"type":19,"tag":86,"props":739,"children":740},{"style":153},[741],{"type":24,"value":742},"(),\n",{"type":19,"tag":86,"props":744,"children":745},{"class":88,"line":266},[746],{"type":19,"tag":86,"props":747,"children":748},{"style":153},[749],{"type":24,"value":750},"    email.from,\n",{"type":19,"tag":86,"props":752,"children":753},{"class":88,"line":288},[754],{"type":19,"tag":86,"props":755,"children":756},{"style":153},[757],{"type":24,"value":758},"    email.subject,\n",{"type":19,"tag":86,"props":760,"children":761},{"class":88,"line":310},[762],{"type":19,"tag":86,"props":763,"children":764},{"style":153},[765],{"type":24,"value":766},"    email.text,\n",{"type":19,"tag":86,"props":768,"children":769},{"class":88,"line":332},[770],{"type":19,"tag":86,"props":771,"children":772},{"style":153},[773],{"type":24,"value":774},"  ]);\n",{"type":19,"tag":86,"props":776,"children":777},{"class":88,"line":354},[778],{"type":19,"tag":86,"props":779,"children":780},{"emptyLinePlaceholder":693},[781],{"type":24,"value":696},{"type":19,"tag":86,"props":783,"children":784},{"class":88,"line":376},[785,790],{"type":19,"tag":86,"props":786,"children":787},{"style":564},[788],{"type":24,"value":789},"  return",{"type":19,"tag":86,"props":791,"children":792},{"style":153},[793],{"type":24,"value":794}," ContentService\n",{"type":19,"tag":86,"props":796,"children":797},{"class":88,"line":390},[798,803,808,812,817,821,826,831,836],{"type":19,"tag":86,"props":799,"children":800},{"style":153},[801],{"type":24,"value":802},"    .",{"type":19,"tag":86,"props":804,"children":805},{"style":570},[806],{"type":24,"value":807},"createTextOutput",{"type":19,"tag":86,"props":809,"children":810},{"style":153},[811],{"type":24,"value":578},{"type":19,"tag":86,"props":813,"children":814},{"style":162},[815],{"type":24,"value":816},"JSON",{"type":19,"tag":86,"props":818,"children":819},{"style":153},[820],{"type":24,"value":677},{"type":19,"tag":86,"props":822,"children":823},{"style":570},[824],{"type":24,"value":825},"stringify",{"type":19,"tag":86,"props":827,"children":828},{"style":153},[829],{"type":24,"value":830},"({ status: ",{"type":19,"tag":86,"props":832,"children":833},{"style":173},[834],{"type":24,"value":835},"\"ok\"",{"type":19,"tag":86,"props":837,"children":838},{"style":153},[839],{"type":24,"value":840}," }))\n",{"type":19,"tag":86,"props":842,"children":843},{"class":88,"line":412},[844,848,853,858,862],{"type":19,"tag":86,"props":845,"children":846},{"style":153},[847],{"type":24,"value":802},{"type":19,"tag":86,"props":849,"children":850},{"style":570},[851],{"type":24,"value":852},"setMimeType",{"type":19,"tag":86,"props":854,"children":855},{"style":153},[856],{"type":24,"value":857},"(ContentService.MimeType.",{"type":19,"tag":86,"props":859,"children":860},{"style":162},[861],{"type":24,"value":816},{"type":19,"tag":86,"props":863,"children":864},{"style":153},[865],{"type":24,"value":866},");\n",{"type":19,"tag":86,"props":868,"children":869},{"class":88,"line":433},[870],{"type":19,"tag":86,"props":871,"children":872},{"style":153},[873],{"type":24,"value":474},{"type":19,"tag":20,"props":875,"children":876},{},[877,879,884,886,891,893,898,900,905,907,912,914,920],{"type":24,"value":878},"Click ",{"type":19,"tag":27,"props":880,"children":881},{},[882],{"type":24,"value":883},"Deploy → New deployment",{"type":24,"value":885},", choose ",{"type":19,"tag":27,"props":887,"children":888},{},[889],{"type":24,"value":890},"Web app",{"type":24,"value":892},", set ",{"type":19,"tag":27,"props":894,"children":895},{},[896],{"type":24,"value":897},"Execute as: Me",{"type":24,"value":899}," and ",{"type":19,"tag":27,"props":901,"children":902},{},[903],{"type":24,"value":904},"Who has access: Anyone",{"type":24,"value":906},", then deploy and copy the ",{"type":19,"tag":27,"props":908,"children":909},{},[910],{"type":24,"value":911},"Web app URL",{"type":24,"value":913},". It looks like ",{"type":19,"tag":82,"props":915,"children":917},{"className":916},[],[918],{"type":24,"value":919},"https://script.google.com/macros/s/AKfyc.../exec",{"type":24,"value":921},". Re-publish a new version whenever you change the script.",{"type":19,"tag":64,"props":923,"children":925},{"id":924},"step-3-add-the-web-app-url-as-a-bucket-output",[926],{"type":24,"value":927},"Step 3: Add the Web App URL as a bucket output",{"type":19,"tag":20,"props":929,"children":930},{},[931,933,938,940,944],{"type":24,"value":932},"Back in Webhook Relay, add an ",{"type":19,"tag":27,"props":934,"children":935},{},[936],{"type":24,"value":937},"output",{"type":24,"value":939}," to your bucket and paste the Apps Script ",{"type":19,"tag":27,"props":941,"children":942},{},[943],{"type":24,"value":911},{"type":24,"value":945}," as the destination. Now every parsed email is POSTed there and appended as a row.",{"type":19,"tag":64,"props":947,"children":949},{"id":948},"step-4-optional-transform-to-pick-columns",[950],{"type":24,"value":951},"Step 4 (optional): Transform to pick columns",{"type":19,"tag":20,"props":953,"children":954},{},[955,957,961],{"type":24,"value":956},"The parsed email JSON carries far more than you probably want in a spreadsheet. Attach a ",{"type":19,"tag":38,"props":958,"children":959},{"href":128},[960],{"type":24,"value":131},{"type":24,"value":962}," to the output to reduce it to exactly the columns you'll write:",{"type":19,"tag":76,"props":964,"children":968},{"className":965,"code":966,"language":967,"meta":7,"style":7},"language-js shiki shiki-themes github-dark","const e = JSON.parse(r.body);\nr.setBody(JSON.stringify({ date: e.date, from: e.from, subject: e.subject, body: e.text }));\n","js",[969],{"type":19,"tag":82,"props":970,"children":971},{"__ignoreMap":7},[972,1006],{"type":19,"tag":86,"props":973,"children":974},{"class":88,"line":89},[975,980,985,989,993,997,1001],{"type":19,"tag":86,"props":976,"children":977},{"style":564},[978],{"type":24,"value":979},"const",{"type":19,"tag":86,"props":981,"children":982},{"style":162},[983],{"type":24,"value":984}," e",{"type":19,"tag":86,"props":986,"children":987},{"style":564},[988],{"type":24,"value":607},{"type":19,"tag":86,"props":990,"children":991},{"style":162},[992],{"type":24,"value":672},{"type":19,"tag":86,"props":994,"children":995},{"style":153},[996],{"type":24,"value":677},{"type":19,"tag":86,"props":998,"children":999},{"style":570},[1000],{"type":24,"value":682},{"type":19,"tag":86,"props":1002,"children":1003},{"style":153},[1004],{"type":24,"value":1005},"(r.body);\n",{"type":19,"tag":86,"props":1007,"children":1008},{"class":88,"line":98},[1009,1014,1019,1023,1027,1031,1035],{"type":19,"tag":86,"props":1010,"children":1011},{"style":153},[1012],{"type":24,"value":1013},"r.",{"type":19,"tag":86,"props":1015,"children":1016},{"style":570},[1017],{"type":24,"value":1018},"setBody",{"type":19,"tag":86,"props":1020,"children":1021},{"style":153},[1022],{"type":24,"value":578},{"type":19,"tag":86,"props":1024,"children":1025},{"style":162},[1026],{"type":24,"value":816},{"type":19,"tag":86,"props":1028,"children":1029},{"style":153},[1030],{"type":24,"value":677},{"type":19,"tag":86,"props":1032,"children":1033},{"style":570},[1034],{"type":24,"value":825},{"type":19,"tag":86,"props":1036,"children":1037},{"style":153},[1038],{"type":24,"value":1039},"({ date: e.date, from: e.from, subject: e.subject, body: e.text }));\n",{"type":19,"tag":20,"props":1041,"children":1042},{},[1043,1045,1051],{"type":24,"value":1044},"This keeps the four fields the Apps Script reads and drops the rest — headers, HTML, auth results — so the row stays clean. Adjust the keys here and the ",{"type":19,"tag":82,"props":1046,"children":1048},{"className":1047},[],[1049],{"type":24,"value":1050},"appendRow([...])",{"type":24,"value":1052}," call together to capture whatever you need.",{"type":19,"tag":64,"props":1054,"children":1056},{"id":1055},"step-5-send-a-test-email",[1057],{"type":24,"value":1058},"Step 5: Send a test email",{"type":19,"tag":20,"props":1060,"children":1061},{},[1062,1064,1070],{"type":24,"value":1063},"Send a message to your ",{"type":19,"tag":82,"props":1065,"children":1067},{"className":1066},[],[1068],{"type":24,"value":1069},"@in.webhookrelay-mail.com",{"type":24,"value":1071}," address. Within a second or two a new row — date, from, subject, body — appears in your sheet. If nothing shows up, open the bucket's request log to see exactly what was received, parsed, and delivered.",{"type":19,"tag":64,"props":1073,"children":1075},{"id":1074},"going-further",[1076],{"type":24,"value":1077},"Going further",{"type":19,"tag":20,"props":1079,"children":1080},{},[1081,1086],{"type":19,"tag":27,"props":1082,"children":1083},{},[1084],{"type":24,"value":1085},"Fan out to other automation.",{"type":24,"value":1087}," If you'd rather not use Apps Script, point the output at any other endpoint that appends rows — a serverless function, an n8n/Make webhook, or your own API. The parsed JSON is the same; only the destination changes.",{"type":19,"tag":20,"props":1089,"children":1090},{},[1091,1096,1098,1104],{"type":19,"tag":27,"props":1092,"children":1093},{},[1094],{"type":24,"value":1095},"Forward only some senders.",{"type":24,"value":1097}," You don't have to log everything. Use ",{"type":19,"tag":38,"props":1099,"children":1101},{"href":1100},"/docs/email/filtering-and-policy",[1102],{"type":24,"value":1103},"input filtering and policy",{"type":24,"value":1105}," to accept mail only from trusted senders or domains and drop the rest before parsing.",{"type":19,"tag":20,"props":1107,"children":1108},{},[1109,1114,1116,1121],{"type":19,"tag":27,"props":1110,"children":1111},{},[1112],{"type":24,"value":1113},"Capture more columns.",{"type":24,"value":1115}," Add fields in both the transform body and the ",{"type":19,"tag":82,"props":1117,"children":1119},{"className":1118},[],[1120],{"type":24,"value":1050},{"type":24,"value":1122}," call — recipient, message IDs, SPF/DKIM/DMARC results — to build a richer log straight from your inbox.",{"type":19,"tag":20,"props":1124,"children":1125},{},[1126,1128,1133],{"type":24,"value":1127},"This is one of Webhook Relay's ",{"type":19,"tag":38,"props":1129,"children":1130},{"href":50},[1131],{"type":24,"value":1132},"Email to Webhook",{"type":24,"value":1134}," recipes: give any inbox a programmable address, parse each message to JSON, and route it anywhere. Google Sheets is just one destination — the same pattern delivers parsed email to a database, a chat channel, or an internal API.",{"type":19,"tag":64,"props":1136,"children":1138},{"id":1137},"get-started",[1139],{"type":24,"value":1140},"Get started",{"type":19,"tag":20,"props":1142,"children":1143},{},[1144,1151],{"type":19,"tag":38,"props":1145,"children":1148},{"href":1146,"rel":1147},"https://my.webhookrelay.com/register",[42],[1149],{"type":24,"value":1150},"Create a free Webhook Relay account",{"type":24,"value":1152},", add an email input to a bucket, and turn your inbox into a spreadsheet in a few minutes.",{"type":19,"tag":1154,"props":1155,"children":1156},"style",{},[1157],{"type":24,"value":1158},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}",{"title":7,"searchDepth":184,"depth":184,"links":1160},[1161,1162,1163,1164,1165,1166,1167,1168],{"id":66,"depth":98,"text":69},{"id":490,"depth":98,"text":493},{"id":526,"depth":98,"text":529},{"id":924,"depth":98,"text":927},{"id":948,"depth":98,"text":951},{"id":1055,"depth":98,"text":1058},{"id":1074,"depth":98,"text":1077},{"id":1137,"depth":98,"text":1140},"markdown","content:docs:tutorials:email:google-sheets.md","content","docs/tutorials/email/google-sheets.md","docs/tutorials/email/google-sheets","md",{"loc":4},[1177,1180,1183,1186,1189,1192,1195,1198],{"_path":1178,"title":1179},"/docs/installation/cli","CLI",{"_path":1181,"title":1182},"/docs/installation/docker","Docker container",{"_path":1184,"title":1185},"/docs/installation/docker-compose","Docker Compose",{"_path":1187,"title":1188},"/docs/installation/kubernetes","Kubernetes",{"_path":1190,"title":1191},"/docs/installation/autostart-windows","Autostart (Windows)",{"_path":1193,"title":1194},"/docs/installation/autostart-linux","Autostart (Linux)",{"_path":1196,"title":1197},"/docs/installation/autostart-macos","Autostart (MacOS)",{"_path":1199,"title":1200},"/docs/installation/behind-proxy","HTTP proxy configuration",[1202],{"_path":1203,"title":1204},"/docs/webhooks/internal/localhost","Receiving webhooks on localhost",[1206,1209],{"_path":1207,"title":1208},"/docs/webhooks/public/public-destination","Forward to public URL",{"_path":1210,"title":1211},"/docs/webhooks/public/multiple-destination-urls","Multiple destinations",[1213,1216,1219,1222],{"_path":1214,"title":1215},"/docs/webhooks/auth/username-password","Username and password",{"_path":1217,"title":1218},"/docs/webhooks/auth/hmac","HMAC",{"_path":1220,"title":1221},"/docs/webhooks/auth/jwt","JWT authentication",{"_path":1223,"title":1224},"/docs/webhooks/auth/http-method","Auth using request method",[1226],{"_path":1227,"title":1228},"/docs/webhooks/cron/using-cron-webhooks","Schedule recurring webhooks",[1230,1233,1236,1239,1242,1245,1248],{"_path":1231,"title":1232},"/docs/service-connections","Service Connections",{"_path":1234,"title":1235},"/docs/service-connections/aws_s3","AWS S3",{"_path":1237,"title":1238},"/docs/service-connections/aws_sns","AWS SNS",{"_path":1240,"title":1241},"/docs/service-connections/aws_sqs","AWS SQS",{"_path":1243,"title":1244},"/docs/service-connections/azure","Azure",{"_path":1246,"title":1247},"/docs/service-connections/gcp_gcs","GCP Cloud Storage",{"_path":1249,"title":1250},"/docs/service-connections/gcp_pubsub","GCP Pub/Sub",[1252,1254,1256],{"_path":112,"title":1253},"Receive emails as webhooks",{"_path":482,"title":1255},"Email webhook payload",{"_path":1100,"title":1257},"Sender filtering & policy",[1259,1262],{"_path":1260,"title":1261},"/docs/tunnels/demoing-your-website","Demoing your website",{"_path":1263,"title":1264},"/docs/tunnels/regions","Regions",[1266,1269,1272,1275],{"_path":1267,"title":1268},"/docs/account/account-management","Account management",{"_path":1270,"title":1271},"/docs/account/mfa","Multi-factor authentication (MFA)",{"_path":1273,"title":1274},"/docs/account/team","Teams and sub-accounts",{"_path":1276,"title":1277},"/docs/account/billing-and-subscriptions","Billing & subscriptions",[1279,1282,1285,1288,1291,1294],{"_path":1280,"title":1281},"/docs/tutorials/cicd/jenkins-bitbucket","Jenkins and Bitbucket",{"_path":1283,"title":1284},"/docs/tutorials/cicd/jenkins-github","Jenkins and GitHub",{"_path":1286,"title":1287},"/docs/tutorials/cicd/jenkins-plugin","Jenkins Plugin",{"_path":1289,"title":1290},"/docs/tutorials/cicd/kubernetes-operator","Kubernetes Operator",{"_path":1292,"title":1293},"/docs/tutorials/cicd/terraform-atlantis","Terraform Atlantis",{"_path":1295,"title":1296},"/docs/tutorials/cicd/webhook-exec","Execute scripts on webhook",[1298,1301,1304,1307,1310,1311,1314,1317],{"_path":1299,"title":1300},"/docs/tutorials/email/airtable","Email to Airtable",{"_path":1302,"title":1303},"/docs/tutorials/email/api","Email to API",{"_path":1305,"title":1306},"/docs/tutorials/email/database","Email to Database",{"_path":1308,"title":1309},"/docs/tutorials/email/discord","Email to Discord",{"_path":4,"title":8},{"_path":1312,"title":1313},"/docs/tutorials/email/microsoft-teams","Email to Microsoft Teams",{"_path":1315,"title":1316},"/docs/tutorials/email/notion","Email to Notion",{"_path":1318,"title":1319},"/docs/tutorials/email/slack","Email to Slack",[1321,1324,1327],{"_path":1322,"title":1323},"/docs/tutorials/edge/home-assistant","Home Assistant",{"_path":1325,"title":1326},"/docs/tutorials/edge/javascript-app","JavaScript app",{"_path":1328,"title":1329},"/docs/tutorials/edge/node-red","Node-RED",[1331],{"_path":1332,"title":1333},"/docs/tutorials/warehouse/bigquery","GCP BigQuery",[1335,1338],{"_path":1336,"title":1337},"/docs/tutorials/transform/docker-to-slack","DockerHub webhook to Slack notification",{"_path":1339,"title":1340},"/docs/tutorials/transform/enrich-webhooks","Enrich webhooks from APIs",[1342,1345,1348,1351,1354,1357,1360,1363,1366,1369,1371,1374],{"_path":1343,"title":1344},"/docs/webhooks/functions/manipulating-json","JSON encoding",{"_path":1346,"title":1347},"/docs/webhooks/functions/make-http-request","Make HTTP request",{"_path":1349,"title":1350},"/docs/webhooks/functions/modify-request","Read, write request data",{"_path":1352,"title":1353},"/docs/webhooks/functions/multipart-form-data","Multipart form to JSON",{"_path":1355,"title":1356},"/docs/webhooks/functions/url-encoded-data","URL Encoded Form",{"_path":1358,"title":1359},"/docs/webhooks/functions/working-with-time","Working with time",{"_path":1361,"title":1362},"/docs/webhooks/functions/send-emails","Sending emails",{"_path":1364,"title":1365},"/docs/webhooks/functions/crypto-functions","Base64, encryption",{"_path":1367,"title":1368},"/docs/webhooks/functions/integrate-into-cicd","Integrating into CI/CD",{"_path":1370,"title":1333},"/docs/webhooks/functions/big-query",{"_path":1372,"title":1373},"/docs/webhooks/functions/accessing-metadata","Accessing metadata",{"_path":128,"title":1375},"Functions",1782718126010]