[{"data":1,"prerenderedAt":196},["ShallowReactive",2],{"pseo:platforms:google-sheets":3,"highlight:platform:google-sheets":182},{"auth_method":4,"ban_risk":5,"capabilities":6,"example_flows":73,"faqs":121,"http_module":131,"name":134,"official_connector_note":135,"recipes":136,"related":140,"seo":155,"setup_steps":169,"setup_time":175,"slug":176,"tier":177,"type":178,"updated":167,"url":163,"webhook_trigger":179},"Token stored in Script Properties and read into the Authorization header","high",[7,16,22,27,32,38,43,49,56,62,67],{"availability":8,"category":9,"cloud_api_status":10,"in_flows":11,"name":12,"slug":13,"summary":14,"url":15},"ga","groups","forbidden",false,"Create Group","create-group","Open a WhatsApp group from your own backend.","\u002Fwhatsapp-api\u002Fcreate-group\u002F",{"availability":8,"category":9,"cloud_api_status":10,"in_flows":17,"name":18,"slug":19,"summary":20,"url":21},true,"Group Participants","group-participants","Add, remove and list members of a WhatsApp group.","\u002Fwhatsapp-api\u002Fgroup-participants\u002F",{"availability":8,"category":9,"cloud_api_status":10,"in_flows":11,"name":23,"slug":24,"summary":25,"url":26},"Group Invite Link","group-invite-link","Read, revoke and resolve group invite links.","\u002Fwhatsapp-api\u002Fgroup-invite-link\u002F",{"availability":8,"category":9,"cloud_api_status":10,"in_flows":17,"name":28,"slug":29,"summary":30,"url":31},"Send Group Message","send-group-message","Send text, media and polls into a WhatsApp group.","\u002Fwhatsapp-api\u002Fsend-group-message\u002F",{"availability":8,"category":33,"cloud_api_status":10,"in_flows":11,"name":34,"slug":35,"summary":36,"url":37},"channels","Create Channel","create-channel","Create and manage a WhatsApp Channel.","\u002Fwhatsapp-api\u002Fcreate-channel\u002F",{"availability":8,"category":33,"cloud_api_status":10,"in_flows":17,"name":39,"slug":40,"summary":41,"url":42},"Post to Channel","post-to-channel","Publish text and media to a WhatsApp Channel.","\u002Fwhatsapp-api\u002Fpost-to-channel\u002F",{"availability":8,"category":44,"cloud_api_status":10,"in_flows":11,"name":45,"slug":46,"summary":47,"url":48},"status","Post Status","post-status","Post text, image and video status updates.","\u002Fwhatsapp-api\u002Fpost-status\u002F",{"availability":8,"category":50,"cloud_api_status":51,"in_flows":17,"name":52,"slug":53,"summary":54,"url":55},"messaging","restricted","Send Without Template","send-message-without-template","Send any message with no template approval.","\u002Fwhatsapp-api\u002Fsend-message-without-template\u002F",{"availability":8,"category":57,"cloud_api_status":51,"in_flows":17,"name":58,"slug":59,"summary":60,"url":61},"contacts","Check Number","check-number","Check whether a phone number is on WhatsApp.","\u002Fwhatsapp-api\u002Fcheck-number\u002F",{"availability":8,"category":57,"cloud_api_status":51,"in_flows":11,"name":63,"slug":64,"summary":65,"url":66},"LID to Phone","lid-to-phone","Map a WhatsApp LID to a phone number.","\u002Fwhatsapp-api\u002Flid-to-phone\u002F",{"availability":8,"category":68,"cloud_api_status":51,"in_flows":11,"name":69,"slug":70,"summary":71,"url":72},"account","Connect a Number","connect-number-qr-pairing","Link any WhatsApp number by code or QR.","\u002Fwhatsapp-api\u002Fconnect-number-qr-pairing\u002F",[74,86,96,108],{"body":75,"curl":76,"operation":79,"title":85},"A sheet holds numbers and a status column. A batched trigger reads the unprocessed rows, posts them to the group's participants endpoint, and writes back whether each person was added or merely invited.",{"code":77,"lang":78},"curl --request POST \\\n  --url https:\u002F\u002Fapi.wapito.com\u002Fv1\u002Fgroups\u002F120363041234567890@g.us\u002Fparticipants \\\n  --header 'Authorization: Bearer wpt_YOUR_TOKEN' \\\n  --header 'Content-Type: application\u002Fjson' \\\n  --data '{\"participants\":[\"+15551234567\",\"+15559876543\"]}'","bash",{"availability":8,"ban_risk":5,"method":80,"operationId":81,"path":82,"summary":83,"tag":9,"url":84},"POST","addGroupParticipants","\u002Fgroups\u002F{id}\u002Fparticipants","Add participants to a group","\u002Fdocs\u002Fapi\u002Fgroups\u002Fadd-group-participants\u002F","Add a row of customers to a group",{"body":87,"curl":88,"operation":90,"title":95},"A menu item runs a check over the selected range in small batches and writes yes or no into the next column with the date. The date is what stops the next run from re-checking numbers that were answered last month.",{"code":89,"lang":78},"curl --request POST \\\n  --url https:\u002F\u002Fapi.wapito.com\u002Fv1\u002Fcontacts\u002Fcheck \\\n  --header 'Authorization: Bearer wpt_YOUR_TOKEN' \\\n  --header 'Content-Type: application\u002Fjson' \\\n  --data '{\"phones\":[\"+15551234567\",\"+15559876543\",\"+15550000000\"]}'",{"availability":8,"ban_risk":5,"method":80,"operationId":91,"path":92,"summary":93,"tag":57,"url":94},"checkContacts","\u002Fcontacts\u002Fcheck","Check numbers for WhatsApp registration","\u002Fdocs\u002Fapi\u002Fcontacts\u002Fcheck-contacts\u002F","Check a column of numbers",{"body":97,"curl":98,"operation":100,"title":107},"A template in a named cell is merged with each row's fields and sent one row at a time, with a pause between sends. The message id and status are written back so a failed row can be retried without touching the rest.",{"code":99,"lang":78},"curl --request POST \\\n  --url https:\u002F\u002Fapi.wapito.com\u002Fv1\u002Fmessages\u002Ftext \\\n  --header 'Authorization: Bearer wpt_YOUR_TOKEN' \\\n  --header 'Content-Type: application\u002Fjson' \\\n  --data '{\"to\":\"+15551234567\",\"body\":\"Your order #4182 has shipped. Track it here: https:\u002F\u002Facme.example\u002Ft\u002F4182\",\"typing_time\":3}'",{"availability":8,"ban_risk":101,"method":80,"operationId":102,"path":103,"summary":104,"tag":105,"url":106},"medium","sendText","\u002Fmessages\u002Ftext","Send a text message","messages","\u002Fdocs\u002Fapi\u002Fmessages\u002Fsend-text\u002F","Send a personalised message per row",{"body":109,"curl":110,"operation":112,"title":120},"The doPost web app appends each inbound message event as a row, keyed on the chat id, so the same sheet that sent the campaign shows who replied without anyone exporting anything.",{"code":111,"lang":78},"curl --request GET \\\n  --url 'https:\u002F\u002Fapi.wapito.com\u002Fv1\u002Fmessages\u002Flist\u002F15551234567@s.whatsapp.net?count=50&offset=0&from_me=true&time_from=1789372800000&time_to=1789459200000' \\\n  --header 'Authorization: Bearer wpt_YOUR_TOKEN'",{"availability":113,"ban_risk":114,"method":115,"operationId":116,"path":117,"summary":118,"tag":105,"url":119},"beta","low","GET","listMessages","\u002Fmessages\u002Flist\u002F{chat_id}","List messages in a chat","\u002Fdocs\u002Fapi\u002Fmessages\u002Flist-messages\u002F","Log inbound replies into the sheet",[122,125,128],{"a":123,"q":124},"You can. Scripts have daily limits on outbound calls and a six-minute ceiling per execution, so a sheet with thousands of rows must be processed in batches with a status column that records progress. That design is also better for your number, because it paces the sending.","Will I hit Apps Script quotas?",{"a":126,"q":127},"Not in the code itself - anyone with edit access to the sheet can read it. Put it in Script Properties, which are tied to the script project rather than to the document, and remember that anyone who can edit the script can still run it, so control sharing accordingly.","Is it safe to keep the token in the script?",{"a":129,"q":130},"Yes, by deploying a second script as a web app and registering its URL with Wapito. Apps Script web apps do not give you the raw request body in a form that makes signature verification straightforward, so treat the URL itself as a secret and keep it out of shared documents.","Can the sheet receive messages as well as send them?",{"docs_url":132,"name":133},"https:\u002F\u002Fdevelopers.google.com\u002Fapps-script\u002Freference\u002Furl-fetch\u002Furl-fetch-app","Apps Script UrlFetchApp.fetch()","Google Sheets","Google publishes no WhatsApp connector of any kind, official or otherwise, so every Sheets integration is somebody's Apps Script or a third-party add-on. Wapito is reached with a plain HTTPS call, which means there is no add-on to install and no extra party holding your data.",[137],{"feature":13,"title":138,"url":139},"Create a WhatsApp group from a Google Sheets row","\u002Fintegrations\u002Fgoogle-sheets\u002Fcreate-group\u002F",{"hub":141,"pillars":142,"siblings":151},"\u002Fintegrations\u002F",[143,144,145,148,149,150],{"title":18,"url":21},{"title":28,"url":31},{"title":146,"url":147},"Group Events","\u002Fwhatsapp-api\u002Fgroup-events\u002F",{"title":39,"url":42},{"title":58,"url":61},{"title":52,"url":55},[152],{"title":153,"url":154},"Airtable","\u002Fintegrations\u002Fairtable\u002F",{"breadcrumb":156,"canonical":164,"description":165,"h1":166,"lastmod":167,"title":168},[157,160,162],{"name":158,"url":159},"Home","\u002F",{"name":161,"url":141},"Integrations",{"name":134,"url":163},"\u002Fintegrations\u002Fgoogle-sheets\u002F","https:\u002F\u002Fwapito.com\u002Fintegrations\u002Fgoogle-sheets\u002F","Connect WhatsApp to Google Sheets with the Apps Script UrlFetchApp.fetch() and the Apps Script web app doPost(e). Set up in about 20 minutes.","Integrate WhatsApp with Google Sheets","2026-09-15","WhatsApp Google Sheets Integration | Wapito",[170,171,172,173,174],"Open Extensions then Apps Script from the sheet, and put your channel token in Script Properties rather than in the code, so a shared sheet never exposes it.","Write a send function that reads a row, builds the JSON body, and calls UrlFetchApp.fetch with the Authorization header and muteHttpExceptions set to true so you can read error bodies.","Write the result and the timestamp back into the row, so a re-run skips everything already sent instead of messaging people twice.","Add a time-driven trigger that processes a small batch per run rather than the whole sheet, which keeps you inside both the script execution limit and a sane sending pace.","For inbound events, deploy a second script as a web app with doPost, set access to anyone, and register that URL in Wapito.","20 minutes","google-sheets","t3a","data",{"docs_url":180,"name":181},"https:\u002F\u002Fdevelopers.google.com\u002Fapps-script\u002Fguides\u002Fweb","Apps Script web app doPost(e)",[183,187,190,193],{"label":184,"id":185,"lang":78,"code":77,"html":186},"curl","flow-0","\u003Cpre class=\"shiki shiki-themes github-light-default github-dark-default\" style=\"background-color:#ffffff;--shiki-dark-bg:#0d1117;color:#1f2328;--shiki-dark:#e6edf3\" tabindex=\"0\">\u003Ccode>\u003Cspan class=\"line\">\u003Cspan style=\"color:#953800;--shiki-dark:#FFA657\">curl\u003C\u002Fspan>\u003Cspan style=\"color:#0550AE;--shiki-dark:#79C0FF\"> --request\u003C\u002Fspan>\u003Cspan style=\"color:#0A3069;--shiki-dark:#A5D6FF\"> POST\u003C\u002Fspan>\u003Cspan style=\"color:#CF222E;--shiki-dark:#FF7B72\"> \\\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#0550AE;--shiki-dark:#79C0FF\">  --url\u003C\u002Fspan>\u003Cspan style=\"color:#0A3069;--shiki-dark:#A5D6FF\"> https:\u002F\u002Fapi.wapito.com\u002Fv1\u002Fgroups\u002F120363041234567890@g.us\u002Fparticipants\u003C\u002Fspan>\u003Cspan style=\"color:#CF222E;--shiki-dark:#FF7B72\"> \\\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#0550AE;--shiki-dark:#79C0FF\">  --header\u003C\u002Fspan>\u003Cspan style=\"color:#0A3069;--shiki-dark:#A5D6FF\"> 'Authorization: Bearer wpt_YOUR_TOKEN'\u003C\u002Fspan>\u003Cspan style=\"color:#CF222E;--shiki-dark:#FF7B72\"> \\\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#0550AE;--shiki-dark:#79C0FF\">  --header\u003C\u002Fspan>\u003Cspan style=\"color:#0A3069;--shiki-dark:#A5D6FF\"> 'Content-Type: application\u002Fjson'\u003C\u002Fspan>\u003Cspan style=\"color:#CF222E;--shiki-dark:#FF7B72\"> \\\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#0550AE;--shiki-dark:#79C0FF\">  --data\u003C\u002Fspan>\u003Cspan style=\"color:#0A3069;--shiki-dark:#A5D6FF\"> '{\"participants\":[\"+15551234567\",\"+15559876543\"]}'\u003C\u002Fspan>\u003C\u002Fspan>\u003C\u002Fcode>\u003C\u002Fpre>",{"label":184,"id":188,"lang":78,"code":89,"html":189},"flow-1","\u003Cpre class=\"shiki shiki-themes github-light-default github-dark-default\" style=\"background-color:#ffffff;--shiki-dark-bg:#0d1117;color:#1f2328;--shiki-dark:#e6edf3\" tabindex=\"0\">\u003Ccode>\u003Cspan class=\"line\">\u003Cspan style=\"color:#953800;--shiki-dark:#FFA657\">curl\u003C\u002Fspan>\u003Cspan style=\"color:#0550AE;--shiki-dark:#79C0FF\"> --request\u003C\u002Fspan>\u003Cspan style=\"color:#0A3069;--shiki-dark:#A5D6FF\"> POST\u003C\u002Fspan>\u003Cspan style=\"color:#CF222E;--shiki-dark:#FF7B72\"> \\\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#0550AE;--shiki-dark:#79C0FF\">  --url\u003C\u002Fspan>\u003Cspan style=\"color:#0A3069;--shiki-dark:#A5D6FF\"> https:\u002F\u002Fapi.wapito.com\u002Fv1\u002Fcontacts\u002Fcheck\u003C\u002Fspan>\u003Cspan style=\"color:#CF222E;--shiki-dark:#FF7B72\"> \\\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#0550AE;--shiki-dark:#79C0FF\">  --header\u003C\u002Fspan>\u003Cspan style=\"color:#0A3069;--shiki-dark:#A5D6FF\"> 'Authorization: Bearer wpt_YOUR_TOKEN'\u003C\u002Fspan>\u003Cspan style=\"color:#CF222E;--shiki-dark:#FF7B72\"> \\\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#0550AE;--shiki-dark:#79C0FF\">  --header\u003C\u002Fspan>\u003Cspan style=\"color:#0A3069;--shiki-dark:#A5D6FF\"> 'Content-Type: application\u002Fjson'\u003C\u002Fspan>\u003Cspan style=\"color:#CF222E;--shiki-dark:#FF7B72\"> \\\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#0550AE;--shiki-dark:#79C0FF\">  --data\u003C\u002Fspan>\u003Cspan style=\"color:#0A3069;--shiki-dark:#A5D6FF\"> '{\"phones\":[\"+15551234567\",\"+15559876543\",\"+15550000000\"]}'\u003C\u002Fspan>\u003C\u002Fspan>\u003C\u002Fcode>\u003C\u002Fpre>",{"label":184,"id":191,"lang":78,"code":99,"html":192},"flow-2","\u003Cpre class=\"shiki shiki-themes github-light-default github-dark-default\" style=\"background-color:#ffffff;--shiki-dark-bg:#0d1117;color:#1f2328;--shiki-dark:#e6edf3\" tabindex=\"0\">\u003Ccode>\u003Cspan class=\"line\">\u003Cspan style=\"color:#953800;--shiki-dark:#FFA657\">curl\u003C\u002Fspan>\u003Cspan style=\"color:#0550AE;--shiki-dark:#79C0FF\"> --request\u003C\u002Fspan>\u003Cspan style=\"color:#0A3069;--shiki-dark:#A5D6FF\"> POST\u003C\u002Fspan>\u003Cspan style=\"color:#CF222E;--shiki-dark:#FF7B72\"> \\\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#0550AE;--shiki-dark:#79C0FF\">  --url\u003C\u002Fspan>\u003Cspan style=\"color:#0A3069;--shiki-dark:#A5D6FF\"> https:\u002F\u002Fapi.wapito.com\u002Fv1\u002Fmessages\u002Ftext\u003C\u002Fspan>\u003Cspan style=\"color:#CF222E;--shiki-dark:#FF7B72\"> \\\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#0550AE;--shiki-dark:#79C0FF\">  --header\u003C\u002Fspan>\u003Cspan style=\"color:#0A3069;--shiki-dark:#A5D6FF\"> 'Authorization: Bearer wpt_YOUR_TOKEN'\u003C\u002Fspan>\u003Cspan style=\"color:#CF222E;--shiki-dark:#FF7B72\"> \\\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#0550AE;--shiki-dark:#79C0FF\">  --header\u003C\u002Fspan>\u003Cspan style=\"color:#0A3069;--shiki-dark:#A5D6FF\"> 'Content-Type: application\u002Fjson'\u003C\u002Fspan>\u003Cspan style=\"color:#CF222E;--shiki-dark:#FF7B72\"> \\\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#0550AE;--shiki-dark:#79C0FF\">  --data\u003C\u002Fspan>\u003Cspan style=\"color:#0A3069;--shiki-dark:#A5D6FF\"> '{\"to\":\"+15551234567\",\"body\":\"Your order #4182 has shipped. Track it here: https:\u002F\u002Facme.example\u002Ft\u002F4182\",\"typing_time\":3}'\u003C\u002Fspan>\u003C\u002Fspan>\u003C\u002Fcode>\u003C\u002Fpre>",{"label":184,"id":194,"lang":78,"code":111,"html":195},"flow-3","\u003Cpre class=\"shiki shiki-themes github-light-default github-dark-default\" style=\"background-color:#ffffff;--shiki-dark-bg:#0d1117;color:#1f2328;--shiki-dark:#e6edf3\" tabindex=\"0\">\u003Ccode>\u003Cspan class=\"line\">\u003Cspan style=\"color:#953800;--shiki-dark:#FFA657\">curl\u003C\u002Fspan>\u003Cspan style=\"color:#0550AE;--shiki-dark:#79C0FF\"> --request\u003C\u002Fspan>\u003Cspan style=\"color:#0A3069;--shiki-dark:#A5D6FF\"> GET\u003C\u002Fspan>\u003Cspan style=\"color:#CF222E;--shiki-dark:#FF7B72\"> \\\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#0550AE;--shiki-dark:#79C0FF\">  --url\u003C\u002Fspan>\u003Cspan style=\"color:#0A3069;--shiki-dark:#A5D6FF\"> 'https:\u002F\u002Fapi.wapito.com\u002Fv1\u002Fmessages\u002Flist\u002F15551234567@s.whatsapp.net?count=50&#x26;offset=0&#x26;from_me=true&#x26;time_from=1789372800000&#x26;time_to=1789459200000'\u003C\u002Fspan>\u003Cspan style=\"color:#CF222E;--shiki-dark:#FF7B72\"> \\\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#0550AE;--shiki-dark:#79C0FF\">  --header\u003C\u002Fspan>\u003Cspan style=\"color:#0A3069;--shiki-dark:#A5D6FF\"> 'Authorization: Bearer wpt_YOUR_TOKEN'\u003C\u002Fspan>\u003C\u002Fspan>\u003C\u002Fcode>\u003C\u002Fpre>",1790464904098]