Reads every article you list, writes a summary and the key points, and files each one as a page in your Notion database.
Uses
ClaudeNotion
Turn your reading list into Notion notes
articleLinks to blank.Set articleLinks to blank.notionDatabaseName to blank.Set notionDatabaseName to blank.readingFocus to General reading. Capture what the article argues, what it bases that on, and what is worth remembering a month from now..Set readingFocus to General reading. Capture what the article argues, what it bases that on, and what is worth remembering a month from now..titlePropertyName to Name.Set titlePropertyName to Name.pageCharacterLimit to 18000.Set pageCharacterLimit to 18000.notionDatabaseName lowercase and save it as wantedDatabaseName.Make notionDatabaseName lowercase and save it as wantedDatabaseName.databaseMatches.List databases. Save it as databaseMatches.notionDatabaseId to blank.Set notionDatabaseId to blank.databaseEntry in databaseMatches.databases:For each databaseEntry in databaseMatches.databases:databaseEntryErrorIf a step below fails, save the error as databaseEntryErrorTry
databaseEntry.name lowercase and save it as entryName.Make databaseEntry.name lowercase and save it as entryName.entryName is wantedDatabaseName and notionDatabaseId is emptyIf entryName is wantedDatabaseName and notionDatabaseId is emptyYes
databaseEntry.id and save it as notionDatabaseId.Trim databaseEntry.id and save it as notionDatabaseId.No
No steps
On error
Ignored a Notion database with no readable name or id..Show in the output: Ignored a Notion database with no readable name or id..notionDatabaseId is emptyIf notionDatabaseId is emptyYes
No
No steps
existingPages to {results:[]}.Set existingPages to {results:[]}.existingPagesErrorIf a step below fails, save the error as existingPagesErrorTry
notionDatabaseId. Save it as existingPages.Find pages in notionDatabaseId. Save it as existingPages.On error
existingPagesError.message.Show in the output: Could not read what is already in '@notionDatabaseName', so an article you have already filed may be filed again - existingPagesError.message.filedTitles to "Set filedTitles to
.existingPage in existingPages.results:For each existingPage in existingPages.results:existingTitleErrorIf a step below fails, save the error as existingTitleErrorTry
existingPage.title lowercase and save it as existingTitle.Make existingPage.title lowercase and save it as existingTitle.existingTitle isn't emptyIf existingTitle isn't emptyYes
filedTitles to filedTitles@existingTitleChange filedTitles to filedTitles@existingTitle
.No
No steps
On error
Ignored a page in the database with no readable title..Show in the output: Ignored a page in the database with no readable title..notesFiled to 0.Set notesFiled to 0.readLinks to "Set readLinks to
.articleEntry in articleLinks with "For each articleEntry in articleLinks with
replaced by , split by ,:articleEntry and save it as articleUrl.Trim articleEntry and save it as articleUrl.articleUrl is emptyIf articleUrl is emptyYes
No
No steps
articleUrl doesn't start with http (ignoring case) or articleUrl doesn't…If articleUrl doesn't start with http (ignoring case) or articleUrl doesn't…readLinks contains articleUrlIf readLinks contains articleUrlYes
articleUrl because the same address is listed more than once.Show in the output: Skipped articleUrl because the same address is listed more than once.No
No steps
readLinks to readLinks@articleUrlChange readLinks to readLinks@articleUrl
.pageSource to blank.Set pageSource to blank.pageReached to false.Set pageReached to false.fetchErrorIf a step below fails, save the error as fetchErrorTry
articleUrl and save it as pageResponse.Fetch articleUrl and save it as pageResponse.pageReached to pageResponse.ok.Change pageReached to pageResponse.ok.pageResponse.body and save it as pageSource.Trim pageResponse.body and save it as pageSource.On error
fetchError.message with articleUrl replaced by the article address.Show in the output: Could not open the article - fetchError.message with articleUrl replaced by the article address.pageReached isn't yes or pageSource is emptyIf pageReached isn't yes or pageSource is emptyYes
articleUrl because it did not return a readable page.Show in the output: Skipped articleUrl because it did not return a readable page.No
No steps
pageSource to pageCharacterLimit characters (keeping words whole) and save it as articleExcerpt.Shorten pageSource to pageCharacterLimit characters (keeping words whole) and save it as articleExcerpt.readingPrompt to You are writing one reading note about a single article, for someone who wants to remember what it said without opening it again.Set readingPrompt to You are writing one reading note about a single article, for someone who wants to remember what it said without opening it again.
What this reader is reading for:
readingFocus
Reply with plain lines and nothing else. No labels, no numbering, no bullet characters, no blank lines, no introduction and no closing summary.
Line 1: the article's own title, as written on the page. If the page has no clear title, write a short one naming the subject.
Line 2: the whole article summarised in three or four sentences, all on one line. Say what it argues and what it bases that on, not what it is 'about'.
Every line after that: one key point worth remembering, at most six of them, each a full sentence that stands on its own. Keep the specific numbers, names and claims - a point nobody could disagree with is not worth writing down.
Use only what is on the page below. If the page is a paywall notice, a cookie banner, a login screen or an error page rather than the article itself, reply with the single word SKIP and nothing else.
Article address: articleUrl
The page follows as raw HTML. Read the visible article text; ignore navigation, script blocks, style blocks and tracking tags.
articleExcerpt.readingNote to blank.Set readingNote to blank.summaryErrorIf a step below fails, save the error as summaryErrorTry
readingPrompt. Save it as reading.Ask Claude: readingPrompt. Save it as reading.
Maximum response length: 1200reading.response_text and save it as readingNote.Trim reading.response_text and save it as readingNote.On error
articleUrl - summaryError.message.Show in the output: Could not summarise articleUrl - summaryError.message.readingNote is emptyIf readingNote is emptyYes
articleUrl, so nothing was filed for it.Show in the output: No reading note came back for articleUrl, so nothing was filed for it.No
No steps
readingNote in uppercase is SKIPIf readingNote in uppercase is SKIPYes
articleUrl because that address served a paywall, cookie or error page rather than the article.Show in the output: Skipped articleUrl because that address served a paywall, cookie or error page rather than the article.No
No steps
noteLines to an empty list.Set noteLines to an empty list.replyLine in readingNote split by a new line:For each replyLine in readingNote split by a new line:replyLine and save it as cleanLine.Trim replyLine and save it as cleanLine.cleanLine isn't emptyIf cleanLine isn't emptyYes
cleanLine to the end of noteLines and save it as noteLines.Add cleanLine to the end of noteLines and save it as noteLines.No
No steps
noteLines is less than 2If the length of noteLines is less than 2Yes
articleUrl came back without both a title and a summary, so nothing was filed for it.Show in the output: The reading note for articleUrl came back without both a title and a summary, so nothing was filed for it.No
No steps
noteLines[0] to 190 characters (keeping words whole) and save it as articleTitle.Shorten noteLines[0] to 190 characters (keeping words whole) and save it as articleTitle.noteLines[1] to 1800 characters (keeping words whole) and save it as articleSummary.Shorten noteLines[1] to 1800 characters (keeping words whole) and save it as articleSummary.filedTitles contains articleTitle in lowercaseIf filedTitles contains articleTitle in lowercaseYes
No
No steps
keyPointBlocks to an empty list.Set keyPointBlocks to an empty list.noteLineNumber to 0.Set noteLineNumber to 0.noteLine in noteLines:For each noteLine in noteLines:noteLineNumber is greater than or equal to 2 and the length of keyPointBlocks…If noteLineNumber is greater than or equal to 2 and the length of keyPointBlocks…Yes
keyPointBlocks and save it as keyPointBlocks.Add a record of object, type, and bulleted list item to the end of keyPointBlocks and save it as keyPointBlocks.No
No steps
noteLineNumber.Add 1 to noteLineNumber.notePageBlocks to [a record of object, type, and paragraph].Set notePageBlocks to [a record of object, type, and paragraph].keyPointBlocks isn't emptyIf keyPointBlocks isn't emptyYes
object:block,type:heading_3,heading_3:{rich_text:[{type:text,text:{content:Key points}}]}} to the end of notePageBlocks and save it as notePageBlocks.Add {object:block,type:heading_3,heading_3:{rich_text:[{type:text,text:{content:Key points}}]}} to the end of notePageBlocks and save it as notePageBlocks.notePageBlocks and keyPointBlocks into one list and save it as notePageBlocks.Combine notePageBlocks and keyPointBlocks into one list and save it as notePageBlocks.No
No steps
notePageBlocks and save it as notePageBlocks.Add a record of object, type, and paragraph to the end of notePageBlocks and save it as notePageBlocks.notePageFiled to false.Set notePageFiled to false.fileErrorIf a step below fails, save the error as fileErrorTry
articleTitle in notionDatabaseId.Create the page articleTitle in notionDatabaseId.notePageFiled to true.Change notePageFiled to true.On error
fileError.message.Show in the output: Could not file '@articleTitle' in Notion - fileError.message.notePageFiled is yesIf notePageFiled is yesYes
notesFiled.Add 1 to notesFiled.filedTitles to filedTitles@articleTitle in lowercaseChange filedTitles to filedTitles@articleTitle in lowercase
.No
No steps
notesFiled.Show in the output: New reading notes filed in '@notionDatabaseName': notesFiled.