Prepare your Autotask before onboarding: the setup checklist
Current's Autotask connection is deep — it reads thirty-odd entities and writes back to a dozen. That depth means the quality of your first sync is decided in Autotask, not in Current. This is the article to read before you paste a single credential: what to create, what to clean up, and what to turn on, so that the first pull and the first push both land.
Work through it in order. When you're done, use the "You're ready when…" checklist at the bottom as your sign-off. For the connection walkthrough itself, see "Connect Autotask and choose what syncs". For the field-level detail on what maps where, see "Autotask sync: the complete field-mapping reference".
Step 1 — Create a dedicated Autotask API user
Use a dedicated API user for Current, not a shared one and not a human login. The reason is attribution and control: Current's traffic shows up separately in Autotask's own API usage reporting, and the credential can be revoked on its own without touching a person's login. What a dedicated API user does NOT do is buy Current its own request quota — Autotask's hourly request threshold is shared across every integration hitting your Autotask database, so your RMM, your reporting tool, and Current all draw on the same budget no matter how many API users you create. Current reads ThresholdInformation before each 5-minute delta pull and defers the run once the account crosses 80% of the threshold, resuming automatically.
- 1Create the API user in AutotaskAdmin → Resources (Users), New → New API User. Give it the API User (API-only) security level. Current's connection card says the same thing in its setup hint.
- 2Generate the username, secret, and tracking identifierAutotask issues all three. The tracking identifier (also called the integration code) is required — Current sends it on every single API call, and Autotask rejects requests without it.
- 3Name it recognisablySomething like current-sync@yourmsp.com. It shows up in Autotask's own API usage reporting, and you'll want to be able to tell Current's traffic apart from your other integrations at a glance.
- 4Do not fill in a zone URLCurrent discovers your Autotask zone automatically from the API username alone — Autotask's zone lookup is a public endpoint keyed by username, so no credentials are even needed to resolve it. Leave the API zone URL field blank unless someone at Autotask has explicitly told you to pin a specific zone.
Step 2 — Grant the permission set
Autotask permissions are per-object. Current needs read on everything it pulls, add/edit on everything it pushes, and — easily the most-missed item — read on entity metadata, because that's how Current resolves your picklists (status, priority, project type, task type, department, market segment) live instead of guessing at hardcoded ids.
Grant read access to all of the following. The right-hand column is what you actually lose if that permission is missing.
| Autotask entity (read) | What Current uses it for | Missing it means |
|---|---|---|
| Projects, Phases, Tasks | The whole project module — boards, timeline, dependencies, critical path | The project module stays empty. A denied Projects read fails the project entity and is named in the sync summary ("FAILED: project …") and stored in last_error — but it does NOT by itself turn the connector red. Current only paints the connector red when EVERY core entity (projects, phases, tickets, tasks) fails in the same run, and the 5-minute delta sync never reds it at all. Read the sync summary / Sync Health, not the badge, to catch a Projects permission gap |
| TaskPredecessor, TaskSecondaryResources, TaskAttachments | Dependency edges, secondary assignees, attachment counts on the task drawer | Dependencies don't import (quietly); secondary assignees and attachment counts stay blank |
| Tickets, TicketNotes, ChecklistItems | Project tickets and the read-only company ticket history behind account insight | Tickets stay empty. Note that tickets are only useful *after* projects have synced — Current attaches project tickets to tracked projects, so projects must land first |
| TimeEntries | Real worked hours on tasks, and mirroring Autotask-native time back into Current | Task worked-hours read as zero — Current never fakes them from estimated-minus-remaining |
| Resources | Your staff list, and the link between an Autotask resource and a Current login | A denied Resources read is the dangerous one: it's an advisory-tier failure, so the connector stays GREEN while nobody gets linked — and every unlinked person is then blocked from logging time at all ("Your account isn't linked to an Autotask resource yet"), with an empty My Day and no PTO in the scheduler. See Step 3 |
| Roles, ResourceRoleDepartments | Which role each resource can legally hold on a task or time entry | Role-activeness filtering silently switches off, and task assignment or time push gets rejected by Autotask |
| BillingCodes | The allocation/billing code list on the time entry dialog | No billing codes to choose from, and the task-assignment recovery path has nothing to fall back on |
| Contracts, ContractServices, ContractServiceUnits, Services | Contract names on time entries, plus MRR, seat counts, and customer status in the CRM | MRR and seats read as zero; companies won't show as customers |
| Companies, Contacts, CompanyNotes, CompanyToDos, CompanyAttachments | The CRM book: companies, partner contacts, activity history, to-dos, attachments | The CRM is empty |
| Opportunities, OpportunityAttachments, Quotes, QuoteItems | Deals in the pipeline, and the signed quote PDF on the deal drawer | Pipeline is empty; signed quote PDFs don't render |
| ProjectCharges, TicketCharges | Charges pushed from won quotes, mirrored back | Charge history doesn't refresh |
| ServiceCalls, ServiceCallTasks | So that rescheduling a task drags its booked service calls with it | Service calls stay put when the task moves |
| Holidays, TimeOffRequests, Appointments | The working calendar the scheduler respects — days off, PTO, busy blocks | Scheduling books work on holidays and over PTO. Optional entities: if your zone doesn't expose them at all, Current warns and moves on |
| ThresholdInformation | The API budget check that keeps Current from exhausting your request quota | This one is required for the connection test itself to pass |
If you want Current to write back — and most of the platform's value depends on it — also grant add and edit on these:
| Autotask entity (add/edit) | Written when |
|---|---|
| Projects | You build a Current-native project, playbook, or template into Autotask (create only — Current never edits an existing Autotask project) |
| Phases, Tasks | The same build, and every task reschedule, status change, or reassignment |
| TaskSecondaryResources / SecondaryResources | You add or remove a secondary assignee on a task |
| TimeEntries | Someone submits time (create only — Current never edits or deletes an Autotask time entry) |
| TaskNotes, TicketNotes | A time entry posts its summary as a note, or someone comments on a task |
| Tickets, ChecklistItems | A won quote converts into a service ticket, and when a ticket's status or fields are changed in Current |
| Charges (on Projects and Tickets) | A won quote's product lines are pushed as charges |
| Companies, Contacts, CompanyNotes, CompanyToDos | CRM pushes — a new company, contact, logged note, or to-do |
| Opportunities | A deal is created or moved to a new pipeline stage |
| ServiceCalls, ServiceCallTasks, ServiceCallTaskResources | A service call is booked from Current (all three are written — the call, the task link, and the resource attachment), and when a task with booked service calls is rescheduled (Current patches the call's start/end to follow the task) |
Finally, the API user needs permission to read entity metadata (Autotask's entityInformation/fields) on the entities Current resolves picklists for. If metadata is blocked on Projects, project builds hard-fail because the project type can't be resolved. If it's blocked on Tasks, every required task field goes unfilled and Autotask rejects the creates one field at a time.
Metadata (picklist) read required on: Projects Tasks TaskNotes Tickets TicketCharges TimeEntries Resources Companies CompanyNotes CompanyToDos Contacts Contracts Opportunities ProjectCharges
Step 3 — Resources: the single highest-value thing to get right
Everything personal in Current — logging time, My Day, PTO-aware scheduling, cost and margin, an account executive's CRM book — hangs off one link: the Autotask Resource ↔ Current user match. Current makes that match automatically on a lowercase email comparison. That is the only automatic match; there is no name-based fallback.
| Get this right in Autotask | Why | What breaks if you don't |
|---|---|---|
| The resource is Active | Current only pulls resources where isActive is true | An inactive resource is never pulled at all, so it can't even be linked by hand |
| Resources.email exactly matches the person's Current sign-in email | This is the match key — case-insensitive, but otherwise exact | No link. Time entry is blocked with "Your account isn't linked to an Autotask resource"; My Day is empty; their PTO and busy blocks never reach the scheduler; they get no cost rate; and an AE's whole CRM book stays invisible to them |
| Resources.email is populated at all | When email is empty, Current falls back to the resource's userName | A userName that isn't an email address will never match a profile, so the link silently never happens |
| Internal Cost (Burden Rate) on the resource's HR tab | Feeds cost and profitability reporting | No cost data. Note the trap: internalCost comes back as 0 when the API user lacks View permission on internal cost data — and Current treats 0 as "not provided" rather than a real zero, so it never overwrites a rate you typed in by hand. Rates above $10,000/hour are skipped with a warning |
| An active Role, held through an active Resource Role/Department association | Autotask refuses a project time entry unless the resource+role pair is a defined, active combination | Time entry rejected: "your Autotask resource has no role defined for this project." Task assignment fails with "give them an active role/department in Autotask first." Ticket creation degrades — the ticket is created unassigned, with a warning |
Step 4 — The picklists and codes that make writes succeed
Autotask enforces required fields at write time. Current auto-fills any required field that happens to be a *picklist*, using your zone's own default value (or the first active value). What it cannot invent is a required free-text, numeric, or reference field — and what happens then depends on the surface. On a CRM company push, an unfillable required field stops the push with "Autotask requires field(s) Current can't auto-fill," and it will not auto-retry until a human supplies the value. On a project/task build, Current attempts the creates anyway and then tells you afterwards which required task fields it couldn't fill ("set them in the task drawer, then build again"). On a won-quote ticket create, you'll simply see Autotask's own rejection. Either way, audit your zone's required fields on Companies, Projects, Tasks, and Tickets before you go live.
| Autotask config | Required for | If it's missing |
|---|---|---|
| At least one active, non-Template Project Type | Creating any project in Autotask from Current (build, playbook, template, won quote) | Hard failure: "Couldn't read a valid Autotask project type for this workspace." Template-named types are always excluded, so a zone whose only active types are templates counts as having none |
| At least one active general allocation (labor) Billing Code | Assigning a resource to a task (and it populates the allocation-code picker on the time entry dialog) | Hard failure on assignment: "Autotask needs a billing/allocation code on this task before a resource can be assigned." Current prefers a General Allocation Code whose name looks like Standard / Regular / General / Default / Hourly / Labor. Time entries are different: Current sends a billing code only if one is picked — the same way it treats contract and work type — and only makes it a required pick once codes have synced. If Autotask rejects an inactive code, Current auto-retries with an active one |
| At least one value in the Tasks Department picklist | Any edit to a task that already has a resource assigned | Autotask refuses the update outright — it demands a departmentID on every patch of an assigned task. Current tries the task's own department, then the resource's default department, then any active department value; with none of the three, the write fails |
| A Project status like New / Active / In Progress / Open / Not Started | Nothing — this one is optional | Current simply omits status on create and lets Autotask apply its own default |
| At least one Ticket Queue, plus creatable Ticket status and priority values | Converting a won quote into a service ticket | Hard failure — the queue is mandatory, and Current stops with "Couldn't resolve a valid Autotask ticket status/priority for this workspace" if either picklist has no usable value |
| A Charge Type value (Current prefers one labelled Operational) | Pushing charges from a won quote onto a project or ticket | Autotask rejects the charge with "Missing Required Field chargeType". Every charge line also needs exactly one of an Autotask product or a billing code — Current will tell you: "This charge needs an Autotask product or billing code before it can be pushed" |
| A Note Action Type on Company Notes | Pushing a CRM note to Autotask | Soft degrade, not a failure: the activity is saved in Current and parked with "this Autotask zone has no note action type to file it under" |
| A Ticket type/category that accepts time | Logging time against a ticket | Autotask exposes no readable per-ticket flag for this — the rule lives in your ticket type and category configuration and is only enforced when the time entry is created. Current learns it from Autotask's rejection, marks that ticket as not accepting time, and self-heals the moment a post succeeds |
Step 5 — Clean the company book before you pull it
This is the step most MSPs skip and most regret. Current pulls Autotask Companies with no filter at all — there is no active/inactive flag on the Autotask Companies pull, and Current has nowhere to store one. Every dead, archived, or long-dormant company in your Autotask lands in Current as an ordinary company, indistinguishable from a live one, and shows up in the CRM, in search, and in the prospect pool.
- +Merge duplicate companies in Autotask FIRST. Current matches companies on the Autotask id and nothing else — no name matching, no domain matching. An Autotask duplicate becomes a permanent Current duplicate.
- +Fix blank company names. A company with no companyName imports with the literal placeholder name "Autotask company 12345".
- +Audit the companyType, classification, and marketSegmentID picklists for DEACTIVATED values still sitting on live companies. Current drops inactive picklist values when it builds its label map, so those companies import with a blank type, classification, or segment — the id is there, but there's nothing to show for it.
- +Set ownerResourceID (the account owner) on every company you care about, and make sure that owner's resource is linked to a Current user. Unlinked, the company shows no account manager — and a later company update push fails loudly.
- +Pre-create every Market Segment value you'll need. Autotask's REST API can't create market segments, so Current never will either — an unmapped industry is skipped with a warning, not guessed at. Then fill in the mapping; see "Mapping CRM industries to Autotask Market Segments".
- +Check whether your zone exposes a Lead Source picklist on Companies. The field's API name varies by zone, so Current scans your live field list for a picklist with "lead" in its name or label. If there isn't one, lead source stays a Current-only field and never reaches Autotask.
- +Confirm your zone exposes primaryContact on Contacts. If it doesn't, every contact imports with the primary-contact flag off, and Current logs one warning per sync run to tell you.
- +De-duplicate contact email addresses in Autotask, so Current can enforce one contact per email cleanly.
Step 6 — Contracts, holidays, and PTO
These three drive MRR, seat counts, customer status, and the working calendar the scheduler books against. Each has a specific shape Autotask has to be in.
| What to check | The exact rule |
|---|---|
| Recurring contracts | Current only pulls the service lines of contracts whose contract TYPE label contains "recurring" and whose STATUS label resolves to active. A contract that doesn't meet both conditions contributes nothing to MRR, and its company won't roll up as a customer |
| Contract service units (seats) | Seat counts come from Autotask's separate ContractServiceUnits entity, not from a units field on the contract service — that field doesn't exist. The units rows must be date-effective TODAY. Autotask omits the row entirely when a period's units are zero |
| Holiday set | Holidays pull from your Autotask holiday sets, filtered to dates from the last 365 days onward. Be aware: Current merges ALL holiday sets into one calendar — there's no per-location filtering, so a multi-region holiday set list becomes the union of every date in it |
| Time off | Only APPROVED time-off requests become PTO blocks, and only for resources that are linked to a Current user. Approved-but-unlinked time off is skipped entirely |
| Appointments | Pull in as generic "busy" markers only. The appointment subject line is deliberately never stored, because availability is readable across the workspace and Autotask appointments often mirror private Outlook events |
See "Holidays and employee costs: where the numbers come from" for how these land in the app, and "Logging time and how it reaches your PSA's billing" for the full time-entry lifecycle once your resources are linked.
Step 7 — Set the two Current-side gates before you QA
Two switches inside Current are deliberately closed by default. Neither is an Autotask setting, but both will stop a write dead if you don't know about them, and both belong in a go-live plan.
- 1CRM write mode starts at OFFEvery CRM write to Autotask — companies, contacts, notes, deals, to-dos — is blocked until an admin opts in. Off means no Autotask writes at all.
- 2Create a test company in Autotask before you QATest mode is the middle rung: it allows CRM writes only against companies whose live Autotask name starts with "ZZ-Current Test" (companies named with the older "ZZ-Cascade Test" prefix still count). Create one in Autotask now, so your team can exercise the whole flow without touching a real account.
- 3Flip to live deliberatelyLive mode is an explicit admin action, not a default. Move to it only after test-mode writes have landed correctly in Autotask.
- 4Map your pipeline stagesPushing a deal to an Autotask Opportunity requires a mapping from each Current pipeline stage to an Autotask Opportunity stage. Set it up under Integrations before your first deal push, or you'll get "This deal's stage isn't mapped to an Autotask Opportunity stage yet."
You're ready when…
- +A dedicated Autotask API user exists with the API User (API-only) security level, and its username resolves in Autotask's zone lookup.
- +That API user has READ on every entity in the table above, ADD/EDIT on every entity you intend to push, and metadata (picklist) read on Projects, Tasks, Tickets, TimeEntries, Resources, Companies, Contacts, Contracts, Opportunities and the note/charge/to-do entities.
- +The API user has View permission on internal cost data — otherwise every internal cost silently reads as 0.
- +Every person who will use Current has an ACTIVE Autotask resource whose email matches their Current sign-in email, exactly (case aside).
- +Each of those resources holds an ACTIVE role through an ACTIVE Resource Role/Department association.
- +At least one active general allocation (labor) billing code exists.
- +At least one active, non-Template project type exists.
- +At least one value exists in the Tasks Department picklist.
- +For won-quote conversion: at least one ticket queue exists, plus usable ticket status and priority values, a charge type value, and a product or billing code on anything you'll charge.
- +You know which of your Autotask ticket queues are machine noise rather than customer work — alerts and monitoring, RMM automation, backup and BDR jobs, spam and internal-IT — so you can mute them and keep support history, sentiment, SBR stats, and AI insights honest. The setup wizard's Mapping & noise step flags the usual suspects "Recommended off" and you decide; the same toggles live in Integrations → Autotask → Manage. See "Ticket-queue noise: which queues and boards to sync, and which to mute".
- +Duplicate companies are merged, blank company names are fixed, and dead companies are the ones you're genuinely willing to import — because all of them will import.
- +No live company points at a deactivated companyType, classification, or market segment picklist value.
- +Every market segment you need already exists in Autotask.
- +Recurring contracts carry a type label containing "recurring" and an active status label, with current-dated contract service unit rows behind them.
- +A holiday set is populated, and time off is approved.
- +A "ZZ-Current Test" company (or a legacy "ZZ-Cascade Test" one) exists in Autotask for your CRM write-mode test pass.
