Skip to main content

Contractors Overview

Contractors in PMFriend are agency-wide — not property-scoped. A plumber you've used on one property is available for every property in your portfolio.

Fields

FieldRequiredNotes
businessNameyesDisplay name on WO + magic-link pages
abnnoFor invoice validation
tradesyesOne or more from the trade enum (see below)
emaileither email or mobile requiredMagic-link delivery target
mobileeither email or mobile requiredSMS delivery target
insuranceExpiresOnoptional but strongly recommendedDrives ranking + CONTRACTOR_INSURANCE_EXPIRING notifications
preferredboolean, default false+20 in ranking; used for your go-to vendors
notesfree text"prefers work orders before 4pm", etc.

Trade enum

PLUMBER
GAS_FITTER
ELECTRICIAN
HANDYMAN
LOCKSMITH
CARPENTER
ROOFER
TILER
PAINTER
PEST_CONTROL
LANDSCAPER
APPLIANCE_REPAIR
CLEANER
HVAC_TECH
SMOKE_ALARM_CERTIFIER

In CSVs, trades are a semicolon-separated list: PLUMBER;GAS_FITTER. In the UI, multi-select chips.

Getting contractors in

Three ways:

  1. CSV import — Settings → Import → Contractors. Bulk-load your existing directory in 30 seconds. See CSV Wizard.
  2. UI form — Contractors → New contractor.
  3. APIPOST /api/v1/contractors.

Ranking

When you dispatch a work order, the Ranked Picker shows the top 8 contractors ordered by match score. Rules:

  • +40 trade match (contractor covers the work-order's trade)
  • +20 preferred
  • +15 insurance current
  • +5 insurance expiring within 30 days
  • -50 insurance expired

Each chip shows the score's top reason in plain English: "trade match + preferred + insurance current (expires 2026-06-30)".

Insurance expiry automation

The daily scanner flags any contractor whose insurance expires within 30 days with a CONTRACTOR_INSURANCE_EXPIRING notification. Once expired, the ranked picker penalises them heavily — they'll appear at the bottom, greyed.

Pages in this section