1. How It Works
The Tech Asset Planner combines two required data sources and one optional source to build an accurate device lifecycle picture, then generates a customer-facing proposal and an internal technician workorder from that data.
- Datto RMM — source of truth for device name, site, device type, CPU, BIOS date, and enrollment date
- CyberDrain COW — supplements with manufacturer warranty start date, serial number, and warranty type
Devices are joined by hostname. Status is based on a lifespan model: each device's estimated in-service date plus the configured replacement age (default 5 years) determines when it is due for replacement. Warranty expiry dates are shown for reference but do not drive scheduling decisions.
2. Datto RMM Export — Step by Step
Datto RMM is the source of truth for device scope, site, and type. The COW data supplements in-service dates but never overrides what Datto says about which devices are managed.
Step 1 — Open AnalyticsLog into Datto RMM and navigate to Analytics in the main navigation.
Step 2 — Create a new reportClick Create Report and choose Aggregate.
Step 3 — Add the Device Details exportUnder Reports and Exports, click Add Report / Export → Exports → Device Details. This adds all standard device columns.
Step 4 — Add Site, Device Type, and Display AdaptersYou must explicitly add Site and Device Type columns — these are required. Also add Display Adapters (recommended): this enables automatic dedicated GPU detection. Any device with an NVIDIA or AMD Radeon (non-Vega) adapter will be auto-flagged 🎮 with the specific GPU model captured for replacement planning.
Step 5 — Set target and runChoose the site(s) to include, run the report, and save the CSV. Load it into the Datto panel in Step 1.
File age indicator: After loading, the panel shows the file's modification date. Green ✅ = under 30 days (current). Orange ⚠️ = 30–59 days (may be outdated). Red 🚨 = 60+ days (stale — refresh before generating proposals). The internal project plan also displays this warning so technicians know if the scope may have changed.
Columns used from Datto: Device Hostname · Site · Device Type · Operating System · BIOS Release Date · BIOS Name · Motherboard · Enrollment Date · Device CPU · Memory · Display Adapters (optional — enables GPU auto-detection; NVIDIA and AMD Radeon non-Vega adapters flagged as dedicated GPU with model captured)
3. CyberDrain COW Export
- In CyberDrain, navigate to COW — Warranty Lookup
- Select All Clients (one export covers all customers)
- Export as CSV and load into the COW panel in Step 1
COW date bug: The StartDate and EndDate fields in the COW export currently contain corrupt ~1970 timestamps (a known CyberDrain bug). Affected values show in amber with ⚠. The app uses ExpireDays to derive a reliable warranty end date, and uses StartDate (when valid and post-1980) as the device's in-service date. When CyberDrain fixes the bug, real dates will appear automatically.
5. The Merge & Join Process
Once Datto and COW are loaded, click Merge & Analyze. Devices are matched case-insensitively by hostname.
| Outcome | What happens |
| ✅ Matched | Device gets COW in-service date (if valid), serial number, manufacturer, and warranty type. Site and Device Type always come from Datto. |
| ⚠️ Unmatched | Device falls back to CPU release date, then BIOS date, then Datto enrollment date for in-service estimation. VMs are naturally unmatched. |
A match rate of ~90%+ is typical. VMs and some remote-only devices won't match — that's expected and handled gracefully.
6. Status & Lifespan Logic
Status is calculated from the estimated in-service date plus the Device Replacement Age setting (default: 5 years). This is the projected replacement date. Warranty expiry is shown in the inventory for reference but does not determine status.
| Badge | Condition |
| Replace Now | Projected replacement date has already passed (in-service date + replacement age < today) |
| Replace Soon | Projected replacement is within 12 months |
| Monitor | Projected replacement is 1–2 years out |
| Good | More than 2 years until projected replacement |
| No Date | No usable date found — not enough information to estimate |
In-service date priority: COW warranty start date (if valid) → CPU release date (from CPU database) → BIOS date → Datto enrollment date. The source is shown in the In-Service Date column with a small indicator: 🖥 = CPU estimated, BIOS = BIOS fallback, 📅 = enrollment date fallback.
What-if modeling: In Step 2, change the Device Replacement Age (3–7yr presets plus custom) and the entire inventory re-classifies instantly. Use this to show a customer what changes if they move from a 5-year to a 4-year refresh cycle.
7. Inventory Table Features
After merging, the inventory table shows all devices with status, in-service date, and other details.
- ⚙️ Columns — toggle which columns are visible
- ⚡ Mass Assign — apply a replacement catalog type to all workstations and/or all servers in the current view at once. This is the fastest starting point — apply a default type, then override individual devices that need something different.
- Replacement Type dropdown — per-device, assign a specific hardware catalog entry. The installed price immediately updates the plan preview. Assignments persist across re-imports.
- ⬡/⬢ VM badge (servers only) — click to toggle a server between Virtual and Physical. Auto-detected from BIOS/Motherboard data; can be overridden manually. VMs have $0 hardware cost and migrate to the replacement host.
- 🎮/⬜ GPU badge — click to flag a device as having a dedicated GPU (vs integrated iGPU). This flag appears in the customer proposal and the internal plan. Important for imaging workstations that require specific GPU specs.
Site filter: When the data covers multiple customers or sites, a client filter panel appears. Check the sites you want to include. The plan and proposal are generated from only the selected devices. Mass Assign also respects the current filter.
8. Hardware Replacement Catalog
The 🛒 Hardware Catalog tab defines the replacement hardware types Kota offers. Assigning catalog types to devices in the inventory drives accurate per-device pricing in the proposal and internal plan.
- Inline editing — click any cell to edit it directly. Enter to save, Escape to cancel.
- ⭐ Favorites — pin frequently used entries to the top of the table and all dropdowns. Click the star to toggle.
- Column sorting — click any underlined column header to sort ascending/descending. Favorites always stay pinned above the sorted results.
- GPU Type — mark each catalog entry as iGPU (integrated) or Dedicated GPU. This drives the 🎮 GPU callout in the customer proposal.
- CTO mode — check "Configure to Order" for entries (typically servers) where no fixed part number exists until the order is placed. The PN field is hidden and a blue CTO badge is shown instead.
- 📦 Archive — when a model is discontinued, archive it instead of deleting. Archived entries are hidden from dropdowns but kept for reference. You can set a successor entry so devices still assigned to the old model get a quick-switch link.
- Distributor PNs — two distributor part number fields per entry. These appear in the internal project plan and CSV export for ordering.
- CPU link — the CPU field links to the CPU database. A green ✓ means the CPU is matched; amber ⚠ means the CPU text isn't in the database yet.
Pricing: "Our Cost" is internal only — never shown to customers. The customer always sees the Installed Price (hardware price + warranty price + labor price at $150/hr). Labor cost ($40/hr) is internal. The margin % is calculated automatically.
9. Building the Proposal
Go to Step 2: Budget & Proposal. Configure the following, then click Generate Deployment Proposal and/or Generate Project Plan (Internal):
| Field | What it does |
| Plan Duration | How many years of replacements to schedule (or One-Time for a single purchase) |
| Device Replacement Age | Expected device lifespan in years (default 5). All status calculations and period assignments use this. Change it to model different refresh cycles. |
| Budget Period | Monthly or quarterly payment buckets (hidden for One-Time) |
| Budget Amount | Available per period — devices are filled into periods up to this limit |
| Cost per Workstation / Server | Global fallback pricing used for any device without a catalog type assigned |
| Refresh Strategy | Controls the order devices are scheduled — see below |
| Order & Install Dates | Shown in One-Time proposals and the project plan header |
Refresh Planning Strategies
| Strategy | How it works | Best for |
| Oldest Devices First |
Schedules devices in order of projected replacement date — most overdue first, across all sites simultaneously |
Single-site, or multi-site where you want to fix the worst hardware everywhere before moving on |
| Location with Most Need First |
Ranks each site by average urgency score, completes all devices at the highest-need site before the next |
Customers who prefer a complete site refresh — fewer site visits, better logistics |
| Blend of Age & Location |
Scores each device 50% by its own urgency and 50% by site urgency — catches critical outliers at lower-priority sites |
Large multi-site deployments needing a balanced approach |
10. Proposal & Project Plan Output
Two separate documents are generated:
- Customer Proposal — client-facing. Shows device list with installed price per device (never shows our cost or labor breakdown), deployment schedule calendar, GPU callouts, and an approval CTA. Catalog type names and chassis are shown so customers understand what they're getting.
- Internal Project Plan — technician workorder. Shows full cost/price/margin breakdown, part numbers, distributor PNs, labor hours, warranty PNs, data source freshness warning, and checkbox columns for tracking each step (Ordered / Received / Installed / Data Transferred / Decommissioned).
Both documents are organized by deployment period. Each period shows the invoice/trigger date, device count, and total cost. The internal plan shows multi-site devices grouped by site within each period.
The ⬇️ Export CSV button on the internal plan exports all device rows with full catalog data — part numbers, distributor PNs, cost, price, labor hours, GPU flag — ready to paste into Autotask or ConnectWise for formal quoting.
11. Printing & Saving as PDF
When both documents are generated, a navy bar appears at the bottom with two separate print buttons:
- 🖨️ Print Customer Proposal — sends only the customer document to the printer. Safe to email.
- 🖨️ Print Internal Plan — sends only the internal technician workorder. Includes the red "INTERNAL USE ONLY" banner.
In Chrome: set Destination to Save as PDF, click More settings, and enable Background graphics — required for the dark blue header and color badges to print correctly.
12. Troubleshooting
| Problem | Solution |
| Site column is empty / all devices show one group | The Datto export is missing the Site column. Re-run Analytics and add Site in Step 4 of the export builder. |
| Device Type column is blank | Same as above — Device Type must be explicitly added. It is not included in Device Details by default. |
| Low COW match rate (<80%) | Hostnames must match exactly between Datto and COW (case-insensitive). Check if COW lists devices under a different name. The merge uses Datto hostnames as the primary key. |
| Merge button doesn't appear | Both Datto and COW files must show a loaded indicator. The Merge button appears automatically once both are loaded. |
| Most devices show "No Date" | The Datto export is missing BIOS Release Date, or COW has no valid start dates. Check that BIOS data is present in the raw file, or add more CPUs to the CPU Database to enable CPU-based estimation. |
| Status doesn't update after changing Replacement Age | Status updates automatically if data is already merged. If you see stale statuses, click Merge & Analyze again to force a full recompute. |
| Catalog assignments are lost | Assignments are stored in browser localStorage. Clearing browser data will erase them. Re-import the files and use Mass Assign to quickly re-apply catalog types. |
| Blue header doesn't print | Chrome print dialog → More settings → enable Background graphics. |
| In-Service Date shows ⚠ amber | This is the known COW date bug — normal and expected. Status and scheduling are unaffected; they use the lifespan model from the in-service date, not the raw warranty end date. |