Clean Air Lawn Care
Eco lawn-care franchise. checkServiceArea and getAvailableSlots are live — a zip-code area check against the real caw-estimate-widget backend, plus the…
Eco lawn-care franchise. checkServiceArea and getAvailableSlots are live — a zip-code area check against the real caw-estimate-widget backend, plus the real per-franchise computed availability calendar. submitEstimateRequest (the final CRM lead) is a stub — Broadcast stays read/compute-only here, handing off to the site's own widget instead.
Domain: cleanairlawncare.com
Also known as: Clean Air Lawn Care, cleanairlawncare.com, Clean Air
Call it directly
bowmark.providers.cleanairlawncare.checkServiceArea(args: object): Promise<CheckServiceAreaResult>
bowmark.providers.cleanairlawncare.getAvailableSlots(args: object): Promise<GetAvailableSlotsResult>Functions
| Function | What it does |
|---|---|
checkServiceArea | Checks a 5-digit US zip (zip) against Clean Air Lawn Care's live caw-estimate-widget backend — the same area lookup the site's own homepage widget runs — and returns whether it's in-area,… |
getAvailableSlots | For a zip (zip), runs the same area check as checkServiceArea and, when the resolved org has online scheduling enabled, returns the real candidate date/time slots computed from that org's… |
Types
interface CleanAirEstimateAvailability {
days_out: number;
daily_cap: number;
slot_minutes: number;
recurring: Record<string, [string, string]>;
overrides: Record<string, [string, string] | []>;
}
interface CleanAirOrg {
id: string;
name: string;
brand_type: string;
scheduling_enabled: boolean;
estimate_availability: CleanAirEstimateAvailability | null;
}
interface CheckServiceAreaResult {
zip: string;
inServiceArea: boolean;
org: CleanAirOrg | null;
widgetUrl: string;
}
interface AvailableSlot {
date: string;
time: string;
}
interface GetAvailableSlotsResult {
zip: string;
inServiceArea: boolean;
schedulingEnabled: boolean;
org: CleanAirOrg | null;
slots: AvailableSlot[];
widgetUrl: string;
}