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
| Function | What it does |
|---|---|
checkServiceArea | Checks 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… |
searchServiceCategories | Lists 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 };