Reads every article you list, writes a summary and the key points, and files each one as a page in your Notion database.

UsesClaudeNotion

Turn your reading list into Notion notes

Give it a list of article links, one per line, and the name of a Notion database, and run it. Each article is fetched and read, and the AI writes it up for whatever you are reading for: a short summary paragraph, up to six key points and a link back to the original. Each write-up is filed as a page in that database, titled with the article's own title.

Nothing is ever overwritten. The titles already in the database are read first, and an article that is there is left alone, so re-running after adding two more links files only those two. A duplicate link, an address that will not load, or a page that serves a paywall or cookie wall instead of the article is reported and skipped rather than filed as an empty note.

The database is found by name, so it must be shared with your Notion integration and named exactly as you give it.

ValuesSet articleLinks to blank.Set articleLinks to blank.
ValuesSet notionDatabaseName to blank.Set notionDatabaseName to blank.
ValuesSet 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..
ValuesSet titlePropertyName to Name.Set titlePropertyName to Name.
ValuesSet pageCharacterLimit to 18000.Set pageCharacterLimit to 18000.
TextMake notionDatabaseName lowercase and save it as wantedDatabaseName.Make notionDatabaseName lowercase and save it as wantedDatabaseName.
NotionNotionList databases. Save it as databaseMatches.List databases. Save it as databaseMatches.
ValuesSet notionDatabaseId to blank.Set notionDatabaseId to blank.
Decisions & LoopsFor each databaseEntry in databaseMatches.databases:For each databaseEntry in databaseMatches.databases:
Decisions & LoopsIf a step below fails, save the error as databaseEntryErrorIf a step below fails, save the error as databaseEntryError
Try
TextMake databaseEntry.name lowercase and save it as entryName.Make databaseEntry.name lowercase and save it as entryName.
Decisions & LoopsIf entryName is wantedDatabaseName and notionDatabaseId is emptyIf entryName is wantedDatabaseName and notionDatabaseId is empty
Yes
TextTrim databaseEntry.id and save it as notionDatabaseId.Trim databaseEntry.id and save it as notionDatabaseId.
No
No steps
On error
ValuesShow in the output: Ignored a Notion database with no readable name or id..Show in the output: Ignored a Notion database with no readable name or id..
Decisions & LoopsIf notionDatabaseId is emptyIf notionDatabaseId is empty
Yes
Decisions & LoopsStop and report a problem: No Notion database called '@notionDatabaseName' is shared with your Notion integration. Open the database in Notion, use the ... menu then 'Add connections' to share it, check the name in the 'notionDatabaseName' step matches it exactly, then run it again.Stop and report a problem: No Notion database called '@notionDatabaseName' is shared with your Notion integration. Open the database in Notion, use the ... menu then 'Add connections' to share it, check the name in the 'notionDatabaseName' step matches it exactly, then run it again.
No
No steps
ValuesSet existingPages to {results:[]}.Set existingPages to {results:[]}.
Decisions & LoopsIf a step below fails, save the error as existingPagesErrorIf a step below fails, save the error as existingPagesError
Try
NotionNotionFind pages in notionDatabaseId. Save it as existingPages.Find pages in notionDatabaseId. Save it as existingPages.
On error
ValuesShow in the output: Could not read what is already in '@notionDatabaseName', so an article you have already filed may be filed again - 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.
ValuesSet filedTitles to "Set filedTitles to .
Decisions & LoopsFor each existingPage in existingPages.results:For each existingPage in existingPages.results:
Decisions & LoopsIf a step below fails, save the error as existingTitleErrorIf a step below fails, save the error as existingTitleError
Try
TextMake existingPage.title lowercase and save it as existingTitle.Make existingPage.title lowercase and save it as existingTitle.
Decisions & LoopsIf existingTitle isn't emptyIf existingTitle isn't empty
Yes
ValuesChange filedTitles to filedTitles@existingTitleChange filedTitles to filedTitles@existingTitle .
No
No steps
On error
ValuesShow in the output: Ignored a page in the database with no readable title..Show in the output: Ignored a page in the database with no readable title..
ValuesSet notesFiled to 0.Set notesFiled to 0.
ValuesSet readLinks to "Set readLinks to .
Decisions & LoopsFor each articleEntry in articleLinks with "For each articleEntry in articleLinks with replaced by , split by ,:
TextTrim articleEntry and save it as articleUrl.Trim articleEntry and save it as articleUrl.
Decisions & LoopsIf articleUrl is emptyIf articleUrl is empty
Yes
Decisions & LoopsSkip to the next item.Skip to the next item.
No
No steps
Decisions & LoopsIf 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…
Yes
ValuesShow in the output: Skipped '@articleUrl' because it is not a full web address starting with https://.Show in the output: Skipped '@articleUrl' because it is not a full web address starting with https://.
Decisions & LoopsSkip to the next item.Skip to the next item.
No
No steps
Decisions & LoopsIf readLinks contains articleUrlIf readLinks contains articleUrl
Yes
ValuesShow in the output: Skipped 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.
Decisions & LoopsSkip to the next item.Skip to the next item.
No
No steps
ValuesChange readLinks to readLinks@articleUrlChange readLinks to readLinks@articleUrl .
ValuesSet pageSource to blank.Set pageSource to blank.
ValuesSet pageReached to false.Set pageReached to false.
Decisions & LoopsIf a step below fails, save the error as fetchErrorIf a step below fails, save the error as fetchError
Try
HTTPFetch articleUrl and save it as pageResponse.Fetch articleUrl and save it as pageResponse.
ValuesChange pageReached to pageResponse.ok.Change pageReached to pageResponse.ok.
TextTrim pageResponse.body and save it as pageSource.Trim pageResponse.body and save it as pageSource.
On error
ValuesShow in the output: Could not open the article - 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.
Decisions & LoopsIf pageReached isn't yes or pageSource is emptyIf pageReached isn't yes or pageSource is empty
Yes
ValuesShow in the output: Skipped articleUrl because it did not return a readable page.Show in the output: Skipped articleUrl because it did not return a readable page.
Decisions & LoopsSkip to the next item.Skip to the next item.
No
No steps
TextShorten 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.
ValuesSet 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.
ValuesSet readingNote to blank.Set readingNote to blank.
Decisions & LoopsIf a step below fails, save the error as summaryErrorIf a step below fails, save the error as summaryError
Try
ClaudeClaudeAsk Claude: readingPrompt. Save it as reading.Ask Claude: readingPrompt. Save it as reading. Maximum response length: 1200
TextTrim reading.response_text and save it as readingNote.Trim reading.response_text and save it as readingNote.
On error
ValuesShow in the output: Could not summarise articleUrl - summaryError.message.Show in the output: Could not summarise articleUrl - summaryError.message.
Decisions & LoopsIf readingNote is emptyIf readingNote is empty
Yes
ValuesShow in the output: No reading note came back for articleUrl, so nothing was filed for it.Show in the output: No reading note came back for articleUrl, so nothing was filed for it.
Decisions & LoopsSkip to the next item.Skip to the next item.
No
No steps
Decisions & LoopsIf readingNote in uppercase is SKIPIf readingNote in uppercase is SKIP
Yes
ValuesShow in the output: Skipped 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.
Decisions & LoopsSkip to the next item.Skip to the next item.
No
No steps
ValuesSet noteLines to an empty list.Set noteLines to an empty list.
Decisions & LoopsFor each replyLine in readingNote split by a new line:For each replyLine in readingNote split by a new line:
TextTrim replyLine and save it as cleanLine.Trim replyLine and save it as cleanLine.
Decisions & LoopsIf cleanLine isn't emptyIf cleanLine isn't empty
Yes
ListsAdd 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
Decisions & LoopsIf the length of noteLines is less than 2If the length of noteLines is less than 2
Yes
ValuesShow in the output: The reading note for 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.
Decisions & LoopsSkip to the next item.Skip to the next item.
No
No steps
TextShorten 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.
TextShorten 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.
Decisions & LoopsIf filedTitles contains articleTitle in lowercaseIf filedTitles contains articleTitle in lowercase
Yes
ValuesShow in the output: '@articleTitle' is already in '@notionDatabaseName', so it was left alone.Show in the output: '@articleTitle' is already in '@notionDatabaseName', so it was left alone.
Decisions & LoopsSkip to the next item.Skip to the next item.
No
No steps
ValuesSet keyPointBlocks to an empty list.Set keyPointBlocks to an empty list.
ValuesSet noteLineNumber to 0.Set noteLineNumber to 0.
Decisions & LoopsFor each noteLine in noteLines:For each noteLine in noteLines:
Decisions & LoopsIf 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
ListsAdd a record of object, type, and bulleted list item to the end of 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
ValuesAdd 1 to noteLineNumber.Add 1 to noteLineNumber.
ValuesSet notePageBlocks to [a record of object, type, and paragraph].Set notePageBlocks to [a record of object, type, and paragraph].
Decisions & LoopsIf keyPointBlocks isn't emptyIf keyPointBlocks isn't empty
Yes
ListsAdd {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.
ListsCombine 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
ListsAdd a record of object, type, and paragraph to the end of notePageBlocks and save it as notePageBlocks.Add a record of object, type, and paragraph to the end of notePageBlocks and save it as notePageBlocks.
ValuesSet notePageFiled to false.Set notePageFiled to false.
Decisions & LoopsIf a step below fails, save the error as fileErrorIf a step below fails, save the error as fileError
Try
NotionNotionCreate the page articleTitle in notionDatabaseId.Create the page articleTitle in notionDatabaseId.
ValuesChange notePageFiled to true.Change notePageFiled to true.
On error
ValuesShow in the output: Could not file '@articleTitle' in Notion - fileError.message.Show in the output: Could not file '@articleTitle' in Notion - fileError.message.
Decisions & LoopsIf notePageFiled is yesIf notePageFiled is yes
Yes
ValuesAdd 1 to notesFiled.Add 1 to notesFiled.
ValuesChange filedTitles to filedTitles@articleTitle in lowercaseChange filedTitles to filedTitles@articleTitle in lowercase .
ValuesShow in the output: Filed '@articleTitle' in '@notionDatabaseName'.Show in the output: Filed '@articleTitle' in '@notionDatabaseName'.
No
No steps
ValuesShow in the output: New reading notes filed in '@notionDatabaseName': notesFiled.Show in the output: New reading notes filed in '@notionDatabaseName': notesFiled.