Purchasing

Managing the Products Catalog

The single source of truth for every purchasable item — and how the Maintenance Part category quietly keeps a second table in sync behind the scenes.

Why a catalog is required

Go to Purchasing > Products. Every line item on a Requisition or PO must reference a catalog entry here — there is no free-text line-item option. This keeps naming, categorization, and cost reporting consistent across every order.

The three categories

Category is required and picked once, at creation:

CategoryWhat it doesProject assignment
Maintenance PartFeeds CMMS parts inventory. Saving one auto-creates (and keeps in sync) a matching row in Parts.Can't take a project. Quantity must stay a whole number.
Stocked MaterialLandscape supplies kept on hand (mulch, seed, fertilizer).Can optionally be assigned to a project on a PO/Requisition line.
Project MaterialJob-specific materials bought for one particular job.Can optionally be assigned to a project on a PO/Requisition line.
Enforced at the database, not just the form. A trigger on both PO and Requisition line items blocks a Maintenance Part line from ever carrying a project_id — added specifically after two separate UI paths (an inline line edit, and adding to an existing PO/Requisition from a Project's detail panel) were found to let it slip through. It's not just a form validation; it can't happen at all now, from any screen.

Adding a product

Click + New Product. The Details tab has: Name (required), Category (required), Part Number/SKU, Vendor (with inline “create new vendor”), Unit Cost, Sale Price, Description, and a “Track inventory quantity” checkbox that reveals a Quantity on Hand field when checked.

Selecting category Maintenance Part reveals an additional highlighted block: Part Category (a dropdown of your org's configured CMMS part categories) and Min Stock. Neither field appears for Stocked Material or Project Material.

Files and photos

Open a product and use its Files tab to attach spec sheets, safety data sheets (SDS), manuals, or photos of the item. Drag files in or click to upload; images, PDFs, Word, Excel, CSV and text files are accepted. Attachments are stored per product and can be downloaded or deleted from the same tab.

Chemical tracking

Checking Track Chemicals reveals a second Chemical tab: Scientific Name, EPA Registration #, EPA URL, Label Instructions, Client Route Sheet Instructions, Re-Entry Interval, a “Restricted Use Product” flag, and a repeatable list of Active Ingredients (name + percentage). Use this for any fertilizer, herbicide, or pesticide product where label compliance and client-facing route sheets matter.

Confirming what was applied. When a visit is dispatched, its service's chemicals are loaded onto it at the planned amount. That is only an estimate: it is not counted in the Chemical Tracking report or taken out of stock until someone confirms the amount actually used, or marks the product Not used. Under Settings > Chemical Tracking > Who Confirms Chemicals Applied choose Crew (the default) — the crew enters the amounts on the stop, and can't Stop Job until they do — or Office adds amounts later, which removes that requirement. The office can confirm from the visit's Chemicals tab (Confirm all as planned, or edit and Save a row), and an admin can click Allow completing without confirmation for a single visit. Chemicals added by hand are recorded as entered and don't need confirming.

Estimated amounts. With Settings > Chemical Tracking > Default Chemical Quantity on and an Area Custom Field chosen (for example Turf Sq. Ft.), the planned amount is the product's default Application Rate multiplied by the property's area. The rate's area unit is honored, so a rate “per 1,000 Sq Ft” or “per Acre” is converted to square feet before the math, and a field measured in acres or square yards is converted too. The built-in takeoff fields count as an Area Custom Field, and a job with no property of its own uses the client's property when the client has exactly one. A client with two or more properties and no property on the job gets no estimate rather than a guess. Start and end time inputs on the application record are optional.

Which area is used. Three things can change the area, in this order: (1) a treated area on the job service — typed on the estimate line's notes menu (Treated Area tab) and carried to the job, or edited on the job's Services tab — for a spot treatment or just the front lawn; (2) the service's own Area measurement for chemical quantities (Services & Pricing → the service → Chemicals tab), for example Parking Lot / Hardscape Sq. Ft. on a parking-lot weed control service; (3) the org's Area Custom Field above. Any measurement, including a Number custom field, is read from the property first and then from the client. The Materials Needed report, the Daily Load List, the crew's preloaded amounts and the application panel all use the same order, so they agree. Rate Matrix pricing uses the same property-then-client lookup for its keyed field.

Per-linear-foot rates. Perimeter and barrier products are often labelled per linear foot. Add an area unit such as “100 Linear Ft” or “1,000 Linear Ft” (new orgs get both), use it on the product's Application Rate, and set the service's area measurement to a linear-foot field such as Linear Ft. Perimeter or Linear Ft. Edging. A linear-foot rate is only sized from a linear-foot field, and a square-foot rate only from an area field: when they don't match, no amount is estimated and the Daily Load List and the application panel say why, so enter that amount by hand. A treated area on the job service is in the same unit as the field the service sizes from. Fields that can't size a rate, such as Yards of Mulch or a count, aren't offered.

Stock. When a visit is completed, each confirmed, used chemical application takes its concentrate amount out of the product's on-hand quantity, converted into the unit of the product's default Application Rate (the product needs one, and “Track inventory quantity” on). Changing the amount, marking it Not used, deleting it, or reopening the visit puts the stock back, and a deduction never takes the quantity below zero or blocks completing the job. Stock quantities on a product can have decimals.

Notice of Treatment (the leave-behind). Everything recorded on a visit — date, time, weather, applicator and license number, and each product with its EPA Registration #, amount, method and target — can be turned into a customer-facing notice that replaces the paper carbon copy. Re-entry intervals and each product's Client Route Sheet Instructions appear under “Recommended procedures”. Three ways to use it: Print Notice on the visit's Chemicals tab; Send Email (the notice goes in the message in a compact form, and a full PDF copy is attached unless you untick Attach the Notice of Treatment as a PDF; the email template tag [chemicalnotice] drops the compact notice anywhere in the message); or an automation on a completed visit with [chemicalnotice] in its email, which is how clients billed under a contract — and so never get an invoice — still receive the record. Use that tag in an email with little or no wait after the visit, because it reads the client's most recent completed visit.

Three kinds of chemical email. Send Email on the visit's Chemicals tab lets you choose an Email type: Client Instruction (the notice of what was applied, with care instructions), Recommendation (something the technician noticed, such as a future treatment, watering, or damage) and Upsale (other services the client could add). Build the templates under Documents, choosing Chemical – Client Instruction, Chemical – Recommendation or Chemical – Upsale as the type; each email type offers only its own templates. A Recommendation or Upsale can be sent on any visit, even one with no chemicals recorded.

Reference Library (labels and Safety Data Sheets). Open Reference Library in the Tools sidebar to keep every chemical label and Safety Data Sheet in one place, along with SOPs, training material and equipment lists. Upload documents takes PDFs, images, Word and Excel files, several at a time; each one gets a type (SDS, label, SOP, training, equipment, other), an optional revision date, and the chemical products it covers. Documents linked to a product appear on that product's page under Labels & Safety Data Sheets and open from the crew's View label on a stop. You can also add one straight from the product: Add document on its page uploads the file into the library already linked to that product. Everything in the library is also on the crew app's Reference screen (browser and iOS/Android), with search and filters; untick Show to crews to keep a document office-only. Anyone with a CRM seat can open the library; adding, editing and deleting needs the CRM Settings permission.

Working through a day in the Chemical Tracking dialog. Open it from the Dispatch Board's Chemical Tracking button. Save & Next saves any chemical you edited on the open visit and moves on (visits you didn't touch are left as they are, so nothing is confirmed by accident); Previous and Save & Close save the same way. Each visit shows whether its Notice of Treatment email has been sent, and Send notices shows how many of the day's visits have gone out. Conditions records one temperature, wind and pH for every chemical actually applied on the day's visits at once (a chemical marked Not used is left alone), and Fill from weather there (and on each visit's own Conditions box) pulls the temperature and wind from the National Weather Service — the same service as the board's weather chip — for the day being closed out: the reading nearest when the crew started (or midday, if nobody clocked in), when that is within the last week. You can edit the figures before saving. If the weather service can't be reached it says so, so you can try again rather than type the figures in.

Sending many notices at once. In the Chemical Tracking wizard click Send notices, or select visits on the Dispatch Board and choose Actions > Send Chemical Notices. The dialog sorts the visits into ready to send, already sent, no email on file, email bounced and no confirmed application. Choose a template (or edit the subject and message), decide whether to attach the PDF, and click Send. Each client gets their own email with their own visit's products, amounts and conditions. Only the ready visits are sent, so running it twice never double-sends unless you tick Also re-send. A progress bar shows the send, and any failures are listed afterwards with the reason.

Printed chemical route sheets. On the Dispatch Board choose Print > Chemical sheets (or Print route sheets in the Chemical Tracking wizard). Each chemical stop prints two landscape pages: the crew's copy (planned amounts, label instructions, blanks for time, weather and what was actually used), then a full-width notice for the customer with the amounts and weather left blank to write in, so the page can be handed over or torn off cleanly.

Compliance report. The Chemical Tracking report lists applications on visits that are in progress or completed, in a compact set of columns that prints landscape and exports to a readable PDF.

Unit Cost vs. Sale Price vs. a PO line's actual cost

A product has two money fields: Unit Cost (what you pay) and Sale Price (what a client is charged, used elsewhere in job/estimate pricing — not used by Purchasing at all). Only Unit Cost is touched by receiving.

The catalog's Unit Cost is a suggestion, not a lock. When you add the product to a new PO or Requisition line, the line pre-fills from the catalog cost (via whichever costing method your org uses — see the Inventory Costing Methods guide) but the line's cost field is fully editable from there. Changing it on the line does not write back to the catalog — the two can silently diverge, and that's expected.

Archiving a product

Deleting a product is a soft delete — it sets an internal “removed” timestamp rather than actually erasing the row, even though the confirmation dialog says the action “cannot be undone.” An archived product disappears from the catalog list and can no longer be selected on a new line, but every PO or Requisition that already referenced it is unaffected — those records store their own copy of the name, part number, and cost at the time they were ordered, so historical documents keep displaying correctly. There is currently no Restore button anywhere in the UI; reactivating an archived product requires a direct database change.

Deleting a Maintenance Part product also retires its matching CMMS Part (and that part's asset links), so a part never stays in the Parts list and the PO part picker pointing at a catalog product that no longer exists. If a product is ever moved into the Maintenance Part category (through the API), its CMMS part is created, or an unlinked part with the same part number is adopted; moving it out retires the part.

Bulk import

Products can be bulk-imported from two places — the Products page toolbar, and Settings > Equipt Settings > Import/Export — both calling the same underlying import logic, see the Import & Export guide for the general mechanics. A few product-specific details worth knowing:

  • Category is normalized loosely. Values like “parts,” “stock,” “supplies,” or “job” are all recognized and mapped to the correct category — you don't need the exact enum spelling in your spreadsheet. A row with an unrecognizable category, or a missing name, is skipped rather than failing the whole import.
  • Re-imports only touch what the file carries. For a product that already exists, a blank quantity, cost, price or vendor cell leaves the saved value alone (a cost-only file doesn't zero the stock), and a quantity that is filled in is applied as a recorded stock adjustment. Quantities can be decimals for materials; maintenance parts must be whole numbers, and a negative or non-numeric quantity fails that row with the reason shown. A vendor name is linked to your existing vendor when exactly one vendor has that name (not case-sensitive).
  • Dedup only works by Part Number. A row whose part number matches an existing product updates that product instead of creating a duplicate. Rows with a blank part number always insert as new — two rows with the identical name but no part number become two separate catalog entries, not one.

Gotchas

  • Product names aren't required to be unique. Only Part Number is deduplicated (and only when it's non-blank) — nothing stops two products from sharing the exact same name.
  • The delete confirmation is misleading. It reads “This action cannot be undone” but the underlying operation is a reversible soft delete.
  • Maintenance Part quantities must stay whole numbers, enforced by the database on the product, and again on every Requisition, PO, and receiving line that references it — attempting a fractional quantity (e.g. via a CSV import) fails with a database error rather than a form warning. Stocked Material and Project Material support two decimal places (e.g. partial yards of mulch).
  • The two import entry points require slightly different columns — the Products-page importer doesn't require Part Number, the Settings-tab importer does — even though both run identical logic underneath.
© 2026 Landscapt. All rights reserved.