Specifying booking flow behavior

Reserve with Google uses “verticals”, or groupings of similar merchants, to determine which user experience is rendered to the user.

Reserve with Google distinguishes between the following verticals:

APPOINTMENT (fitness, beauty, financial services)

Figure 1:Booking flow without staff specified
Figure 2:Booking flow with staff specified.


Figure 3:Booking flow with special request box

THINGS-TO-DO (Trips, Tours, Attractions)

Figure 4:Booking flow with ticketing

Verticals can be set at two levels

  • Account-level: All merchants fit into a single vertical (for example, all merchants only offer dining reservations).
  • Merchant-level: Merchants span multiple verticals (for example, some merchants offer dining reservations, other merchants offer ticket purchases for a cooking class).

Account-level vertical setting

The default account-level vertical will have been set for you when your account was created, based on the sample of merchants that you provided before signing up for the program.

Merchant-level vertical setting

Please reach out to your Google contact to enable the capability of specifying a vertical for each merchant.

The main change introduced is setting a type at the Service level across the feeds, booking server, and real-time updates.

Services Feed

Set the type field in the Services feed.

 enum ServiceType {
    // Service that provides dining reservation.
    // Service that provides food ordering in general, could be either takeout
    // or delivery or both.
    // Service that only provides food delivery.
    // Service that only provides food takeout.

    // Services that provide event based ticketing (e.g. concerts, sporting
    // events, shows). Do not use for Reserve with Google integrations.

    // Service that provides appointments or classes. Recommended for (1) health
    // and fitness, (2) spa and beauty, and (3) financial consults and
    // evaluations services. Please see the supported service types:
    // https://developers.google.com/maps-booking/guides/end-to-end-integration/overview

  // The predefined type of this service. (optional)
  ServiceType type = 15;

Services feed snippet

  "service": [
      "merchant_id": "1001",
      "name": "Reservation",
      "service_id": "1000",
      "prepayment_type": "NOT_SUPPORTED",
      "merchant_id": "1002",
      "name": "Jane's Thai Cooking Class",
      "service_id": "1002",
      "description": "Chef Jane will guide you through how to use the freshest ingredients to make an easy chicken larb dish.",
      "ticket_type": [
          "short_description": "Adult",
          "price": {
            "price_micros": 195000000,
            "currency_code": "USD"
          "ticket_type_id": "1000"
          "short_description": "Child",
          "price": {
            "price_micros": 90000000,
            "currency_code": "USD"
          "ticket_type_id": "1001"
      "price": {
        "price_micros": 90000000,
        "currency_code": "USD"
      "prepayment_type": "REQUIRED",
      "rules": {
        "min_advance_booking": 10800,
        "min_booking_buffer_before_end_time": null,
        "admission_policy": "TIME_STRICT"
      "require_credit_card": "REQUIRE_CREDIT_CARD_ALWAYS",

Booking Server

If your inventory falls into either the APPOINTMENT or DINING flows, please ensure that you follow the standard implementation of the booking server.

If your inventory falls into the THINGS-TO-DO flows, please ensure that you follow the order based implementation of the booking server.

Real-time Updates

For the Inventory Update API - Services real-time updates , please include the type field in the request object whenever relevant.

Request Snippet:

  "service": {
    "name": "partners/9999999/merchants/10001/services/100001",
    "service_name": "Jane's Thai Cooking Class",
    "description": "Come enjoy the aromas of Thai Cooking with a renowned Chef.",