Landscapt (CRM)

Jobs & Packages

The six job types, how a job's status differs from a visit's status, and how a Package template turns into a billed job.

The six job types

Every job in Landscapt's crm_jobs table is exactly one job_type:

TypeWhat it's forHow it's created
RecurringA repeating service on a schedule — mowing every week, fertilizer every 5 weeks. Generates a visit for each occurrence, through an optional End Date.Convert Estimate to Job, or Jobs → Add Job
One TimeA single visit, no recurrence.Convert Estimate to Job, or Jobs → Add Job
ProjectA one-off landscaping job tracked separately from recurring service — the Landscapt equivalent of a cost-tracking bucket, for a job like a patio install or a large cleanup.Convert Estimate to Job, or Jobs → Add Job
Waiting ListNo fixed date — only a date range. Surfaces on the Waiting List page for opportunistic dispatch when a crew is nearby.Convert Estimate to Job, or Jobs → Add Job
PackageA bundled recurring service program (e.g. a 7-Step Fertilizer plan) billed as one fixed monthly amount.Jobs → Add Job only — not converted from an estimate
SnowStorm-based scheduling and service entry — snow/ice events rather than calendar dates.Jobs → Add Job only — not converted from an estimate

Dispatch Board, Waiting List, and Snow Jobs each get their own deep-dive guide — this page covers job types broadly, and goes deep on Packages and Projects specifically. See See also below for the others.

Creating a job

Two paths onto the schedule:

  • Convert to Job — from an accepted estimate, pick a Job Type of One Time, Recurring, Project, or Waiting List. The estimate's services, quantities, pricing (net of any discounts), and crew size carry over onto the job. See the Estimating guide for the full walkthrough.
  • Jobs → Add Job — the direct path for any type. The dialog opens with a Job Type selector (One Time, Recurring, Package, Project, Waiting List, or Snow, as available to your org); switching type swaps in that type's own fields. This is the only way to create a Package or Snow job.

The client picker in Add Job is searchable — type part of a name or an account number to find the account. Only clients appear in it:

Leads can't have jobs. Leads and lost leads are left out of the picker, and the system refuses to create a job for one no matter where the request comes from (in-app, API, Zapier, or an import) — you'll get an error telling you to convert the lead first. Open the lead, click Convert to Client, confirm, and then create the job. See the Clients guide for what conversion does.

What each type asks for in Add Job:

  • Recurring — a service, a schedule, a Start Date, and an optional End Date (the season end). When a schedule and start date are set, the visits are generated automatically the moment the job is created — no separate step. Later, Generate Visits on the job fills in anything missing through the End Date (or through the end of the year when no End Date is set), up to 60 visits per run; a job whose End Date has already passed generates nothing.
  • Package — pick the package program and a Start Date. Each step's date window and rate are seeded from the package template (rates default from the package or the service's own pricing). Changing the Start Date shifts every step window by the same number of days, so a program that starts two weeks late re-anchors as a whole instead of leaving its steps on the template dates. The dialog shows the billing summary as Monthly $X · Total $Y — the total is the sum of the step rates, spread evenly over the months the program covers.
  • Snow — service, days authorized, inch trigger, invoice type, and rate. Picking a service fills in its default rate only while the rate is still blank; a rate you've already typed is never overwritten by choosing a service afterward.
  • One Time, Project, Waiting List — a service line (or several), date or date range, crew, and team size.

The Team / Men count entered in the dialog lands on the job's visits, so the Dispatch Board's Men column shows the right headcount from the first visit.

Where a job's value comes from

A job's dollar value is the sum of its included service lines. That one number is what the Dispatch Board's AMT column, the visit detail sheet's costing, and the Jobs card on the client record all show — so re-pricing a service line on the job updates every one of those places at once, and the three can no longer drift apart.

Finding jobs on the Jobs list

The Jobs list has three tabs — Active, Unscheduled, and Completed. The Active tab's From / To date range applies to every job, keyed on the job's next pending visit: a job whose next visit falls outside the window isn't listed, including overdue jobs whose next visit is already in the past. The filter means exactly what it shows.

To see overdue work, widen From back past the oldest date you care about. Earlier versions let overdue jobs bypass the window, which made the default 30-day range look broken (March jobs showing up under a September window) — that carve-out is gone.

Job status vs. visit status

These are two separate state machines, tracked at two different levels, and it's easy to conflate them:

  • Job status — one value on the job itself: scheduled, in_progress, completed, cancelled, skipped, or hold. This reflects the job as a whole — is it still active, done, or paused.
  • Visit status — every individual scheduled occurrence of a job (each time a crew is sent out) has its own status: scheduled, dispatched, in_progress, completed, cancelled, or skipped. A recurring job with a season's worth of visits has one row per visit, each cycling through this list independently.
Worked example. A recurring mowing job runs weekly, April through October — 28 visits. The job is created once with status scheduled, flips to in_progress after the first visit goes out, and stays in_progress for the whole season — it doesn't become "completed" until the last visit is done or the job is closed out. Meanwhile visit #14, say, moves on its own from scheduled dispatched (crew assigned) → in_progress (crew on site) → completed, while visit #15 next week is still sitting at scheduled. A single skipped or cancelled visit doesn't change the job's status — the job only reflects its own state, not a rollup of every visit.

