YouTrack Importer for SuperProductivity
June 23, 2026 ยท View on GitHub
SuperProductivity plugin to bring YouTrack issues into SuperProductivity, either as a one-off CSV import or as a live, repeatable sync directly against the YouTrack REST API.
๐ Features
The plugin's modal has two tabs:
- ๐ Manual Import โ import a YouTrack CSV export once.
- ๐ YouTrack Sync โ connect directly to a YouTrack instance with a token, filter tickets with a YouTrack query, preview what will change, and sync on demand or automatically.
Both paths share the same import pipeline, so projects, tags, and the update-on-change behavior described below apply no matter which tab you use.
Core import behavior
- โ Automatic project creation if the target project doesn't exist yet
- โ Ticket description in the task notes: the YouTrack issue's description (or the CSV Description column) is copied into the task's notes, prefixed with the issue ID and priority
- โ
Tags from status and priority: a task's YouTrack
StateandPriorityare both turned into SuperProductivity tags (created automatically if they don't exist) โ unless the status is in your configured "statuses to mark as Done" list (see Status handling below), in which case the task is marked Done instead of tagged - โ
Due dates: YouTrack's
Due Datecustom field is mapped to the task's due day - โ
Stable YouTrack ID kept in the task title (
ISSUE-ID - Summary) โ this is what makes re-syncing safe (see below) - ๐ Update instead of duplicate: re-importing/re-syncing the same ticket updates the existing task (title, description, tags, due date, project) instead of creating a duplicate
- ๐จ Random colors for newly created projects and tags
๐ YouTrack Sync tab
1. Connection
Enter your YouTrack instance's base URL (e.g. https://youtrack.example.com, no trailing slash),
then paste a permanent YouTrack API token (generate one in YouTrack under Settings โ Tokens โ
the help link under the token field opens that page directly once the URL above is filled in).
2. Saved presets
A preset captures the whole sync configuration except the token: URL, query, assignee, automatic sprint settings, automatic sync schedule, and the "statuses to mark as Done" list (see below). Name and save your current settings, then switch between presets (e.g. different boards or sprints) without retyping anything. Presets are stored alongside the rest of the plugin config and survive restarts.
3. Ticket filter
Write a YouTrack query exactly as you would in the YouTrack search bar, e.g.:
Level: -Epic,-{Big Epic},-Goal project: {Web sites & services} State: -Canceled -Done Sprints: 26S08
Assignee (optional): if filled, an Assignee: ... clause is appended to the query
automatically โ no need to write it yourself.
4. Automatic sprint (optional, collapsed by default)
If your queries need "the current sprint" rather than a hardcoded one, use the {CURRENT_SPRINT}
placeholder anywhere in your query (e.g. Sprints: {CURRENT_SPRINT}), then:
- Check Enable automatic sprint.
- Set the format (placeholders:
{YEAR}โ2026,{YEAR_SHORT}โ26,{SPRINT_NUM}โ8,{SPRINT_NUM_PADDED}โ08; e.g.{YEAR_SHORT}S{SPRINT_NUM_PADDED}โ26S08). - Set the sprint duration in working days and the start date (the Monday your sprint #1 began).
- Use sprint end date as due date (optional) โ if your YouTrack instance has no Due Date field, check this to set each ticket's due date to the last day of its current sprint instead.
- Allow tickets to carry over to the next sprint (optional) โ if checked, the sprint end date above is not enforced; due date falls back to the normal field mapping (or no due date) instead. Useful for teams where tickets aren't required to finish within the sprint they're filed in. Leave unchecked if your tickets never carry over (the common case).
- Use Test configuration to preview the current and next few generated sprint tags before relying on it.
If {CURRENT_SPRINT} appears in your query but this is left disabled, syncing fails with a clear
error instead of sending the literal placeholder text to YouTrack โ this also protects against
double-counting a sprint filter you've already hardcoded elsewhere in the query.
5. Automatic sync (optional, collapsed by default)
Enable and pick an interval (15 minutes up to daily); a background check runs every 5 minutes and triggers a real sync once the configured interval has elapsed. Uses the same dedupe/update behavior as a manual sync โ safe to leave running indefinitely.
6. Status handling (optional, collapsed by default)
YouTrack statuses that mean "this ticket is finished" (e.g. Done, MEP, TO_MEP, Canceled
โ adjust the list to match your team's workflow) can be listed here, comma-separated. A ticket
whose status matches gets the task marked Done in SuperProductivity instead of getting a
status tag.
Plugins can't archive a task directly โ there's no such method in the Plugin API. Marking it Done is the closest equivalent; SuperProductivity's own archiving (manual or automatic, depending on your settings) takes it from there.
If your query already excludes these statuses (e.g. State: -Done -Canceled), tickets that move
into one of them will simply stop being returned by the query and won't be touched at all on the
next sync โ they're never auto-marked Done unless your query still returns them. To have the
plugin actively mark them Done when they transition, make sure your query doesn't exclude the
listed statuses.
โ ๏ธ This list only controls what happens to a ticket after it's fetched โ it does not filter
what the query returns. If your query keeps matching tickets in these statuses (no -Done -Canceled -MEP etc. in the query itself), they'll keep showing up in every "Sync now" preview as
Already archived forever (correctly skipped, no duplicate/update โ just expected, recurring
noise). Add the exclusion to the query text itself if you'd rather they stop being fetched at all
once finished.
Mark tickets Done when they no longer match the query (off by default): by default, a ticket that simply disappears from your query results (e.g. removed from the current sprint, reassigned, or otherwise no longer matching) is left completely untouched in SuperProductivity โ the plugin only ever acts on tickets the query actually returns. Enabling this checkbox closes that gap: any ticket seen in a previous sync that's missing from the current one gets marked Done (the same archiving proxy used above).
- Only affects tickets that were seen in a previous sync with this checkbox already enabled โ turning it on has no effect the very first time, since there's no baseline yet to compare against. From the next sync onward it works as expected.
- An empty sync result is ignored entirely (nothing gets marked Done), since that's more likely a misconfigured query or expired token than "every ticket left the sprint" โ without this guard a bad query could wipe out everything in one shot.
- The CSV import tab never affects or is affected by this tracking โ it's scoped to the YouTrack Sync tab only.
- โ ๏ธ If you regularly change the query/sprint filter itself (not just what's in the sprint), tickets that fall outside the new query will also get marked Done, even though they didn't technically "leave" anything โ they just stopped matching. Leave this off if you switch queries often.
7. Field mapping (optional, collapsed by default)
YouTrack's Due Date custom field is read by name. If your instance names that field
differently (it must match exactly, case-sensitive), enter it here. Leave empty to use the
default, Due Date.
If your instance has no due-date field at all, see Use sprint end date as due date in the Automatic sprint section above instead โ that takes priority over this field mapping whenever it's enabled and carry-over isn't allowed.
8. Test connection / Sync now / Save
- Test connection โ fetches matching tickets and reports a count, without importing anything.
- Sync now โ fetches matching tickets and classifies them into New, To update (something actually changed โ title, notes, tags, due date, status or project), Already in sync (matches an existing task but nothing differs โ no-op), Archived (matches a ticket already correctly archived as Done), and Removed (only when "Mark tickets Done when they no longer match the query" is enabled โ see Status handling above), and shows a preview list before anything is written. Confirm sync applies it; Cancel discards it.
- Save โ persists the token, query, assignee, sprint config, schedule, status handling, field mapping and presets.
A "Last synced: ..." line is always visible at the bottom of the tab, updated after every manual or automatic sync, so it's easy to confirm auto-sync (including the new 15/30-minute intervals) is actually running in the background without checking DevTools.
๐ Manual Import tab
Export your issues from YouTrack as CSV, then:
- Choose the CSV file and click Parse.
- Review the preview (task/project/tag counts + sample list).
- Click Import.
Expected CSV structure
Issue Id,Project,State,Tags,Summary,Description
HEW-260,helloWorld,Review,"HelloWorldr,Architecture","๐ Color management","Define a JSON file..."
NHW-2838,New Hello,In Progress,"Star,Module","Hello design","Create a design..."
| Column | Required | Description |
|---|---|---|
| Issue Id | โญ | YouTrack identifier (e.g. NPW-260) โ needed for update-on-reimport to work |
| Project | โ | Project name |
| Summary | โ | Task title |
| State | โญ | Status (โ tag) |
| Tags | โญ | Custom tags (comma-separated) |
| Description | ๐ | Full description |
โญ = Recommended ย ย ๐ = Optional
CSV rows without an Issue Id can still be imported, they just can't be matched on a future re-import (no stable ID to key off), so re-importing the same CSV without an Issue Id column will always create new tasks rather than updating existing ones.
๐ง How sync/import works (technical)
1๏ธโฃ Fetch tickets (CSV parse, or paginated YouTrack API query)
โ
2๏ธโฃ Classify against existing tasks by the "<Issue Id> - " title prefix:
- matches an ARCHIVED task AND still a "Done" status โ skip entirely (already correct)
- matches an ARCHIVED task BUT status is active again โ create a new active task
- matches an ACTIVE task โ update
- no match โ create
โ
3๏ธโฃ Create/fetch PROJECTS and TAGS needed by the whole batch
โ
4๏ธโฃ Create new tasks; update changed tasks (title, notes, tags, due date, project)
- Project/tag matching is by exact title (case-sensitive); existing ones are reused.
- Reviving an archived ticket: the Plugin API has no way to un-archive/restore a task, so if a ticket that was previously synced as Done (and got archived, by you or SuperProductivity's own auto-archiving) later moves back to a non-Done status in YouTrack, the plugin can't bring the old task back โ it creates a brand-new active task for it instead. The old archived copy is left behind untouched (harmless, but it does mean a "dead" duplicate sits in your archive history for that ticket).
- YouTrack field extraction:
StateandPriorityare YouTrack custom fields (not built-in issue attributes), read via the issue'scustomFields.Projectis a built-in field, read directly.Due Dateis read from a custom field namedDue Dateby default โ configurable via the Field mapping section if your instance uses a different name. - Pagination: the YouTrack API is queried in pages of 200 issues, looping until a page comes back short, up to a safety cap of 1000 issues per query (logged to the console if hit โ narrow your query if you rely on more than that).
๐ Troubleshooting
Tasks don't go to the right projects
- Check that a Project column/field exists and is correct.
- Reinstall the plugin if you're not on the latest version.
Tags are not assigned
- Open DevTools (the plugin iframe supports the same inspector) to see detailed
console.errorlogs. - Confirm the relevant
State/Priority/Tagsdata is actually present on the source ticket.
Sync creates duplicates anyway
This should no longer happen for any ticket with a stable ID. If it does, check that the task's
title still starts with <Issue Id> - โ if it was renamed locally, the match will fail and a
new task gets created instead of updating the renamed one.
Error during sync/import
- Check the token is valid and not expired.
- Make sure the CSV is UTF-8 encoded.
- Try a narrower query/sample first to isolate the issue.
๐ Permissions & API usage
This plugin requests no elevated permissions (permissions: [] in manifest.json โ no
nodeExecution). For transparency, manifest.json also lists exactly which capabilities it uses:
pluginApiUsage: thePluginAPImethods called โaddProject,addTag,addTask,getAllProjects,getAllTags,getArchivedTasks,getTasks,loadSyncedData,persistDataSynced,registerHeaderButton,showIndexHtmlAsView,updateTask.networkUsage: the plugin makes directfetch()calls to whatever YouTrack instance URL you configure, using the API token you provide, to search/fetch issues. No other network access.- Token storage: your API token is stored in this device's
localStorageonly โ it is never included in the synced profile config (persistDataSynced), so it won't end up in a profile backup/export or get copied to another device alongside the rest of your settings. Everything else (URL, query, presets, sprint/sync settings) is stored in the regular synced config and will follow you across devices; the token has to be re-entered on each one.
๐ Current limitations
- โ No bidirectional sync โ changes made in SuperProductivity are never pushed back to YouTrack
- โ No un-archive support (Plugin API limitation): a ticket that goes Done โ archived โ active again in YouTrack comes back as a new task, leaving a harmless but orphaned duplicate in your archive history
- โ CSV rows without an Issue Id can't be deduped/updated on re-import
- โ No sub-task import
- โ No story points import
๐ฎ Possible future enhancements
- ๐ Push completed/edited tasks back to YouTrack
- ๐ ๏ธ Configurable custom-field mapping for story points
- ๐ฆ Multiple YouTrack connections/instances in one config
๐ License
This plugin is provided as-is, without warranty.
๐ค Contributing
Open to contribution. To report a bug or suggest an improvement:
- Open DevTools during import/sync.
- Copy the error logs.
- Describe expected vs actual behavior.
๐ Resources
- SuperProductivity Plugin API Documentation
- YouTrack CSV Export Guide
- YouTrack REST API: Search and Command Attributes
Version: 1.7.7 Compatibility: SuperProductivity 14.0.0+ Author: ycoissard
Happy syncing! ๐