Setup
SmartStamp has no formulas to write. You open the settings panel from
the add-on menu, describe once which cells to watch and what to stamp,
and it runs by itself from then on. Everything you configure is saved
per spreadsheet.
The Configure tab — every field below is explained on this page.
Configure
Where you build a watched range: pick the sheet(s), mark the rows and
the column to watch, then say what to stamp and where. The − and +
buttons at the bottom remove or add a range, so one spreadsheet can
have several independent rules — each with its own conditions and
options.
💡 A range only starts working once you save it. Ranges are numbered
(Range 1, Range 2, …) and are evaluated
independently, so two ranges can watch the same sheet with different
conditions.
Saved settings
Lists every range saved for this spreadsheet. Use
Edit to change one, or Delete to
remove it. At the bottom, Delete all ranges clears
them all at once after a confirmation.
💡 Deleting a range only removes the rule. Timestamps and values
already written into cells stay exactly where they are — SmartStamp
never cleans up after itself retroactively.
Account & Support
Shows your current plan and trial status. From here you open
Manage subscription (Stripe's self-serve billing
portal), Manage team seats if you bought a team
license, and the feedback form that reaches support directly.
Watch
The four fields that define when SmartStamp reacts. Together
they mark a block of cells: one column, bounded by a start and end
row, on the sheet(s) you pick. An edit anywhere else is ignored.
Sheet(s)
sheet(s)
Which sheets this range applies to. The picker takes one sheet,
several sheets, or "all sheets" — the rest of the range's settings
then apply to every sheet you picked. Targeting more than one sheet
is part of the paid plans; on the free plan a range covers a single
sheet.
Start row & end row
start row · end row
The first and last row SmartStamp pays attention to. Set the start
row below your header so editing the header itself never triggers a
stamp.
| Field | Value | Meaning |
|---|---|---|
| start row | number | First row that is watched, e.g. 2 to skip a header row |
| end row | number | Last row that is watched, e.g. 100 |
Example:
start row 2 + end row 100 —
watches 99 rows of data underneath a header.
💡 On the free plan you get one range, one sheet and 30 rows, so a 1–1000 range
will not fit. Pick the rows you actually use, or upgrade for
unlimited ranges.
Edit column
edit column
The column people type in — the trigger. When a cell in this column
changes, inside the row range above, SmartStamp writes a stamp.
Editing any other column does nothing.
Example: a Status column that colleagues update as work progresses.
💡 Columns are entered as numbers, not letters: column A is
1, B is 2, C is 3.
Stamp
The fields that define what gets written and where.
Two decisions: which cell receives the stamp, and what goes in it.
Stamp target
stamp target
Chooses between stamping per row or stamping into one fixed cell.
This is the single most important setting on the page — it decides
whether you get a history per row or one "last touched" indicator.
| Option | Writes to | Use it for |
|---|---|---|
| column | The same row you just edited, in the stamp column | A "last updated" value per row |
| cell | One fixed cell, no matter which row was edited | A single "sheet last touched" indicator |
💡 With cell, every edit in the range overwrites
the same cell, so you only ever see the most recent one. Use
column if you need to keep per-row history.
Stamp column
stamp column
Where the stamp lands. With target column this is the
column that receives the value on the edited row; with target
cell you point at one fixed cell instead.
Example: watch
edit column 2 (B) and stamp into
stamp column 3 (C) — the row's Status is typed in B,
the moment it changed appears in C.
💡 Point the stamp at a column you don't type in yourself. If the
stamp column and the edit column are the same, your own value gets
replaced.
Stamp value
stamp value
What actually gets written. Four choices, picked from a dropdown.
| Option | Writes | Use it for |
|---|---|---|
| timestamp | The date and time of the edit, written as a real date value — Google Sheets shows it in your spreadsheet's locale (File › Settings › Locale), the same for everyone who opens the file | "Last updated" tracking, audit trails, SLA timing |
| custom value | Any fixed text you type in yourself — optionally with
{row}, {date}, {email},
{sheet}, or {uuid} tokens, plus
{date:local} / {time:local} /
{datetime:local} (this spreadsheet's locale), and
the fixed {date:eu}, {date:us},
{date:long}, {time:us},
{datetime:eu}, {datetime:us} layouts for
date/time formatting, expanded at stamp time |
Status flags like Checked or Done,
or self-numbering values like PO-{row} |
| user email | The email of whoever made the edit | "Who changed this?" on a shared sheet |
| UUID | A freshly generated UUID | Unique row IDs, dedupe keys, external system references |
💡 Want both a time and a name? Add two ranges on a shared
sheet and the same edit column: one stamping
timestamp into one column, the other stamping
user email into the next. Two ranges needs a paid
plan — the free plan covers one.
💡 Tokens are expanded once, at the moment of the edit — they're
plain text after that, not a live formula, so they won't update
later.
{date} is always yyyy-MM-dd and
{datetime} yyyy-MM-dd HH:mm. For a familiar
layout, {date:local} / {datetime:local}
follow this spreadsheet's locale
(File › Settings › Locale); {date:eu},
{date:us}, {date:long}, {time:us},
{datetime:eu} and {datetime:us} force a
fixed one.
Conditions
By default every edit inside the range stamps. Tick
Require a specific value in edit column and the stamp only
fires when the newly typed value matches your condition. Four types
are available, matched to what's in the cell.
Numeric
Compares the edited value as a number.
| Operators | Meaning |
|---|---|
| = ≠ | Equal to / not equal to |
| > < | Greater than / less than |
| ≥ ≤ | Greater or equal / less or equal |
| between | Strictly between two values (bounds excluded) |
| not between | Outside those two values (bounds excluded from the "between" side) |
| is one of | Matches any value in a comma-separated list (e.g. "5, 10, 15") |
| is none of | Matches none of the values in a comma-separated list |
Example: stamp only when a Progress column reaches
≥ 100.
String
Compares the edited value as text. Case-sensitive by default, with
an option to ignore case.
| Operator | Fires when the value… |
|---|---|
| matches | Is exactly the text you specified |
| doesn't match | Is anything other than that text |
| contains | Has your text somewhere inside it |
| doesn't contain | Does not have your text anywhere inside it |
| starts with | Begins with your text |
| ends with | Ends with your text |
| matches regex | Matches the regular expression you specified |
| doesn't match regex | Does not match the regular expression you specified |
| is one of | Matches any value in a comma-separated list (e.g. "urgent, blocked") |
| is none of | Matches none of the values in a comma-separated list |
Example: stamp only when a Status column is set to
Done, ignoring "In progress" and "Blocked".
💡 Case-sensitive by default means
done won't match
Done. Turn on ignore-case if colleagues type freely.
💡 For the regex operators, a "Test your regex" link next to the
value field opens regex101.com to help build and check the
pattern before you save.
Date
Compares the edited value against a date you set, by calendar day —
the time of day is ignored.
| Operator | Fires when the date is… |
|---|---|
| on | The same calendar day |
| not on | Any day except that one |
| before after | Earlier than / later than that day |
| on or before | That day or any earlier day |
| on or after | That day or any later day |
| between | Strictly between two dates (both boundary days excluded) |
| not between | Outside those two dates |
⚠ The edit column must hold a real date-formatted cell. Plain text
that merely looks like a date (typed as text, or imported) will not
be recognised as a date.
Checkbox
Compares the edited value against a checkbox state. No value
field — just pick "is checked" or "is unchecked".
| Operator | Meaning |
|---|---|
| is checked | The box in the edit column is ticked |
| is unchecked | The box in the edit column is empty |
Options
Four checkboxes per range, all off by default. They control what
happens when a stamp already exists, when the source value disappears,
whether a condition applies at all, and whether the rule also runs
once against rows that already exist.
Don't overwrite an existing stamp
Leaves the target cell alone if it already holds a value. The first
stamp wins and later edits no longer change it.
Example: record when a task was first marked done, not the
last time somebody touched it.
💡 Off by default, so every qualifying edit refreshes the stamp —
that's what you want for "last updated", and exactly what you don't
want for "created on".
Delete stamp when the edit column no longer qualifies
Clears the stamp again when the watched cell no longer meets the
rule — emptied, or (on a rule with a condition) changed to a value
that fails the condition — so a row doesn't keep a timestamp for a
state that no longer applies.
Example: someone clears a Status cell by mistake, or moves a deal
back from "Closed won" to "Negotiation" — the stamp in the
neighbouring column disappears with it instead of going stale.
Require a specific value in edit column
Turns on the condition builder. Leave it off and every edit inside
the range stamps; tick it and you pick a numeric, string or date
condition that the newly typed value has to satisfy.
💡 See Conditions above for all operators
per type.
Also apply this to existing rows in the range now
A one-time action, not an ongoing setting: when saving, runs the
range's stamp and conditions against every existing row that
already qualifies, not just future edits. Rows that don't match
the condition are checked but left alone.
Example: turning on stamping for a sheet that already has 200
rows of "Status = Done" — tick this once so those 200 rows get
stamped immediately instead of only the next edit onward.
💡 The {row}/{date}/{email}/{sheet}/{uuid} tokens are fixed at the
moment the backfill runs, same as for a live edit — see
stamp value tokens in the FAQ.
Good to know
A few behaviours that aren't fields in the panel, but do decide
whether SmartStamp does what you expect on a shared, busy sheet.
Paste and fill-down are handled
Pasting a block of values or dragging fill-down over several rows
stamps every qualifying row in the edited range, not just
single-cell edits. Conditions are checked per row, so a paste of
mixed values only stamps the rows that actually match.
One install covers the whole sheet
Install and configure SmartStamp once on a shared sheet, and it
stamps edits made by anyone with edit access to
that sheet — colleagues don't need to install it themselves. It
runs as an installable trigger tied to the sheet, under the
authorization of whoever installed it, not to whichever person
happens to be editing.
⚠ One thing that is tied to identity: the "current user's
email" stamp value only reliably captures the actual editor when
they're in the same Google Workspace domain as whoever installed
SmartStamp. For an editor on a personal (non-domain) Google
account — like @gmail.com — their address usually isn't
accessible to the script at all, for privacy reasons, so it
falls back to your own email instead of theirs. Rolling out to a
whole team is covered by
team licensing.
Team licences: buy the seats first
If you're covering a whole domain, purchase the team licence
before you roll the add-on out from the Google
Workspace admin console. Anyone who opens SmartStamp before the
seats exist starts their own individual 14-day trial instead, and
won't be picked up by the team licence until that trial ends. The
email you use on the Stripe page becomes the domain admin who
manages seats afterwards.
💡 Seat count is not fixed — add or remove seats anytime from
"Manage team seats" in the Account & Support tab; the
difference is prorated on your next invoice. Full step-by-step in
the FAQ →.
What the free plan covers
You start the 14-day trial (everything unlocked) when you're ready —
a button in the Account & Support tab, or the first time you save
a setup that goes beyond the free plan. After it ends you drop to the
free plan: one range, one sheet and 30 rows, with no time limit. A
paid plan removes those limits.
💡 If a paid plan lapses, your oldest range keeps stamping up to the
free plan's budget and newer ones stop. Values already stamped stay
exactly as they are.