Fax From Google Sheets — Using Apps Script and Our API
A spreadsheet is a natural place to keep a list of recipients and documents, and Google Sheets ships Apps Script, which can call any web API. So you can fax a row straight from a sheet — no add-on from us, and we do not publish one on the Google Workspace Marketplace. You write a short Apps Script function that reads a row's fax number and document link and posts them to our REST API, then trigger it from a menu, a button, or a time-based run.
Plan requirement
This relies on our REST API, part of the Business ($79.99/mo) and Enterprise ($169.99/mo) plans; requests from a key on a lower plan return a 403. Apps Script itself is free with a Google account. Keep the bearer key in Script Properties rather than hard-coded in a cell, and limit who can edit the script.
How it works
In the sheet's Apps Script editor you write a function that walks the rows, reads the recipient number and a document URL from each, and uses UrlFetchApp to POST to /v1/faxes with your key in the Authorization header. Store the key in Script Properties so it never sits in a visible cell. You can bind the function to a custom menu for on-demand sends, to a drawing used as a button, or to a time-driven trigger that sweeps new rows on a schedule. The function writes the returned fax id and a timestamp back into the row so the sheet doubles as a send log, and it skips any row that already has an id.
What you can do
- ✓Fax any row by reading its recipient number and a document link from the sheet
- ✓Call /v1/faxes with UrlFetchApp — no server beyond Apps Script itself
- ✓Run sends from a custom menu, an in-sheet button, or a time-based trigger
- ✓Write the fax id and sent-time back into the row as a built-in log
- ✓Skip already-sent rows so a repeated run never refaxes them
- ✓Keep the key in Script Properties instead of a visible cell
Setup steps
- 1Put the account on Business or Enterprise and create a key at /dashboard/developers
- 2Open Extensions to Apps Script and store the key in Script Properties
- 3Write a function that reads each row's number and document URL
- 4POST to /v1/faxes with UrlFetchApp and the Authorization header
- 5Write the returned fax id and timestamp back into the row
- 6Bind the function to a menu, a button, or a scheduled trigger
Example
// Google Apps Script bound to the sheet
function faxRow(number, docUrl) {
const key = PropertiesService.getScriptProperties().getProperty("SFM_KEY");
const res = UrlFetchApp.fetch("https://www.sendfaxmail.com/v1/faxes", {
method: "post",
contentType: "application/json",
headers: { Authorization: "Bearer " + key },
payload: JSON.stringify({ to: number, document_url: docUrl }),
});
return JSON.parse(res.getContentText()).id;
}Google Sheets Fax — FAQ
No add-on from us is listed, and we would not hint that one is. Apps Script can already reach external APIs with UrlFetchApp, so a few lines bound to your sheet are the entire integration. You are calling our REST API directly from the spreadsheet, not installing a packaged Workspace app.
In Script Properties, not in a cell or a shared tab. Anything typed into the grid is visible to every collaborator and can leak through exports; Script Properties keep the key out of the data. Give the key only the faxes:send scope and rotate it at /dashboard/developers when editors change.
Yes. Add a time-driven trigger in Apps Script that runs your function every hour or every morning, scanning for rows marked ready and without a fax id yet. Each qualifying row gets posted to /v1/faxes, and the id written back into the row prevents the next run from sending it again.
A URL our server can fetch — a published PDF, a signed cloud link, or any public HTTPS file. Put it in document_url and the fetch happens behind an SSRF guard. If a document must stay private, fetch its bytes inside the script and send them inline as base64 instead of a link.
Build with the Google Sheets Fax
API access and webhooks are included on the Business and Enterprise plans. Create a key at /dashboard/developers and start sending.
7-day free trial · No credit card required