Checks the pages you list each day and emails you when the wording actually changes, with a note on what changed.

UsesClaudeGmailGoogle SheetsJina AI

Tell me when a page I watch changes

ScheduleRun every day.Run every day.
ValuesSet watchListUrl to blank.Set watchListUrl to blank.
ValuesSet watchListTab to Pages.Set watchListTab to Pages.
ValuesSet alertEmail to blank.Set alertEmail to blank.
ValuesSet excerptSize to 4000.Set excerptSize to 4000.
ValuesSet minTextLength to 200.Set minTextLength to 200.
ValuesSet maxPages to 25.Set maxPages to 25.
Google SheetsGoogle SheetsRead the rows of watchListUrl. Save it as watchList.Read the rows of watchListUrl. Save it as watchList.
ValuesSet pages to watchList.rows.Set pages to watchList.rows.
Dates & TimesGet the current date and time and save it as checkedOn.Get the current date and time and save it as checkedOn.
Decisions & LoopsFor each watchedPage in pages:For each watchedPage in pages:
ValuesSet pageName to blank.Set pageName to blank.
ValuesSet pageUrl to blank.Set pageUrl to blank.
ValuesSet savedSnapshot to blank.Set savedSnapshot to blank.
ValuesSet columnsFound to false.Set columnsFound to false.
Decisions & LoopsIf a step below fails, save the error as columnErrorIf a step below fails, save the error as columnError
Try
TextTrim watchedPage.Page and save it as pageName.Trim watchedPage.Page and save it as pageName.
TextTrim watchedPage.URL and save it as pageUrl.Trim watchedPage.URL and save it as pageUrl.
TextTrim watchedPage["Last Snapshot"] and save it as savedSnapshot.Trim watchedPage["Last Snapshot"] and save it as savedSnapshot.
ValuesChange columnsFound to true.Change columnsFound to true.
On error
ValuesShow in the output: Skipped row watchedPage.row_number as text - this tab needs the columns Page, URL, Last Checked and Last Snapshot, in that order. Check the header row.Show in the output: Skipped row watchedPage.row_number as text - this tab needs the columns Page, URL, Last Checked and Last Snapshot, in that order. Check the header row.
Decisions & LoopsIf columnsFound is noIf columnsFound is no
Yes
Decisions & LoopsSkip to the next item.Skip to the next item.
No
No steps
Decisions & LoopsIf pageUrl is emptyIf pageUrl is empty
Yes
Decisions & LoopsSkip to the next item.Skip to the next item.
No
No steps
Decisions & LoopsIf pageUrl doesn't start with httpIf pageUrl doesn't start with http
Yes
ValuesShow in the output: Skipped '@pageUrl' - the URL column needs a full web address starting with http:// or https://.Show in the output: Skipped '@pageUrl' - the URL column needs a full web address starting with http:// or https://.
Decisions & LoopsSkip to the next item.Skip to the next item.
No
No steps
Decisions & LoopsIf pageName is emptyIf pageName is empty
Yes
ValuesChange pageName to pageUrl.Change pageName to pageUrl.
No
No steps
ValuesSet fetchedText to blank.Set fetchedText to blank.
Decisions & LoopsIf a step below fails, save the error as readErrorIf a step below fails, save the error as readError
Try
Jina AIJina AIRead the page at pageUrl with Jina. Save it as readResult.Read the page at pageUrl with Jina. Save it as readResult.
TextTrim readResult.content and save it as fetchedText.Trim readResult.content and save it as fetchedText.
On error
ValuesShow in the output: Could not read pageName this time. The saved copy was left untouched and no alert was sent: readError as text.Show in the output: Could not read pageName this time. The saved copy was left untouched and no alert was sent: readError as text.
Decisions & LoopsIf fetchedText is empty or the length of fetchedText is less than minTextLength…If fetchedText is empty or the length of fetchedText is less than minTextLength…
Yes
ValuesShow in the output: Too little text came back for pageName to be a real read, so the saved copy was left untouched and nothing was sent.Show in the output: Too little text came back for pageName to be a real read, so the saved copy was left untouched and nothing was sent.
Decisions & LoopsSkip to the next item.Skip to the next item.
No
No steps
TextReplace "Replace with in fetchedText with replaced by and save it as lineBreaksFlattened.
TextReplace with in lineBreaksFlattened with replaced by with replaced by and save it as spacingTidied.Replace with in lineBreaksFlattened with replaced by with replaced by and save it as spacingTidied.
TextTrim spacingTidied with replaced by with replaced by and save it as comparableText.Trim spacingTidied with replaced by with replaced by and save it as comparableText.
TextShorten comparableText to excerptSize multiplied by 1 characters and save it as currentSnapshot.Shorten comparableText to excerptSize multiplied by 1 characters and save it as currentSnapshot.
Decisions & LoopsIf savedSnapshot is emptyIf savedSnapshot is empty
Yes
ValuesShow in the output: Saved the first copy of pageName. From now on you will hear about it only when the wording changes.Show in the output: Saved the first copy of pageName. From now on you will hear about it only when the wording changes.
Else if @currentSnapshot is not @savedSnapshot
ValuesSet promptIntro to:Set promptIntro to:You are watching one web page for changes that a person would care about. Below are two plain-text copies of the same page: the copy saved at the last check, and the copy just fetched. Ignore incidental differences entirely. These do NOT count as a change: adverts and promoted items, timestamps and 'last updated' lines, view or visitor counts, stock and seat counters, cookie or consent banners, navigation and footer links, the order of testimonials, reviews or news items, and any difference in spacing or formatting alone. A change to the page's substance DOES count: wording, a price or fee,...
ValuesSet promptSaved to Set promptSaved to THE COPY SAVED AT THE LAST CHECK: savedSnapshot.
ValuesSet promptFetched to Set promptFetched to THE COPY JUST FETCHED: currentSnapshot.
ValuesSet comparePrompt to promptIntro@promptSaved@promptFetchedSet comparePrompt to promptIntro@promptSaved@promptFetched Answer in one of exactly two ways and write nothing else. If nothing substantive differs, reply with the single line: NO CHANGE Otherwise reply with one line beginning 'CHANGED:' followed by at most 50 words saying precisely what is different, quoting the old and new wording where you can. For example: CHANGED: the standard plan price went from $19 to $29 per month.
ValuesSet verdict to blank.Set verdict to blank.
Decisions & LoopsIf a step below fails, save the error as compareErrorIf a step below fails, save the error as compareError
Try
ClaudeClaudeAsk Claude: comparePrompt. Save it as comparison.Ask Claude: comparePrompt. Save it as comparison. Maximum response length: 300
TextTrim comparison.response_text and save it as verdict.Trim comparison.response_text and save it as verdict.
On error
ValuesShow in the output: Could not compare pageName this time: compareError as text.Show in the output: Could not compare pageName this time: compareError as text.
Decisions & LoopsIf verdict starts with CHANGEDIf verdict starts with CHANGED
Yes
TextTrim verdict with CHANGED: replaced by and save it as whatChanged.Trim verdict with CHANGED: replaced by and save it as whatChanged.
ValuesSet emailSubject to Page changed: pageName.Set emailSubject to Page changed: pageName.
ValuesSet bodyOpening to pageName has changed since the last check.Set bodyOpening to pageName has changed since the last check. What changed: .
ValuesSet bodyDetail to whatChangedSet bodyDetail to whatChanged .
ValuesSet bodyWhere to Page: pageUrlSet bodyWhere to Page: pageUrl Checked: checkedOn .
ValuesSet bodyClosing to The new wording is now the saved copy, so you will only hear from this workflow the next time this page changes..Set bodyClosing to The new wording is now the saved copy, so you will only hear from this workflow the next time this page changes..
MathSet emailBody to bodyOpening plus bodyDetail plus bodyWhere plus bodyClosing.Set emailBody to bodyOpening plus bodyDetail plus bodyWhere plus bodyClosing.
GmailGmailSend an email to alertEmail.Send an email to alertEmail. Subject: emailSubjectemailBody
Else if @verdict starts with "NO CHANGE"
ValuesShow in the output: pageName changed only in ways that do not matter, so nothing was sent. The saved copy was refreshed.Show in the output: pageName changed only in ways that do not matter, so nothing was sent. The saved copy was refreshed.
Otherwise
ValuesShow in the output: No clear answer for pageName - the saved copy was left exactly as it was, so the next run looks at this page again.Show in the output: No clear answer for pageName - the saved copy was left exactly as it was, so the next run looks at this page again.
Decisions & LoopsSkip to the next item.Skip to the next item.
Otherwise
No steps
Google SheetsGoogle SheetsOverwrite row watchedPage.row_number of watchListTab in watchListUrl.Overwrite row watchedPage.row_number of watchListTab in watchListUrl.