Expands the topics you already rank for into related search terms with their monthly volumes, appended to a Google Sheet.

UsesClaudeGoogle Sheets

Keyword ideas from your seed topics

ScheduleRun every month on day 1 at 08:00.Run every month on day 1 at 08:00.
ValuesSet seedTopics to blank.Set seedTopics to blank.
ValuesSet keywordApiUrl to blank.Set keywordApiUrl to blank.
ValuesSet keywordApiKey to blank.Set keywordApiKey to blank.
ValuesSet spreadsheetUrl to blank.Set spreadsheetUrl to blank.
ValuesSet sheetTab to Keyword ideas.Set sheetTab to Keyword ideas.
ValuesSet maxIdeasPerTopic to 25.Set maxIdeasPerTopic to 25.
ValuesSet country to us.Set country to us.
TextTrim keywordApiUrl and save it as keywordApiUrl.Trim keywordApiUrl and save it as keywordApiUrl.
Decisions & LoopsIf keywordApiUrl is emptyIf keywordApiUrl is empty
Yes
Decisions & LoopsStop and report a problem: Fill in the 'keywordApiUrl' step with the address of your keyword data endpoint, then run it again.Stop and report a problem: Fill in the 'keywordApiUrl' step with the address of your keyword data endpoint, then run it again.
No
No steps
Dates & TimesGet today's date and save it as collectedOn.Get today's date and save it as collectedOn.
ValuesSet tabIsNew to false.Set tabIsNew to false.
Decisions & LoopsIf a step below fails, save the error as tabErrorIf a step below fails, save the error as tabError
Try
Google SheetsGoogle SheetsCreate the tab sheetTab in spreadsheetUrl.Create the tab sheetTab in spreadsheetUrl.
ValuesChange tabIsNew to true.Change tabIsNew to true.
On error
ValuesShow in the output: Adding this month's keyword ideas to the existing '@sheetTab' tab.Show in the output: Adding this month's keyword ideas to the existing '@sheetTab' tab.
Decisions & LoopsIf tabIsNew is yesIf tabIsNew is yes
Yes
Google SheetsGoogle SheetsAdd a row to sheetTab in spreadsheetUrl.Add a row to sheetTab in spreadsheetUrl.
No
No steps
TextSplit seedTopics by , and save it as topics.Split seedTopics by , and save it as topics.
ValuesSet ideasRecorded to 0.Set ideasRecorded to 0.
ValuesSet ideaLines to an empty list.Set ideaLines to an empty list.
Decisions & LoopsFor each topic in topics:For each topic in topics:
TextTrim topic and save it as seed.Trim topic and save it as seed.
Decisions & LoopsIf seed is emptyIf seed is empty
Yes
Decisions & LoopsSkip to the next item.Skip to the next item.
No
No steps
ValuesSet reply to an empty record.Set reply to an empty record.
ValuesSet fetchOk to false.Set fetchOk to false.
Decisions & LoopsIf a step below fails, save the error as fetchErrorIf a step below fails, save the error as fetchError
Try
HTTPSend data to keywordApiUrl and save it as reply.Send data to keywordApiUrl and save it as reply.
ValuesChange fetchOk to true.Change fetchOk to true.
On error
ValuesShow in the output: Could not fetch keyword ideas for '@seed': fetchError.message with keywordApiUrl replaced by the endpoint address.Show in the output: Could not fetch keyword ideas for '@seed': fetchError.message with keywordApiUrl replaced by the endpoint address.
Decisions & LoopsIf fetchOk is noIf fetchOk is no
Yes
Decisions & LoopsSkip to the next item.Skip to the next item.
No
No steps
ValuesSet ideaList to reply.body.keywords.Set ideaList to reply.body.keywords.
ValuesSet ideaCount to 0.Set ideaCount to 0.
Decisions & LoopsIf a step below fails, save the error as shapeErrorIf a step below fails, save the error as shapeError
Try
ListsCount the items in ideaList and save it as ideaCount.Count the items in ideaList and save it as ideaCount.
On error
ValuesShow in the output: No 'keywords' list came back for '@seed', so nothing was recorded for it.Show in the output: No 'keywords' list came back for '@seed', so nothing was recorded for it.
Decisions & LoopsIf ideaCount is greater than 0If ideaCount is greater than 0
Yes
ValuesSet recordedForTopic to 0.Set recordedForTopic to 0.
Decisions & LoopsFor each idea in ideaList:For each idea in ideaList:
Decisions & Loops If recordedForTopic is greater than or equal to maxIdeasPerTopic If recordedForTopic is greater than or equal to maxIdeasPerTopic
Yes
Decisions & LoopsStop repeating.Stop repeating.
No
No steps
Values Set term to blank. Set term to blank.
Values Set volume to 0. Set volume to 0.
Values Set entryOk to false. Set entryOk to false.
Decisions & Loops If a step below fails, save the error as entryError If a step below fails, save the error as entryError
Try
TextTrim idea.keyword and save it as term.Trim idea.keyword and save it as term.
MathRound idea.search_volume to the nearest integer and save it as volume.Round idea.search_volume to the nearest integer and save it as volume.
ValuesChange entryOk to true.Change entryOk to true.
On error
ValuesShow in the output: Skipped an idea for '@seed' that did not carry both a keyword and a numeric monthly search volume.Show in the output: Skipped an idea for '@seed' that did not carry both a keyword and a numeric monthly search volume.
Decisions & Loops If entryOk is yes and term isn't empty If entryOk is yes and term isn't empty
Yes
Google SheetsGoogle SheetsAdd a row to sheetTab in spreadsheetUrl.Add a row to sheetTab in spreadsheetUrl.
ValuesAdd 1 to recordedForTopic.Add 1 to recordedForTopic.
ValuesAdd 1 to ideasRecorded.Add 1 to ideasRecorded.
ListsAdd term - volume searches a month to the end of ideaLines and save it as ideaLines.Add term - volume searches a month to the end of ideaLines and save it as ideaLines.
No
No steps
No
No steps
Decisions & LoopsIf ideasRecorded is 0If ideasRecorded is 0
Yes
Decisions & LoopsFinish the run: No keyword ideas came back for seedTopics this month, so nothing was recorded. Check the 'keywordApiUrl' and 'keywordApiKey' steps if this repeats.Finish the run: No keyword ideas came back for seedTopics this month, so nothing was recorded. Check the 'keywordApiUrl' and 'keywordApiKey' steps if this repeats.
No
No steps
Decisions & LoopsIf a step below fails, save the error as shortlistErrorIf a step below fails, save the error as shortlistError
Try
ClaudeClaudeAsk Claude: 'You are helping a marketer decide what to write next. Below are keyword ideas collected this month for these topics: seedTopics.Ask Claude: 'You are helping a marketer decide what to write next. Below are keyword ideas collected this month for these topics: seedTopics. Each line is a search term and how many times it is searched a month. ideaLines joined by a new line truncated to 6000 characters Pick the five worth writing about next and give one short reason for each, based only on the lines above. Reply as a plain list with no preamble.'. Save it as suggestion. Maximum response length: 600
ValuesShow in the output: Worth writing next:Show in the output: Worth writing next: suggestion.response_text.
On error
ValuesShow in the output: Saved ideasRecorded keyword ideas to the '@sheetTab' tab. No shortlist was produced this run - connect Claude on the 'suggestion' step to get one.Show in the output: Saved ideasRecorded keyword ideas to the '@sheetTab' tab. No shortlist was produced this run - connect Claude on the 'suggestion' step to get one.