12 workflows. Each one: what it does → tools → setup → the exact thing to paste. Free to use, commercial OK.
Free either way. No login, no email required.
Turns any Google Form (or Typeform/Tally) submission into a WhatsApp/Slack message within seconds, so leads never sit unread.
Google Forms + Google Apps Script (free) or Make/Zapier free tier.
function onFormSubmit(e){ // add as an installable trigger
var r = e.namedValues;
var msg = "New lead: " + r['Name'] + " | " + r['Phone'] + " | " + r['Requirement'];
UrlFetchApp.fetch("https://api.callmebot.com/whatsapp.php?phone=YOURNUM&text="
+ encodeURIComponent(msg) + "&apikey=YOUR_KEY");
}
HTML version of a free form instead? Use FormData POST to an Apps Script Web App URL and skip the Sheets step.
Rips invoices, orders and enquiries out of your inbox into a spreadsheet, then emails you one summary at 9am.
Apps Script (GmailApp + SheetsApp).
function digest(){
var sh = SpreadsheetApp.getActive().getSheetByName('log');
var q = 'is:unread newer_than:1d (invoice OR order OR enquiry)';
GmailApp.search(q, 0, 50).forEach(function(t){
var m = t.getMessages()[0];
sh.appendRow([new Date(), m.getFrom(), m.getSubject()]);
});
var last = sh.getRange(Math.max(1,sh.getLastRow()-9),1,10,3).getValues();
MailApp.sendEmail('you@example.com','Daily digest', JSON.stringify(last,null,1));
}
Generates a numbered invoice PDF from a sheet row and emails it. Then nudges the client on day 3, 7 and 14 until paid.
Google Sheets + Apps Script → DriveApp + MailApp.
client, email, amount, due, status, invoiceNostatus = DRAFT → render a Doc template via copyTemplate(), replaceText(), export application/pdf, email it, set status = SENT.People DM you "price?" — this logs the handle, the keyword and a follow-up task automatically, so nothing is lost in DMs.
Meta Business Suite auto-reply + Make/Zapier "Instagram for Business" module → Sheets/Notion/CRM.
Cheap hack: a ManyChat free flow that asks 2 questions and pushes the answers to a webhook which appends a Sheet row. Zero code.
Zips a project folder (or exports DB dumps) nightly and keeps only the last 14 copies.
# Windows Task Scheduler → daily 02:00 $src = "C:\work\project"; $dst = "D:\backups\project-" + (Get-Date -f yyyy-MM-dd) Compress-Archive -Path $src\* -DestinationPath "$dst.zip" Get-ChildItem D:\backups\*.zip | Sort LastWriteTime -desc | Select -Skip 14 | Remove-Item
Uses a Google Doc as the template so output is branded, not a raw sheet dump.
var doc = DriveApp.getFileById(TEMPLATE_ID).makeCopy('inv-'+no);
var body = DocumentApp.openById(doc.getId()).getBody();
body.replaceText('{{client}}', client).replaceText('{{amount}}', amount);
doc.setSharing(DriveApp.Access.ANYONE_WITH_LINK, DriveApp.Permission.VIEW);
GmailApp.sendEmail(clientEmail, 'Invoice '+no,
'Hi, invoice attached: '+doc.getUrl(),
{attachments:[doc.getAs('application/pdf')]});
You write email 1. This sends follow-ups on day 2, 5 and 9, stops the moment they reply, and logs opens/replies to a sheet.
Apps Script + Gmail (no paid tool needed).
function followUps(){
var sh = SpreadsheetApp.getActive().getSheetByName('leads');
sh.getDataRange().getValues().slice(1).forEach(function(row,i){
var [email, step, sentAt, replied] = row;
if (replied || !email) return;
var wait = [0,2,5,9][step] || 99;
if ((Date.now() - new Date(sentAt)) / 864e5 < wait) return;
if (GmailApp.search('from:'+email, 0, 1).length > 1){ sh.getRange(i+2,4).setValue('YES'); return; }
GmailApp.sendEmail(email, subjects[step], bodies[step]);
sh.getRange(i+2,2).setValue(+step + 1);
sh.getRange(i+2,3).setValue(new Date());
});
}
Keep it to 50/day from a real Gmail or you'll get rate-limited. Personalise line 1 — it doubles replies.
Checks a competitor's price/spec page daily and pings you only when it changes.
import hashlib, requests, json, pathlib
url = "https://competitor.com/pricing"
html = requests.get(url, headers={"User-Agent":"Mozilla/5.0"}, timeout=30).text
h = hashlib.sha256(html.encode()).hexdigest()
f = pathlib.Path("last.txt")
if f.exists() and f.read_text() != h:
print("CHANGED:", url) # hook this to email/WhatsApp
f.write_text(h)
Reads tomorrow's bookings from a sheet/calendar and messages each client a reminder 24h and 2h before.
Google Calendar → Apps Script CalendarApp.getDefaultCalendar().getEventsForDay(next) → send via CallMeBot/Twilio/MSG91. Mark a reminded column so nobody is messaged twice.
Forward a photo of a bill to yourself; the amount, date and vendor land in your expense sheet.
Drive folder → Apps Script on new file → Google Cloud Vision (or Drive.Files.get OCR) → parse ₹/total regex → append row. Or Make.com's "Google Vision" module, no code.
// GitHub Actions: .github/workflows/watch.yml (free, runs cloud-side)
on: { schedule: [{ cron: '*/15 * * * *' }] }
jobs: { ping: { runs-on: ubuntu-latest, steps: [
{ uses: actions/checkout@v4 },
{ run: node watch.js } ] } }
watch.js: fetch the URL, check status 200 + a text marker, exit non-zero to make Actions email you on failure. Free forever for public repos.
Every Monday 8am, pulls last week's numbers from a sheet + an API and emails a formatted HTML report to you and your client.
function weekly(){
var sh = SpreadsheetApp.getActive().getSheetByName('metrics');
var rows = sh.getDataRange().getValues().slice(-7);
var html = '<h2>Last 7 days</h2><table>' + rows.map(function(r){
return '<tr>' + r.map(function(c){return '<td>'+c+'</td>';}).join('') + '</tr>';
}).join('') + '</table>';
MailApp.sendEmail({to:'you@example.com,client@example.com',
subject:'Weekly report', htmlBody:html});
}
Every automation above is trigger + transform + destination. Once you see it that way, you stop needing tutorials. The money isn't in the code — it's in being the person who sets it up so a small business never has to think about it again.
Want these connected to your tools and actually tested? Reply to the email you got this from.