Skip to content

Every 10 minutes

Require two approvals for Airtable change requests

Each new change request in Airtable is emailed to two approvers, and the change is applied only after both say yes.

Runs
Every 10 minutes
Apps
Airtable, Gmail
AI
Not needed
Access
Airtable read+write; Gmail gmail.send

Send this to your assistant

Create a ClickRuntime automation: when a change request is added in Airtable, email two approvers approve/reject links and apply it once both approve.

Paste it into your assistant. It tells you what it will send or change before it runs live.

First time? Adding ClickRuntime to your assistant takes about two minutes.

Why use it

Why teams use this automation

A finance team keeps supplier bank details and price lists in Airtable. Anyone can request a change, but a wrong bank account number or a mistyped price can cost real money. Their policy says two people must approve every change, which in practice means chasing colleagues on chat and hoping someone remembered to check.

This automation enforces the four-eyes rule for them. Each request goes to two approvers by email, and nothing changes in Airtable until both have approved it.

What you get out of it

  • Mistakes are caught before they cost money

    A second pair of eyes on bank details and prices stops typos and fraudulent requests from going live.

  • Approvals without logging in

    Approvers click approve or reject in an email, so they can respond from their phone in seconds.

  • A clear audit trail

    Each request records who approved or rejected it and when, which is what auditors and accountants want to see.

  • Changes apply on their own

    Once both approvals are in, the change is made in Airtable straight away, with no one needing to remember to do it.

How it works

What happens, step by step

  1. Every few minutes ClickRuntime checks your Airtable change requests table for new requests.

  2. It skips any request it has already sent for approval.

  3. It emails both approvers from your Gmail with an approve and a reject link.

  4. Each click is recorded on the request in Airtable.

  5. Once both have approved, it applies the change to the target record and marks the request Applied.

Before it runs live

  • Connect Airtable
  • Connect Google through your own Google app (a one-time, 10-minute setup), so it works with your own Gmail

What you get

RunsEvery 10 minutes
Require two approvals for Airtable change requeststoday, 9:00Succeeded
Email · Approval requestApprove change: update bank details for Northwind Supplies (requested by Acme finance desk)

Build your own

Need it to work differently?

This template is a starting point. Copy the prompt and change it, or describe a different automation from scratch, with your own conditions, more apps or an AI step. Your assistant writes it, tests it and runs it on ClickRuntime.
  • Your own rules

    Conditions, thresholds, filters and exceptions, written the way you'd explain them to a colleague.

  • Any number of apps

    One automation can read from one app and update several others. Over 248 apps are ready, and anything with an API works too.

  • AI where it helps

    Summaries, classification, extraction and drafts use ClickRuntime's built-in AI, with no extra key.

  • On a schedule or on each event

    Runs as often as every 5 minutes, or the moment an app sends an event, and keeps track of what it already handled.

Changes you can ask for

  • Act only on the items that match your own rules, and skip the rest
  • Add an AI step, for example to summarize, sort or draft a reply
  • Add another app, for example also send it to Slack
  • Combine it with other Airtable and Gmail steps into one automation

Under the hood

The code that runs this automation

This is the Python script that runs each time the automation starts. Your AI assistant writes it for you when you send the prompt, and you allow each step in your assistant. To change how the automation works, describe the change to your assistant and it updates the script for you. For every function it can use, see the script reference.
two_person_email_approval_for_airtable_changes.pyexample
from google.oauth2.credentials import Credentials
from googleapiclient.discovery import build
import base64, hashlib, hmac
from email.mime.text import MIMEText
from clickruntime import on_trigger, on_event, credentials, http, report_fetched

BASE = "https://api.airtable.com/v0/your-base-id"
APPROVERS = ["finance.lead@example.com", "ops.lead@example.com"]
LINK = "https://your-trigger-link"

def send(gmail, to, subject, text, thread=None):
    msg = MIMEText(text)
    msg["to"], msg["subject"] = to, subject
    body = {"raw": base64.urlsafe_b64encode(msg.as_bytes()).decode()}
    if thread:
        body["threadId"] = thread
    gmail.users().messages().send(userId="me", body=body).execute()

def sig(rid, who, vote):
    return hmac.new(credentials.secret("APPROVAL_SIGNING_KEY").encode(), f"{rid}|{who}|{vote}".encode(), hashlib.sha256).hexdigest()

@on_trigger
def run(event):
    h = {"Authorization": f"Bearer {credentials.secret('AIRTABLE_API_KEY')}"}
    reqs = http.get(f"{BASE}/Requests", headers=h, params={"filterByFormula": "{Status}='New'"}).json()["records"]
    report_fetched(len(reqs))
    if not reqs:
        return {"new": 0}
    gmail = build("gmail", "v1", credentials=Credentials(credentials.connection("google", "work")), cache_discovery=False)
    for r in reqs:
        for who in APPROVERS:
            links = "\n".join(f"{v}: {LINK}?id={r['id']}&who={who}&vote={v}&sig={sig(r['id'], who, v)}" for v in ("approve", "reject"))
            send(gmail, who, f"Approve change: {r['fields']['Summary']}", links)
        http.patch(f"{BASE}/Requests/{r['id']}", headers=h, json={"fields": {"Status": "Pending"}})
    return {"sent": len(reqs)}

FAQ

Common questions

What happens if one approver rejects?
The request is marked Rejected and nothing is changed. The person who asked can see the decision in Airtable.
Can the person requesting the change approve it?
No. Approvers are fixed people you choose, and a requester can be excluded from approving their own request.
Can the approval links be forged or reused?
Each link is signed and tied to one request and one approver, so it cannot be altered or used for another change.
What permissions does it need?
Airtable read+write; Gmail gmail.send. Nothing else in your accounts is used.
Does it need AI?
No. It runs without AI, so it doesn't use your plan's AI allowance.
How many runs does it use?
One run each time it checks. Checks that find nothing new and stop right away aren't counted.
Can I change how it works?
Yes. Describe the change to your AI assistant, for example a different schedule, channel or filter. It updates the automation, tests it and tells you what changed.

Set up “Require two approvals for Airtable change requests” from your assistant

Copy the prompt above, or connect your assistant first. Free plan, no credit card.