Each week, records the title, summary and search terms of each page you list in Airtable, using only words found on the page.

UsesAirtableOpenAI

See which search terms each page of your site targets

ScheduleRun every Monday at 07:00.Run every Monday at 07:00.
ValuesSet pageUrls to blank.Set pageUrls to blank.
ValuesSet airtableBaseId to blank.Set airtableBaseId to blank.
ValuesSet airtableTableName to blank.Set airtableTableName to blank.
ValuesSet maxPages to 8.Set maxPages to 8.
TextTrim airtableBaseId and save it as baseId.Trim airtableBaseId and save it as baseId.
TextTrim airtableTableName and save it as tableName.Trim airtableTableName and save it as tableName.
MathSet pageLimit to maxPages multiplied by 1.Set pageLimit to maxPages multiplied by 1.
Decisions & LoopsIf pageLimit is greater than 25If pageLimit is greater than 25
Yes
ValuesChange pageLimit to 25.Change pageLimit to 25.
No
No steps
Decisions & LoopsIf pageLimit is less than 1If pageLimit is less than 1
Yes
ValuesChange pageLimit to 1.Change pageLimit to 1.
No
No steps
ValuesSet knownUrls to an empty list.Set knownUrls to an empty list.
ValuesSet added to 0.Set added to 0.
ValuesSet skipped to 0.Set skipped to 0.
Decisions & LoopsFor each rawUrl in pageUrls split by a new line:For each rawUrl in pageUrls split by a new line:
Decisions & LoopsIf added is greater than or equal to pageLimitIf added is greater than or equal to pageLimit
Yes
Decisions & LoopsStop repeating.Stop repeating.
No
No steps
TextTrim rawUrl and save it as pageUrl.Trim rawUrl and save it as pageUrl.
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 not pageUrl starts with https:// (ignoring case) or pageUrl starts with…If not pageUrl starts with https:// (ignoring case) or pageUrl starts with…
Yes
ValuesAdd 1 to skipped.Add 1 to skipped.
ValuesShow in the output: Skipped a line that is not a full web address: pageUrl.Show in the output: Skipped a line that is not a full web address: pageUrl.
Decisions & LoopsSkip to the next item.Skip to the next item.
No
No steps
Decisions & LoopsIf pageUrl contains " (ignoring case)If pageUrl contains " (ignoring case)
Yes
ValuesAdd 1 to skipped.Add 1 to skipped.
ValuesShow in the output: Skipped an address carrying a quote mark: pageUrl.Show in the output: Skipped an address carrying a quote mark: pageUrl.
Decisions & LoopsSkip to the next item.Skip to the next item.
No
No steps
Decisions & LoopsIf knownUrls contains pageUrlIf knownUrls contains pageUrl
Yes
Decisions & LoopsSkip to the next item.Skip to the next item.
No
No steps
ValuesSet wasChecked to false.Set wasChecked to false.
ValuesSet alreadyRecorded to false.Set alreadyRecorded to false.
Decisions & LoopsIf a step below fails, save the error as readErrorIf a step below fails, save the error as readError
Try
AirtableAirtableList records in tableName. Save it as found.List records in tableName. Save it as found.
Decisions & LoopsIf found.records isn't emptyIf found.records isn't empty
Yes
ValuesChange alreadyRecorded to true.Change alreadyRecorded to true.
No
No steps
ValuesChange wasChecked to true.Change wasChecked to true.
On error
ValuesShow in the output: Could not check whether pageUrl is already recorded, so it was left for the next run.Show in the output: Could not check whether pageUrl is already recorded, so it was left for the next run.
Decisions & LoopsIf wasChecked is noIf wasChecked is no
Yes
ValuesAdd 1 to skipped.Add 1 to skipped.
Decisions & LoopsSkip to the next item.Skip to the next item.
No
No steps
Decisions & LoopsIf alreadyRecorded is yesIf alreadyRecorded is yes
Yes
ListsAdd pageUrl to the end of knownUrls and save it as knownUrls.Add pageUrl to the end of knownUrls and save it as knownUrls.
Decisions & LoopsSkip to the next item.Skip to the next item.
No
No steps
HTTPFetch pageUrl and save it as fetch.Fetch pageUrl and save it as fetch.
ValuesSet pageSource to fetch.body.Set pageSource to fetch.body.
Decisions & LoopsIf the length of pageSource is less than 400If the length of pageSource is less than 400
Yes
ValuesAdd 1 to skipped.Add 1 to skipped.
ValuesShow in the output: Could not read enough of pageUrl to describe it, so no row was added for it.Show in the output: Could not read enough of pageUrl to describe it, so no row was added for it.
Decisions & LoopsSkip to the next item.Skip to the next item.
No
No steps
TextShorten pageSource to 14000 characters and save it as pageText.Shorten pageSource to 14000 characters and save it as pageText.
ValuesSet pagePrompt to You are reading the raw source of one web page and recording what it is about, for a keyword table.Set pagePrompt to You are reading the raw source of one web page and recording what it is about, for a keyword table. Answer with exactly three parts separated by ||| and nothing else, in this order: the page's own title ||| one sentence saying what the page is about ||| a comma-separated list of up to ten search terms the page targets Rules you must follow: - Every search term must be copied word for word from the visible wording of the page below. Do not invent terms, and do not add terms you think the page ought to target. - Ignore HTML tags, scripts and styles. Read only the wording a visitor would see. - Do not mention search volume, difficulty, rankings or competitors - none of that was measured here. - Write plain text. No markdown, no numbering, no extra commentary. Page address: pageUrl.
ValuesChange pagePrompt to pagePromptChange pagePrompt to pagePrompt Page source: pageText.
ValuesSet answer to blank.Set answer to blank.
Decisions & LoopsIf a step below fails, save the error as modelErrorIf a step below fails, save the error as modelError
Try
TextTrim the response text from the OpenAI “Ask OpenAI” step and save it as answer.Trim the response text from the OpenAI “Ask OpenAI” step and save it as answer.
On error
ValuesShow in the output: Could not read pageUrl with the model.Show in the output: Could not read pageUrl with the model.
Decisions & LoopsIf answer is emptyIf answer is empty
Yes
ValuesAdd 1 to skipped.Add 1 to skipped.
ValuesShow in the output: No description came back for pageUrl.Show in the output: No description came back for pageUrl.
Decisions & LoopsSkip to the next item.Skip to the next item.
No
No steps
TextSplit answer by ||| and save it as parts.Split answer by ||| and save it as parts.
Decisions & LoopsIf the length of parts is less than 3If the length of parts is less than 3
Yes
ValuesAdd 1 to skipped.Add 1 to skipped.
ValuesShow in the output: The answer for pageUrl did not carry a title, a summary and keywords, so no row was added for it.Show in the output: The answer for pageUrl did not carry a title, a summary and keywords, so no row was added for it.
Decisions & LoopsSkip to the next item.Skip to the next item.
No
No steps
TextTrim parts[0] and save it as pageTitle.Trim parts[0] and save it as pageTitle.
TextTrim parts[1] and save it as pageSummary.Trim parts[1] and save it as pageSummary.
TextTrim parts[2] and save it as rawKeywordList.Trim parts[2] and save it as rawKeywordList.
Decisions & LoopsIf pageTitle is empty or pageSummary is emptyIf pageTitle is empty or pageSummary is empty
Yes
ValuesAdd 1 to skipped.Add 1 to skipped.
ValuesShow in the output: No title or summary came back for pageUrl.Show in the output: No title or summary came back for pageUrl.
Decisions & LoopsSkip to the next item.Skip to the next item.
No
No steps
ValuesSet keptKeywords to an empty list.Set keptKeywords to an empty list.
ValuesSet keywordCount to 0.Set keywordCount to 0.
ValuesSet droppedKeywords to 0.Set droppedKeywords to 0.
Decisions & LoopsFor each rawKeyword in rawKeywordList split by ,:For each rawKeyword in rawKeywordList split by ,:
Decisions & LoopsIf keywordCount is greater than or equal to 12If keywordCount is greater than or equal to 12
Yes
Decisions & LoopsStop repeating.Stop repeating.
No
No steps
TextTrim rawKeyword and save it as keyword.Trim rawKeyword and save it as keyword.
Decisions & LoopsIf the length of keyword is less than 3If the length of keyword is less than 3
Yes
Decisions & LoopsSkip to the next item.Skip to the next item.
No
No steps
Decisions & LoopsIf pageText doesn't contain keyword (ignoring case)If pageText doesn't contain keyword (ignoring case)
Yes
ValuesAdd 1 to droppedKeywords.Add 1 to droppedKeywords.
Decisions & LoopsSkip to the next item.Skip to the next item.
No
No steps
Decisions & LoopsIf keptKeywords contains keywordIf keptKeywords contains keyword
Yes
Decisions & LoopsSkip to the next item.Skip to the next item.
No
No steps
ListsAdd keyword to the end of keptKeywords and save it as keptKeywords.Add keyword to the end of keptKeywords and save it as keptKeywords.
ValuesAdd 1 to keywordCount.Add 1 to keywordCount.
Decisions & LoopsIf keywordCount is 0If keywordCount is 0
Yes
ValuesAdd 1 to skipped.Add 1 to skipped.
ValuesShow in the output: None of the search terms suggested for pageUrl appear on the page itself, so no row was added for it.Show in the output: None of the search terms suggested for pageUrl appear on the page itself, so no row was added for it.
Decisions & LoopsSkip to the next item.Skip to the next item.
No
No steps
Decisions & LoopsIf droppedKeywords is greater than 0If droppedKeywords is greater than 0
Yes
ValuesShow in the output: Dropped droppedKeywords suggested term(s) for pageUrl because they do not appear on the page.Show in the output: Dropped droppedKeywords suggested term(s) for pageUrl because they do not appear on the page.
No
No steps
Decisions & LoopsIf a step below fails, save the error as writeErrorIf a step below fails, save the error as writeError
Try
AirtableAirtableAdd a record to tableName.Add a record to tableName.
ListsAdd pageUrl to the end of knownUrls and save it as knownUrls.Add pageUrl to the end of knownUrls and save it as knownUrls.
ValuesAdd 1 to added.Add 1 to added.
On error
ValuesAdd 1 to skipped.Add 1 to skipped.
ValuesShow in the output: Airtable would not accept the row for pageUrl, so it was left for the next run.Show in the output: Airtable would not accept the row for pageUrl, so it was left for the next run.
ValuesShow in the output: Added added page(s) to your keyword table. Skipped: skipped.Show in the output: Added added page(s) to your keyword table. Skipped: skipped.