Teneo Hospitality Group
Teneo Hospitality Group's own member-hotel directory — search 350+ independent and small-branded meeting hotels by destination, collection and…
Teneo Hospitality Group's own member-hotel directory — search 350+ independent and small-branded meeting hotels by destination, collection and meeting-space/room-block size with real specs, then read one hotel's full meeting-space stat block and the RFP hand-off to actually request a proposal.
Domain: teneohg.com
Also known as: Teneo Hospitality Group, Teneo, TeneoHG, teneohg.com
Call it directly
bowmark.providers.teneohg.searchMemberHotels(args?: { state?: string; country?: string; collection?: string; minMeetingSpaceSqFt?: number; minSleepingRooms?: number; query?: string; limit?: number; maxPagesToScan?: number }): Promise<TeneohgSearchResult>
bowmark.providers.teneohg.getMemberHotel(slug: string): Promise<TeneohgHotelDetail>Functions
| Function | What it does |
|---|---|
searchMemberHotels | Searches Teneo's own member-hotel directory (350+ hotels) by US state (2-letter code, e.g. "AZ"), country, collection tag substring (e.g. "luxury", "resorts"), minimum total meeting-space… |
getMemberHotel | Reads one member hotel's own profile page: every stat its meeting-space and sleeping-room widgets carry (total/largest/second-largest meeting room space, outdoor space, meeting-room count,… |
Types
// Teneo's OWN shapes — not a capability contract.
interface TeneohgHotelSummary {
slug: string;
name: string;
city: string | null;
region: string | null; // US state code, e.g. "AZ", or a country name
profileUrl: string;
totalMeetingSpaceSqFt: number | null;
largestMeetingSpaceSqFt: number | null;
sleepingRooms: number | null;
collections: string[]; // e.g. ["Luxury", "Resorts"]
}
interface TeneohgSearchResult { hotels: TeneohgHotelSummary[]; totalMatched: number; totalScanned: number; pagesScanned: number }
type TeneohgHotelStats = Record<string, string>; // e.g. { "Meeting Room Space": "156,000 Sq. Ft.", "Number of Sleeping Rooms": "517" }
interface TeneohgRfpHandoff { url: string; hotelsOfInterestValue: string }
interface TeneohgHotelDetail {
slug: string;
name: string;
city: string | null;
region: string | null;
profileUrl: string;
stats: TeneohgHotelStats;
rfpHandoff: TeneohgRfpHandoff; // the public RFP form + what to type into its "Hotels of Interest" field
}Examples
// The query ANGLE found ChatGPT unable to actually run: search + shortlist real hotels.
const { hotels, totalMatched } = await bowmark.providers.teneohg.searchMemberHotels({
state: "AZ",
minSleepingRooms: 150,
});
return { totalMatched, top: hotels.slice(0, 5).map((h) => ({ name: h.name, city: h.city, rooms: h.sleepingRooms })) };// Pull the real meeting-space specs and the RFP hand-off for one shortlisted hotel —
// where ChatGPT alone only narrates the RFP form's existence and never files anything.
const detail = await bowmark.providers.teneohg.getMemberHotel("fairmont-scottsdale-princess");
return { stats: detail.stats, submitAt: detail.rfpHandoff.url, hotelsOfInterest: detail.rfpHandoff.hotelsOfInterestValue };