Skip to main content

Automations

Automations are a rule-based engine that automatically applies actions to torrents based on conditions. Use them to manage speed limits, delete old torrents, organize with tags and categories, and more.

How Automations Work

Automations are evaluated in sort order (first match wins for exclusive actions like delete). Each rule can match torrents using a flexible query builder with nested conditions.

  • Automatic - Background service scans torrents every 20 seconds
  • Per-Rule Intervals - Each rule can have its own interval (minimum 60 seconds, default 15 minutes)
  • Manual - Click "Apply Now" to trigger immediately (bypasses interval checks)
  • Debouncing - Same torrent won't be re-processed within 2 minutes

Query Builder

The query builder supports complex nested conditions with AND/OR groups. Drag conditions to reorder them.

Available Condition Fields

Identity Fields

FieldDescription
NameTorrent display name (supports cross-category operators)
HashInfo hash
CategoryqBittorrent category
TagsSet-based tag matching
StateStatus filter (see State Values below)

Path Fields

FieldDescription
Save PathDownload location
Content PathFull path to content

Size Fields (bytes)

FieldDescription
SizeSelected file size
Total SizeTotal torrent size
DownloadedBytes downloaded
UploadedBytes uploaded
Amount LeftRemaining bytes
Free SpaceFree space on the instance's filesystem

Time Fields

FieldDescription
Seeding TimeTime spent seeding (seconds)
Time ActiveTotal active time (seconds)
Added On AgeTime since added
Completion On AgeTime since completed
Last Activity AgeTime since last activity

Progress Fields

FieldDescription
RatioUpload/download ratio
ProgressDownload progress (0-1)
AvailabilityDistributed copies available

Speed Fields (bytes/s)

FieldDescription
Download SpeedCurrent download speed
Upload SpeedCurrent upload speed

Peer Fields

FieldDescription
Active SeedersCurrently connected seeders
Active LeechersCurrently connected leechers
Total SeedersTracker-reported seeders
Total LeechersTracker-reported leechers
Trackers CountNumber of trackers

Tracker/Status Fields

FieldDescription
TrackerPrimary tracker URL
PrivateBoolean - is private tracker
Is UnregisteredBoolean - tracker reports unregistered
CommentTorrent comment field

Advanced Fields

FieldDescription
Hardlink Scopenone, torrents_only, or outside_qbittorrent (requires local filesystem access)

State Values

The State field matches these status buckets:

StateDescription
downloadingActively downloading
uploadingActively uploading
completedDownload finished
stoppedPaused by user
activeHas transfer activity
inactiveNo current activity
runningNot paused
stalledNo peers available
erroredHas errors
tracker_downTracker unreachable
checkingVerifying files
movingMoving files
missingFilesFiles not found
unregisteredTracker reports unregistered

Operators

String: equals, not equals, contains, not contains, starts with, ends with, matches regex

Numeric: =, !=, >, >=, <, <=, between

Boolean: is, is not

State: is, is not

Cross-Category (Name field only):

  • EXISTS_IN - Exact name match in target category
  • CONTAINS_IN - Partial/normalized name match in target category

Regex Support

Full RE2 (Go regex) syntax supported. Patterns are case-insensitive by default. The UI validates patterns and shows helpful error messages for invalid regex.

Tracker Matching

This is sort of not needed, since you can already scope trackers outside the workflows. But its available either way.

PatternExampleMatches
All*Every tracker
Exacttracker.example.comOnly that domain
Glob*.example.comSubdomains
Suffix.example.comDomain and subdomains

Separate multiple patterns with commas, semicolons, or pipes. All matching is case-insensitive.

Actions

Actions can be combined (except Delete which must be standalone). Each action supports an optional condition override.

Speed Limits

Set upload and/or download limits in KiB/s. Applied in batches for efficiency.

Share Limits

Set ratio limit and/or seeding time limit (minutes). Torrents stop seeding when limits are reached.

Pause

Pause matching torrents. Only pauses if not already stopped.

Delete

Remove torrents from qBittorrent. Must be standalone - cannot combine with other actions.

ModeDescription
deleteRemove from client, keep files
deleteWithFilesRemove with files
deleteWithFilesPreserveCrossSeedsRemove files but preserve if cross-seeds detected

Tag

Add or remove tags from torrents.

ModeDescription
fullAdd to matches, remove from non-matches (smart toggle)
addOnly add to matches
removeOnly remove from non-matches

Options:

  • Use Tracker as Tag - Derive tag from tracker domain
  • Use Display Name - Use tracker customization display name instead of raw domain

Category

Move torrents to a different category.

Options:

  • Include Cross-Seeds - Also move cross-seeds (matching ContentPath AND SavePath)
  • Block If Cross-Seed In Categories - Prevent move if another cross-seed is in protected categories

Cross-Seed Awareness

Automations detect cross-seeded torrents (same content/files) and can handle them specially:

  • Detection - Matches both ContentPath AND SavePath
  • Delete Rules - Use deleteWithFilesPreserveCrossSeeds to keep files if cross-seeds exist
  • Category Rules - Enable "Include Cross-Seeds" to move related torrents together
  • Blocking - Prevent category moves if cross-seeds are in protected categories

The Hardlink Scope field detects whether torrent files have hardlinks:

ValueDescription
noneNo hardlinks detected
torrents_onlyHardlinks only within qBittorrent's download set
outside_qbittorrentHardlinks to files outside qBittorrent (e.g., media library)
note

Requires "Local filesystem access" enabled on the instance.

Use case: Identify library imports vs pure cross-seeds for selective cleanup.

Important Behavior

Settings Only Set Values

Automations apply settings but do not revert when disabled or deleted. If a rule sets upload limit to 1000 KiB/s, affected torrents keep that limit until manually changed or another rule applies a different value.

Efficient Updates

Only sends API calls when the torrent's current setting differs from the desired value. No-op updates are skipped.

Processing Order

  • First match wins for exclusive actions (delete, category)
  • Accumulative for combinable actions (tags, speed limits)
  • Delete ends torrent processing (no further rules evaluated)

Batching

Torrents are grouped by action value and sent to qBittorrent in batches of up to 50 hashes per API call.

Activity Log

All automation actions are logged with:

  • Torrent name and hash
  • Rule name and action type
  • Outcome (success/failed) with reasons
  • Action-specific details

Activity is retained for 7 days by default. View the log in the Automations section for each instance.

Example Rules

Delete Old Completed Torrents if low on disk space

Match torrents completed over 30 days ago when filesystem is lower than 500GB:

  • Condition: Completion On Age > 30 days AND State is completed AND Free Space < 500GB
  • Action: Delete with files

Speed Limit Private Trackers

Limit upload on private trackers:

  • Tracker: *
  • Condition: Private is true
  • Action: Upload limit 10000 KiB/s

Tag Stalled Torrents

Auto-tag torrents with no activity:

  • Tracker: *
  • Condition: Last Activity Age > 7 days
  • Action: Tag "stalled" (mode: add)

Clean Unregistered Torrents

Remove torrents the tracker no longer recognizes:

  • Tracker: *
  • Condition: Is Unregistered is true
  • Action: Delete (keep files)

Organize by Tracker

Move torrents to tracker-named categories:

  • Tracker: tracker.example.com
  • Action: Category "example" with "Include Cross-Seeds" enabled