A job in the hold job status pauses future scheduling on that job without cancelling it outright — the CRM Client record itself has a related but separate on_hold value in its own status field, which is about the client relationship, not any one job.

Packages, in detail

CRM > Settings > Packages bundles a set of recurring services under one named program — e.g. a "7-Step Fertilizer" plan. A package has a name, an internal code, a description, client-facing wording for how it appears on an estimate, separate wording for how its visits appear on invoices, and a visits_per_season count.

The package's Services tab is where each visit in the program is defined, one row per visit. Per visit you set:

  • Which service it uses (e.g. "Fert Application 1"), and an optional display name distinct from the service (e.g. "Visit 1")
  • A date window (start/end) the visit should land inside
  • Minimum days (Min Days) that must elapse between it and the step before it in the sequence
  • Default budgeted hours and a default rate, used to seed the job once a client signs up
Worked example — "Gold Maintenance," three bundled services. The template defines three rows on the Services tab: Mowing (visits_included high, weekly cadence via min-days), Spring Cleanup (one visit, dated window in March–April), and Fall Cleanup (one visit, dated window in October–November) — each with its own default budgeted hours and rate. None of that is a dollar amount a client is billed; it's a cadence and cost template. Only once a client actually signs up does a real package-type job get created from the template, and that job — not the package — is where the fixed monthly billing amount, any discount, and renewal terms actually live. Two different clients signed up to the same "Gold Maintenance" package can end up on different monthly amounts; the package template only guarantees they get the same services on the same cadence.

Until a package job's recurring dates are actually set, it behaves like a Waiting List job — no fixed date, only a range — and surfaces on the Waiting List page the same way.

Min Days is enforced, not just suggested. Once a package job's visits exist, any manual reschedule — Move to Day, dragging on the Dispatch Board, editing the date on the job, or a bulk move — is checked against the spacing rules. Moving Step 2 to within 14 days of Step 1 on a program that requires 14 is refused with a message like "Step 2 must be at least 14 days after Step 1 (earliest 5/15)", and the visit stays where it was. Moving an earlier step so that a later step ends up too close is blocked the same way, with the message telling you which step to move first. Steps with no Min Days set can be moved freely.

The Package Summary Report tracks progress per package job by counting visits, not jobs: Total Visits is every visit on the job (cancelled ones included), Completed and Cancelled are counted by visit status, and Remaining is Total − Completed − Cancelled — so a cancelled visit reduces what is left to deliver rather than sitting in Remaining forever. Earned revenue is completed visits × the per-visit amount; Pending is the job total minus Earned, which means a package job with no visits generated yet shows as entirely Pending.

Projects (Landscapt vs. Equipt/PO)

CRM > Scheduling > Projects tracks one-off landscaping jobs — a patio install, a large cleanup — separately from recurring service, for job-level cost tracking and reporting. This is the same project job type described in the table above.

Same name, different table. The Equipt/PO module also has a "Projects" concept — the cost-tracking bucket that Purchase Order line items (categories project_material and stocked_material) get assigned to for procurement-side reporting. These are related in spirit — both exist to answer "what did this job cost" — but they are not the same table, the same record, or automatically linked. A Landscapt project job and an Equipt/PO project are two separate things that happen to share a name.

See also

  • Dispatch Board — the daily scheduling view where visits get assigned to crews
  • Waiting List — the opportunistic-dispatch queue for waiting_list jobs (and unscheduled package jobs)
  • Snow Jobs — storm-based scheduling for the snow job type

More in Landscapt (CRM)

Clients, Properties & Leads
Client accounts, commercial hierarchies, service properties, and the activity timeline that ties it all together.
Estimates & the Budget Engine
How an estimate is built, how its numbers are actually calculated, and how it becomes a job.
Services & Pricing
The service catalog, bulk catalog price changes, and Price Adjustment runs — which prices seed new work and which ones actually bill.
The Dispatch Board
The daily scheduling screen crews and dispatchers live in — visits, crews, status, and how actual hours get calculated.
The Crew App
What a crew sees on their phone — the day's stops, clocking on and off, breaks, photos, and sending work back to the office.
Sales Meetings
Booking appointments per sales rep, the double-booking warning, and the split between a rep's direct reminder and the client-facing automation trigger.
The Waiting List
Jobs with a date range instead of a date, held for opportunistic scheduling — and how to actually get them dispatched.
Snow Jobs & Storm Dispatch
Storm events, priority dispatch, and the invoicing flow built specifically for snow.
Invoicing & Payments
How an invoice is born, how its status moves, and where the client's own PO number actually goes.
Contracts
Ongoing billing agreements — monthly amounts, seasonal overrides, sub-properties, and how signing and invoicing actually work.
Communication Automations
How sequences, triggers, and events work — and how Automations differ from Sales Campaigns.
Forms & Lead Capture
Building, publishing, and sharing public forms — and what happens to a submission once it lands.
Tickets
Support and service tickets — where they come from, how they're worked, and how they connect to the rest of a client's record.
Damage Cases
Tracking property damage and warranty claims tied to a job — what a case captures, how cost rolls up, and a real current limitation in how it connects to a client record.
Job Photos
Field photo documentation, annotation, and before/after comparisons — attached to a job site, not a person.
Online Payments & Stripe
How a client actually pays an invoice online, how Stripe Connect keeps every org's money in their own account, and how the platform takes zero cut.
Browse all guides
© 2026 Landscapt. All rights reserved.