Bowmark AIdocs

HandyPro

HandyPro's real service-area coverage and per-category job pricing — checks whether a ZIP is served by a real local franchisee (with its own live hourly…

HandyPro's real service-area coverage and per-category job pricing — checks whether a ZIP is served by a real local franchisee (with its own live hourly rate table) and prices HandyPro's actual handyman/home-modification categories (grab bars, appliance install, TV mounting, painting, and more) for that ZIP, rather than a researched nationwide estimate.

Domain: handypro.com

Also known as: HandyPro, handypro, HandyPro Franchising, handypro.com

Call it directly

bowmark.providers.handypro.checkServiceArea(zipcode: string): Promise<HandyproServiceArea>
bowmark.providers.handypro.searchServiceCategories(zipcode: string, query?: string): Promise<HandyproCategorySearch>

Functions

FunctionWhat it does
checkServiceAreaChecks whether a ZIP is served by a real local HandyPro franchisee and returns that franchisee's own real hourly rate table. covered is false with a message for a ZIP outside HandyPro's…
searchServiceCategoriesLists HandyPro's real service categories priced for one ZIP's franchisee (a free estimate or a real fixed job price, and what's included), optionally narrowed by a free-text query (e.g.…

Types

// HandyPro's OWN shapes — not a capability contract.

interface HandyproHourlyRate { fromHours: number; toHours: number; pricePerHour: number }

interface HandyproServiceArea {
  covered: boolean;
  message?: string;         // present only when covered is false
  franchiseeName?: string;
  phone?: string;
  city?: string;
  state?: string;
  formattedAddress?: string;
  hourlyRates?: HandyproHourlyRate[];
}

interface HandyproCategoryPrice {
  categoryId: string;
  categoryName: string;
  parentCategoryName: string;
  pricingKind: "estimate" | "fixedJob" | "unpriced";
  price: number | null;     // dollars
  whatsIncluded: string;
}

interface HandyproCategorySearch {
  zipcode: string;
  covered: boolean;
  message?: string;         // present only when covered is false
  categories: HandyproCategoryPrice[];
}

Examples

// Can HandyPro fix my grab bars, and what will it actually cost?
const area = await bowmark.providers.handypro.checkServiceArea("48334");
if (!area.covered) return { available: false, reason: area.message };
const categories = await bowmark.providers.handypro.searchServiceCategories("48334", "grab bar");
return { franchisee: area.franchiseeName, phone: area.phone, options: categories.categories };