Shiftctl Documentation
Shiftctl is an on-call shift management platform for IT support teams and Managed Service Providers (MSPs). It replaces ad-hoc handoffs — Slack messages, sticky notes, verbal briefings — with a structured, accountable workflow that ensures every shift transition is documented, verified, and acknowledged.
Who is Shiftctl for? Any team that runs on-call shifts where one engineer hands over to the next — IT helpdesks, NOC/SOC teams, MSP technicians, and infrastructure engineers.
Enforced accountability
Engineers cannot skip any step of the sign-off process.
Zero context loss
Incoming engineers get a full structured brief the moment their shift begins — automatically.
Manager visibility
Trends, burden tracking, and exportable reports — all in one place.
How Shiftctl works
Every on-call shift follows a four-stage lifecycle enforced by Shiftctl. The platform makes it structurally impossible to skip any stage — the workflow is the safeguard.
Clock in & read the brief
Shifts start automatically at the scheduled time. The incoming engineer receives a push and email notification, opens Shiftctl, and is immediately shown the full handoff summary from the previous shift — tickets logged, pending items, and a difficulty rating. They must acknowledge the brief before doing anything else.
Active shift
During the shift, the engineer works with live context from their PSA (ConnectWise, Autotask, HaloPSA) visible alongside Shiftctl. Tickets can be logged directly from the shift view.
Structured sign-off
When the shift ends, the engineer must complete every field: tickets resolved, pending items noted, warnings raised, and a difficulty rating (1–5) recorded. The sign-off button is locked until every section is complete.
Automatic handoff
The moment sign-off completes, the next scheduled engineer is notified by push notification and email. If no engineer is scheduled, the team owner is alerted. Unacknowledged handoffs trigger a follow-up after 12 hours.
Enforced sign-off
The cornerstone of Shiftctl is that sign-off is enforced — not optional, not a reminder. An engineer cannot complete their shift until every section of the handoff form is filled in.
Tickets logged
Every ticket worked during the shift must be recorded with its resolution status.
Pending items
Any unresolved work or open tasks the next engineer needs to know about.
Warnings raised
Escalations, at-risk clients, or anything that needs immediate attention.
Difficulty rating
A 1–5 rating of how demanding the shift was — feeds into manager analytics.
The sign-off button remains disabled until all four sections are completed. This is enforced at the UI level and server-validated — it cannot be bypassed.
Incoming brief
When the next engineer's shift begins, they see the full structured handoff from the outgoing shift. No digging through Slack, no verbal catch-up — the context is there, formatted, and ready to acknowledge.
Full shift summary
All tickets logged during the shift, each with resolution status and notes.
Pending items
Outstanding work items the incoming engineer needs to follow up on immediately.
Active warnings
Flagged escalations or at-risk situations requiring priority attention.
Difficulty context
The outgoing engineer's difficulty rating helps set expectations before the shift begins.
One-click acknowledgement
Once reviewed, the engineer acknowledges the brief — this timestamp is recorded for accountability.
On-call scheduling
Plan your on-call rota weeks ahead directly in Shiftctl. Assign engineers to slots, define rotation order, and spot coverage gaps before they become incidents — no more scheduling via Slack threads or shared spreadsheets.
Calendar view
Visual weekly/monthly view of all scheduled shifts with engineer assignments.
Rotation order
Define a rotation sequence and auto-assign upcoming slots in order.
Coverage gap alerts
Unscheduled slots are visually flagged so managers can act before the shift starts.
Swap requests
Engineers can request shift swaps in-app — owners approve or reject without leaving Shiftctl.
Multi-staff shifts
Assign multiple engineers to a single shift slot for high-demand periods.
Timezone support
Each team has a defined timezone; all shift times are displayed relative to it.
PagerDuty schedule import
Already running on PagerDuty? Bring your existing on-call rota into Shiftctl in minutes — without re-entering shifts manually. Shiftctl reads standard iCal feeds, which PagerDuty, Opsgenie, VictorOps, and Google Calendar all export natively.
One-time import
Download a .ics file from PagerDuty and upload it to Shiftctl via Schedule → Import. Your schedule is seeded instantly. After import, the calendar is fully editable — you own the schedule.
Live sync Recommended
Paste your PagerDuty iCal feed URL and Shiftctl keeps the schedule in sync automatically, every hour. Changes made in PagerDuty appear in Shiftctl without any manual action. The calendar becomes read-only while sync is active.
How live sync works
Hourly automatic sync
Shiftctl fetches your iCal feed every hour and diffs it against the current schedule — adding new slots, updating changed times, and removing cancelled ones.
Read-only calendar
While live sync is active, the Shiftctl calendar is locked to visual browsing only. All scheduling changes must be made in PagerDuty. Disconnect sync at any time to regain full edit access.
Engineer mapping
iCal feeds contain engineer names. During setup, you map each name to a Shiftctl team member. The mapping is saved and applied automatically on every future sync.
Zero re-entry switching
Teams evaluating Shiftctl can connect it to their existing PagerDuty schedule in minutes — no disruption to their current scheduling workflow.
Before importing: Your Shiftctl schedule must be empty. Use Schedule → Import → Clear entire schedule if you have existing slots. Active (in-progress) shifts are never affected by a clear.
Where to find your PagerDuty iCal URL
- Log in to PagerDuty and click your name → My Profile
- Go to User settings
- Copy the On-Call iCalendar feed URL (starts with
webcal://) - Paste it into Shiftctl at Schedule → Import → Live sync
Automatic handoff notifications
When sign-off completes, Shiftctl automatically notifies the next engineer — no manual action required. The notification chain is designed to ensure no handoff is ever silently missed.
Instant push + email
The moment sign-off is complete, the scheduled next engineer receives both a browser push notification and an email.
Unscheduled slot alerts
If no engineer is scheduled for the next slot, the team owner is immediately alerted so they can assign cover.
12-hour follow-up escalation
If the handoff brief is not acknowledged within 12 hours, an escalation alert is sent to the engineer, their manager, and posted to Slack.
Configurable channels
Each engineer can choose which notification channels are active for them — push, email, or both.
Slack integration
Connect Shiftctl to a Slack channel via an Incoming Webhook and get real-time visibility into your on-call operation without leaving Slack. Requires the Team plan. Configure from Manage → Notifications.
Handoff summary
When an engineer completes sign-off, the full handoff brief is posted to Slack — tickets, pending items, warnings, and difficulty rating. Engineers are @mentioned by name using their mapped Slack user IDs.
On-call change
When the incoming engineer acknowledges their handoff and becomes active on-call, a change notification is posted with a direct link to the brief.
Shift start and shift end
Post to Slack when a shift begins (with the scheduled end time) and when it ends after sign-off completes. Enables real-time visibility into shift boundaries without checking the app.
Unacknowledged escalation
If an engineer has been on-call for 12 hours without acknowledging their handoff, a Slack alert fires alongside the email and push escalation.
Coverage gap alert
When a shift slot has no engineer assigned within 2 hours of its start time, Shiftctl posts a Slack alert with a direct link to the schedule so cover can be assigned immediately.
Daily on-call digest
Post a daily summary at a configured UTC hour showing every engineer on call that day, their shift window, and layer — so the whole team knows who to contact without opening the app.
Report summary to Slack
When scheduled PDF reports are enabled, Shiftctl can also post a key-stats summary (shifts, avg duration, ack time, ticket resolution rate) to Slack at the same time the PDF is emailed.
Slack user ID mapping
Map each team member to their Slack user ID (starts with U) so all alert messages @mention the relevant engineer directly, generating a notification ping in Slack.
Test webhook button
Send a clearly labelled test message to verify your webhook URL is correct and messages are landing in the right channel before enabling live alerts.
Slack integration requires the Team plan. All alert types are independently toggleable — enable only the events relevant to your team.
Microsoft Teams
Keep your team informed without leaving Microsoft Teams. ShiftCtl posts rich, actionable cards directly into your Teams channels — shift starts, handoff summaries, coverage gaps, and escalations arrive automatically so nothing falls through the cracks.
Shift started alerts
Get notified in Teams the moment an on-call shift begins, with an @mention for the assigned engineer.
Handoff summaries
Full shift handoff posted to your channel — tickets, pending items, difficulty rating, and duration at a glance.
On-call change alerts
See who just acknowledged their shift and is now actively on-call.
Escalation warnings
If an engineer hasn't acknowledged after 12 hours, Teams lights up so the team can follow up.
Shift ended confirmation
Know exactly when an engineer completes their shift and how it went.
Coverage gap warnings
Automated heads-up when an upcoming slot has no engineer assigned.
Daily on-call digest
One card every morning listing who's on-call today, across every layer.
Report summaries
Weekly or monthly stats posted alongside the PDF report — shifts, resolution rates, acknowledgement times.
@mention support
Map each engineer's Microsoft email to enable @mentions in every card. Falls back to bold names gracefully.
Works alongside Slack — enable both channels independently, or choose one. Available on Team plans and above.
Manager insights
The Data Hub gives managers a complete view of how their on-call operation is performing over time. Spot trends, track engineer workload, and export clean reports — all without leaving Shiftctl.
What managers can track
PDF reports: Export a clean summary report at any time (Starter plan and above), or schedule automated weekly or monthly reports (Team plan and above).
Connect your PSA
Shiftctl connects directly to the PSA your team already uses. When an engineer logs a ticket during a shift, it is created automatically in your PSA. When a technician resolves or updates it in the PSA, the status syncs back to Shiftctl in real time — no copy-pasting, no duplicate entry, no context lost between systems.
Automatic ticket creation
Tickets logged in Shiftctl are pushed to your PSA instantly — including title, notes, on-call engineer, handover timeline, and a deep-link back to Shiftctl.
Two-way status sync
Status changes in your PSA (resolved, in progress) are reflected in Shiftctl within seconds via webhook.
Zero workflow disruption
Tickets land on your existing boards and queues. Your PSA workflows, SLAs, and automations continue as normal.
PSA integrations are available on the Enterprise plan. Enable from Manage → Integrations once upgraded.
ConnectWise Manage
The most widely deployed PSA in the MSP industry. Shiftctl pushes tickets directly onto a ConnectWise service board of your choosing and listens for status changes via the ConnectWise Callbacks API. Works with both cloud-hosted and self-hosted ConnectWise environments.
Any service board
Choose an existing board or create a dedicated On-Call board — tickets land exactly where you want them.
Callbacks webhook
ConnectWise fires a callback to Shiftctl the moment a ticket status changes — synced in seconds, not minutes.
Real Basic auth
Uses ConnectWise's standard API member authentication — no OAuth dance, no token refresh headaches.
Status name mapping
Shiftctl maps open → New, monitoring → In Progress, resolved → Resolved. Statuses must exist on your chosen board.
What you will need
- An API Member with Public + Private keys (System → Members → API Members tab)
- A Client ID from developer.connectwise.com (free registration)
- The numeric Board ID of your target service board
- Your CW login Company ID (the text string, not a number)
- Existing MSPs: verify your board has statuses named exactly "New", "In Progress", and "Resolved" — these are board-scoped in ConnectWise and commonly customised
Autotask PSA
Datto's enterprise PSA, used by MSPs who run tight service desk operations with multi-queue routing and contract-level billing. Shiftctl creates tickets in the queue you specify and receives status updates via Autotask's outbound webhook system.
Queue-based routing
Specify exactly which Autotask queue ShiftCtl tickets land in — keep on-call tickets separate from client-facing queues.
Outbound webhooks
Autotask fires a webhook to Shiftctl when a ticket is modified. Status changes typically sync within 30–90 seconds.
API Integration Code
Uses Autotask's standard three-header auth: Integration Code, API username, and API key — no OAuth required.
Custom status IDs
Autotask status IDs are tenant-specific. Shiftctl ships with sensible defaults and lets you override all three.
What you will need
- An API User (username + API key) with Tickets: View, Add, Edit permission
- An API Integration record — the Tracking Identifier is your Integration Code
- Your zone URL (look it up at webservices.autotask.net/ATServicesRest/V1.0/zoneInformation?user=YOUR_EMAIL)
- The numeric Queue ID and your own Company ID from Autotask
- Existing MSPs: your status IDs are almost certainly not the defaults — check Admin → Service Desk → Ticket Statuses and set the correct IDs in Shiftctl
HaloPSA
A modern, flexible PSA popular with growing MSPs. HaloPSA uses OAuth 2.0 client credentials for API access — Shiftctl handles token management automatically. Tickets can be routed to a specific team and ticket type, giving you full control over where they land in your workflow.
OAuth 2.0 auth
Shiftctl handles token management automatically with smart caching — no manual token rotation needed.
Team and type routing
Optionally set a Team ID and Ticket Type ID so Shiftctl tickets route correctly in your existing HaloPSA structure.
Near real-time webhooks
HaloPSA webhooks fire immediately on ticket updates — status changes appear in Shiftctl within seconds.
Custom status IDs
All three status mappings (open, monitoring, resolved) are configurable to match your HaloPSA status configuration.
What you will need
- An API Application with Client Credentials auth and read:tickets + edit:tickets permissions
- Your HaloPSA tenant URL (e.g. https://yourcompany.halopsa.com)
- Optionally: Team ID and Ticket Type ID for precise routing
- Existing MSPs: if your HaloPSA has mandatory fields or ticket type validation rules, you must set a Ticket Type ID or ticket creation will fail
- Self-hosted: your server must be reachable over HTTPS with a valid TLS certificate
Syncro
The combined PSA + RMM platform built for lean MSPs who value simplicity. Syncro's API uses plain Bearer token authentication — the simplest integration to set up. Tickets are created with an "On-Call" problem type and can be linked to a customer record for clean billing separation.
Simple API key auth
Just a subdomain and a Bearer API key — no OAuth, no Client IDs, no zone lookups.
Customer linking
Optionally link Shiftctl tickets to a specific customer record in Syncro for clean billing and reporting.
On-Call problem type
All Shiftctl tickets are tagged with problem type 'On-Call' so they are easy to filter in Syncro reports.
Trigger-based webhooks
Syncro's Trigger system fires in near real-time — status changes typically sync to Shiftctl within seconds.
What you will need
- A Syncro API key with Tickets: read + write scope (Admin → API Keys)
- Your Syncro subdomain (the part before .syncromsp.com)
- Optionally: a Customer ID to link tickets to your own company record
- Existing MSPs: Syncro matches statuses by text string. Shiftctl sends "New", "In Progress", "Resolved" — these must exist in Admin → Ticket Statuses or updates will fail
- Existing MSPs: "On-Call" must exist as a Problem Type in Syncro (Admin → Problem Types) or ticket creation may be rejected
Microsoft 365 sign-in
Shiftctl supports sign-in via Microsoft 365 (Azure AD / Entra ID) as an alternative to email and password. M365 sign-in means engineers authenticate through their company Microsoft account — no separate Shiftctl password is created or required. All identity management stays in your existing Azure Active Directory.
No extra passwords
Engineers sign in with the Microsoft credentials they already use every day — no new password to create, forget, or rotate.
Automatic team join
When an invited engineer signs in with Microsoft for the first time, Shiftctl automatically adds them to the correct team. No manual approval step.
Works alongside standard accounts
Teams can mix M365 and email/password accounts freely. Both sign-in methods coexist — there is no forced migration.
M365 sign-in is available on all paid plans (Starter and above). There is no Azure app registration required on your end — Shiftctl uses its own Microsoft OAuth application. Your engineers just need a valid Microsoft 365 account with the same email address you invite them with.
Inviting new members via M365
When you invite a member using the Microsoft 365 option, Shiftctl sends them an email with a link that opens the Microsoft sign-in page directly. There is no Shiftctl password to set — the engineer authenticates with their existing Microsoft account and is automatically added to your team.
Go to Team → Members
Open the sidebar and navigate to Team → Members. You will see the "Invite team members" panel at the top. If it is collapsed, click the header to expand it.
Enter the engineer's email and select their role
In the "Invite by email" form, type the engineer's work email address — this must be the email associated with their Microsoft 365 account. Use the role selector on the right to choose Member (standard on-call engineer) or Admin (full team management access). If you are unsure, use Member — you can promote them later.
Switch the account type to Microsoft 365
Below the email and role row, you will see two account type buttons: "Standard" and "Microsoft 365". Click the Microsoft 365 button (it turns blue with the Microsoft logo). The note below will confirm: "Recipient will get a Microsoft sign-in link. No Shiftctl password needed." This is the key difference — a standard invite sends a link to create a Shiftctl password. An M365 invite sends a link that redirects straight to Microsoft sign-in.
Click Send
Click the Send button. Shiftctl stores a pending invite for that email address in the database and sends the engineer an invitation email. The email contains a link that points to the Microsoft sign-in page via Shiftctl's OAuth flow.
Engineer accepts the invite (their view)
The engineer opens the invitation email and clicks the sign-in link. They are taken to Microsoft's login page. After signing in with their Microsoft 365 credentials, Microsoft redirects them back to Shiftctl. Shiftctl detects the pending invite for their email, creates their Shiftctl account automatically, adds them to your team, and redirects them to the onboarding screen to complete their profile.
The member appears in your team
Once the engineer has completed sign-in, they appear in Team → Members with a "pending" badge removed. Their account is fully active — they can be assigned to on-call shifts immediately. All future sign-ins use the "Sign in with Microsoft" button on the Shiftctl login page.
Bulk inviting with M365 via CSV
For teams of five or more, use the CSV bulk invite. Download the template from Team → Members → Bulk import CSV. The template includes an m365 column — set it to yes for any engineer who should receive an M365 invite, and no (or leave blank) for standard email/password accounts. All other columns (email, role, full_name, phone_internal, phone_mobile) apply to both invite types.
- Mixed teams are fine — some rows
m365=yes, othersm365=no - Invites are sent immediately on upload — one email per row
- If a row fails (e.g. already a member, seat limit reached), the error is shown per-row — successful rows are still sent
Important:The email you invite must exactly match the email on the engineer's Microsoft account. If there is a mismatch (e.g. you invite jane@company.com but her Microsoft account is jane.smith@company.com), the automatic team join will not fire and she will land on the onboarding screen without a team. Contact support to resolve this — do not create a duplicate invite.
Linking M365 to an existing Shiftctl account
If an engineer already has a Shiftctl account created with email and password, they can add Microsoft 365 as a sign-in method without losing any data, history, or team membership. After linking, they can sign in either with their password or with Microsoft — both methods work simultaneously.
Sign out of Shiftctl
The engineer should sign out of their current session. This is required because the Microsoft OAuth flow starts a new authentication session — it cannot run while already logged in.
Click "Sign in with Microsoft" on the login page
On the Shiftctl login page (/login), click the "Sign in with Microsoft" button. This redirects to Microsoft's login page.
Sign in with the same email address
Authenticate with the Microsoft account whose email address matches their existing Shiftctl account. This is the critical step — the emails must match. Shiftctl's authentication backend (Supabase) detects that an account with this email already exists, and links the Microsoft identity to it automatically.
Shiftctl redirects to the dashboard
After Microsoft authentication completes, the engineer is redirected back to Shiftctl and signed in — straight to the dashboard as their existing user. Their team, shift history, and settings are unchanged. The account now has both sign-in methods active.
Both sign-in methods remain active
Going forward, the engineer can use either "Sign in with Microsoft" or their email/password. There is no need to remove the password — both methods coexist. If the engineer later wants to rely exclusively on Microsoft, they can change or remove their password from Manage → Account.
Email mismatch: If the Microsoft account email differs from the Shiftctl account email (e.g. Shiftctl has john@company.com but Microsoft has john.doe@company.com), the OAuth flow creates a brand-new Shiftctl account rather than linking to the existing one. The engineer will land on onboarding without their team. To recover: sign in with the original email/password, then contact your admin to check which email is registered in Shiftctl.
For admins: migrating your whole team to M365
If you want to standardise your team on Microsoft sign-in, the approach is straightforward: communicate the steps above to each engineer. No admin action is required — each person links their own account independently by clicking "Sign in with Microsoft" and authenticating with their company Microsoft account. There is no forced migration and no disruption to active shifts.
SCIM provisioning
Automate user lifecycle management with SCIM 2.0. Connect your identity provider (Microsoft Entra ID, Okta, OneLogin) to automatically provision and deprovision Shiftctl users when they join or leave your organisation.
Automatic provisioning
Users assigned to Shiftctl in your IdP are automatically created as team members. No manual invites needed.
Automatic deprovisioning
Unassigned users are deactivated immediately. They cannot log in and stop counting towards your seat limit.
Attribute sync
Name, email, and external ID are synced from your IdP. Changes propagate on the next sync cycle.
Audit trail
Every SCIM operation (provision, deprovision, link, update) is logged with timestamps, user details, and success/error status.
SCIM provisioning is available on the Enterprise plan. Generate a SCIM token from Manage → Integrations.
Billing & subscriptions
Shiftctl uses Stripe for all billing. Your card details are never stored in Shiftctl. All plan changes, seat adjustments, and interval switches go through a confirmation modal showing exact Stripe-calculated amounts before any charge is applied.
Plans & upgrades
Upgrade or downgrade between Free, Starter, Team, and Enterprise at any time. Upgrades take effect immediately with prorated charges. Downgrades take effect at the end of your billing period — you keep full access until then. The confirmation modal shows the exact amount, what you are gaining or losing, and your next billing date.
Seat management
All paid plans support unlimited members. Seats are billed per user per month (or per year on annual billing). Add seats at any time — the prorated cost is charged immediately. Remove seats and the credit appears on your next invoice. You cannot reduce seats below your current number of active members — deactivate users first from Team → Members.
Invoices & billing history
View all past invoices, download PDFs and receipts, and see your projected next charge from Manage → Billing → View billing history. Each invoice shows a line-item breakdown including proration credits, refunds, and account credits applied.
Security & compliance
Shiftctl is built on enterprise-grade infrastructure with security built in at every layer.
TLS encryption in transit
All data is encrypted in transit using TLS 1.2+.
Row-level security
Database access is scoped per team using Supabase row-level security — no cross-team data leakage is possible.
Hashed passwords
Passwords are hashed using bcrypt and never stored in plaintext.
MFA support
Engineers and managers can enrol TOTP-based multi-factor authentication — prompted during onboarding or at any time from Manage → Account.
GDPR / Privacy Act compliant
Data processing complies with the EU GDPR, UK GDPR, and Australian Privacy Act 1988. See our Privacy Policy for full details.
Stripe-handled payments
We never store card details. All payment data is handled by Stripe.
Infrastructure is hosted on Vercel (edge) and Supabase (EU data region). Read our Privacy Policy →
Account recovery
Lost access to your Shiftctl account? There are several ways to regain access depending on your situation.
Forgot your password
Go to the login page
Visit the Shiftctl login page and click "Forgot password?" beneath the password field.
Enter your email
Enter the email address associated with your Shiftctl account. You'll receive a password reset link.
Check your inbox
Click the link in the email. It will open Shiftctl and prompt you to set a new password. The link expires after 1 hour.
Set your new password
Choose a strong password (minimum 8 characters). You'll be signed in automatically after saving.
Using your recovery email
If you set up a recovery email in Manage → Security, you can use it to receive a password reset link when you no longer have access to your primary email. Contact support@shiftctl.com with proof of identity and your recovery email address, and the team will verify and send a reset link to your recovery email.
Locked out of MFA
If you have MFA enabled but lost access to your authenticator app:
- Recovery codes — If you saved your single-use recovery codes when enabling MFA, use one to sign in. Each code can only be used once.
- Backup SMS (Enterprise) — If you verified a backup phone number, request an SMS code from the login page to bypass your authenticator.
- Admin assistance — Ask a team admin to contact support on your behalf. The admin can verify your identity and request an MFA reset.
- Support — Email support@shiftctl.com with your account email and proof of identity. MFA resets require manual verification and typically take 1 business day.
Microsoft 365 SSO users:If your account is linked to Microsoft 365, you can sign in using the “Sign in with Microsoft” button — this bypasses your Shiftctl password entirely. You can then reset your Shiftctl password from Manage → Security while signed in.
Setting up multi-factor authentication
Multi-factor authentication (MFA) adds an extra layer of security by requiring a time-based code from an authenticator app each time you sign in. We strongly recommend enabling MFA for all team members.
Enabling MFA
Navigate to Security settings
Go to Manage → Security. Scroll to the "Two-factor authentication" section.
Click "Enable MFA"
Shiftctl generates a unique QR code and a manual entry key. Both are tied to your account only.
Scan the QR code
Open your authenticator app (Authy, Google Authenticator, 1Password, Microsoft Authenticator, etc.) and scan the QR code. If you can't scan, enter the manual key shown below the QR code.
Enter the verification code
Your authenticator app will display a 6-digit code that refreshes every 30 seconds. Enter this code in the verification field and click "Verify & enable".
Save your recovery codes
After enabling MFA, you'll be shown a set of single-use recovery codes. Save these in a secure location (password manager, printed copy in a safe). Each code can only be used once and they are your last resort if you lose your authenticator.
Disabling MFA
To disable MFA, go to Manage → Security → Two-factor authentication and click “Disable MFA”. You must be signed in to disable it. After disabling, you will no longer be prompted for a code at login. Your recovery codes will be invalidated.
Supported authenticator apps
Any TOTP-compatible authenticator app works with Shiftctl. Popular choices include:
- Authy (recommended — supports multi-device sync and cloud backup)
- Google Authenticator
- Microsoft Authenticator
- 1Password (built-in TOTP support)
- Bitwarden (built-in TOTP support on Premium)
Changing devices?Before wiping or replacing your phone, either transfer your authenticator entries to the new device or disable MFA in Shiftctl first. If you lose access without doing this, you'll need to use a recovery code or contact support.
Admin management
Admins have full control over team settings, member management, billing, and integrations. Shiftctl enforces safety guardrails to prevent accidental lockouts.
Adding an admin
To promote a team member to admin, go to Manage → Members, find the member, and change their role to “Admin”. Admins can manage team settings, invite or remove members, and access billing — but they cannot delete the team unless they are the original owner.
Removing an admin
To demote an admin back to a regular member, go to Manage → Members, find the admin, and click “Remove admin”. The member keeps their account, shift history, and team access — only their elevated permissions are removed.
Last-admin protection
Shiftctl prevents the last remaining admin from being removed or demoted. This applies across all interfaces — the web app, the API, and SCIM provisioning. If you need to transfer ownership:
- Promote the new admin first (Manage → Members → change role)
- Then demote yourself or have the new admin demote you
- The team will always have at least one admin
Single-admin warning
If your team is on a paid plan and has only one admin, a dismissible amber banner appears across all pages reminding you to add a co-admin. This is a business continuity safeguard — if the sole admin leaves the organisation or loses account access, the team would need to contact support to regain admin control. Adding a second admin takes 30 seconds and eliminates this risk.
Best practice: Every paid team should have at least two admins. This ensures continuity if one admin is unavailable, leaves, or loses account access.
Exporting your data
Shiftctl lets team admins export a complete copy of their team's data at any time. The export is a ZIP archive containing JSON files for each data type.
How to export
Navigate to Team settings
Go to Manage → Team. Scroll to the "Data export" section. You must be a team admin to access this.
Click "Export team data"
A ZIP file will be generated and downloaded automatically. The file is named shiftctl-export-YYYY-MM-DD.zip.
Review the contents
The archive contains: team.json, members.json, shifts.json, shift_slots.json, handoffs.json, tickets.json, pending_items.json, audit_log.json, and export_metadata.json.
What's included
Team metadata
Team name, ID, settings, timezone, and creation date.
Members
All current team members with roles, contact details, and rotation order. Sensitive fields (passwords, tokens) are never included.
Shifts & schedule
The most recent 1,000 shifts and 5,000 shift slots with start/end times, assigned engineers, and completion status.
Handoffs
The most recent 1,000 handoff records including tickets logged, pending items, difficulty ratings, and acknowledgement status.
Tickets & pending items
The most recent 5,000 shift tickets and pending items created during shifts.
Audit log
The most recent 10,000 audit log entries covering all team actions — logins, role changes, settings updates, and more.
When to export
- Before deleting a team — Once the 30-day grace period expires, all data is permanently removed. Export first.
- Compliance or auditing — Provide an offline copy of your team's activity to auditors or compliance teams.
- Migration — Moving to a different tool? The JSON format makes it straightforward to transform and import elsewhere.
- Regular backups — Schedule periodic exports as part of your data governance policy.
Data retention: Enterprise teams can configure automatic data retention policies from Manage → Team. Data older than the configured retention period is purged automatically. Export your data before the retention window closes if you need a long-term archive.
Plans & pricing
Simple per-user pricing — pay only for the members on your team.
Every paid plan includes unlimited members. Upgrade to unlock the features your team needs.
Free
Try ShiftCtl with your first teammate.
- 2 members
- Shift sign-off & handover briefs
- Acknowledgements & escalation
- Pending items & ticket logging
- Warnings & coverage gap detection
- Push & email notifications
Starter
Billed $84/year
Scheduling, analytics and reporting for growing teams.
- Unlimited members
- Everything in Free
- Auto-scheduling by rotation order
- iCal export — Google Calendar & Outlook
- Shift swap requests
- Data Hub — analytics & PDF reports
- Microsoft 365 sign-in
Team
Billed $180/year
Full-stack integrations for established operations teams.
- Unlimited members
- Everything in Starter
- Multiple on-call teams
- PagerDuty / Opsgenie import & live sync
- Slack notifications
- Scheduled PDF reports (weekly/monthly)
- Priority support
Enterprise
Billed $468/year
For large organisations scaling on-call operations.
- Unlimited members
- Everything in Team
- PSA integrations (ConnectWise, Autotask, HaloPSA, Syncro)
- SCIM provisioning for Microsoft Entra ID
- Custom data retention policies
- Admin audit log
- Dedicated support & SLA
Ready to end context loss on your team?
Set up your first on-call team in under 5 minutes.