Skip to content
FlowHubFluxonLab
Notion
Databases & Warehousesfree

Notion Todoist Two-Way Sync

by MarioUpdated Aug 2026
RequiresNotionNotionRedisRedisGmailGmailTodoistTodoist
Share Post Share
Get Notion DatabasesGet Notion Data…CoPrep DropdownCoPrep Dropdown1CoGenerate configFoChoose Notion DatabaseChoose Notion D…FoChoose Todoist ProjectChoose Todoist …IfVerify security tokenVerify security…CrGenerate security tokenGenerate securi…CoStore variablesCoGet variablesFoRedirect to Auth PageRedirect to Aut…WeOAuth redirectHRExchange TokensRTRespond with successRespond with su…RTRespond with errorRespond with er…CoGet Notion Database IDGet Notion Data…CoGet Todoist Project IDGet Todoist Pro…FoNotion-Todoist Sync Setup HelperNotion-Todoist …FoTodoist Webhook Setup HelperTodoist Webhook…FoReturn config JSONReturn config J…NotionCDCompare DatasetsIfExists/Completed in NotionExists/Complete…IfIf Todoist ID existsIf Todoist ID e…Store Todoist IDSILoop Over ItemsGet Notion TaskHRUpdate Task in TodoistUpdate Task in …SePick Todoist FieldsPick Todoist Fi…CoMap Notion to TodoistMap Notion to T…HRUpdate task in Todoist before closingUpdate task in …CoMap Notion to Todoist1Map Notion to T…CoHandle empty datesHandle empty da…CoHandle empty dates1Handle empty da…CoHandle empty dates2Handle empty da…HRCreate task in TodoistCreate task in …SeAdd project IDLock Todoist IDCrGenerate UUIDHRUpdate section (Sync API)Update section …FiStatus changedAgAggregateSePrepare Batching ItemsPrepare Batchin…SILoop Over Items1IfStatus is DoneLock Todoist ID1Lock Todoist ID2HRUpdate task in TodoistUpdate task in …SeGet mapped itemSeGet mapped item1ScSchedule TriggerSePrepare summary dataPrepare summary…SePrepare summary data1Prepare summary…MeMergeSePrepare summary data2Prepare summary…FiFilter out status changesFilter out stat…CoMap Todoist to NotionMap Todoist to …SeMap summary fieldsMap summary fie…HtConvert to HTML TableConvert to HTML…HtGenerate email bodyGenerate email …SeGet mapped item2GmailMeMerge summarySeGlobalsEWExecute Workflow TriggerExecute Workflo…FiDifferences exist1Differences exi…FiRequires completion change1Requires comple…Create task in NotionCreate task in …Update task in NotionUpdate task in …Mark as Done in NotionMark as Done in…Mark as Obsolete in NotionMark as Obsolet…Mark as In Progress in NotionMark as In Prog…FiOnly continue if not lockedOnly continue i…Lock Notion IDCheck if Todoist ID is lockedCheck if Todois…FiDescription has changed in TodoistDescription has…CrGenerate UUID1HRUpdate section (Sync API)1Update section …CoGet Backlog Section IDGet Backlog Sec…IfNotion Task not foundNotion Task not…Check if creating flag exists1Check if creati…FiOnly continue if flag does not exist1Only continue i…Set creating flag1Set creating fl…FiNeither focussed nor planned1Neither focusse…Mark as Focussed in NotionMark as Focusse…NOTodoist trigger referenceTodoist trigger…Get Notion Task2FiNotion Task found1Notion Task fou…SwSwitch by EventIfIf event is not :deletedIf event is not…EDExecution DataEDExecution Data1EDExecution Data2EDExecution Data3EDExecution Data4SeGlobals1CoMap Todoist to Notion1Map Todoist to …Get Notion Task1FiRequires completion changeRequires comple…IfHas been completed?Has been comple…FiDifferences existDifferences exi…FiOnly continue if not locked1Only continue i…Check if Notion ID is lockedCheck if Notion…Get Notion taskCheck if creating flag existsCheck if creati…FiOnly continue if flag does not existOnly continue i…Set creating flagSet creating fl…IfTodoist ID exists?Todoist ID exis…SeGet todoist IDFiTodoist ID existsTodoist ID exis…SeGet todoist ID1FiStatus changed but not emptyStatus changed …IfStatus is Obsolete?Status is Obsol…FiStatus is not DoneStatus is not D…IfNeither focussed nor plannedNeither focusse…NONotion trigger referenceNotion trigger …WeNotion WebhookStore Todoist ID1Store Todoist I…HRUpdate task in Todoist1Update task in …SeGlobals2CrGenerate UUID2HRUpdate section (Sync API)2Update section …Lock Todoist ID4CoMap Notion to Todoist2Map Notion to T…HRCreate task in Todoist1Create task in …EDExecution Data5EDExecution Data6WeTodoist WebhookEWExecute WorkflowSeExtract IDsSOSplit out Notion changesSplit out Notio…IfBody is array?SwSwitch by projectSwitch by proje…WeWebhookSwSwitchEWExecute Workflow1Execute Workflo…FiDue date emptyIfHas not been completed?Has not been co…NOEnd hereSARetry limit reachedRetry limit rea…SeSet triesSeUpdate triesWaWaitIfCatch known errorCatch known err…IfIf tries leftSARetry limit reached1Retry limit rea…SeSet tries1SeUpdate tries1WaWait1IfCatch known error1Catch known err…IfIf tries left1SeSet tries2SeUpdate tries2WaWait2IfCatch known error2Catch known err…IfIf tries left2SARetry limit reached2Retry limit rea…CoTurn Markdown into Notion BlocksTurn Markdown i…SOHandle each block separatelyHandle each blo…Append Notion BlockAppend Notion B…Get projectsGet sectionsTodoistMark as Incomplete in TodoistMark as Incompl…Get Todoist TaskMark as Completed in TodoistMark as Complet…Delete Task in TodoistDelete Task in …IfIf not deletedGet Todoist Task2Get Todoist Tas…Delete Task in Todoist2Delete Task in …Mark as Completed in Todoist1Mark as Complet…Mark as Incomplete in Todoist1Mark as Incompl…Update Description in Todoist1Update Descript…Update Description in TodoistUpdate Descript…Get Todoist Task1Get Todoist Tas…IfIf not deleted11234567891011
1/5
FLOWS
STEPS · 11
Starts on an incoming request

On webhook and schedule triggers, syncs tasks two-way between Notion and Todoist using Redis state, emailing updates via Gmail.

Tags

webhookadvancedNotionRedisPersonal Productivitydiscoveredpending-review
Connects
notionNotionredisRedisgmailGmailtodoistTodoist
CategoryDatabases & Warehouses
Triggerwebhook
Complexityadvanced
Nodes176
AddedJun 27, 2026