Bowmark AIdocs

Calendly

Calendly's own public booking-widget data — find a person's Calendly page from their name, read the event types it offers, the questions its booking form…

Calendly's own public booking-widget data — find a person's Calendly page from their name, read the event types it offers, the questions its booking form asks, and the real, currently-open time slots — read straight off the widget's undocumented JSON endpoints, no browser, no key.

Domain: calendly.com

Also known as: Calendly, calendly.com

Prefer the capability

bowmark.booking_links covers this provider and routes around it when it is having a bad day. Reach for this page when you need calendly.com specifically.

Call it directly

bowmark.providers.calendly.getEventTypes(profile: string): Promise<CalendlyEventTypesResult>
bowmark.providers.calendly.getAvailability(profile: string, opts?: CalendlyAvailabilityOptions): Promise<CalendlyAvailabilityResult>
bowmark.providers.calendly.getBookingForm(url: string, opts?: CalendlyBookingFormOptions): Promise<CalendlyBookingForm>
bowmark.providers.calendly.findProfiles(name: string, company?: string): Promise<CalendlyFindProfilesResult>

Functions

FunctionWhat it does
getEventTypesLists every event type a Calendly profile currently offers — the entry point.
getAvailabilityReturns the real, currently-open time slots for one Calendly event type — accepts a bare profile slug ("jason-frazier"), a profile url, or a specific event url…
getBookingFormReads what a Calendly booking page will ask before anyone books: the owner's name, the event's name/description/duration, every custom form question (with its choices and whether it is…
findProfilesFinds a person's own Calendly page from their full name, and optionally their company (pass it — "caleb-firecrawl" is found only by the company shape). Checks the slug shapes that measured…

Types

interface CalendlyEventType {
  slug: string;
  name: string;
  uuid: string;
  url: string;
  description: string | null;
}

interface CalendlyProfile {
  slug: string;
  name: string;
  timezone: string;
}

interface CalendlyEventTypesResult {
  profile: CalendlyProfile;
  eventTypes: CalendlyEventType[];
}

interface CalendlySlot {
  startTime: string;
  inviteesRemaining: number;
}

interface CalendlyDay {
  date: string;
  status: string;  // the site's own labels — read the values off a result, never guess one from prose
  slots: CalendlySlot[];
}

interface CalendlyAvailabilityOptions {
  timezone?: string;
  daysAhead?: number;
}

interface CalendlyAvailabilityResult {
  profileSlug: string;
  eventType: CalendlyEventType;
  timezone: string;
  days: CalendlyDay[];
  otherEventTypes: CalendlyEventType[];
}

interface CalendlyFormQuestion {
  label: string;
  format: string;     // Calendly's own: "string" | "text" | "phone_number" | "select" | "multi_select" | "radios" | "checkboxes"
  required: boolean;
  choices: string[];
}

interface CalendlyBookingEvent {
  name: string;
  slug: string | null;
  url: string;
  description: string | null;
  durationMinutes: number | null;
}

interface CalendlyBookingFormOptions {
  event?: string;     // which event on a multi-event profile — its slug or part of its name
}

interface CalendlyBookingForm {
  url: string;
  profileSlug: string | null;         // null for a calendly.com/d/<hash> share link
  ownerName: string | null;
  eventTypes: CalendlyEventType[];
  event: CalendlyBookingEvent | null; // null when several events exist and none was named
  questions: CalendlyFormQuestion[];  // CUSTOM questions; name + email are always asked on top
  nextAvailability: string | null;    // null + unavailableReason null = fully booked, not unread
  unavailableReason: string | null;   // non-null = Calendly says this cannot be booked
  warnings: string[];
}

interface CalendlyProfileCandidate {
  slug: string;
  url: string;
  ownerName: string;       // the name the profile itself shows
  nameMatches: boolean;    // ownerName carries BOTH names asked for — a hint, a namesake passes too
  timezone: string;
}

interface CalendlyFindProfilesResult {
  name: string;
  company: string | null;
  slugsChecked: string[];
  candidates: CalendlyProfileCandidate[];
  warnings: string[];
}
booking_linksBooking links — find a person's Calendly or Cal.com link and read its form — the capability this provider backs.
archive_orgAlso backs the same capability.
cal_comAlso backs the same capability.
githubAlso backs the same capability.
serperAlso backs the same capability.