Monthly
Update recurring text in a Doc each month
Text that changes on a schedule, like the month name, is updated in your Doc for you.
- Runs
- Monthly
- Apps
- Google Docs
- AI
- Not needed
- Access
- read+write
Send this to your assistant
Create a ClickRuntime automation: on the 1st of each month, replace last month's name with this month's in my Monthly Report doc and email me how many changes were made.
First time? Adding ClickRuntime to your assistant takes about two minutes.
Why use it
Why teams use this automation
A property manager's welcome letter says "Rent due on the 1st of January 2026" and quotes a parking fee of $85. Every month, someone remembers, or does not, to change the month, update the price list and correct the contact name after a staff change. A guest packet for a holiday rental still shows last season's rates because the owner forgot. Wrong dates and prices in a document that tenants rely on cause calls and disputes.
On the schedule you set, ClickRuntime works out the old and new values, such as this month's name or an updated price, runs a replace-all text request on your Google Doc, and emails you how many replacements were made. No AI is involved, only exact text matches, so results are predictable.
It suits price lists, schedules, newsletters and standing letters that repeat with small changes.
What you get out of it
Documents stay current without effort
The month, price or name is updated on time every cycle. Readers see the right information from the first day, so nobody phones to ask whether last month's figure still applies.
Wrong prices stop reaching customers
A forgotten price edit can cost money or cause a dispute. Because the change is made by rule on a schedule, the document does not depend on someone remembering to update it.
You get a count to verify
The email reports how many replacements were made. A count of zero warns you that the text changed shape and the rule needs attention, before the stale document is sent to anyone.
One-time setup for a repeating chore
A monthly job that takes ten minutes is easy to forget and annoying to do. Setting the rule once removes it from your list permanently, with the replacement logic written down in one place.
Consistent wording everywhere
Replacing every occurrence at once avoids the Doc where the header says February and the footer still says January. Partial updates look careless, while a full replacement looks professional. A partial update, with one stale mention left behind, creates more confusion than not updating at all.
How it works
What happens, step by step
On the first of each month ClickRuntime works out last month's name and this month's name.
It replaces every mention of last month with this month in your Google Doc, such as a monthly report.
You get an email saying how many replacements were made.
Before it runs live
- Connect Google Docs
What you get
Build your own
Need it to work differently?
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
- Run it at a different time, more or less often, or only on weekdays
- 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 Google Docs steps into one automation
Under the hood
The code that runs this automation
from google.oauth2.credentials import Credentials
from googleapiclient.discovery import build
from datetime import date, timedelta
from clickruntime import on_trigger, credentials, notify
DOC_ID = "monthly-report-doc-id"
@on_trigger
def run(event):
this_month = date.today().replace(day=1)
last_month = this_month - timedelta(days=1)
docs = build("docs", "v1", credentials=Credentials(credentials.connection("google", "work")), cache_discovery=False)
resp = docs.documents().batchUpdate(documentId=DOC_ID, body={"requests": [{"replaceAllText": {
"containsText": {"text": f"{last_month:%B}", "matchCase": True}, "replaceText": f"{this_month:%B}"}}]}).execute()
changed = resp["replies"][0]["replaceAllText"].get("occurrencesChanged", 0)
notify.email_me("Monthly Report updated", f"Replaced {last_month:%B} with {this_month:%B} {changed} times.")
return {"changed": changed}FAQ
Common questions
How does it know the new value to use?
What if the old text is not found?
Is the match case-sensitive, and can it replace parts of words?
What permissions does it need?
Does it need AI?
How many runs does it use?
Can I change how it works?
Related
You might also like
Save a weekly PDF copy of a Doc
Each week a dated PDF of your important Doc is saved to an archive folder.
See how it worksAdd a daily research digest to a Doc
Each morning a dated section with a short digest of your source is added to a running Doc.
See how it worksGet a summary when an important Doc changes
When a Doc you rely on changes, you get a short summary of what's different.
See how it worksKeep exploring
Set up “Update recurring text in a Doc each month” from your assistant
Copy the prompt above, or connect your assistant first. Free plan, no credit card.