Keep a TickTick project in sync with your Linear issues
Every 30 minutes, your assigned Linear issues show up in one TickTick list with matching titles, due dates, and priorities.
Every 30 minutes, keep a dedicated TickTick project in sync with the Linear issues assigned to me, so my personal task list always matches my engineering queue. Build this as a deterministic sync: every step is a fixed field mapping over structured data and no judgement or summarization is required.
Trigger: cron, every 30 minutes. The TickTick Open API sends no outgoing webhooks and the sync is anchored on the TickTick side, so this is scheduled rather than event driven.
Configuration I set once: my Linear assignee id, and the name of the TickTick mirror project. If the assignee id is not supplied, resolve it with Linear Get Viewer. Resolve the mirror project id with TickTick List All Projects by matching the configured project name exactly, and stop the run with a clear error if no project matches.
Step 1. Use Linear List Issues to fetch every issue assigned to me that is still unfinished. Filter on assignee id equal to mine, and on state type in backlog, unstarted, started and triage, which are the unfinished workflow state types. Completed and canceled are the finished ones. Page through with Relay cursor pagination, passing pageInfo.endCursor as after while hasNextPage is true, so a long queue is covered fully. For each issue keep the identifier such as ENG-412, the title, the dueDate, and the priority integer.
Step 2. Use TickTick Get Project Data on the mirror project to read its current contents. This returns only undone tasks, which matters here: a finished issue with no counterpart means the mirror task was already completed on an earlier run, so it must be treated as already handled and never recreated. For each returned task, parse the leading Linear identifier out of the title, matching uppercase letters, a hyphen, digits, then a space. Tasks with no leading identifier are ones I manage by hand and must be left untouched.
Step 3. For every unfinished assigned issue with no matching task, create one with TickTick Create Task in the mirror project. Set the title to the identifier, a space, then the issue title, for example "ENG-412 Fix billing webhook retries". Set the due date and priority using the field mappings below.
Step 4. Where a counterpart already exists, use TickTick Update Task to refresh the title, the due date from the issue due date, and the priority. TickTick task updates are a POST to /task/{taskId} and not a PUT, and the request body needs both the task id and the project id. Skip the write when all three fields already match, so a run where nothing changed performs no writes.
Step 5. Build the set of identifiers returned in step 1. Any undone mirror task whose identifier is not in that set no longer belongs on my list, either because the issue reached a completed or canceled state, or because it was reassigned away from me. Mark each of those done with TickTick Complete Task.
Field mappings, applied literally. Title: Linear identifier, a space, then the Linear issue title. Due date: the Linear issue dueDate, formatted for TickTick as ISO 8601 in the form yyyy-MM-dd'T'HH:mm:ssZ; when the issue has no due date, leave the TickTick due date empty. Priority: Linear 1 urgent maps to TickTick 5 high, Linear 2 high maps to TickTick 3 medium, Linear 3 normal maps to TickTick 1 low, and Linear 4 low and Linear 0 no priority both map to TickTick 0 none. TickTick accepts only priority values 0, 1, 3 and 5, since 2 and 4 are unused. TickTick task status is 0 for active and 2 for completed.
Behaviour notes. Linear is the source of truth, so if I edit a mirrored task's title, due date or priority inside TickTick, the next run resets it to match Linear, and that is intended. Check the errors array on every Linear GraphQL response, because Linear can return HTTP 200 with partial errors. Back off and retry on TickTick 429 and 5xx responses. If one task fails to create or update, log it and carry on with the rest rather than aborting the whole run.
What does this prompt do?
- Checks every 30 minutes for the Linear issues assigned to you that are not finished yet.
- Adds any missing issue to the TickTick project you nominate, with the issue reference at the front of the task title.
- Keeps tasks current by refreshing the title, due date, and priority whenever they change in Linear.
- Ticks off a mirrored task as soon as its issue is closed, cancelled, or handed to someone else.
What do I need to use this?
- A Linear account with issues assigned to you
- A TickTick account
- One TickTick project set aside as the mirror list, for example an empty list called Engineering queue
How can I customize it?
- Change how often it runs. Every 30 minutes suits a busy queue, while hourly or twice a day is plenty for most people.
- Narrow what gets mirrored, for example only issues in your current cycle, only one team, or only issues above a certain priority.
- Adjust the priority mapping if you would rather have both urgent and high issues land as high priority in TickTick.
FAQs
Will this overwrite tasks I add to the project myself?
What happens when I finish an issue in Linear?
Does it create duplicate tasks if it runs twice?
Can I edit the task in TickTick instead of Linear?
Do I need a paid TickTick plan?
Related templates
On the first Monday of every month, find the alarms nobody watches and the monitoring you quietly pay for, then get a costed cleanup list in Slack and Linear.
Every weekday at 6pm, the commitments you made in meetings become TickTick tasks with real due dates, no duplicates, and a tidy Slack recap.
Every Monday we review your Tailscale network for stale devices and aging keys, then post a ranked cleanup list to Slack and open tickets for the urgent ones.
Every weekday at 7:30am, get a Slack message that fits today's real tasks into the gaps between your meetings, and warns you when the day is overbooked.
Every hour during your workday, the emails you starred in Gmail become properly written TickTick tasks with a real deadline and a sensible priority.
Every morning, find out whether your Segment destinations are actually receiving data, and only hear about it when delivery starts failing.
Stop retyping your Linear queue into your to-do list.
Set this up once and your personal task list keeps itself aligned with the work you are actually assigned.