{
  "collection": "public-research",
  "note": "Public-source profiles: menus, published base prices, durations, add-ons, public stylist information and policies researched from salon websites and customer-facing booking pages. Missing facts are UNKNOWN. This is independent research, not a merchant partnership. Final totals and appointment availability must be confirmed with the salon; booking happens on its own website.",
  "revision": "public-research@e360e97d86a8",
  "total": 30,
  "limit": 30,
  "offset": 0,
  "next_offset": null,
  "profiles": [
    {
      "slug": "acute-collective-nob-hill",
      "ref": "san-francisco/hair-salon/acute-collective-nob-hill",
      "name": "Acute Collective",
      "neighborhood": "Nob Hill",
      "researched_at": "2026-10-24T09:34:11Z",
      "coverage": {
        "services": 9,
        "services_with_prices": 9,
        "services_with_durations": 9,
        "add_ons": 0,
        "stylists": 1,
        "published_policies": 1,
        "policy_fields": 7,
        "successfully_read_sources": 3
      },
      "unknowns": [
        "The appropriate quoted time for an individual client and any applicable tax remain unconfirmed; the website explicitly includes gratuity.",
        "Appointment availability was not checked.",
        "No separate priced add-on menu was found; the website says needed color, toner and conditioning are covered by the quoted time. This does not make every combination feasible in every block.",
        "No usable public terms established for: cancellation, deposit, noShow, lateArrival, consultation, walkIns.",
        "No separate priced add-on list was established on the pages checked; this does not establish that there are no extra charges."
      ],
      "conflicts": [],
      "url": "https://agentsalonsf.com/salons/acute-collective-nob-hill",
      "markdown_url": "https://agentsalonsf.com/salons/acute-collective-nob-hill.md",
      "api_url": "https://agentsalonsf.com/api/v1/salons/acute-collective-nob-hill",
      "public_research": {
        "salonSlug": "acute-collective-nob-hill",
        "researchedAt": "2026-10-24T09:34:11Z",
        "summary": "All nine published time-priced blocks captured. Each block lists alternative uses of the quoted time, not an entitlement to every named service.",
        "sources": [
          {
            "id": "website-menu",
            "url": "https://www.acutecollectivesf.com/services",
            "kind": "salon_website",
            "checkedAt": "2026-10-24T09:34:11Z",
            "outcome": "read",
            "note": "Public page read for services, team or stated policies."
          },
          {
            "id": "team",
            "url": "https://www.acutecollectivesf.com/about",
            "kind": "salon_website",
            "checkedAt": "2026-10-24T09:34:11Z",
            "outcome": "read",
            "note": "Public page read for services, team or stated policies."
          },
          {
            "id": "contact",
            "url": "https://www.acutecollectivesf.com/contact",
            "kind": "salon_website",
            "checkedAt": "2026-10-24T09:34:11Z",
            "outcome": "read",
            "note": "Public page read for services, team or stated policies."
          },
          {
            "id": "booking",
            "url": "https://acute-collective.square.site/",
            "kind": "booking_provider",
            "checkedAt": "2026-10-24T09:28:27Z",
            "outcome": "unavailable",
            "note": "Public page is a client-rendered shell; no additional readable menu."
          },
          {
            "id": "booking-linda",
            "url": "https://book.squareup.com/appointments/4262d064-88fb-4aed-b779-e666a9531d49/location/5J6NWWCN8Z7HB/services?buttonTextColor=ffffff&color=006aff&locale=en&referrer=so&team_member_id=5J6NWWCN8Z7HB",
            "kind": "booking_provider",
            "checkedAt": "2026-10-24T09:34:11Z",
            "outcome": "blocked",
            "note": "Direct public booking request returned HTTP 429."
          }
        ],
        "menuStatus": "published",
        "menu": [
          {
            "name": "Bang trim",
            "category": "haircut",
            "description": "Published time block with alternative service examples; salon must confirm which work fits.",
            "price": {
              "kind": "fixed",
              "amount": 25,
              "amountMax": null,
              "currency": "USD",
              "note": "Price for the quoted 10-minute block; time-based, not a per-service guarantee. Website includes gratuity."
            },
            "durationMinutes": 10,
            "durationMaxMinutes": null,
            "sourceId": "website-menu",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Blowout or fine hair haircut | Short simple cuts",
            "category": "other",
            "description": "Published time block with alternative service examples; salon must confirm which work fits.",
            "price": {
              "kind": "fixed",
              "amount": 125,
              "amountMax": null,
              "currency": "USD",
              "note": "Price for the quoted 45-minute block; time-based, not a per-service guarantee. Website includes gratuity."
            },
            "durationMinutes": 45,
            "durationMaxMinutes": null,
            "sourceId": "website-menu",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Haircut or conditioning | Treatment/toner with blowout",
            "category": "other",
            "description": "Published time block with alternative service examples; salon must confirm which work fits.",
            "price": {
              "kind": "fixed",
              "amount": 170,
              "amountMax": null,
              "currency": "USD",
              "note": "Price for the quoted 60-minute block; time-based, not a per-service guarantee. Website includes gratuity."
            },
            "durationMinutes": 60,
            "durationMaxMinutes": null,
            "sourceId": "website-menu",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Haircut with gloss, toner, or treatment | All over color or root touch up with blowout",
            "category": "color",
            "description": "Published time block with alternative service examples; salon must confirm which work fits.",
            "price": {
              "kind": "fixed",
              "amount": 255,
              "amountMax": null,
              "currency": "USD",
              "note": "Price for the quoted 90-minute block; time-based, not a per-service guarantee. Website includes gratuity."
            },
            "durationMinutes": 90,
            "durationMaxMinutes": null,
            "sourceId": "website-menu",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "All over color or root touch up with haircut | Customized partial highlights with blowout",
            "category": "color",
            "description": "Published time block with alternative service examples; salon must confirm which work fits.",
            "price": {
              "kind": "fixed",
              "amount": 340,
              "amountMax": null,
              "currency": "USD",
              "note": "Price for the quoted 120-minute block; time-based, not a per-service guarantee. Website includes gratuity."
            },
            "durationMinutes": 120,
            "durationMaxMinutes": null,
            "sourceId": "website-menu",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Customized partial highlights with haircut | Full highlight with blowout",
            "category": "color",
            "description": "Published time block with alternative service examples; salon must confirm which work fits.",
            "price": {
              "kind": "fixed",
              "amount": 425,
              "amountMax": null,
              "currency": "USD",
              "note": "Price for the quoted 150-minute block; time-based, not a per-service guarantee. Website includes gratuity."
            },
            "durationMinutes": 150,
            "durationMaxMinutes": null,
            "sourceId": "website-menu",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Customized full highlights with haircut | Root touch up with partial highlights and blowout",
            "category": "color",
            "description": "Published time block with alternative service examples; salon must confirm which work fits.",
            "price": {
              "kind": "fixed",
              "amount": 510,
              "amountMax": null,
              "currency": "USD",
              "note": "Price for the quoted 180-minute block; time-based, not a per-service guarantee. Website includes gratuity."
            },
            "durationMinutes": 180,
            "durationMaxMinutes": null,
            "sourceId": "website-menu",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Customized lived in color with blowout | Platinum card highlights with blowout",
            "category": "color",
            "description": "Published time block with alternative service examples; salon must confirm which work fits.",
            "price": {
              "kind": "fixed",
              "amount": 595,
              "amountMax": null,
              "currency": "USD",
              "note": "Price for the quoted 210-minute block; time-based, not a per-service guarantee. Website includes gratuity."
            },
            "durationMinutes": 210,
            "durationMaxMinutes": null,
            "sourceId": "website-menu",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Customized lived in color with haircut | Platinum card highlights with haircut",
            "category": "color",
            "description": "Published time block with alternative service examples; salon must confirm which work fits.",
            "price": {
              "kind": "fixed",
              "amount": 680,
              "amountMax": null,
              "currency": "USD",
              "note": "Price for the quoted 240-minute block; time-based, not a per-service guarantee. Website includes gratuity."
            },
            "durationMinutes": 240,
            "durationMaxMinutes": null,
            "sourceId": "website-menu",
            "priceSourceId": null,
            "durationSourceId": null
          }
        ],
        "addOnsStatus": "unknown",
        "addOns": [],
        "stylistsStatus": "published",
        "stylists": [
          {
            "name": "Linda",
            "specialties": [],
            "bio": "Owner, stylist and colorist.",
            "bookingUrl": "https://book.squareup.com/appointments/4262d064-88fb-4aed-b779-e666a9531d49/location/5J6NWWCN8Z7HB/services?buttonTextColor=ffffff&color=006aff&locale=en&referrer=so&team_member_id=5J6NWWCN8Z7HB",
            "portfolioUrl": null,
            "sourceId": "team"
          }
        ],
        "policies": {
          "cancellation": {
            "value": null,
            "sourceId": null
          },
          "deposit": {
            "value": null,
            "sourceId": null
          },
          "noShow": {
            "value": null,
            "sourceId": null
          },
          "lateArrival": {
            "value": null,
            "sourceId": null
          },
          "consultation": {
            "value": null,
            "sourceId": null
          },
          "payment": {
            "value": "Time-based pricing includes gratuity and needed color, toner or conditioning within the quoted plan. The quoted time is charged even if work finishes early; the website says an overrun beyond the quote does not increase that charge.",
            "sourceId": "website-menu"
          },
          "walkIns": {
            "value": null,
            "sourceId": null
          }
        },
        "unknowns": [
          "The appropriate quoted time for an individual client and any applicable tax remain unconfirmed; the website explicitly includes gratuity.",
          "Appointment availability was not checked.",
          "No separate priced add-on menu was found; the website says needed color, toner and conditioning are covered by the quoted time. This does not make every combination feasible in every block.",
          "No usable public terms established for: cancellation, deposit, noShow, lateArrival, consultation, walkIns.",
          "No separate priced add-on list was established on the pages checked; this does not establish that there are no extra charges."
        ],
        "conflicts": []
      }
    },
    {
      "slug": "arrow-salon-mission",
      "ref": "san-francisco/hair-salon/arrow-salon-mission",
      "name": "Arrow Salon",
      "neighborhood": "Mission",
      "researched_at": "2026-10-24T09:34:11Z",
      "coverage": {
        "services": 53,
        "services_with_prices": 51,
        "services_with_durations": 44,
        "add_ons": 3,
        "stylists": 4,
        "published_policies": 3,
        "policy_fields": 7,
        "successfully_read_sources": 5
      },
      "unknowns": [
        "Exact final total, including applicable extras, tax and gratuity, is not established by a published base price.",
        "Appointment availability was not checked.",
        "The general website menu does not publish durations. Option labels identify a published choice; no current stylist availability was established.",
        "No usable public terms established for: deposit, noShow, payment, walkIns."
      ],
      "conflicts": [
        "Root Touch Up + Haircut, Patty: the public booking page has a numeric price of $260, while its price-description field says $250.00. Confirm the option price before relying on it.",
        "Root Touch Up + Haircut, Grace: the public booking page has a numeric price of $250, while its price-description field says $240.00. Confirm the option price before relying on it.",
        "General website base prices are sometimes below the explicit booking options: haircut $100+ versus $110/$120/$130 in the main menu, partial lightening $250+ versus $275, and blowout $75+ versus $80. These are separate source scopes, not interchangeable quotes."
      ],
      "url": "https://agentsalonsf.com/salons/arrow-salon-mission",
      "markdown_url": "https://agentsalonsf.com/salons/arrow-salon-mission.md",
      "api_url": "https://agentsalonsf.com/api/v1/salons/arrow-salon-mission",
      "public_research": {
        "salonSlug": "arrow-salon-mission",
        "researchedAt": "2026-10-24T09:34:11Z",
        "summary": "Main booking menu retains every visible named option; Alexis has a separate salon-linked public menu at the same Guerrero Street address. General website starting prices are preserved separately from booking options.",
        "sources": [
          {
            "id": "website-menu",
            "url": "https://www.arrowsalonsf.com/services",
            "kind": "salon_website",
            "checkedAt": "2026-10-24T09:34:11Z",
            "outcome": "read",
            "note": "Public page read for services, team or stated policies."
          },
          {
            "id": "team",
            "url": "https://www.arrowsalonsf.com/booknow",
            "kind": "salon_website",
            "checkedAt": "2026-10-24T09:34:11Z",
            "outcome": "read",
            "note": "Public page read for services, team or stated policies."
          },
          {
            "id": "policy",
            "url": "https://www.arrowsalonsf.com/policy",
            "kind": "salon_website",
            "checkedAt": "2026-10-24T09:34:11Z",
            "outcome": "read",
            "note": "Public page read for services, team or stated policies."
          },
          {
            "id": "booking",
            "url": "https://book.squareup.com/appointments/0u6c8z7ysje8bf/location/25YERQT7GV97T",
            "kind": "booking_provider",
            "checkedAt": "2026-10-24T09:28:28Z",
            "outcome": "read",
            "note": "Public customer booking HTML; explicit variation labels retained, not staff-ID inference."
          },
          {
            "id": "alexis-booking",
            "url": "https://book.squareup.com/appointments/m5hdj0io0ws4tk/location/L8MTF4JZ6BE99/services",
            "kind": "booking_provider",
            "checkedAt": "2026-10-24T09:29:31Z",
            "outcome": "read",
            "note": "Linked from Arrow booking page; public menu address is 1041 Guerrero St. No slots requested."
          }
        ],
        "menuStatus": "published",
        "menu": [
          {
            "name": "All Over Color/ root touch up (grey coverage) with Gloss on ends",
            "category": "color",
            "description": "Root coverage and an end gloss, or all-over gloss. Not a lightening service. Additional color for length or density is $20.",
            "price": {
              "kind": "fixed",
              "amount": 175,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option: Patty."
            },
            "durationMinutes": 90,
            "durationMaxMinutes": null,
            "sourceId": "booking",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "All Over Color/ root touch up (grey coverage) with Gloss on ends",
            "category": "color",
            "description": "Root coverage and an end gloss, or all-over gloss. Not a lightening service. Additional color for length or density is $20.",
            "price": {
              "kind": "fixed",
              "amount": 175,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option: Grace."
            },
            "durationMinutes": 120,
            "durationMaxMinutes": null,
            "sourceId": "booking",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "All Over Color/ root touch up (grey coverage) with Gloss on ends",
            "category": "color",
            "description": "Root coverage and an end gloss, or all-over gloss. Not a lightening service. Additional color for length or density is $20.",
            "price": {
              "kind": "fixed",
              "amount": 175,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option: Juvy."
            },
            "durationMinutes": 120,
            "durationMaxMinutes": null,
            "sourceId": "booking",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Balayage / Highlight PARTIAL",
            "category": "color",
            "description": "Lightening on the crown and sides.",
            "price": {
              "kind": "fixed",
              "amount": 275,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option: Grace."
            },
            "durationMinutes": 150,
            "durationMaxMinutes": null,
            "sourceId": "booking",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Balayage / Highlight PARTIAL",
            "category": "color",
            "description": "Lightening on the crown and sides.",
            "price": {
              "kind": "fixed",
              "amount": 275,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option: Patty."
            },
            "durationMinutes": 150,
            "durationMaxMinutes": null,
            "sourceId": "booking",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Balayage / Highlight PARTIAL",
            "category": "color",
            "description": "Lightening on the crown and sides.",
            "price": {
              "kind": "fixed",
              "amount": 275,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option: Juvy."
            },
            "durationMinutes": 150,
            "durationMaxMinutes": null,
            "sourceId": "booking",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Root Touch Up",
            "category": "color",
            "description": "Gray-coverage single-process retouch; not highlights or lightening.",
            "price": {
              "kind": "fixed",
              "amount": 160,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option: Grace."
            },
            "durationMinutes": 120,
            "durationMaxMinutes": null,
            "sourceId": "booking",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Root Touch Up",
            "category": "color",
            "description": "Gray-coverage single-process retouch; not highlights or lightening.",
            "price": {
              "kind": "fixed",
              "amount": 160,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option: Juvy."
            },
            "durationMinutes": 90,
            "durationMaxMinutes": null,
            "sourceId": "booking",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Balayage / Highlight PARTIAL + Haircut",
            "category": "color",
            "description": "Crown/side lightening with haircut, shampoo and blowout.",
            "price": {
              "kind": "fixed",
              "amount": 380,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option: Patty."
            },
            "durationMinutes": 180,
            "durationMaxMinutes": null,
            "sourceId": "booking",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Balayage / Highlight PARTIAL + Haircut",
            "category": "color",
            "description": "Crown/side lightening with haircut, shampoo and blowout.",
            "price": {
              "kind": "fixed",
              "amount": 375,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option: Grace."
            },
            "durationMinutes": 180,
            "durationMaxMinutes": null,
            "sourceId": "booking",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Balayage / Highlight PARTIAL + Haircut",
            "category": "color",
            "description": "Crown/side lightening with haircut, shampoo and blowout.",
            "price": {
              "kind": "fixed",
              "amount": 375,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option: Juvy."
            },
            "durationMinutes": 180,
            "durationMaxMinutes": null,
            "sourceId": "booking",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Balayage / Highlights FULL",
            "category": "color",
            "description": "Full-head lightening using balayage or foils.",
            "price": {
              "kind": "fixed",
              "amount": 330,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option: Patty."
            },
            "durationMinutes": 180,
            "durationMaxMinutes": null,
            "sourceId": "booking",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Balayage / Highlights FULL",
            "category": "color",
            "description": "Full-head lightening using balayage or foils.",
            "price": {
              "kind": "fixed",
              "amount": 325,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option: Grace."
            },
            "durationMinutes": 180,
            "durationMaxMinutes": null,
            "sourceId": "booking",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Balayage / Highlights FULL",
            "category": "color",
            "description": "Full-head lightening using balayage or foils.",
            "price": {
              "kind": "fixed",
              "amount": 300,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option: Juvy."
            },
            "durationMinutes": 180,
            "durationMaxMinutes": null,
            "sourceId": "booking",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Balayage / Highlights  FULL & Haircut",
            "category": "color",
            "description": "Full-head lightening with haircut, shampoo and blowout.",
            "price": {
              "kind": "fixed",
              "amount": 425,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option: Patty."
            },
            "durationMinutes": 180,
            "durationMaxMinutes": null,
            "sourceId": "booking",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Balayage / Highlights  FULL & Haircut",
            "category": "color",
            "description": "Full-head lightening with haircut, shampoo and blowout.",
            "price": {
              "kind": "fixed",
              "amount": 425,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option: Grace."
            },
            "durationMinutes": 210,
            "durationMaxMinutes": null,
            "sourceId": "booking",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Balayage / Highlights  FULL & Haircut",
            "category": "color",
            "description": "Full-head lightening with haircut, shampoo and blowout.",
            "price": {
              "kind": "fixed",
              "amount": 400,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option: Juvy."
            },
            "durationMinutes": 180,
            "durationMaxMinutes": null,
            "sourceId": "booking",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Haircut",
            "category": "haircut",
            "description": "Consultation, shampoo and a 15-minute blow-dry are included.",
            "price": {
              "kind": "fixed",
              "amount": 130,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option: Patty."
            },
            "durationMinutes": 60,
            "durationMaxMinutes": null,
            "sourceId": "booking",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Haircut",
            "category": "haircut",
            "description": "Consultation, shampoo and a 15-minute blow-dry are included.",
            "price": {
              "kind": "fixed",
              "amount": 120,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option: Grace."
            },
            "durationMinutes": 60,
            "durationMaxMinutes": null,
            "sourceId": "booking",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Haircut",
            "category": "haircut",
            "description": "Consultation, shampoo and a 15-minute blow-dry are included.",
            "price": {
              "kind": "fixed",
              "amount": 110,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option: Juvy."
            },
            "durationMinutes": 60,
            "durationMaxMinutes": null,
            "sourceId": "booking",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "All Over Tint/Color + Haircut",
            "category": "color",
            "description": "Root coverage and end gloss, or all-over gloss, with haircut; not lightening.",
            "price": {
              "kind": "fixed",
              "amount": 280,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option: Patty."
            },
            "durationMinutes": 120,
            "durationMaxMinutes": null,
            "sourceId": "booking",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "All Over Tint/Color + Haircut",
            "category": "color",
            "description": "Root coverage and end gloss, or all-over gloss, with haircut; not lightening.",
            "price": {
              "kind": "fixed",
              "amount": 275,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option: Grace."
            },
            "durationMinutes": 150,
            "durationMaxMinutes": null,
            "sourceId": "booking",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "All Over Tint/Color + Haircut",
            "category": "color",
            "description": "Root coverage and end gloss, or all-over gloss, with haircut; not lightening.",
            "price": {
              "kind": "fixed",
              "amount": 270,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option: Juvy."
            },
            "durationMinutes": 120,
            "durationMaxMinutes": null,
            "sourceId": "booking",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Root Touch Up + Haircut",
            "category": "color",
            "description": "Retouch for previously colored hair or gray coverage with a cut; not lightening.",
            "price": {
              "kind": "unknown",
              "amount": null,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option: Patty. Root Touch Up + Haircut, Patty: the public booking page has a numeric price of $260, while its price-description field says $250.00. Confirm the option price before relying on it."
            },
            "durationMinutes": 120,
            "durationMaxMinutes": null,
            "sourceId": "booking",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Root Touch Up + Haircut",
            "category": "color",
            "description": "Retouch for previously colored hair or gray coverage with a cut; not lightening.",
            "price": {
              "kind": "unknown",
              "amount": null,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option: Grace. Root Touch Up + Haircut, Grace: the public booking page has a numeric price of $250, while its price-description field says $240.00. Confirm the option price before relying on it."
            },
            "durationMinutes": 120,
            "durationMaxMinutes": null,
            "sourceId": "booking",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Root Touch Up + Haircut",
            "category": "color",
            "description": "Retouch for previously colored hair or gray coverage with a cut; not lightening.",
            "price": {
              "kind": "fixed",
              "amount": 240,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option: Juvy."
            },
            "durationMinutes": 120,
            "durationMaxMinutes": null,
            "sourceId": "booking",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Root Touch Up/Face Frame Accent highlights  + Haircut",
            "category": "color",
            "description": "Base retouch, accent highlights, haircut, gloss and blowout.",
            "price": {
              "kind": "fixed",
              "amount": 425,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option: Patty."
            },
            "durationMinutes": 180,
            "durationMaxMinutes": null,
            "sourceId": "booking",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Root Touch Up/Face Frame Accent highlights  + Haircut",
            "category": "color",
            "description": "Base retouch, accent highlights, haircut, gloss and blowout.",
            "price": {
              "kind": "fixed",
              "amount": 425,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option: Grace."
            },
            "durationMinutes": 180,
            "durationMaxMinutes": null,
            "sourceId": "booking",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Root Touch Up/Face Frame Accent highlights  + Haircut",
            "category": "color",
            "description": "Base retouch, accent highlights, haircut, gloss and blowout.",
            "price": {
              "kind": "fixed",
              "amount": 425,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option: Juvy."
            },
            "durationMinutes": 210,
            "durationMaxMinutes": null,
            "sourceId": "booking",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Barbering haircuts",
            "category": "haircut",
            "description": null,
            "price": {
              "kind": "fixed",
              "amount": 80,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option: Grace."
            },
            "durationMinutes": 60,
            "durationMaxMinutes": null,
            "sourceId": "booking",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Express Gloss/Toner",
            "category": "color",
            "description": "Refreshes already-lightened hair.",
            "price": {
              "kind": "fixed",
              "amount": 130,
              "amountMax": null,
              "currency": "USD",
              "note": "Published base price; final total unverified."
            },
            "durationMinutes": 60,
            "durationMaxMinutes": null,
            "sourceId": "booking",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Keratin Express Blowout",
            "category": "treatment",
            "description": "Express smoothing treatment.",
            "price": {
              "kind": "starting_at",
              "amount": 200,
              "amountMax": null,
              "currency": "USD",
              "note": "Published base price; final total unverified."
            },
            "durationMinutes": 90,
            "durationMaxMinutes": null,
            "sourceId": "booking",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Keratin Smoothing Treatment",
            "category": "treatment",
            "description": "Keratin smoothing treatment.",
            "price": {
              "kind": "fixed",
              "amount": 350,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option: Patty."
            },
            "durationMinutes": 150,
            "durationMaxMinutes": null,
            "sourceId": "booking",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Shampoo + Blowout",
            "category": "styling",
            "description": null,
            "price": {
              "kind": "fixed",
              "amount": 80,
              "amountMax": null,
              "currency": "USD",
              "note": "Published base price; final total unverified."
            },
            "durationMinutes": 60,
            "durationMaxMinutes": null,
            "sourceId": "booking",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Balayage/Highlight Partial",
            "category": "color",
            "description": "Lightening excluding the base of the neck.",
            "price": {
              "kind": "fixed",
              "amount": 275,
              "amountMax": null,
              "currency": "USD",
              "note": "Alexis menu."
            },
            "durationMinutes": 150,
            "durationMaxMinutes": null,
            "sourceId": "alexis-booking",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Balayage/Highlight Partial + Haircut",
            "category": "color",
            "description": "Partial lightening with shampoo, haircut and blow-dry.",
            "price": {
              "kind": "fixed",
              "amount": 380,
              "amountMax": null,
              "currency": "USD",
              "note": "Alexis menu."
            },
            "durationMinutes": 180,
            "durationMaxMinutes": null,
            "sourceId": "alexis-booking",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Haircut",
            "category": "haircut",
            "description": "Consultation, shampoo and a 15-minute blow-dry are included.",
            "price": {
              "kind": "fixed",
              "amount": 125,
              "amountMax": null,
              "currency": "USD",
              "note": "Alexis menu."
            },
            "durationMinutes": 60,
            "durationMaxMinutes": null,
            "sourceId": "alexis-booking",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Balayage/Highlight Full",
            "category": "color",
            "description": "Full-head lightening with balayage or foils.",
            "price": {
              "kind": "fixed",
              "amount": 330,
              "amountMax": null,
              "currency": "USD",
              "note": "Alexis menu."
            },
            "durationMinutes": 180,
            "durationMaxMinutes": null,
            "sourceId": "alexis-booking",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Balayage/Highlight Full + Haircut",
            "category": "color",
            "description": "Full-head lightening with shampoo, haircut and blowout.",
            "price": {
              "kind": "fixed",
              "amount": 445,
              "amountMax": null,
              "currency": "USD",
              "note": "Alexis menu."
            },
            "durationMinutes": 210,
            "durationMaxMinutes": null,
            "sourceId": "alexis-booking",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "All Over Color (Root Touch up + Gloss)",
            "category": "color",
            "description": "Root color and end gloss; not lightening. Extra color for length or density costs $30.",
            "price": {
              "kind": "fixed",
              "amount": 170,
              "amountMax": null,
              "currency": "USD",
              "note": "Alexis menu."
            },
            "durationMinutes": 120,
            "durationMaxMinutes": null,
            "sourceId": "alexis-booking",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "All Over Color + Haircut",
            "category": "color",
            "description": "Root color and end gloss plus haircut; not lightening.",
            "price": {
              "kind": "fixed",
              "amount": 260,
              "amountMax": null,
              "currency": "USD",
              "note": "Alexis menu."
            },
            "durationMinutes": 150,
            "durationMaxMinutes": null,
            "sourceId": "alexis-booking",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Barbering Haircut",
            "category": "haircut",
            "description": "Clipper haircut, shampoo and blow-dry.",
            "price": {
              "kind": "fixed",
              "amount": 90,
              "amountMax": null,
              "currency": "USD",
              "note": "Alexis menu."
            },
            "durationMinutes": 60,
            "durationMaxMinutes": null,
            "sourceId": "alexis-booking",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Express Gloss/Toner",
            "category": "color",
            "description": "Gloss for already-lightened hair.",
            "price": {
              "kind": "fixed",
              "amount": 130,
              "amountMax": null,
              "currency": "USD",
              "note": "Alexis menu."
            },
            "durationMinutes": 60,
            "durationMaxMinutes": null,
            "sourceId": "alexis-booking",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Shampoo + Blowout",
            "category": "styling",
            "description": "Curls or straightening can be added; extra price not stated.",
            "price": {
              "kind": "fixed",
              "amount": 80,
              "amountMax": null,
              "currency": "USD",
              "note": "Alexis menu."
            },
            "durationMinutes": 60,
            "durationMaxMinutes": null,
            "sourceId": "alexis-booking",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "All over color (base touch up + gloss)",
            "category": "color",
            "description": "Website states services include shampoo and blow-dry.",
            "price": {
              "kind": "starting_at",
              "amount": 170,
              "amountMax": null,
              "currency": "USD",
              "note": "General website price; varies by stylist. Do not replace a selected booking option with this amount."
            },
            "durationMinutes": null,
            "durationMaxMinutes": null,
            "sourceId": "website-menu",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Base/Gray touch up",
            "category": "color",
            "description": "Website states services include shampoo and blow-dry.",
            "price": {
              "kind": "starting_at",
              "amount": 160,
              "amountMax": null,
              "currency": "USD",
              "note": "General website price; varies by stylist. Do not replace a selected booking option with this amount."
            },
            "durationMinutes": null,
            "durationMaxMinutes": null,
            "sourceId": "website-menu",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Partial Balayage/Highlight",
            "category": "color",
            "description": "Website states services include shampoo and blow-dry.",
            "price": {
              "kind": "starting_at",
              "amount": 250,
              "amountMax": null,
              "currency": "USD",
              "note": "General website price; varies by stylist. Do not replace a selected booking option with this amount."
            },
            "durationMinutes": null,
            "durationMaxMinutes": null,
            "sourceId": "website-menu",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Full Balayage/Highlight",
            "category": "color",
            "description": "Website states services include shampoo and blow-dry.",
            "price": {
              "kind": "starting_at",
              "amount": 300,
              "amountMax": null,
              "currency": "USD",
              "note": "General website price; varies by stylist. Do not replace a selected booking option with this amount."
            },
            "durationMinutes": null,
            "durationMaxMinutes": null,
            "sourceId": "website-menu",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Haircut",
            "category": "haircut",
            "description": "Website states services include shampoo and blow-dry.",
            "price": {
              "kind": "starting_at",
              "amount": 100,
              "amountMax": null,
              "currency": "USD",
              "note": "General website price; varies by stylist. Do not replace a selected booking option with this amount."
            },
            "durationMinutes": null,
            "durationMaxMinutes": null,
            "sourceId": "website-menu",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Shampoo Blowout",
            "category": "styling",
            "description": "Website states services include shampoo and blow-dry.",
            "price": {
              "kind": "starting_at",
              "amount": 75,
              "amountMax": null,
              "currency": "USD",
              "note": "General website price; varies by stylist. Do not replace a selected booking option with this amount."
            },
            "durationMinutes": null,
            "durationMaxMinutes": null,
            "sourceId": "website-menu",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Davines Deep Conditioner",
            "category": "treatment",
            "description": "Website states services include shampoo and blow-dry.",
            "price": {
              "kind": "fixed",
              "amount": 30,
              "amountMax": null,
              "currency": "USD",
              "note": "General website price; varies by stylist. Do not replace a selected booking option with this amount."
            },
            "durationMinutes": null,
            "durationMaxMinutes": null,
            "sourceId": "website-menu",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Keratin Complex Smoothing Treatment",
            "category": "treatment",
            "description": "Website states services include shampoo and blow-dry.",
            "price": {
              "kind": "fixed",
              "amount": 350,
              "amountMax": null,
              "currency": "USD",
              "note": "General website price; varies by stylist. Do not replace a selected booking option with this amount."
            },
            "durationMinutes": null,
            "durationMaxMinutes": null,
            "sourceId": "website-menu",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Keratin Complex Express Blowout",
            "category": "treatment",
            "description": "Website states services include shampoo and blow-dry.",
            "price": {
              "kind": "fixed",
              "amount": 200,
              "amountMax": null,
              "currency": "USD",
              "note": "General website price; varies by stylist. Do not replace a selected booking option with this amount."
            },
            "durationMinutes": null,
            "durationMaxMinutes": null,
            "sourceId": "website-menu",
            "priceSourceId": null,
            "durationSourceId": null
          }
        ],
        "addOnsStatus": "published",
        "addOns": [
          {
            "name": "Additional color for length or density",
            "category": "color",
            "description": "Conditional addition to the main-menu all-over color/gloss service.",
            "price": {
              "kind": "fixed",
              "amount": 20,
              "amountMax": null,
              "currency": "USD",
              "note": null
            },
            "durationMinutes": null,
            "durationMaxMinutes": null,
            "sourceId": "booking",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Additional color for length or density",
            "category": "color",
            "description": "Conditional addition to Alexis all-over color service.",
            "price": {
              "kind": "fixed",
              "amount": 30,
              "amountMax": null,
              "currency": "USD",
              "note": "Alexis menu."
            },
            "durationMinutes": null,
            "durationMaxMinutes": null,
            "sourceId": "alexis-booking",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Curls or straightening",
            "category": "styling",
            "description": "Optional addition to Alexis shampoo and blowout; price not published.",
            "price": {
              "kind": "unknown",
              "amount": null,
              "amountMax": null,
              "currency": "USD",
              "note": null
            },
            "durationMinutes": null,
            "durationMaxMinutes": null,
            "sourceId": "alexis-booking",
            "priceSourceId": null,
            "durationSourceId": null
          }
        ],
        "stylistsStatus": "published",
        "stylists": [
          {
            "name": "Patty",
            "specialties": [],
            "bio": null,
            "bookingUrl": "https://squareup.com/appointments/book/4f3950da-30a2-4ea2-8a70-d8f3ba870500/25YERQT7GV97T/services",
            "portfolioUrl": null,
            "sourceId": "team"
          },
          {
            "name": "Grace",
            "specialties": [],
            "bio": null,
            "bookingUrl": "https://squareup.com/appointments/book/8d5925oygy090y/25YERQT7GV97T/services",
            "portfolioUrl": null,
            "sourceId": "team"
          },
          {
            "name": "Juvy",
            "specialties": [],
            "bio": null,
            "bookingUrl": "https://squareup.com/appointments/book/2bdfk63ipelrql/25YERQT7GV97T/services",
            "portfolioUrl": null,
            "sourceId": "team"
          },
          {
            "name": "Alexis",
            "specialties": [],
            "bio": null,
            "bookingUrl": "https://book.squareup.com/appointments/m5hdj0io0ws4tk/location/L8MTF4JZ6BE99/services",
            "portfolioUrl": null,
            "sourceId": "team"
          }
        ],
        "policies": {
          "cancellation": {
            "value": "Changes with less than 48 hours of notice incur 50% of the service price.",
            "sourceId": "booking"
          },
          "deposit": {
            "value": null,
            "sourceId": null
          },
          "noShow": {
            "value": null,
            "sourceId": null
          },
          "lateArrival": {
            "value": "Arrival more than 15 minutes late may require changing the scheduled service.",
            "sourceId": "policy"
          },
          "consultation": {
            "value": "Complimentary consultations are available in person or by contacting the salon.",
            "sourceId": "website-menu"
          },
          "payment": {
            "value": null,
            "sourceId": null
          },
          "walkIns": {
            "value": null,
            "sourceId": null
          }
        },
        "unknowns": [
          "Exact final total, including applicable extras, tax and gratuity, is not established by a published base price.",
          "Appointment availability was not checked.",
          "The general website menu does not publish durations. Option labels identify a published choice; no current stylist availability was established.",
          "No usable public terms established for: deposit, noShow, payment, walkIns."
        ],
        "conflicts": [
          "Root Touch Up + Haircut, Patty: the public booking page has a numeric price of $260, while its price-description field says $250.00. Confirm the option price before relying on it.",
          "Root Touch Up + Haircut, Grace: the public booking page has a numeric price of $250, while its price-description field says $240.00. Confirm the option price before relying on it.",
          "General website base prices are sometimes below the explicit booking options: haircut $100+ versus $110/$120/$130 in the main menu, partial lightening $250+ versus $275, and blowout $75+ versus $80. These are separate source scopes, not interchangeable quotes."
        ]
      }
    },
    {
      "slug": "bangin-hair-salon-castro-upper-market",
      "ref": "san-francisco/hair-salon/bangin-hair-salon-castro-upper-market",
      "name": "Bangin Hair Salon",
      "neighborhood": "Castro / Upper Market",
      "researched_at": "2026-10-24T09:34:11Z",
      "coverage": {
        "services": 64,
        "services_with_prices": 61,
        "services_with_durations": 64,
        "add_ons": 7,
        "stylists": 7,
        "published_policies": 5,
        "policy_fields": 7,
        "successfully_read_sources": 4
      },
      "unknowns": [
        "Exact final total, including applicable extras, tax and gratuity, is not established by a published base price.",
        "Appointment availability was not checked.",
        "No priced service list was established for Jenny or Andy. The team page has seven stylists but the main booking menu has four; Juliann is represented by a separate menu. Roster presence is not availability.",
        "Website says haircuts and color include wash/blow-dry, excluding bang and neck trims. Individual dry-haircut and add-on services have narrower scope; confirm before combining.",
        "No usable public terms established for: deposit, payment."
      ],
      "conflicts": [
        "Juliann Global Bleach Out: displayed price is $600 for 240 minutes, but the service description says $550 for the first four hours plus $130 per additional hour.",
        "Juliann Color Correction: displayed price is $600 for 240 minutes, but the service description says $550 for the first four hours plus $130 per additional hour.",
        "Homepage asks 24 hours of notice for cuts and 48 hours for color; main booking policy says less than 24 hours incurs 50% and same-day cancellation/no-show incurs 100%. The applicable color deadline needs confirmation.",
        "Juliann has a separate stricter policy: less than one week of notice for cancellation/rescheduling incurs 50%; same-day cancellation or no-show incurs 100%. It must not be replaced with the main booking menu policy."
      ],
      "url": "https://agentsalonsf.com/salons/bangin-hair-salon-castro-upper-market",
      "markdown_url": "https://agentsalonsf.com/salons/bangin-hair-salon-castro-upper-market.md",
      "api_url": "https://agentsalonsf.com/api/v1/salons/bangin-hair-salon-castro-upper-market",
      "public_research": {
        "salonSlug": "bangin-hair-salon-castro-upper-market",
        "researchedAt": "2026-10-24T09:34:11Z",
        "summary": "Every visible option from the main booking menu and Juliann’s separate linked menu is retained. Andy’s linked site does not expose a readable menu in this environment; Jenny has no public priced menu on the team page.",
        "sources": [
          {
            "id": "website",
            "url": "https://www.banginhairsalon.com/",
            "kind": "salon_website",
            "checkedAt": "2026-10-24T09:34:11Z",
            "outcome": "read",
            "note": "Public page read for services, team or stated policies."
          },
          {
            "id": "team",
            "url": "https://www.banginhairsalon.com/services-3",
            "kind": "salon_website",
            "checkedAt": "2026-10-24T09:34:11Z",
            "outcome": "read",
            "note": "Public page read for services, team or stated policies."
          },
          {
            "id": "booking",
            "url": "https://book.squareup.com/appointments/2hwm8d263a0zet/location/A6Z53KBPMEZTM",
            "kind": "booking_provider",
            "checkedAt": "2026-10-24T09:29:50Z",
            "outcome": "read",
            "note": "Public booking HTML, including explicitly named menu variations."
          },
          {
            "id": "juliann-booking",
            "url": "https://book.squareup.com/appointments/segnymdmffwmg5/location/HRB8Z4YMMRXNN",
            "kind": "booking_provider",
            "checkedAt": "2026-10-24T09:29:50Z",
            "outcome": "read",
            "note": "Separate salon-linked public menu and stylist-specific policy; no slots."
          },
          {
            "id": "andy",
            "url": "https://www.androcuts.com/",
            "kind": "salon_website",
            "checkedAt": "2026-10-24T09:29:52Z",
            "outcome": "unavailable",
            "note": "Page loaded a client-rendered booking shell but no readable menu or prices."
          }
        ],
        "menuStatus": "published",
        "menu": [
          {
            "name": "Clipper Haircut",
            "category": "haircut",
            "description": "Gender-neutral clipper-length haircut.",
            "price": {
              "kind": "fixed",
              "amount": 85,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option: Diane."
            },
            "durationMinutes": 45,
            "durationMaxMinutes": null,
            "sourceId": "booking",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Clipper Haircut",
            "category": "haircut",
            "description": "Gender-neutral clipper-length haircut.",
            "price": {
              "kind": "fixed",
              "amount": 85,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option: Joseph."
            },
            "durationMinutes": 60,
            "durationMaxMinutes": null,
            "sourceId": "booking",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Clipper Haircut",
            "category": "haircut",
            "description": "Gender-neutral clipper-length haircut.",
            "price": {
              "kind": "fixed",
              "amount": 85,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option: Mick."
            },
            "durationMinutes": 60,
            "durationMaxMinutes": null,
            "sourceId": "booking",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Bang Trim/Neck Trim",
            "category": "haircut",
            "description": "Between-haircut trim; website excludes wash and blow-dry.",
            "price": {
              "kind": "fixed",
              "amount": 25,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option: Joseph."
            },
            "durationMinutes": 15,
            "durationMaxMinutes": null,
            "sourceId": "booking",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Bang Trim/Neck Trim",
            "category": "haircut",
            "description": "Between-haircut trim; website excludes wash and blow-dry.",
            "price": {
              "kind": "fixed",
              "amount": 25,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option: Brendan."
            },
            "durationMinutes": 15,
            "durationMaxMinutes": null,
            "sourceId": "booking",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Bang Trim/Neck Trim",
            "category": "haircut",
            "description": "Between-haircut trim; website excludes wash and blow-dry.",
            "price": {
              "kind": "fixed",
              "amount": 25,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option: Mick."
            },
            "durationMinutes": 15,
            "durationMaxMinutes": null,
            "sourceId": "booking",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Haircut",
            "category": "haircut",
            "description": "Cuts with scissors, razor or both.",
            "price": {
              "kind": "fixed",
              "amount": 150,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option: Diane."
            },
            "durationMinutes": 60,
            "durationMaxMinutes": null,
            "sourceId": "booking",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Haircut",
            "category": "haircut",
            "description": "Cuts with scissors, razor or both.",
            "price": {
              "kind": "fixed",
              "amount": 125,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option: Joseph."
            },
            "durationMinutes": 75,
            "durationMaxMinutes": null,
            "sourceId": "booking",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Haircut",
            "category": "haircut",
            "description": "Cuts with scissors, razor or both.",
            "price": {
              "kind": "fixed",
              "amount": 145,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option: Brendan."
            },
            "durationMinutes": 60,
            "durationMaxMinutes": null,
            "sourceId": "booking",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Haircut",
            "category": "haircut",
            "description": "Cuts with scissors, razor or both.",
            "price": {
              "kind": "fixed",
              "amount": 125,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option: Mick."
            },
            "durationMinutes": 75,
            "durationMaxMinutes": null,
            "sourceId": "booking",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Full Placement",
            "category": "color",
            "description": "Full-head lightening. Root melt/gloss and brighter ends are separate additions.",
            "price": {
              "kind": "fixed",
              "amount": 360,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option: Diane."
            },
            "durationMinutes": 180,
            "durationMaxMinutes": null,
            "sourceId": "booking",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Full Placement and Haircut",
            "category": "color",
            "description": "Full-head lightening and haircut; root melt/gloss and brighter ends are separate additions.",
            "price": {
              "kind": "fixed",
              "amount": 510,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option: Diane."
            },
            "durationMinutes": 210,
            "durationMaxMinutes": null,
            "sourceId": "booking",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Full Placement and Haircut",
            "category": "color",
            "description": "Full-head lightening and haircut; root melt/gloss and brighter ends are separate additions.",
            "price": {
              "kind": "fixed",
              "amount": 520,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option: Brendan."
            },
            "durationMinutes": 225,
            "durationMaxMinutes": null,
            "sourceId": "booking",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Partial Placement",
            "category": "color",
            "description": "Lightening around the hairline and top; root melt/gloss and brighter ends are separate additions.",
            "price": {
              "kind": "fixed",
              "amount": 300,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option: Diane."
            },
            "durationMinutes": 150,
            "durationMaxMinutes": null,
            "sourceId": "booking",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Partial Placement",
            "category": "color",
            "description": "Lightening around the hairline and top; root melt/gloss and brighter ends are separate additions.",
            "price": {
              "kind": "fixed",
              "amount": 285,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option: Brendan."
            },
            "durationMinutes": 150,
            "durationMaxMinutes": null,
            "sourceId": "booking",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Partial Placement and Haircut",
            "category": "color",
            "description": "Partial lightening and haircut; root melt/gloss and brighter ends are separate additions.",
            "price": {
              "kind": "fixed",
              "amount": 450,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option: Diane."
            },
            "durationMinutes": 180,
            "durationMaxMinutes": null,
            "sourceId": "booking",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Partial Placement and Haircut",
            "category": "color",
            "description": "Partial lightening and haircut; root melt/gloss and brighter ends are separate additions.",
            "price": {
              "kind": "fixed",
              "amount": 430,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option: Brendan."
            },
            "durationMinutes": 180,
            "durationMaxMinutes": null,
            "sourceId": "booking",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Tint Retouch",
            "category": "color",
            "description": "Color on regrowth; excludes bleach-and-tone retouch.",
            "price": {
              "kind": "fixed",
              "amount": 150,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option: Diane."
            },
            "durationMinutes": 90,
            "durationMaxMinutes": null,
            "sourceId": "booking",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Tint Retouch",
            "category": "color",
            "description": "Color on regrowth; excludes bleach-and-tone retouch.",
            "price": {
              "kind": "fixed",
              "amount": 160,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option: Brendan."
            },
            "durationMinutes": 90,
            "durationMaxMinutes": null,
            "sourceId": "booking",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Tint Retouch",
            "category": "color",
            "description": "Color on regrowth; excludes bleach-and-tone retouch.",
            "price": {
              "kind": "fixed",
              "amount": 150,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option: Mick."
            },
            "durationMinutes": 90,
            "durationMaxMinutes": null,
            "sourceId": "booking",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Tint Retouch and Haircut",
            "category": "color",
            "description": "Color retouch with haircut.",
            "price": {
              "kind": "fixed",
              "amount": 300,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option: Diane."
            },
            "durationMinutes": 135,
            "durationMaxMinutes": null,
            "sourceId": "booking",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Tint Retouch and Haircut",
            "category": "color",
            "description": "Color retouch with haircut.",
            "price": {
              "kind": "fixed",
              "amount": 300,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option: Brendan."
            },
            "durationMinutes": 120,
            "durationMaxMinutes": null,
            "sourceId": "booking",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Tint Retouch and Haircut",
            "category": "color",
            "description": "Color retouch with haircut.",
            "price": {
              "kind": "fixed",
              "amount": 275,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option: Mick."
            },
            "durationMinutes": 150,
            "durationMaxMinutes": null,
            "sourceId": "booking",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Gloss/Toner/Root melt",
            "category": "color",
            "description": "Changes tone on lightened hair or darkens the root area.",
            "price": {
              "kind": "fixed",
              "amount": 80,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option: Diane."
            },
            "durationMinutes": 45,
            "durationMaxMinutes": null,
            "sourceId": "booking",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Gloss/Toner/Root melt",
            "category": "color",
            "description": "Changes tone on lightened hair or darkens the root area.",
            "price": {
              "kind": "fixed",
              "amount": 125,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option: Brendan."
            },
            "durationMinutes": 60,
            "durationMaxMinutes": null,
            "sourceId": "booking",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Transformation Haircut/Thick Hair",
            "category": "haircut",
            "description": "Extra time for a substantial change or dense hair.",
            "price": {
              "kind": "fixed",
              "amount": 180,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option: Diane."
            },
            "durationMinutes": 90,
            "durationMaxMinutes": null,
            "sourceId": "booking",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Transformation Haircut/Thick Hair",
            "category": "haircut",
            "description": "Extra time for a substantial change or dense hair.",
            "price": {
              "kind": "fixed",
              "amount": 145,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option: Joseph."
            },
            "durationMinutes": 90,
            "durationMaxMinutes": null,
            "sourceId": "booking",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Transformation Haircut/Thick Hair",
            "category": "haircut",
            "description": "Extra time for a substantial change or dense hair.",
            "price": {
              "kind": "fixed",
              "amount": 185,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option: Brendan."
            },
            "durationMinutes": 90,
            "durationMaxMinutes": null,
            "sourceId": "booking",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Transformation Haircut/Thick Hair",
            "category": "haircut",
            "description": "Extra time for a substantial change or dense hair.",
            "price": {
              "kind": "fixed",
              "amount": 175,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option: Mick."
            },
            "durationMinutes": 90,
            "durationMaxMinutes": null,
            "sourceId": "booking",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Shampoo and Blow Dry",
            "category": "styling",
            "description": "For curls or waves, choose the separate iron-styling option.",
            "price": {
              "kind": "fixed",
              "amount": 95,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option: Joseph."
            },
            "durationMinutes": 60,
            "durationMaxMinutes": null,
            "sourceId": "booking",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Shampoo, Blow Dry and Iron",
            "category": "styling",
            "description": "Includes thermal styling.",
            "price": {
              "kind": "fixed",
              "amount": 95,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option: Joseph."
            },
            "durationMinutes": 60,
            "durationMaxMinutes": null,
            "sourceId": "booking",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Shampoo, Blow Dry and Iron",
            "category": "styling",
            "description": "Includes thermal styling.",
            "price": {
              "kind": "fixed",
              "amount": 135,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option: Brendan."
            },
            "durationMinutes": 60,
            "durationMaxMinutes": null,
            "sourceId": "booking",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "All Over Tint",
            "category": "color",
            "description": "Root-to-end color; not bleach and tone.",
            "price": {
              "kind": "fixed",
              "amount": 240,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option: Diane."
            },
            "durationMinutes": 120,
            "durationMaxMinutes": null,
            "sourceId": "booking",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "All Over Tint",
            "category": "color",
            "description": "Root-to-end color; not bleach and tone.",
            "price": {
              "kind": "fixed",
              "amount": 225,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option: Brendan."
            },
            "durationMinutes": 120,
            "durationMaxMinutes": null,
            "sourceId": "booking",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Color Consultation",
            "category": "other",
            "description": "Discuss major lightening, first-time color or a correction before choosing the service.",
            "price": {
              "kind": "fixed",
              "amount": 0,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option: Brendan."
            },
            "durationMinutes": 15,
            "durationMaxMinutes": null,
            "sourceId": "booking",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Haircut Consultation",
            "category": "other",
            "description": "Pre-haircut discussion.",
            "price": {
              "kind": "fixed",
              "amount": 0,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option: Joseph."
            },
            "durationMinutes": 15,
            "durationMaxMinutes": null,
            "sourceId": "booking",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Haircut Consultation",
            "category": "other",
            "description": "Pre-haircut discussion.",
            "price": {
              "kind": "fixed",
              "amount": 0,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option: Brendan."
            },
            "durationMinutes": 15,
            "durationMaxMinutes": null,
            "sourceId": "booking",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Haircut Consultation",
            "category": "other",
            "description": "Pre-haircut discussion.",
            "price": {
              "kind": "fixed",
              "amount": 0,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option: Mick."
            },
            "durationMinutes": 15,
            "durationMaxMinutes": null,
            "sourceId": "booking",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Gloss/Toner and Haircut",
            "category": "color",
            "description": "Tonal adjustment with haircut; not gray coverage.",
            "price": {
              "kind": "fixed",
              "amount": 230,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option: Diane."
            },
            "durationMinutes": 90,
            "durationMaxMinutes": null,
            "sourceId": "booking",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Gloss/Toner and Haircut",
            "category": "color",
            "description": "Tonal adjustment with haircut; not gray coverage.",
            "price": {
              "kind": "fixed",
              "amount": 200,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option: Brendan."
            },
            "durationMinutes": 90,
            "durationMaxMinutes": null,
            "sourceId": "booking",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Gloss/Toner and Haircut",
            "category": "color",
            "description": "Tonal adjustment with haircut; not gray coverage.",
            "price": {
              "kind": "fixed",
              "amount": 200,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option: Mick."
            },
            "durationMinutes": 90,
            "durationMaxMinutes": null,
            "sourceId": "booking",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Dry Haircut **Brendan only",
            "category": "haircut",
            "description": "Returning clients only.",
            "price": {
              "kind": "fixed",
              "amount": 85,
              "amountMax": null,
              "currency": "USD",
              "note": "Published base price; final total unverified."
            },
            "durationMinutes": 30,
            "durationMaxMinutes": null,
            "sourceId": "booking",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Haircut",
            "category": "haircut",
            "description": "Gender-neutral cuts for hair extending below the ears.",
            "price": {
              "kind": "fixed",
              "amount": 165,
              "amountMax": null,
              "currency": "USD",
              "note": "Juliann menu."
            },
            "durationMinutes": 60,
            "durationMaxMinutes": null,
            "sourceId": "juliann-booking",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Tint Retouch",
            "category": "color",
            "description": null,
            "price": {
              "kind": "fixed",
              "amount": 175,
              "amountMax": null,
              "currency": "USD",
              "note": "Juliann menu."
            },
            "durationMinutes": 90,
            "durationMaxMinutes": null,
            "sourceId": "juliann-booking",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "All-over Tint",
            "category": "color",
            "description": null,
            "price": {
              "kind": "fixed",
              "amount": 220,
              "amountMax": null,
              "currency": "USD",
              "note": "Juliann menu."
            },
            "durationMinutes": 105,
            "durationMaxMinutes": null,
            "sourceId": "juliann-booking",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Full Highlight",
            "category": "color",
            "description": "Full-head foils or balayage.",
            "price": {
              "kind": "fixed",
              "amount": 375,
              "amountMax": null,
              "currency": "USD",
              "note": "Juliann menu."
            },
            "durationMinutes": 195,
            "durationMaxMinutes": null,
            "sourceId": "juliann-booking",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Partial Highlight",
            "category": "color",
            "description": "Half-head foils or balayage.",
            "price": {
              "kind": "fixed",
              "amount": 330,
              "amountMax": null,
              "currency": "USD",
              "note": "Juliann menu."
            },
            "durationMinutes": 165,
            "durationMaxMinutes": null,
            "sourceId": "juliann-booking",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Mini Highlight",
            "category": "color",
            "description": "Existing clients only; fewer than 12 foils or balayage around the hairline and part.",
            "price": {
              "kind": "fixed",
              "amount": 250,
              "amountMax": null,
              "currency": "USD",
              "note": "Juliann menu."
            },
            "durationMinutes": 105,
            "durationMaxMinutes": null,
            "sourceId": "juliann-booking",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Olaplex/K18 w/ Blowdry",
            "category": "treatment",
            "description": "Standalone treatment with blow-dry and styling.",
            "price": {
              "kind": "fixed",
              "amount": 100,
              "amountMax": null,
              "currency": "USD",
              "note": "Juliann menu."
            },
            "durationMinutes": 60,
            "durationMaxMinutes": null,
            "sourceId": "juliann-booking",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Full Highlight & Haircut",
            "category": "color",
            "description": null,
            "price": {
              "kind": "fixed",
              "amount": 540,
              "amountMax": null,
              "currency": "USD",
              "note": "Juliann menu."
            },
            "durationMinutes": 255,
            "durationMaxMinutes": null,
            "sourceId": "juliann-booking",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "All-over Tint & Haircut",
            "category": "color",
            "description": null,
            "price": {
              "kind": "fixed",
              "amount": 365,
              "amountMax": null,
              "currency": "USD",
              "note": "Juliann menu."
            },
            "durationMinutes": 135,
            "durationMaxMinutes": null,
            "sourceId": "juliann-booking",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Mini Highlight & Haircut",
            "category": "color",
            "description": "Existing clients only; limited hairline/part highlights plus haircut.",
            "price": {
              "kind": "fixed",
              "amount": 415,
              "amountMax": null,
              "currency": "USD",
              "note": "Juliann menu."
            },
            "durationMinutes": 165,
            "durationMaxMinutes": null,
            "sourceId": "juliann-booking",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Global Bleach Out",
            "category": "color",
            "description": "Consultation required. Contact the stylist within 24 hours after booking to establish the required time or the appointment may be canceled. Includes in-salon and take-home Olaplex; price fields conflict.",
            "price": {
              "kind": "unknown",
              "amount": null,
              "amountMax": null,
              "currency": "USD",
              "note": "Juliann menu. Juliann Global Bleach Out: displayed price is $600 for 240 minutes, but the service description says $550 for the first four hours plus $130 per additional hour."
            },
            "durationMinutes": 240,
            "durationMaxMinutes": null,
            "sourceId": "juliann-booking",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Bleach & Tone Retouch",
            "category": "color",
            "description": "For retouch within eight weeks and less than one inch of regrowth. Includes toner; root melt is extra. Description specifies $125 per hour after the initial 2.5 hours, while the listed appointment duration is 165 minutes.",
            "price": {
              "kind": "fixed",
              "amount": 330,
              "amountMax": null,
              "currency": "USD",
              "note": "Juliann menu."
            },
            "durationMinutes": 165,
            "durationMaxMinutes": null,
            "sourceId": "juliann-booking",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Tint Retouch & Haircut",
            "category": "color",
            "description": null,
            "price": {
              "kind": "fixed",
              "amount": 315,
              "amountMax": null,
              "currency": "USD",
              "note": "Juliann menu."
            },
            "durationMinutes": 120,
            "durationMaxMinutes": null,
            "sourceId": "juliann-booking",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Color Correction",
            "category": "color",
            "description": "Consultation required. Contact the stylist within 24 hours after booking to establish the required time or the appointment may be canceled. Some goals need multiple visits. Includes in-salon and take-home Olaplex; price fields conflict.",
            "price": {
              "kind": "unknown",
              "amount": null,
              "amountMax": null,
              "currency": "USD",
              "note": "Juliann menu. Juliann Color Correction: displayed price is $600 for 240 minutes, but the service description says $550 for the first four hours plus $130 per additional hour."
            },
            "durationMinutes": 240,
            "durationMaxMinutes": null,
            "sourceId": "juliann-booking",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Bang/Neck Trim",
            "category": "haircut",
            "description": null,
            "price": {
              "kind": "fixed",
              "amount": 40,
              "amountMax": null,
              "currency": "USD",
              "note": "Juliann menu."
            },
            "durationMinutes": 15,
            "durationMaxMinutes": null,
            "sourceId": "juliann-booking",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Transformational Haircut",
            "category": "haircut",
            "description": null,
            "price": {
              "kind": "fixed",
              "amount": 200,
              "amountMax": null,
              "currency": "USD",
              "note": "Juliann menu."
            },
            "durationMinutes": 90,
            "durationMaxMinutes": null,
            "sourceId": "juliann-booking",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Extensions Hair",
            "category": "styling",
            "description": null,
            "price": {
              "kind": "unknown",
              "amount": null,
              "amountMax": null,
              "currency": "USD",
              "note": "Juliann menu."
            },
            "durationMinutes": 30,
            "durationMaxMinutes": null,
            "sourceId": "juliann-booking",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Consultation",
            "category": "other",
            "description": "Virtual consultation is preferred; arrange with the stylist to discuss process, time and price.",
            "price": {
              "kind": "fixed",
              "amount": 0,
              "amountMax": null,
              "currency": "USD",
              "note": "Juliann menu."
            },
            "durationMinutes": 15,
            "durationMaxMinutes": null,
            "sourceId": "juliann-booking",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Toner",
            "category": "color",
            "description": "Gloss for prelightened hair.",
            "price": {
              "kind": "fixed",
              "amount": 125,
              "amountMax": null,
              "currency": "USD",
              "note": "Juliann menu."
            },
            "durationMinutes": 60,
            "durationMaxMinutes": null,
            "sourceId": "juliann-booking",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Partial Highlight & Haircut",
            "category": "color",
            "description": null,
            "price": {
              "kind": "fixed",
              "amount": 495,
              "amountMax": null,
              "currency": "USD",
              "note": "Juliann menu."
            },
            "durationMinutes": 225,
            "durationMaxMinutes": null,
            "sourceId": "juliann-booking",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Toner & Haircut",
            "category": "color",
            "description": null,
            "price": {
              "kind": "fixed",
              "amount": 275,
              "amountMax": null,
              "currency": "USD",
              "note": "Juliann menu."
            },
            "durationMinutes": 105,
            "durationMaxMinutes": null,
            "sourceId": "juliann-booking",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Keratin Treatment",
            "category": "treatment",
            "description": "Smoothing rather than straightening; texture may relax.",
            "price": {
              "kind": "fixed",
              "amount": 400,
              "amountMax": null,
              "currency": "USD",
              "note": "Juliann menu."
            },
            "durationMinutes": 180,
            "durationMaxMinutes": null,
            "sourceId": "juliann-booking",
            "priceSourceId": null,
            "durationSourceId": null
          }
        ],
        "addOnsStatus": "published",
        "addOns": [
          {
            "name": "Tip Out",
            "category": "color",
            "description": "Optional end-lightening addition to partial or full placement.",
            "price": {
              "kind": "fixed",
              "amount": 100,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option: Diane."
            },
            "durationMinutes": 45,
            "durationMaxMinutes": null,
            "sourceId": "booking",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Tip Out",
            "category": "color",
            "description": "Optional end-lightening addition to partial or full placement.",
            "price": {
              "kind": "fixed",
              "amount": 125,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option: Brendan."
            },
            "durationMinutes": 60,
            "durationMaxMinutes": null,
            "sourceId": "booking",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Tip Out (add on only)",
            "category": "color",
            "description": "Optional brightening of the ends with a highlight appointment.",
            "price": {
              "kind": "fixed",
              "amount": 110,
              "amountMax": null,
              "currency": "USD",
              "note": "Juliann menu."
            },
            "durationMinutes": 45,
            "durationMaxMinutes": null,
            "sourceId": "juliann-booking",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Olaplex/K18 (add on only)",
            "category": "treatment",
            "description": "Only with a haircut or color appointment.",
            "price": {
              "kind": "fixed",
              "amount": 40,
              "amountMax": null,
              "currency": "USD",
              "note": "Juliann menu."
            },
            "durationMinutes": 15,
            "durationMaxMinutes": null,
            "sourceId": "juliann-booking",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Root Melt (add on only)",
            "category": "color",
            "description": "Root blending added to a highlight or balayage appointment.",
            "price": {
              "kind": "fixed",
              "amount": 60,
              "amountMax": null,
              "currency": "USD",
              "note": "Juliann menu."
            },
            "durationMinutes": 30,
            "durationMaxMinutes": null,
            "sourceId": "juliann-booking",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Gloss/Toner/Root melt",
            "category": "color",
            "description": "Also listed as an optional addition to partial or full placement; confirm the combined appointment duration.",
            "price": {
              "kind": "fixed",
              "amount": 80,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option: Diane."
            },
            "durationMinutes": 45,
            "durationMaxMinutes": null,
            "sourceId": "booking",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Gloss/Toner/Root melt",
            "category": "color",
            "description": "Also listed as an optional addition to partial or full placement; confirm the combined appointment duration.",
            "price": {
              "kind": "fixed",
              "amount": 125,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option: Brendan."
            },
            "durationMinutes": 60,
            "durationMaxMinutes": null,
            "sourceId": "booking",
            "priceSourceId": null,
            "durationSourceId": null
          }
        ],
        "stylistsStatus": "published",
        "stylists": [
          {
            "name": "Diane",
            "specialties": [],
            "bio": null,
            "bookingUrl": "https://book.squareup.com/appointments/2hwm8d263a0zet/location/A6Z53KBPMEZTM",
            "portfolioUrl": null,
            "sourceId": "team"
          },
          {
            "name": "Joseph",
            "specialties": [],
            "bio": null,
            "bookingUrl": "https://book.squareup.com/appointments/2hwm8d263a0zet/location/A6Z53KBPMEZTM",
            "portfolioUrl": "https://www.instagram.com/jv_chasez/",
            "sourceId": "team"
          },
          {
            "name": "Jenny",
            "specialties": [],
            "bio": null,
            "bookingUrl": null,
            "portfolioUrl": null,
            "sourceId": "team"
          },
          {
            "name": "Andy",
            "specialties": [
              "Short-to-mid-length hair",
              "Clipper cuts",
              "Scissor cuts",
              "Razor cuts"
            ],
            "bio": null,
            "bookingUrl": "https://www.androcuts.com/",
            "portfolioUrl": "https://www.instagram.com/androcuts/",
            "sourceId": "team"
          },
          {
            "name": "Juliann",
            "specialties": [
              "Color transformations",
              "Color correction",
              "Dark-to-blonde color"
            ],
            "bio": null,
            "bookingUrl": "https://book.squareup.com/appointments/segnymdmffwmg5/location/HRB8Z4YMMRXNN",
            "portfolioUrl": "https://www.instagram.com/juliann.hair/",
            "sourceId": "team"
          },
          {
            "name": "Brendan",
            "specialties": [
              "Precision cuts",
              "Razor cuts",
              "Creative color",
              "Lived-in color"
            ],
            "bio": null,
            "bookingUrl": "https://book.squareup.com/appointments/2hwm8d263a0zet/location/A6Z53KBPMEZTM",
            "portfolioUrl": "https://www.instagram.com/brendanhairsorcerer/",
            "sourceId": "team"
          },
          {
            "name": "Mick",
            "specialties": [
              "Straight-razor cuts",
              "Creative cuts",
              "Gender-affirming hair"
            ],
            "bio": null,
            "bookingUrl": "https://book.squareup.com/appointments/2hwm8d263a0zet/location/A6Z53KBPMEZTM",
            "portfolioUrl": null,
            "sourceId": "team"
          }
        ],
        "policies": {
          "cancellation": {
            "value": "Main booking menu: less than 24 hours of notice incurs 50%; same-day cancellation incurs 100%. Other website and Juliann terms differ; see conflicts before relying on this policy.",
            "sourceId": "booking"
          },
          "deposit": {
            "value": null,
            "sourceId": null
          },
          "noShow": {
            "value": "Main booking menu charges 100% for a missed appointment. See the separate Juliann policy in conflicts.",
            "sourceId": "booking"
          },
          "lateArrival": {
            "value": "Juliann only: over 15 minutes late may prevent some scheduled services and trigger a cancellation fee.",
            "sourceId": "juliann-booking"
          },
          "consultation": {
            "value": "Website asks clients new to hair coloring to book a color consultation so the stylist can choose appropriate time and services. Separate Juliann requirements are recorded on the relevant service rows.",
            "sourceId": "website"
          },
          "payment": {
            "value": null,
            "sourceId": null
          },
          "walkIns": {
            "value": "Website describes the salon as appointment-only; independent stylists set their own schedules.",
            "sourceId": "website"
          }
        },
        "unknowns": [
          "Exact final total, including applicable extras, tax and gratuity, is not established by a published base price.",
          "Appointment availability was not checked.",
          "No priced service list was established for Jenny or Andy. The team page has seven stylists but the main booking menu has four; Juliann is represented by a separate menu. Roster presence is not availability.",
          "Website says haircuts and color include wash/blow-dry, excluding bang and neck trims. Individual dry-haircut and add-on services have narrower scope; confirm before combining.",
          "No usable public terms established for: deposit, payment."
        ],
        "conflicts": [
          "Juliann Global Bleach Out: displayed price is $600 for 240 minutes, but the service description says $550 for the first four hours plus $130 per additional hour.",
          "Juliann Color Correction: displayed price is $600 for 240 minutes, but the service description says $550 for the first four hours plus $130 per additional hour.",
          "Homepage asks 24 hours of notice for cuts and 48 hours for color; main booking policy says less than 24 hours incurs 50% and same-day cancellation/no-show incurs 100%. The applicable color deadline needs confirmation.",
          "Juliann has a separate stricter policy: less than one week of notice for cancellation/rescheduling incurs 50%; same-day cancellation or no-show incurs 100%. It must not be replaced with the main booking menu policy."
        ]
      }
    },
    {
      "slug": "oro-castro-upper-market",
      "ref": "san-francisco/hair-salon/oro-castro-upper-market",
      "name": "Blond.ish",
      "neighborhood": "Castro / Upper Market",
      "researched_at": "2026-10-24T09:38:45.383672+00:00",
      "coverage": {
        "services": 165,
        "services_with_prices": 153,
        "services_with_durations": 28,
        "add_ons": 1,
        "stylists": 13,
        "published_policies": 3,
        "policy_fields": 7,
        "successfully_read_sources": 4
      },
      "unknowns": [
        "No live appointment availability or booking confirmation was checked.",
        "Published prices are not a final total; applicable extra product, time, tax and gratuity must be confirmed.",
        "K18 is listed on individual stylist price lists but is not explicitly identified as an add-on there; it remains a treatment menu item.",
        "No deposit, no-show-specific or walk-in terms were found on reviewed pages."
      ],
      "conflicts": [
        "The website general menu lists All Over Color from $220, Mini Foil from $250 and Full Highlight/Balayage from $350; the booking menu lists $175+, $180+ and $355+ respectively. Stylist-specific website prices vary further. These are unresolved source differences, not verified offers.",
        "The booking menu includes an extended partial-highlight option with a zero price and no explicit complimentary-service claim. It is retained with unknown price.",
        "The public website says the salon was previously ORO; the existing slug retains that old name."
      ],
      "url": "https://agentsalonsf.com/salons/oro-castro-upper-market",
      "markdown_url": "https://agentsalonsf.com/salons/oro-castro-upper-market.md",
      "api_url": "https://agentsalonsf.com/api/v1/salons/oro-castro-upper-market",
      "public_research": {
        "salonSlug": "oro-castro-upper-market",
        "researchedAt": "2026-10-24T09:38:45.383672+00:00",
        "summary": "Public website and customer booking menu reviewed, including stylist price lists. Website and booking prices conflict for several services; final prices and exact options require confirmation.",
        "sources": [
          {
            "id": "home",
            "url": "https://www.blondishhair.com/",
            "kind": "salon_website",
            "checkedAt": "2026-10-24T09:27:42.718154+00:00",
            "outcome": "read",
            "note": "Public page text reviewed."
          },
          {
            "id": "menu",
            "url": "https://www.blondishhair.com/services",
            "kind": "salon_website",
            "checkedAt": "2026-10-24T09:28:25.190923+00:00",
            "outcome": "read",
            "note": "Public page text reviewed."
          },
          {
            "id": "team",
            "url": "https://www.blondishhair.com/team",
            "kind": "salon_website",
            "checkedAt": "2026-10-24T09:28:25.191205+00:00",
            "outcome": "read",
            "note": "Public page text reviewed."
          },
          {
            "id": "square",
            "url": "https://book.squareup.com/appointments/568a4964-f17d-4920-bf8e-cc94cbcb4a15/location/M6Y3RXVY1WMR1/services",
            "kind": "booking_provider",
            "checkedAt": "2026-10-24T09:28:54.325065+00:00",
            "outcome": "read",
            "note": "Public customer menu and visible options read from page HTML."
          }
        ],
        "menuStatus": "published",
        "menu": [
          {
            "name": "Haircut- Women's",
            "category": "haircut",
            "description": null,
            "price": {
              "kind": "range",
              "amount": 145,
              "amountMax": 195,
              "currency": "USD",
              "note": "Published range; final service scope and charges require confirmation."
            },
            "durationMinutes": 60,
            "durationMaxMinutes": null,
            "sourceId": "square",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Full Highlight & Haircut",
            "category": "color",
            "description": "Combined balayage/highlights/lowlights and haircut.",
            "price": {
              "kind": "starting_at",
              "amount": 475,
              "amountMax": null,
              "currency": "USD",
              "note": "Published customer-menu price; final scope and charges require confirmation."
            },
            "durationMinutes": 210,
            "durationMaxMinutes": null,
            "sourceId": "square",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Partial Highlight & Haircut",
            "category": "color",
            "description": "Combined balayage/highlights/lowlights and haircut.",
            "price": {
              "kind": "starting_at",
              "amount": 395,
              "amountMax": null,
              "currency": "USD",
              "note": "Published customer-menu price; final scope and charges require confirmation."
            },
            "durationMinutes": 180,
            "durationMaxMinutes": null,
            "sourceId": "square",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Cezanne Keratin",
            "category": "treatment",
            "description": null,
            "price": {
              "kind": "starting_at",
              "amount": 475,
              "amountMax": null,
              "currency": "USD",
              "note": "Website says all prices are starting prices and depend on hair and stylist; booking figure retained as published."
            },
            "durationMinutes": 150,
            "durationMaxMinutes": null,
            "sourceId": "square",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Bleach & Tone",
            "category": "color",
            "description": null,
            "price": {
              "kind": "consultation",
              "amount": null,
              "amountMax": null,
              "currency": "USD",
              "note": "Price determined after consultation."
            },
            "durationMinutes": 180,
            "durationMaxMinutes": null,
            "sourceId": "square",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Full Highlight",
            "category": "color",
            "description": "Published combined balayage/highlights/lowlights option.",
            "price": {
              "kind": "starting_at",
              "amount": 355,
              "amountMax": null,
              "currency": "USD",
              "note": "Published customer-menu price; final scope and charges require confirmation."
            },
            "durationMinutes": 180,
            "durationMaxMinutes": null,
            "sourceId": "square",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Partial Highlight",
            "category": "color",
            "description": "Published combined balayage/highlights/lowlights option.",
            "price": {
              "kind": "starting_at",
              "amount": 275,
              "amountMax": null,
              "currency": "USD",
              "note": "Published customer-menu price; final scope and charges require confirmation."
            },
            "durationMinutes": 150,
            "durationMaxMinutes": null,
            "sourceId": "square",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Root Touch Up",
            "category": "color",
            "description": "Root color service; not a blonding service.",
            "price": {
              "kind": "starting_at",
              "amount": 145,
              "amountMax": null,
              "currency": "USD",
              "note": "Published customer-menu price; final scope and charges require confirmation."
            },
            "durationMinutes": 90,
            "durationMaxMinutes": null,
            "sourceId": "square",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Toner w/blowdry",
            "category": "color",
            "description": null,
            "price": {
              "kind": "starting_at",
              "amount": 135,
              "amountMax": null,
              "currency": "USD",
              "note": "Published customer-menu price; final scope and charges require confirmation."
            },
            "durationMinutes": 60,
            "durationMaxMinutes": null,
            "sourceId": "square",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "All Over Color & Haircut",
            "category": "color",
            "description": null,
            "price": {
              "kind": "starting_at",
              "amount": 320,
              "amountMax": null,
              "currency": "USD",
              "note": "Published customer-menu price; final scope and charges require confirmation."
            },
            "durationMinutes": 150,
            "durationMaxMinutes": null,
            "sourceId": "square",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "All Over Color",
            "category": "color",
            "description": "Roots-to-ends color; not a blonding service.",
            "price": {
              "kind": "starting_at",
              "amount": 175,
              "amountMax": null,
              "currency": "USD",
              "note": "Published customer-menu price; final scope and charges require confirmation."
            },
            "durationMinutes": 120,
            "durationMaxMinutes": null,
            "sourceId": "square",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Root Touch Up & Haircut",
            "category": "color",
            "description": null,
            "price": {
              "kind": "starting_at",
              "amount": 250,
              "amountMax": null,
              "currency": "USD",
              "note": "Published customer-menu price; final scope and charges require confirmation."
            },
            "durationMinutes": 120,
            "durationMaxMinutes": null,
            "sourceId": "square",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Shampoo & Blow-dry",
            "category": "styling",
            "description": null,
            "price": {
              "kind": "starting_at",
              "amount": 100,
              "amountMax": null,
              "currency": "USD",
              "note": "Published customer-menu price; final scope and charges require confirmation."
            },
            "durationMinutes": 60,
            "durationMaxMinutes": null,
            "sourceId": "square",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Haircut- Women's Thick/Curly",
            "category": "haircut",
            "description": "For clients previously advised to allow more haircut time.",
            "price": {
              "kind": "unknown",
              "amount": null,
              "amountMax": null,
              "currency": "USD",
              "note": "No numeric price was published for this option."
            },
            "durationMinutes": 90,
            "durationMaxMinutes": null,
            "sourceId": "square",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Haircut- Nonbinary Medium/Long",
            "category": "haircut",
            "description": null,
            "price": {
              "kind": "range",
              "amount": 135,
              "amountMax": 200,
              "currency": "USD",
              "note": "Published range; final service scope and charges require confirmation."
            },
            "durationMinutes": 60,
            "durationMaxMinutes": null,
            "sourceId": "square",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Mini Foil",
            "category": "other",
            "description": null,
            "price": {
              "kind": "starting_at",
              "amount": 180,
              "amountMax": null,
              "currency": "USD",
              "note": "Published customer-menu price; final scope and charges require confirmation."
            },
            "durationMinutes": 90,
            "durationMaxMinutes": null,
            "sourceId": "square",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Haircut- Nonbinary short/clipper",
            "category": "haircut",
            "description": null,
            "price": {
              "kind": "starting_at",
              "amount": 85,
              "amountMax": null,
              "currency": "USD",
              "note": "Published customer-menu price; final scope and charges require confirmation."
            },
            "durationMinutes": 60,
            "durationMaxMinutes": null,
            "sourceId": "square",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Haircut- Nonbinary Thick/Curly",
            "category": "haircut",
            "description": null,
            "price": {
              "kind": "range",
              "amount": 145,
              "amountMax": 225,
              "currency": "USD",
              "note": "Published range; final service scope and charges require confirmation."
            },
            "durationMinutes": 90,
            "durationMaxMinutes": null,
            "sourceId": "square",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Extended time Root Touch Up",
            "category": "color",
            "description": null,
            "price": {
              "kind": "starting_at",
              "amount": 150,
              "amountMax": null,
              "currency": "USD",
              "note": "Published customer-menu price; final scope and charges require confirmation."
            },
            "durationMinutes": 120,
            "durationMaxMinutes": null,
            "sourceId": "square",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Barber Cut",
            "category": "haircut",
            "description": null,
            "price": {
              "kind": "unknown",
              "amount": null,
              "amountMax": null,
              "currency": "USD",
              "note": "No numeric price was published for this option."
            },
            "durationMinutes": 30,
            "durationMaxMinutes": null,
            "sourceId": "square",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Root Touch Up & thick/curly cut",
            "category": "color",
            "description": null,
            "price": {
              "kind": "starting_at",
              "amount": 300,
              "amountMax": null,
              "currency": "USD",
              "note": "Published customer-menu price; final scope and charges require confirmation."
            },
            "durationMinutes": 150,
            "durationMaxMinutes": null,
            "sourceId": "square",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Transformational Color/New Blonding",
            "category": "color",
            "description": "Send current-hair and desired-result photos before booking large changes or first blonding.",
            "price": {
              "kind": "starting_at",
              "amount": 500,
              "amountMax": null,
              "currency": "USD",
              "note": "Published customer-menu price; final scope and charges require confirmation."
            },
            "durationMinutes": 270,
            "durationMaxMinutes": null,
            "sourceId": "square",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Haircut-mens",
            "category": "haircut",
            "description": null,
            "price": {
              "kind": "unknown",
              "amount": null,
              "amountMax": null,
              "currency": "USD",
              "note": "No numeric price was published for this option."
            },
            "durationMinutes": 60,
            "durationMaxMinutes": null,
            "sourceId": "square",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Extended time Partial Highlight Refresh",
            "category": "color",
            "description": null,
            "price": {
              "kind": "unknown",
              "amount": null,
              "amountMax": null,
              "currency": "USD",
              "note": "A zero placeholder is shown in the booking data without a clear free-service statement; confirm the price."
            },
            "durationMinutes": 180,
            "durationMaxMinutes": null,
            "sourceId": "square",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Extended time Full Highlight Refresh",
            "category": "color",
            "description": null,
            "price": {
              "kind": "unknown",
              "amount": null,
              "amountMax": null,
              "currency": "USD",
              "note": "No numeric price was published for this option."
            },
            "durationMinutes": 240,
            "durationMaxMinutes": null,
            "sourceId": "square",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Extended time Mini Foil",
            "category": "other",
            "description": null,
            "price": {
              "kind": "unknown",
              "amount": null,
              "amountMax": null,
              "currency": "USD",
              "note": "No numeric price was published for this option."
            },
            "durationMinutes": 120,
            "durationMaxMinutes": null,
            "sourceId": "square",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Extension Consultation",
            "category": "other",
            "description": "Discuss method, length, fullness, maintenance, color matching and installation pricing.",
            "price": {
              "kind": "fixed",
              "amount": 30,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option base price; final scope and charges require confirmation."
            },
            "durationMinutes": 30,
            "durationMaxMinutes": null,
            "sourceId": "square",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Consultation",
            "category": "other",
            "description": "The salon may move the consultation time; flexibility requested.",
            "price": {
              "kind": "fixed",
              "amount": 0,
              "amountMax": null,
              "currency": "USD",
              "note": "The public customer menu displays $0 for this consultation; this is not the price of a subsequent service."
            },
            "durationMinutes": 15,
            "durationMaxMinutes": null,
            "sourceId": "square",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Women's haircut - Britt",
            "category": "haircut",
            "description": "Published stylist price-list entry; no duration stated.",
            "price": {
              "kind": "starting_at",
              "amount": 155,
              "amountMax": null,
              "currency": "USD",
              "note": "Stylist price list; salon says all prices may change with hair condition, density and length. Published amount is a starting price."
            },
            "durationMinutes": null,
            "durationMaxMinutes": null,
            "sourceId": "team",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Women's thick haircut - Britt",
            "category": "haircut",
            "description": "Published stylist price-list entry; no duration stated.",
            "price": {
              "kind": "starting_at",
              "amount": 175,
              "amountMax": null,
              "currency": "USD",
              "note": "Stylist price list; salon says all prices may change with hair condition, density and length. Published amount is a starting price."
            },
            "durationMinutes": null,
            "durationMaxMinutes": null,
            "sourceId": "team",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Root-touch up - Britt",
            "category": "color",
            "description": "Published stylist price-list entry; no duration stated.",
            "price": {
              "kind": "starting_at",
              "amount": 185,
              "amountMax": null,
              "currency": "USD",
              "note": "Stylist price list; salon says all prices may change with hair condition, density and length. Published amount is a starting price."
            },
            "durationMinutes": null,
            "durationMaxMinutes": null,
            "sourceId": "team",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "All over color - Britt",
            "category": "color",
            "description": "Published stylist price-list entry; no duration stated.",
            "price": {
              "kind": "starting_at",
              "amount": 310,
              "amountMax": null,
              "currency": "USD",
              "note": "Stylist price list; salon says all prices may change with hair condition, density and length. Published amount is a starting price."
            },
            "durationMinutes": null,
            "durationMaxMinutes": null,
            "sourceId": "team",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Partial blonding - Britt",
            "category": "color",
            "description": "Published stylist price-list entry; no duration stated.",
            "price": {
              "kind": "starting_at",
              "amount": 350,
              "amountMax": null,
              "currency": "USD",
              "note": "Stylist price list; salon says all prices may change with hair condition, density and length. Published amount is a starting price."
            },
            "durationMinutes": null,
            "durationMaxMinutes": null,
            "sourceId": "team",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Full blonding - Britt",
            "category": "color",
            "description": "Published stylist price-list entry; no duration stated.",
            "price": {
              "kind": "starting_at",
              "amount": 425,
              "amountMax": null,
              "currency": "USD",
              "note": "Stylist price list; salon says all prices may change with hair condition, density and length. Published amount is a starting price."
            },
            "durationMinutes": null,
            "durationMaxMinutes": null,
            "sourceId": "team",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Tranformational color - Britt",
            "category": "color",
            "description": "Published stylist price-list entry; no duration stated.",
            "price": {
              "kind": "unknown",
              "amount": null,
              "amountMax": null,
              "currency": "USD",
              "note": "Published hourly rate $155/hour; total service price and billed time are unknown."
            },
            "durationMinutes": null,
            "durationMaxMinutes": null,
            "sourceId": "team",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "K18 Treatment - Britt",
            "category": "treatment",
            "description": "Published stylist price-list entry; no duration stated.",
            "price": {
              "kind": "starting_at",
              "amount": 45,
              "amountMax": null,
              "currency": "USD",
              "note": "Stylist price list; salon says all prices may change with hair condition, density and length. Published amount is a starting price."
            },
            "durationMinutes": null,
            "durationMaxMinutes": null,
            "sourceId": "team",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Shampoo Blowout - Britt",
            "category": "styling",
            "description": "Published stylist price-list entry; no duration stated.",
            "price": {
              "kind": "starting_at",
              "amount": 145,
              "amountMax": null,
              "currency": "USD",
              "note": "Stylist price list; salon says all prices may change with hair condition, density and length. Published amount is a starting price."
            },
            "durationMinutes": null,
            "durationMaxMinutes": null,
            "sourceId": "team",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Mini blonding - Britt",
            "category": "color",
            "description": "Published stylist price-list entry; no duration stated.",
            "price": {
              "kind": "starting_at",
              "amount": 250,
              "amountMax": null,
              "currency": "USD",
              "note": "Stylist price list; salon says all prices may change with hair condition, density and length. Published amount is a starting price."
            },
            "durationMinutes": null,
            "durationMaxMinutes": null,
            "sourceId": "team",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Women's haircut - Adrielle",
            "category": "haircut",
            "description": "Published stylist price-list entry; no duration stated.",
            "price": {
              "kind": "starting_at",
              "amount": 175,
              "amountMax": null,
              "currency": "USD",
              "note": "Stylist price list; salon says all prices may change with hair condition, density and length. Published amount is a starting price."
            },
            "durationMinutes": null,
            "durationMaxMinutes": null,
            "sourceId": "team",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Women's thick haircut - Adrielle",
            "category": "haircut",
            "description": "Published stylist price-list entry; no duration stated.",
            "price": {
              "kind": "starting_at",
              "amount": 225,
              "amountMax": null,
              "currency": "USD",
              "note": "Stylist price list; salon says all prices may change with hair condition, density and length. Published amount is a starting price."
            },
            "durationMinutes": null,
            "durationMaxMinutes": null,
            "sourceId": "team",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Barber cut - Adrielle",
            "category": "haircut",
            "description": "Published stylist price-list entry; no duration stated.",
            "price": {
              "kind": "starting_at",
              "amount": 90,
              "amountMax": null,
              "currency": "USD",
              "note": "Stylist price list; salon says all prices may change with hair condition, density and length. Published amount is a starting price."
            },
            "durationMinutes": null,
            "durationMaxMinutes": null,
            "sourceId": "team",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Root-touch up - Adrielle",
            "category": "color",
            "description": "Published stylist price-list entry; no duration stated.",
            "price": {
              "kind": "starting_at",
              "amount": 185,
              "amountMax": null,
              "currency": "USD",
              "note": "Stylist price list; salon says all prices may change with hair condition, density and length. Published amount is a starting price."
            },
            "durationMinutes": null,
            "durationMaxMinutes": null,
            "sourceId": "team",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "All over color - Adrielle",
            "category": "color",
            "description": "Published stylist price-list entry; no duration stated.",
            "price": {
              "kind": "starting_at",
              "amount": 250,
              "amountMax": null,
              "currency": "USD",
              "note": "Stylist price list; salon says all prices may change with hair condition, density and length. Published amount is a starting price."
            },
            "durationMinutes": null,
            "durationMaxMinutes": null,
            "sourceId": "team",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Partial highlight/balayage - Adrielle",
            "category": "color",
            "description": "Published stylist price-list entry; no duration stated.",
            "price": {
              "kind": "starting_at",
              "amount": 315,
              "amountMax": null,
              "currency": "USD",
              "note": "Stylist price list; salon says all prices may change with hair condition, density and length. Published amount is a starting price."
            },
            "durationMinutes": null,
            "durationMaxMinutes": null,
            "sourceId": "team",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Full highlight/balayage - Adrielle",
            "category": "color",
            "description": "Published stylist price-list entry; no duration stated.",
            "price": {
              "kind": "starting_at",
              "amount": 375,
              "amountMax": null,
              "currency": "USD",
              "note": "Stylist price list; salon says all prices may change with hair condition, density and length. Published amount is a starting price."
            },
            "durationMinutes": null,
            "durationMaxMinutes": null,
            "sourceId": "team",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "K18 treatment - Adrielle",
            "category": "treatment",
            "description": "Published stylist price-list entry; no duration stated.",
            "price": {
              "kind": "starting_at",
              "amount": 35,
              "amountMax": null,
              "currency": "USD",
              "note": "Stylist price list; salon says all prices may change with hair condition, density and length. Published amount is a starting price."
            },
            "durationMinutes": null,
            "durationMaxMinutes": null,
            "sourceId": "team",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Shampoo blow dry - Adrielle",
            "category": "styling",
            "description": "Published stylist price-list entry; no duration stated.",
            "price": {
              "kind": "starting_at",
              "amount": 140,
              "amountMax": null,
              "currency": "USD",
              "note": "Stylist price list; salon says all prices may change with hair condition, density and length. Published amount is a starting price."
            },
            "durationMinutes": null,
            "durationMaxMinutes": null,
            "sourceId": "team",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Perm - Adrielle",
            "category": "treatment",
            "description": null,
            "price": {
              "kind": "consultation",
              "amount": null,
              "amountMax": null,
              "currency": "USD",
              "note": "Consultation required; price not published."
            },
            "durationMinutes": null,
            "durationMaxMinutes": null,
            "sourceId": "team",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Women's haircut - Andreyna",
            "category": "haircut",
            "description": "Published stylist price-list entry; no duration stated.",
            "price": {
              "kind": "starting_at",
              "amount": 160,
              "amountMax": null,
              "currency": "USD",
              "note": "Stylist price list; salon says all prices may change with hair condition, density and length. Published amount is a starting price."
            },
            "durationMinutes": null,
            "durationMaxMinutes": null,
            "sourceId": "team",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Women's thick haircut - Andreyna",
            "category": "haircut",
            "description": "Published stylist price-list entry; no duration stated.",
            "price": {
              "kind": "starting_at",
              "amount": 175,
              "amountMax": null,
              "currency": "USD",
              "note": "Stylist price list; salon says all prices may change with hair condition, density and length. Published amount is a starting price."
            },
            "durationMinutes": null,
            "durationMaxMinutes": null,
            "sourceId": "team",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Men's cut - Andreyna",
            "category": "haircut",
            "description": "Published stylist price-list entry; no duration stated.",
            "price": {
              "kind": "starting_at",
              "amount": 100,
              "amountMax": null,
              "currency": "USD",
              "note": "Stylist price list; salon says all prices may change with hair condition, density and length. Published amount is a starting price."
            },
            "durationMinutes": null,
            "durationMaxMinutes": null,
            "sourceId": "team",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Non Binary cut - Andreyna",
            "category": "haircut",
            "description": "Published stylist price-list entry; no duration stated.",
            "price": {
              "kind": "starting_at",
              "amount": 160,
              "amountMax": null,
              "currency": "USD",
              "note": "Stylist price list; salon says all prices may change with hair condition, density and length. Published amount is a starting price."
            },
            "durationMinutes": null,
            "durationMaxMinutes": null,
            "sourceId": "team",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Root-touch up - Andreyna",
            "category": "color",
            "description": "Published stylist price-list entry; no duration stated.",
            "price": {
              "kind": "starting_at",
              "amount": 185,
              "amountMax": null,
              "currency": "USD",
              "note": "Stylist price list; salon says all prices may change with hair condition, density and length. Published amount is a starting price."
            },
            "durationMinutes": null,
            "durationMaxMinutes": null,
            "sourceId": "team",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "All over color - Andreyna",
            "category": "color",
            "description": "Published stylist price-list entry; no duration stated.",
            "price": {
              "kind": "starting_at",
              "amount": 225,
              "amountMax": null,
              "currency": "USD",
              "note": "Stylist price list; salon says all prices may change with hair condition, density and length. Published amount is a starting price."
            },
            "durationMinutes": null,
            "durationMaxMinutes": null,
            "sourceId": "team",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Partial blonding - Andreyna",
            "category": "color",
            "description": "Published stylist price-list entry; no duration stated.",
            "price": {
              "kind": "starting_at",
              "amount": 290,
              "amountMax": null,
              "currency": "USD",
              "note": "Stylist price list; salon says all prices may change with hair condition, density and length. Published amount is a starting price."
            },
            "durationMinutes": null,
            "durationMaxMinutes": null,
            "sourceId": "team",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Full blonding - Andreyna",
            "category": "color",
            "description": "Published stylist price-list entry; no duration stated.",
            "price": {
              "kind": "starting_at",
              "amount": 350,
              "amountMax": null,
              "currency": "USD",
              "note": "Stylist price list; salon says all prices may change with hair condition, density and length. Published amount is a starting price."
            },
            "durationMinutes": null,
            "durationMaxMinutes": null,
            "sourceId": "team",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "K18 Teatment - Andreyna",
            "category": "treatment",
            "description": "Published stylist price-list entry; no duration stated.",
            "price": {
              "kind": "starting_at",
              "amount": 45,
              "amountMax": null,
              "currency": "USD",
              "note": "Stylist price list; salon says all prices may change with hair condition, density and length. Published amount is a starting price."
            },
            "durationMinutes": null,
            "durationMaxMinutes": null,
            "sourceId": "team",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Shampoo blow dry - Andreyna",
            "category": "styling",
            "description": "Published stylist price-list entry; no duration stated.",
            "price": {
              "kind": "starting_at",
              "amount": 130,
              "amountMax": null,
              "currency": "USD",
              "note": "Stylist price list; salon says all prices may change with hair condition, density and length. Published amount is a starting price."
            },
            "durationMinutes": null,
            "durationMaxMinutes": null,
            "sourceId": "team",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Root-touch up - Ashley",
            "category": "color",
            "description": "Published stylist price-list entry; no duration stated.",
            "price": {
              "kind": "starting_at",
              "amount": 165,
              "amountMax": null,
              "currency": "USD",
              "note": "Stylist price list; salon says all prices may change with hair condition, density and length. Published amount is a starting price."
            },
            "durationMinutes": null,
            "durationMaxMinutes": null,
            "sourceId": "team",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "All over color - Ashley",
            "category": "color",
            "description": "Published stylist price-list entry; no duration stated.",
            "price": {
              "kind": "starting_at",
              "amount": 245,
              "amountMax": null,
              "currency": "USD",
              "note": "Stylist price list; salon says all prices may change with hair condition, density and length. Published amount is a starting price."
            },
            "durationMinutes": null,
            "durationMaxMinutes": null,
            "sourceId": "team",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Partial blonding - Ashley",
            "category": "color",
            "description": "Published stylist price-list entry; no duration stated.",
            "price": {
              "kind": "starting_at",
              "amount": 345,
              "amountMax": null,
              "currency": "USD",
              "note": "Stylist price list; salon says all prices may change with hair condition, density and length. Published amount is a starting price."
            },
            "durationMinutes": null,
            "durationMaxMinutes": null,
            "sourceId": "team",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Full blonding - Ashley",
            "category": "color",
            "description": "Published stylist price-list entry; no duration stated.",
            "price": {
              "kind": "starting_at",
              "amount": 420,
              "amountMax": null,
              "currency": "USD",
              "note": "Stylist price list; salon says all prices may change with hair condition, density and length. Published amount is a starting price."
            },
            "durationMinutes": null,
            "durationMaxMinutes": null,
            "sourceId": "team",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Mini/accent blonding - Ashley",
            "category": "color",
            "description": "Published stylist price-list entry; no duration stated.",
            "price": {
              "kind": "starting_at",
              "amount": 280,
              "amountMax": null,
              "currency": "USD",
              "note": "Stylist price list; salon says all prices may change with hair condition, density and length. Published amount is a starting price."
            },
            "durationMinutes": null,
            "durationMaxMinutes": null,
            "sourceId": "team",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Toner - Ashley",
            "category": "color",
            "description": "Published stylist price-list entry; no duration stated.",
            "price": {
              "kind": "starting_at",
              "amount": 140,
              "amountMax": null,
              "currency": "USD",
              "note": "Stylist price list; salon says all prices may change with hair condition, density and length. Published amount is a starting price."
            },
            "durationMinutes": null,
            "durationMaxMinutes": null,
            "sourceId": "team",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "K18 treatment - Ashley",
            "category": "treatment",
            "description": "Published stylist price-list entry; no duration stated.",
            "price": {
              "kind": "starting_at",
              "amount": 45,
              "amountMax": null,
              "currency": "USD",
              "note": "Stylist price list; salon says all prices may change with hair condition, density and length. Published amount is a starting price."
            },
            "durationMinutes": null,
            "durationMaxMinutes": null,
            "sourceId": "team",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Women's cut - Ashley",
            "category": "haircut",
            "description": "Published stylist price-list entry; no duration stated.",
            "price": {
              "kind": "starting_at",
              "amount": 140,
              "amountMax": null,
              "currency": "USD",
              "note": "Stylist price list; salon says all prices may change with hair condition, density and length. Published amount is a starting price."
            },
            "durationMinutes": null,
            "durationMaxMinutes": null,
            "sourceId": "team",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Root-touch up - Brittany",
            "category": "color",
            "description": "Published stylist price-list entry; no duration stated.",
            "price": {
              "kind": "starting_at",
              "amount": 185,
              "amountMax": null,
              "currency": "USD",
              "note": "Stylist price list; salon says all prices may change with hair condition, density and length. Published amount is a starting price."
            },
            "durationMinutes": null,
            "durationMaxMinutes": null,
            "sourceId": "team",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "All over color - Brittany",
            "category": "color",
            "description": "Published stylist price-list entry; no duration stated.",
            "price": {
              "kind": "starting_at",
              "amount": 300,
              "amountMax": null,
              "currency": "USD",
              "note": "Stylist price list; salon says all prices may change with hair condition, density and length. Published amount is a starting price."
            },
            "durationMinutes": null,
            "durationMaxMinutes": null,
            "sourceId": "team",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Partial blonding - Brittany",
            "category": "color",
            "description": "Published stylist price-list entry; no duration stated.",
            "price": {
              "kind": "starting_at",
              "amount": 350,
              "amountMax": null,
              "currency": "USD",
              "note": "Stylist price list; salon says all prices may change with hair condition, density and length. Published amount is a starting price."
            },
            "durationMinutes": null,
            "durationMaxMinutes": null,
            "sourceId": "team",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Full blonding - Brittany",
            "category": "color",
            "description": "Published stylist price-list entry; no duration stated.",
            "price": {
              "kind": "starting_at",
              "amount": 400,
              "amountMax": null,
              "currency": "USD",
              "note": "Stylist price list; salon says all prices may change with hair condition, density and length. Published amount is a starting price."
            },
            "durationMinutes": null,
            "durationMaxMinutes": null,
            "sourceId": "team",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Tranformational color - Brittany",
            "category": "color",
            "description": "Published stylist price-list entry; no duration stated.",
            "price": {
              "kind": "unknown",
              "amount": null,
              "amountMax": null,
              "currency": "USD",
              "note": "Published hourly rate $155/hour; total service price and billed time are unknown."
            },
            "durationMinutes": null,
            "durationMaxMinutes": null,
            "sourceId": "team",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "K18 Treatment - Brittany",
            "category": "treatment",
            "description": "Published stylist price-list entry; no duration stated.",
            "price": {
              "kind": "starting_at",
              "amount": 45,
              "amountMax": null,
              "currency": "USD",
              "note": "Stylist price list; salon says all prices may change with hair condition, density and length. Published amount is a starting price."
            },
            "durationMinutes": null,
            "durationMaxMinutes": null,
            "sourceId": "team",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Cezanne Classic Keratin - Brittany",
            "category": "treatment",
            "description": "Published stylist price-list entry; no duration stated.",
            "price": {
              "kind": "starting_at",
              "amount": 475,
              "amountMax": null,
              "currency": "USD",
              "note": "Stylist price list; salon says all prices may change with hair condition, density and length. Published amount is a starting price."
            },
            "durationMinutes": null,
            "durationMaxMinutes": null,
            "sourceId": "team",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Toner - Brittany",
            "category": "color",
            "description": "Published stylist price-list entry; no duration stated.",
            "price": {
              "kind": "starting_at",
              "amount": 135,
              "amountMax": null,
              "currency": "USD",
              "note": "Stylist price list; salon says all prices may change with hair condition, density and length. Published amount is a starting price."
            },
            "durationMinutes": null,
            "durationMaxMinutes": null,
            "sourceId": "team",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Mini blonding - Brittany",
            "category": "color",
            "description": "Published stylist price-list entry; no duration stated.",
            "price": {
              "kind": "starting_at",
              "amount": 250,
              "amountMax": null,
              "currency": "USD",
              "note": "Stylist price list; salon says all prices may change with hair condition, density and length. Published amount is a starting price."
            },
            "durationMinutes": null,
            "durationMaxMinutes": null,
            "sourceId": "team",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Shampoo blow dry - Brittany",
            "category": "styling",
            "description": "Published stylist price-list entry; no duration stated.",
            "price": {
              "kind": "starting_at",
              "amount": 130,
              "amountMax": null,
              "currency": "USD",
              "note": "Stylist price list; salon says all prices may change with hair condition, density and length. Published amount is a starting price."
            },
            "durationMinutes": null,
            "durationMaxMinutes": null,
            "sourceId": "team",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Women's haircut - Camille",
            "category": "haircut",
            "description": "Published stylist price-list entry; no duration stated.",
            "price": {
              "kind": "starting_at",
              "amount": 155,
              "amountMax": null,
              "currency": "USD",
              "note": "Stylist price list; salon says all prices may change with hair condition, density and length. Published amount is a starting price."
            },
            "durationMinutes": null,
            "durationMaxMinutes": null,
            "sourceId": "team",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Women's thick haircut - Camille",
            "category": "haircut",
            "description": "Published stylist price-list entry; no duration stated.",
            "price": {
              "kind": "starting_at",
              "amount": 165,
              "amountMax": null,
              "currency": "USD",
              "note": "Stylist price list; salon says all prices may change with hair condition, density and length. Published amount is a starting price."
            },
            "durationMinutes": null,
            "durationMaxMinutes": null,
            "sourceId": "team",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Men's cut - Camille",
            "category": "haircut",
            "description": "Published stylist price-list entry; no duration stated.",
            "price": {
              "kind": "starting_at",
              "amount": 100,
              "amountMax": null,
              "currency": "USD",
              "note": "Stylist price list; salon says all prices may change with hair condition, density and length. Published amount is a starting price."
            },
            "durationMinutes": null,
            "durationMaxMinutes": null,
            "sourceId": "team",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Clipper cut - Camille",
            "category": "haircut",
            "description": "Published stylist price-list entry; no duration stated.",
            "price": {
              "kind": "starting_at",
              "amount": 90,
              "amountMax": null,
              "currency": "USD",
              "note": "Stylist price list; salon says all prices may change with hair condition, density and length. Published amount is a starting price."
            },
            "durationMinutes": null,
            "durationMaxMinutes": null,
            "sourceId": "team",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Non Binary cut - Camille",
            "category": "haircut",
            "description": "Published stylist price-list entry; no duration stated.",
            "price": {
              "kind": "starting_at",
              "amount": 155,
              "amountMax": null,
              "currency": "USD",
              "note": "Stylist price list; salon says all prices may change with hair condition, density and length. Published amount is a starting price."
            },
            "durationMinutes": null,
            "durationMaxMinutes": null,
            "sourceId": "team",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Root-touch up - Camille",
            "category": "color",
            "description": "Published stylist price-list entry; no duration stated.",
            "price": {
              "kind": "starting_at",
              "amount": 165,
              "amountMax": null,
              "currency": "USD",
              "note": "Stylist price list; salon says all prices may change with hair condition, density and length. Published amount is a starting price."
            },
            "durationMinutes": null,
            "durationMaxMinutes": null,
            "sourceId": "team",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "All over color - Camille",
            "category": "color",
            "description": "Published stylist price-list entry; no duration stated.",
            "price": {
              "kind": "starting_at",
              "amount": 250,
              "amountMax": null,
              "currency": "USD",
              "note": "Stylist price list; salon says all prices may change with hair condition, density and length. Published amount is a starting price."
            },
            "durationMinutes": null,
            "durationMaxMinutes": null,
            "sourceId": "team",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Partial blonding - Camille",
            "category": "color",
            "description": "Published stylist price-list entry; no duration stated.",
            "price": {
              "kind": "starting_at",
              "amount": 295,
              "amountMax": null,
              "currency": "USD",
              "note": "Stylist price list; salon says all prices may change with hair condition, density and length. Published amount is a starting price."
            },
            "durationMinutes": null,
            "durationMaxMinutes": null,
            "sourceId": "team",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Full blonding - Camille",
            "category": "color",
            "description": "Published stylist price-list entry; no duration stated.",
            "price": {
              "kind": "starting_at",
              "amount": 375,
              "amountMax": null,
              "currency": "USD",
              "note": "Stylist price list; salon says all prices may change with hair condition, density and length. Published amount is a starting price."
            },
            "durationMinutes": null,
            "durationMaxMinutes": null,
            "sourceId": "team",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "K18 treatment - Camille",
            "category": "treatment",
            "description": "Published stylist price-list entry; no duration stated.",
            "price": {
              "kind": "starting_at",
              "amount": 45,
              "amountMax": null,
              "currency": "USD",
              "note": "Stylist price list; salon says all prices may change with hair condition, density and length. Published amount is a starting price."
            },
            "durationMinutes": null,
            "durationMaxMinutes": null,
            "sourceId": "team",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Shampoo blow dry - Camille",
            "category": "styling",
            "description": "Published stylist price-list entry; no duration stated.",
            "price": {
              "kind": "starting_at",
              "amount": 135,
              "amountMax": null,
              "currency": "USD",
              "note": "Stylist price list; salon says all prices may change with hair condition, density and length. Published amount is a starting price."
            },
            "durationMinutes": null,
            "durationMaxMinutes": null,
            "sourceId": "team",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Bleach and tone - Camille",
            "category": "color",
            "description": "Published stylist price-list entry; no duration stated.",
            "price": {
              "kind": "unknown",
              "amount": null,
              "amountMax": null,
              "currency": "USD",
              "note": "Published hourly rate $130/hour; total service price and billed time are unknown."
            },
            "durationMinutes": null,
            "durationMaxMinutes": null,
            "sourceId": "team",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Women's haircut - Courtney",
            "category": "haircut",
            "description": "Published stylist price-list entry; no duration stated.",
            "price": {
              "kind": "starting_at",
              "amount": 165,
              "amountMax": null,
              "currency": "USD",
              "note": "Stylist price list; salon says all prices may change with hair condition, density and length. Published amount is a starting price."
            },
            "durationMinutes": null,
            "durationMaxMinutes": null,
            "sourceId": "team",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Women's thick haircut - Courtney",
            "category": "haircut",
            "description": "Published stylist price-list entry; no duration stated.",
            "price": {
              "kind": "starting_at",
              "amount": 200,
              "amountMax": null,
              "currency": "USD",
              "note": "Stylist price list; salon says all prices may change with hair condition, density and length. Published amount is a starting price."
            },
            "durationMinutes": null,
            "durationMaxMinutes": null,
            "sourceId": "team",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Root-touch up - Courtney",
            "category": "color",
            "description": "Published stylist price-list entry; no duration stated.",
            "price": {
              "kind": "starting_at",
              "amount": 165,
              "amountMax": null,
              "currency": "USD",
              "note": "Stylist price list; salon says all prices may change with hair condition, density and length. Published amount is a starting price."
            },
            "durationMinutes": null,
            "durationMaxMinutes": null,
            "sourceId": "team",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "All over color - Courtney",
            "category": "color",
            "description": "Published stylist price-list entry; no duration stated.",
            "price": {
              "kind": "starting_at",
              "amount": 250,
              "amountMax": null,
              "currency": "USD",
              "note": "Stylist price list; salon says all prices may change with hair condition, density and length. Published amount is a starting price."
            },
            "durationMinutes": null,
            "durationMaxMinutes": null,
            "sourceId": "team",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Partial blonding - Courtney",
            "category": "color",
            "description": "Published stylist price-list entry; no duration stated.",
            "price": {
              "kind": "starting_at",
              "amount": 300,
              "amountMax": null,
              "currency": "USD",
              "note": "Stylist price list; salon says all prices may change with hair condition, density and length. Published amount is a starting price."
            },
            "durationMinutes": null,
            "durationMaxMinutes": null,
            "sourceId": "team",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Full blonding - Courtney",
            "category": "color",
            "description": "Published stylist price-list entry; no duration stated.",
            "price": {
              "kind": "starting_at",
              "amount": 375,
              "amountMax": null,
              "currency": "USD",
              "note": "Stylist price list; salon says all prices may change with hair condition, density and length. Published amount is a starting price."
            },
            "durationMinutes": null,
            "durationMaxMinutes": null,
            "sourceId": "team",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Toner with blow dry - Courtney",
            "category": "color",
            "description": "Published stylist price-list entry; no duration stated.",
            "price": {
              "kind": "starting_at",
              "amount": 165,
              "amountMax": null,
              "currency": "USD",
              "note": "Stylist price list; salon says all prices may change with hair condition, density and length. Published amount is a starting price."
            },
            "durationMinutes": null,
            "durationMaxMinutes": null,
            "sourceId": "team",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Treatment and blowdry - Courtney",
            "category": "treatment",
            "description": "Published stylist price-list entry; no duration stated.",
            "price": {
              "kind": "starting_at",
              "amount": 165,
              "amountMax": null,
              "currency": "USD",
              "note": "Stylist price list; salon says all prices may change with hair condition, density and length. Published amount is a starting price."
            },
            "durationMinutes": null,
            "durationMaxMinutes": null,
            "sourceId": "team",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Trearment and haircut - Courtney",
            "category": "haircut",
            "description": "Published stylist price-list entry; no duration stated.",
            "price": {
              "kind": "starting_at",
              "amount": 225,
              "amountMax": null,
              "currency": "USD",
              "note": "Stylist price list; salon says all prices may change with hair condition, density and length. Published amount is a starting price."
            },
            "durationMinutes": null,
            "durationMaxMinutes": null,
            "sourceId": "team",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Women's haircut - Eden",
            "category": "haircut",
            "description": "Published stylist price-list entry; no duration stated.",
            "price": {
              "kind": "starting_at",
              "amount": 150,
              "amountMax": null,
              "currency": "USD",
              "note": "Stylist price list; salon says all prices may change with hair condition, density and length. Published amount is a starting price."
            },
            "durationMinutes": null,
            "durationMaxMinutes": null,
            "sourceId": "team",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Women's thick haircut - Eden",
            "category": "haircut",
            "description": "Published stylist price-list entry; no duration stated.",
            "price": {
              "kind": "starting_at",
              "amount": 170,
              "amountMax": null,
              "currency": "USD",
              "note": "Stylist price list; salon says all prices may change with hair condition, density and length. Published amount is a starting price."
            },
            "durationMinutes": null,
            "durationMaxMinutes": null,
            "sourceId": "team",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Root-touch up - Eden",
            "category": "color",
            "description": "Published stylist price-list entry; no duration stated.",
            "price": {
              "kind": "starting_at",
              "amount": 165,
              "amountMax": null,
              "currency": "USD",
              "note": "Stylist price list; salon says all prices may change with hair condition, density and length. Published amount is a starting price."
            },
            "durationMinutes": null,
            "durationMaxMinutes": null,
            "sourceId": "team",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "All over color - Eden",
            "category": "color",
            "description": "Published stylist price-list entry; no duration stated.",
            "price": {
              "kind": "starting_at",
              "amount": 185,
              "amountMax": null,
              "currency": "USD",
              "note": "Stylist price list; salon says all prices may change with hair condition, density and length. Published amount is a starting price."
            },
            "durationMinutes": null,
            "durationMaxMinutes": null,
            "sourceId": "team",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Partial blonding - Eden",
            "category": "color",
            "description": "Published stylist price-list entry; no duration stated.",
            "price": {
              "kind": "starting_at",
              "amount": 295,
              "amountMax": null,
              "currency": "USD",
              "note": "Stylist price list; salon says all prices may change with hair condition, density and length. Published amount is a starting price."
            },
            "durationMinutes": null,
            "durationMaxMinutes": null,
            "sourceId": "team",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Full blonding - Eden",
            "category": "color",
            "description": "Published stylist price-list entry; no duration stated.",
            "price": {
              "kind": "starting_at",
              "amount": 355,
              "amountMax": null,
              "currency": "USD",
              "note": "Stylist price list; salon says all prices may change with hair condition, density and length. Published amount is a starting price."
            },
            "durationMinutes": null,
            "durationMaxMinutes": null,
            "sourceId": "team",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "K18 treatment - Eden",
            "category": "treatment",
            "description": "Published stylist price-list entry; no duration stated.",
            "price": {
              "kind": "starting_at",
              "amount": 45,
              "amountMax": null,
              "currency": "USD",
              "note": "Stylist price list; salon says all prices may change with hair condition, density and length. Published amount is a starting price."
            },
            "durationMinutes": null,
            "durationMaxMinutes": null,
            "sourceId": "team",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Toner with blowout - Eden",
            "category": "color",
            "description": "Published stylist price-list entry; no duration stated.",
            "price": {
              "kind": "starting_at",
              "amount": 135,
              "amountMax": null,
              "currency": "USD",
              "note": "Stylist price list; salon says all prices may change with hair condition, density and length. Published amount is a starting price."
            },
            "durationMinutes": null,
            "durationMaxMinutes": null,
            "sourceId": "team",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Women's haircut - Lee",
            "category": "haircut",
            "description": "Published stylist price-list entry; no duration stated.",
            "price": {
              "kind": "starting_at",
              "amount": 145,
              "amountMax": null,
              "currency": "USD",
              "note": "Stylist price list; salon says all prices may change with hair condition, density and length. Published amount is a starting price."
            },
            "durationMinutes": null,
            "durationMaxMinutes": null,
            "sourceId": "team",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Women's thick haircut - Lee",
            "category": "haircut",
            "description": "Published stylist price-list entry; no duration stated.",
            "price": {
              "kind": "starting_at",
              "amount": 175,
              "amountMax": null,
              "currency": "USD",
              "note": "Stylist price list; salon says all prices may change with hair condition, density and length. Published amount is a starting price."
            },
            "durationMinutes": null,
            "durationMaxMinutes": null,
            "sourceId": "team",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Men's cut - Lee",
            "category": "haircut",
            "description": "Published stylist price-list entry; no duration stated.",
            "price": {
              "kind": "starting_at",
              "amount": 100,
              "amountMax": null,
              "currency": "USD",
              "note": "Stylist price list; salon says all prices may change with hair condition, density and length. Published amount is a starting price."
            },
            "durationMinutes": null,
            "durationMaxMinutes": null,
            "sourceId": "team",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Clipper cut - Lee",
            "category": "haircut",
            "description": "Published stylist price-list entry; no duration stated.",
            "price": {
              "kind": "starting_at",
              "amount": 45,
              "amountMax": null,
              "currency": "USD",
              "note": "Stylist price list; salon says all prices may change with hair condition, density and length. Published amount is a starting price."
            },
            "durationMinutes": null,
            "durationMaxMinutes": null,
            "sourceId": "team",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Non Binary cut - Lee",
            "category": "haircut",
            "description": "Published stylist price-list entry; no duration stated.",
            "price": {
              "kind": "starting_at",
              "amount": 145,
              "amountMax": null,
              "currency": "USD",
              "note": "Stylist price list; salon says all prices may change with hair condition, density and length. Published amount is a starting price."
            },
            "durationMinutes": null,
            "durationMaxMinutes": null,
            "sourceId": "team",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Root-touch up - Lee",
            "category": "color",
            "description": "Published stylist price-list entry; no duration stated.",
            "price": {
              "kind": "starting_at",
              "amount": 145,
              "amountMax": null,
              "currency": "USD",
              "note": "Stylist price list; salon says all prices may change with hair condition, density and length. Published amount is a starting price."
            },
            "durationMinutes": null,
            "durationMaxMinutes": null,
            "sourceId": "team",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "All over color - Lee",
            "category": "color",
            "description": "Published stylist price-list entry; no duration stated.",
            "price": {
              "kind": "starting_at",
              "amount": 175,
              "amountMax": null,
              "currency": "USD",
              "note": "Stylist price list; salon says all prices may change with hair condition, density and length. Published amount is a starting price."
            },
            "durationMinutes": null,
            "durationMaxMinutes": null,
            "sourceId": "team",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Partial blonding - Lee",
            "category": "color",
            "description": "Published stylist price-list entry; no duration stated.",
            "price": {
              "kind": "starting_at",
              "amount": 250,
              "amountMax": null,
              "currency": "USD",
              "note": "Stylist price list; salon says all prices may change with hair condition, density and length. Published amount is a starting price."
            },
            "durationMinutes": null,
            "durationMaxMinutes": null,
            "sourceId": "team",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Full blonding - Lee",
            "category": "color",
            "description": "Published stylist price-list entry; no duration stated.",
            "price": {
              "kind": "starting_at",
              "amount": 325,
              "amountMax": null,
              "currency": "USD",
              "note": "Stylist price list; salon says all prices may change with hair condition, density and length. Published amount is a starting price."
            },
            "durationMinutes": null,
            "durationMaxMinutes": null,
            "sourceId": "team",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Women's haircut - Jarr",
            "category": "haircut",
            "description": "Published stylist price-list entry; no duration stated.",
            "price": {
              "kind": "starting_at",
              "amount": 170,
              "amountMax": null,
              "currency": "USD",
              "note": "Stylist price list; salon says all prices may change with hair condition, density and length. Published amount is a starting price."
            },
            "durationMinutes": null,
            "durationMaxMinutes": null,
            "sourceId": "team",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Women's thick haircut - Jarr",
            "category": "haircut",
            "description": "Published stylist price-list entry; no duration stated.",
            "price": {
              "kind": "starting_at",
              "amount": 185,
              "amountMax": null,
              "currency": "USD",
              "note": "Stylist price list; salon says all prices may change with hair condition, density and length. Published amount is a starting price."
            },
            "durationMinutes": null,
            "durationMaxMinutes": null,
            "sourceId": "team",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Root-touch up - Jarr",
            "category": "color",
            "description": "Published stylist price-list entry; no duration stated.",
            "price": {
              "kind": "starting_at",
              "amount": 170,
              "amountMax": null,
              "currency": "USD",
              "note": "Stylist price list; salon says all prices may change with hair condition, density and length. Published amount is a starting price."
            },
            "durationMinutes": null,
            "durationMaxMinutes": null,
            "sourceId": "team",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "All over color - Jarr",
            "category": "color",
            "description": "Published stylist price-list entry; no duration stated.",
            "price": {
              "kind": "starting_at",
              "amount": 200,
              "amountMax": null,
              "currency": "USD",
              "note": "Stylist price list; salon says all prices may change with hair condition, density and length. Published amount is a starting price."
            },
            "durationMinutes": null,
            "durationMaxMinutes": null,
            "sourceId": "team",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Partial blonding - Jarr",
            "category": "color",
            "description": "Published stylist price-list entry; no duration stated.",
            "price": {
              "kind": "starting_at",
              "amount": 325,
              "amountMax": null,
              "currency": "USD",
              "note": "Stylist price list; salon says all prices may change with hair condition, density and length. Published amount is a starting price."
            },
            "durationMinutes": null,
            "durationMaxMinutes": null,
            "sourceId": "team",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Full blonding - Jarr",
            "category": "color",
            "description": "Published stylist price-list entry; no duration stated.",
            "price": {
              "kind": "starting_at",
              "amount": 375,
              "amountMax": null,
              "currency": "USD",
              "note": "Stylist price list; salon says all prices may change with hair condition, density and length. Published amount is a starting price."
            },
            "durationMinutes": null,
            "durationMaxMinutes": null,
            "sourceId": "team",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "K18 treatmen - Jarr",
            "category": "treatment",
            "description": "Published stylist price-list entry; no duration stated.",
            "price": {
              "kind": "starting_at",
              "amount": 45,
              "amountMax": null,
              "currency": "USD",
              "note": "Stylist price list; salon says all prices may change with hair condition, density and length. Published amount is a starting price."
            },
            "durationMinutes": null,
            "durationMaxMinutes": null,
            "sourceId": "team",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Women's haircut - Naomi",
            "category": "haircut",
            "description": "Published stylist price-list entry; no duration stated.",
            "price": {
              "kind": "starting_at",
              "amount": 145,
              "amountMax": null,
              "currency": "USD",
              "note": "Stylist price list; salon says all prices may change with hair condition, density and length. Published amount is a starting price."
            },
            "durationMinutes": null,
            "durationMaxMinutes": null,
            "sourceId": "team",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Women's thick haircut - Naomi",
            "category": "haircut",
            "description": "Published stylist price-list entry; no duration stated.",
            "price": {
              "kind": "starting_at",
              "amount": 165,
              "amountMax": null,
              "currency": "USD",
              "note": "Stylist price list; salon says all prices may change with hair condition, density and length. Published amount is a starting price."
            },
            "durationMinutes": null,
            "durationMaxMinutes": null,
            "sourceId": "team",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Non Binary cut - Naomi",
            "category": "haircut",
            "description": "Published stylist price-list entry; no duration stated.",
            "price": {
              "kind": "starting_at",
              "amount": 145,
              "amountMax": null,
              "currency": "USD",
              "note": "Stylist price list; salon says all prices may change with hair condition, density and length. Published amount is a starting price."
            },
            "durationMinutes": null,
            "durationMaxMinutes": null,
            "sourceId": "team",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Men’s cuts - Naomi",
            "category": "haircut",
            "description": "Published stylist price-list entry; no duration stated.",
            "price": {
              "kind": "starting_at",
              "amount": 100,
              "amountMax": null,
              "currency": "USD",
              "note": "Stylist price list; salon says all prices may change with hair condition, density and length. Published amount is a starting price."
            },
            "durationMinutes": null,
            "durationMaxMinutes": null,
            "sourceId": "team",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Root-touch up - Naomi",
            "category": "color",
            "description": "Published stylist price-list entry; no duration stated.",
            "price": {
              "kind": "starting_at",
              "amount": 175,
              "amountMax": null,
              "currency": "USD",
              "note": "Stylist price list; salon says all prices may change with hair condition, density and length. Published amount is a starting price."
            },
            "durationMinutes": null,
            "durationMaxMinutes": null,
            "sourceId": "team",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "All over color - Naomi",
            "category": "color",
            "description": "Published stylist price-list entry; no duration stated.",
            "price": {
              "kind": "starting_at",
              "amount": 215,
              "amountMax": null,
              "currency": "USD",
              "note": "Stylist price list; salon says all prices may change with hair condition, density and length. Published amount is a starting price."
            },
            "durationMinutes": null,
            "durationMaxMinutes": null,
            "sourceId": "team",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Partial blonding - Naomi",
            "category": "color",
            "description": "Published stylist price-list entry; no duration stated.",
            "price": {
              "kind": "starting_at",
              "amount": 290,
              "amountMax": null,
              "currency": "USD",
              "note": "Stylist price list; salon says all prices may change with hair condition, density and length. Published amount is a starting price."
            },
            "durationMinutes": null,
            "durationMaxMinutes": null,
            "sourceId": "team",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Full blonding - Naomi",
            "category": "color",
            "description": "Published stylist price-list entry; no duration stated.",
            "price": {
              "kind": "starting_at",
              "amount": 365,
              "amountMax": null,
              "currency": "USD",
              "note": "Stylist price list; salon says all prices may change with hair condition, density and length. Published amount is a starting price."
            },
            "durationMinutes": null,
            "durationMaxMinutes": null,
            "sourceId": "team",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "K18 treatment - Naomi",
            "category": "treatment",
            "description": "Published stylist price-list entry; no duration stated.",
            "price": {
              "kind": "starting_at",
              "amount": 45,
              "amountMax": null,
              "currency": "USD",
              "note": "Stylist price list; salon says all prices may change with hair condition, density and length. Published amount is a starting price."
            },
            "durationMinutes": null,
            "durationMaxMinutes": null,
            "sourceId": "team",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Shampoo blow dry - Naomi",
            "category": "styling",
            "description": "Published stylist price-list entry; no duration stated.",
            "price": {
              "kind": "starting_at",
              "amount": 120,
              "amountMax": null,
              "currency": "USD",
              "note": "Stylist price list; salon says all prices may change with hair condition, density and length. Published amount is a starting price."
            },
            "durationMinutes": null,
            "durationMaxMinutes": null,
            "sourceId": "team",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Non Binary haircut - Natalia",
            "category": "haircut",
            "description": "Published stylist price-list entry; no duration stated.",
            "price": {
              "kind": "starting_at",
              "amount": 145,
              "amountMax": null,
              "currency": "USD",
              "note": "Stylist price list; salon says all prices may change with hair condition, density and length. Published amount is a starting price."
            },
            "durationMinutes": null,
            "durationMaxMinutes": null,
            "sourceId": "team",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Women's haircut - Natalia",
            "category": "haircut",
            "description": "Published stylist price-list entry; no duration stated.",
            "price": {
              "kind": "starting_at",
              "amount": 145,
              "amountMax": null,
              "currency": "USD",
              "note": "Stylist price list; salon says all prices may change with hair condition, density and length. Published amount is a starting price."
            },
            "durationMinutes": null,
            "durationMaxMinutes": null,
            "sourceId": "team",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Non Binary thick haircut - Natalia",
            "category": "haircut",
            "description": "Published stylist price-list entry; no duration stated.",
            "price": {
              "kind": "starting_at",
              "amount": 175,
              "amountMax": null,
              "currency": "USD",
              "note": "Stylist price list; salon says all prices may change with hair condition, density and length. Published amount is a starting price."
            },
            "durationMinutes": null,
            "durationMaxMinutes": null,
            "sourceId": "team",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Women's thick haircut - Natalia",
            "category": "haircut",
            "description": "Published stylist price-list entry; no duration stated.",
            "price": {
              "kind": "starting_at",
              "amount": 175,
              "amountMax": null,
              "currency": "USD",
              "note": "Stylist price list; salon says all prices may change with hair condition, density and length. Published amount is a starting price."
            },
            "durationMinutes": null,
            "durationMaxMinutes": null,
            "sourceId": "team",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Root-touch up - Natalia",
            "category": "color",
            "description": "Published stylist price-list entry; no duration stated.",
            "price": {
              "kind": "starting_at",
              "amount": 185,
              "amountMax": null,
              "currency": "USD",
              "note": "Stylist price list; salon says all prices may change with hair condition, density and length. Published amount is a starting price."
            },
            "durationMinutes": null,
            "durationMaxMinutes": null,
            "sourceId": "team",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "All over color - Natalia",
            "category": "color",
            "description": "Published stylist price-list entry; no duration stated.",
            "price": {
              "kind": "starting_at",
              "amount": 220,
              "amountMax": null,
              "currency": "USD",
              "note": "Stylist price list; salon says all prices may change with hair condition, density and length. Published amount is a starting price."
            },
            "durationMinutes": null,
            "durationMaxMinutes": null,
            "sourceId": "team",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Partial blonding - Natalia",
            "category": "color",
            "description": "Published stylist price-list entry; no duration stated.",
            "price": {
              "kind": "starting_at",
              "amount": 275,
              "amountMax": null,
              "currency": "USD",
              "note": "Stylist price list; salon says all prices may change with hair condition, density and length. Published amount is a starting price."
            },
            "durationMinutes": null,
            "durationMaxMinutes": null,
            "sourceId": "team",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Full blonding - Natalia",
            "category": "color",
            "description": "Published stylist price-list entry; no duration stated.",
            "price": {
              "kind": "starting_at",
              "amount": 375,
              "amountMax": null,
              "currency": "USD",
              "note": "Stylist price list; salon says all prices may change with hair condition, density and length. Published amount is a starting price."
            },
            "durationMinutes": null,
            "durationMaxMinutes": null,
            "sourceId": "team",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "K18 Treatment - Natalia",
            "category": "treatment",
            "description": "Published stylist price-list entry; no duration stated.",
            "price": {
              "kind": "starting_at",
              "amount": 45,
              "amountMax": null,
              "currency": "USD",
              "note": "Stylist price list; salon says all prices may change with hair condition, density and length. Published amount is a starting price."
            },
            "durationMinutes": null,
            "durationMaxMinutes": null,
            "sourceId": "team",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Shampoo blow dry - Natalia",
            "category": "styling",
            "description": "Published stylist price-list entry; no duration stated.",
            "price": {
              "kind": "starting_at",
              "amount": 140,
              "amountMax": null,
              "currency": "USD",
              "note": "Stylist price list; salon says all prices may change with hair condition, density and length. Published amount is a starting price."
            },
            "durationMinutes": null,
            "durationMaxMinutes": null,
            "sourceId": "team",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Women's haircut - Sylvie",
            "category": "haircut",
            "description": "Published stylist price-list entry; no duration stated.",
            "price": {
              "kind": "starting_at",
              "amount": 145,
              "amountMax": null,
              "currency": "USD",
              "note": "Stylist price list; salon says all prices may change with hair condition, density and length. Published amount is a starting price."
            },
            "durationMinutes": null,
            "durationMaxMinutes": null,
            "sourceId": "team",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Women's thick haircut - Sylvie",
            "category": "haircut",
            "description": "Published stylist price-list entry; no duration stated.",
            "price": {
              "kind": "starting_at",
              "amount": 165,
              "amountMax": null,
              "currency": "USD",
              "note": "Stylist price list; salon says all prices may change with hair condition, density and length. Published amount is a starting price."
            },
            "durationMinutes": null,
            "durationMaxMinutes": null,
            "sourceId": "team",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Men's cut - Sylvie",
            "category": "haircut",
            "description": "Published stylist price-list entry; no duration stated.",
            "price": {
              "kind": "starting_at",
              "amount": 100,
              "amountMax": null,
              "currency": "USD",
              "note": "Stylist price list; salon says all prices may change with hair condition, density and length. Published amount is a starting price."
            },
            "durationMinutes": null,
            "durationMaxMinutes": null,
            "sourceId": "team",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Clipper cut - Sylvie",
            "category": "haircut",
            "description": "Published stylist price-list entry; no duration stated.",
            "price": {
              "kind": "starting_at",
              "amount": 90,
              "amountMax": null,
              "currency": "USD",
              "note": "Stylist price list; salon says all prices may change with hair condition, density and length. Published amount is a starting price."
            },
            "durationMinutes": null,
            "durationMaxMinutes": null,
            "sourceId": "team",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Non Binary cut - Sylvie",
            "category": "haircut",
            "description": "Published stylist price-list entry; no duration stated.",
            "price": {
              "kind": "starting_at",
              "amount": 145,
              "amountMax": null,
              "currency": "USD",
              "note": "Stylist price list; salon says all prices may change with hair condition, density and length. Published amount is a starting price."
            },
            "durationMinutes": null,
            "durationMaxMinutes": null,
            "sourceId": "team",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Root-touch up - Sylvie",
            "category": "color",
            "description": "Published stylist price-list entry; no duration stated.",
            "price": {
              "kind": "starting_at",
              "amount": 165,
              "amountMax": null,
              "currency": "USD",
              "note": "Stylist price list; salon says all prices may change with hair condition, density and length. Published amount is a starting price."
            },
            "durationMinutes": null,
            "durationMaxMinutes": null,
            "sourceId": "team",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "All over color - Sylvie",
            "category": "color",
            "description": "Published stylist price-list entry; no duration stated.",
            "price": {
              "kind": "starting_at",
              "amount": 200,
              "amountMax": null,
              "currency": "USD",
              "note": "Stylist price list; salon says all prices may change with hair condition, density and length. Published amount is a starting price."
            },
            "durationMinutes": null,
            "durationMaxMinutes": null,
            "sourceId": "team",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Partial blonding - Sylvie",
            "category": "color",
            "description": "Published stylist price-list entry; no duration stated.",
            "price": {
              "kind": "starting_at",
              "amount": 275,
              "amountMax": null,
              "currency": "USD",
              "note": "Stylist price list; salon says all prices may change with hair condition, density and length. Published amount is a starting price."
            },
            "durationMinutes": null,
            "durationMaxMinutes": null,
            "sourceId": "team",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Full blonding - Sylvie",
            "category": "color",
            "description": "Published stylist price-list entry; no duration stated.",
            "price": {
              "kind": "starting_at",
              "amount": 350,
              "amountMax": null,
              "currency": "USD",
              "note": "Stylist price list; salon says all prices may change with hair condition, density and length. Published amount is a starting price."
            },
            "durationMinutes": null,
            "durationMaxMinutes": null,
            "sourceId": "team",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "K18 treatment - Sylvie",
            "category": "treatment",
            "description": "Published stylist price-list entry; no duration stated.",
            "price": {
              "kind": "starting_at",
              "amount": 45,
              "amountMax": null,
              "currency": "USD",
              "note": "Stylist price list; salon says all prices may change with hair condition, density and length. Published amount is a starting price."
            },
            "durationMinutes": null,
            "durationMaxMinutes": null,
            "sourceId": "team",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Shampoo blow dry - Sylvie",
            "category": "styling",
            "description": "Published stylist price-list entry; no duration stated.",
            "price": {
              "kind": "starting_at",
              "amount": 100,
              "amountMax": null,
              "currency": "USD",
              "note": "Stylist price list; salon says all prices may change with hair condition, density and length. Published amount is a starting price."
            },
            "durationMinutes": null,
            "durationMaxMinutes": null,
            "sourceId": "team",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Bleach and tone - Sylvie",
            "category": "color",
            "description": "Published stylist price-list entry; no duration stated.",
            "price": {
              "kind": "unknown",
              "amount": null,
              "amountMax": null,
              "currency": "USD",
              "note": "Published hourly rate $125/hour; total service price and billed time are unknown."
            },
            "durationMinutes": null,
            "durationMaxMinutes": null,
            "sourceId": "team",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "BLEACH AND TONE",
            "category": "color",
            "description": "Existing bleach-and-tone retouch; first-time conversion requires consultation.",
            "price": {
              "kind": "starting_at",
              "amount": 300,
              "amountMax": null,
              "currency": "USD",
              "note": "Website starting price."
            },
            "durationMinutes": null,
            "durationMaxMinutes": null,
            "sourceId": "menu",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "CEZANNE KERATIN TREATMENT",
            "category": "treatment",
            "description": null,
            "price": {
              "kind": "starting_at",
              "amount": 475,
              "amountMax": null,
              "currency": "USD",
              "note": "Website says all prices are starting prices."
            },
            "durationMinutes": null,
            "durationMaxMinutes": null,
            "sourceId": "menu",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "CLIPPER CUT",
            "category": "haircut",
            "description": "Shorter maintenance appointment recommended by stylist.",
            "price": {
              "kind": "starting_at",
              "amount": 85,
              "amountMax": null,
              "currency": "USD",
              "note": "Website starting price."
            },
            "durationMinutes": null,
            "durationMaxMinutes": null,
            "sourceId": "menu",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "SCISSOR/RAZOR CUT",
            "category": "haircut",
            "description": "Blow-dry included.",
            "price": {
              "kind": "starting_at",
              "amount": 145,
              "amountMax": null,
              "currency": "USD",
              "note": "Website displays $145-$180+; the plus sign is not an upper cap."
            },
            "durationMinutes": null,
            "durationMaxMinutes": null,
            "sourceId": "menu",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "ROOT TOUCH UP",
            "category": "color",
            "description": "Excludes highlights and bleach-and-tone.",
            "price": {
              "kind": "starting_at",
              "amount": 145,
              "amountMax": null,
              "currency": "USD",
              "note": "Website displays $145-$185+; the plus sign is not an upper cap."
            },
            "durationMinutes": null,
            "durationMaxMinutes": null,
            "sourceId": "menu",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "SHAMPOO BLOWOUT",
            "category": "styling",
            "description": null,
            "price": {
              "kind": "starting_at",
              "amount": 100,
              "amountMax": null,
              "currency": "USD",
              "note": "Website displays $100-$145+; the plus sign is not an upper cap."
            },
            "durationMinutes": null,
            "durationMaxMinutes": null,
            "sourceId": "menu",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "PARTIAL HIGHLIGHT OR BALAYAGE",
            "category": "color",
            "description": null,
            "price": {
              "kind": "starting_at",
              "amount": 275,
              "amountMax": null,
              "currency": "USD",
              "note": "Website displays $275-$350+; the plus sign is not an upper cap."
            },
            "durationMinutes": null,
            "durationMaxMinutes": null,
            "sourceId": "menu",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "ALL OVER COLOR",
            "category": "color",
            "description": "Roots-to-ends color.",
            "price": {
              "kind": "starting_at",
              "amount": 220,
              "amountMax": null,
              "currency": "USD",
              "note": "Website starting price differs from some booking and stylist options."
            },
            "durationMinutes": null,
            "durationMaxMinutes": null,
            "sourceId": "menu",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "TONER AND BLOW DRY",
            "category": "color",
            "description": "Tonal refresh; not lightening or gray coverage.",
            "price": {
              "kind": "starting_at",
              "amount": 135,
              "amountMax": null,
              "currency": "USD",
              "note": "Website starting price."
            },
            "durationMinutes": null,
            "durationMaxMinutes": null,
            "sourceId": "menu",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "FULL HIGHLIGHT OR BALAYAGE",
            "category": "color",
            "description": null,
            "price": {
              "kind": "starting_at",
              "amount": 350,
              "amountMax": null,
              "currency": "USD",
              "note": "Website displays $350-$450+; the plus sign is not an upper cap."
            },
            "durationMinutes": null,
            "durationMaxMinutes": null,
            "sourceId": "menu",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "TRANSFORMATIONAL COLOR",
            "category": "color",
            "description": "Current and desired-hair photos requested before booking.",
            "price": {
              "kind": "starting_at",
              "amount": 500,
              "amountMax": null,
              "currency": "USD",
              "note": "Website starting price."
            },
            "durationMinutes": null,
            "durationMaxMinutes": null,
            "sourceId": "menu",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "MINI FOIL",
            "category": "color",
            "description": "Returning foil/balayage clients only; hairline foils with toner.",
            "price": {
              "kind": "starting_at",
              "amount": 250,
              "amountMax": null,
              "currency": "USD",
              "note": "Website starting price differs from booking menu."
            },
            "durationMinutes": null,
            "durationMaxMinutes": null,
            "sourceId": "menu",
            "priceSourceId": null,
            "durationSourceId": null
          }
        ],
        "addOnsStatus": "published",
        "addOns": [
          {
            "name": "Toner, No Blow Dry (Add on only)",
            "category": "color",
            "description": "Only available in addition to another service; blow-dry excluded.",
            "price": {
              "kind": "unknown",
              "amount": null,
              "amountMax": null,
              "currency": "USD",
              "note": "No numeric price was published for this option."
            },
            "durationMinutes": 30,
            "durationMaxMinutes": null,
            "sourceId": "square",
            "priceSourceId": null,
            "durationSourceId": null
          }
        ],
        "stylistsStatus": "published",
        "stylists": [
          {
            "name": "Britt",
            "specialties": [],
            "bio": "Public team page publishes this stylist’s individual service price list.",
            "bookingUrl": null,
            "portfolioUrl": null,
            "sourceId": "team"
          },
          {
            "name": "Adrielle",
            "specialties": [],
            "bio": "Public team page publishes this stylist’s individual service price list.",
            "bookingUrl": null,
            "portfolioUrl": null,
            "sourceId": "team"
          },
          {
            "name": "Andreyna",
            "specialties": [],
            "bio": "Public team page publishes this stylist’s individual service price list.",
            "bookingUrl": null,
            "portfolioUrl": null,
            "sourceId": "team"
          },
          {
            "name": "Ashley",
            "specialties": [],
            "bio": "Public team page publishes this stylist’s individual service price list.",
            "bookingUrl": null,
            "portfolioUrl": null,
            "sourceId": "team"
          },
          {
            "name": "Brittany",
            "specialties": [],
            "bio": "Public team page publishes this stylist’s individual service price list.",
            "bookingUrl": null,
            "portfolioUrl": null,
            "sourceId": "team"
          },
          {
            "name": "Camille",
            "specialties": [],
            "bio": "Public team page publishes this stylist’s individual service price list.",
            "bookingUrl": null,
            "portfolioUrl": null,
            "sourceId": "team"
          },
          {
            "name": "Courtney",
            "specialties": [],
            "bio": "Public team page publishes this stylist’s individual service price list.",
            "bookingUrl": null,
            "portfolioUrl": null,
            "sourceId": "team"
          },
          {
            "name": "Eden",
            "specialties": [],
            "bio": "Public team page publishes this stylist’s individual service price list.",
            "bookingUrl": null,
            "portfolioUrl": null,
            "sourceId": "team"
          },
          {
            "name": "Lee",
            "specialties": [],
            "bio": "Public team page publishes this stylist’s individual service price list.",
            "bookingUrl": null,
            "portfolioUrl": null,
            "sourceId": "team"
          },
          {
            "name": "Jarr",
            "specialties": [],
            "bio": "Public team page publishes this stylist’s individual service price list.",
            "bookingUrl": null,
            "portfolioUrl": null,
            "sourceId": "team"
          },
          {
            "name": "Naomi",
            "specialties": [],
            "bio": "Public team page publishes this stylist’s individual service price list.",
            "bookingUrl": null,
            "portfolioUrl": null,
            "sourceId": "team"
          },
          {
            "name": "Natalia",
            "specialties": [],
            "bio": "Public team page publishes this stylist’s individual service price list.",
            "bookingUrl": null,
            "portfolioUrl": null,
            "sourceId": "team"
          },
          {
            "name": "Sylvie",
            "specialties": [],
            "bio": "Public team page publishes this stylist’s individual service price list.",
            "bookingUrl": null,
            "portfolioUrl": null,
            "sourceId": "team"
          }
        ],
        "policies": {
          "cancellation": {
            "value": "At least 48 hours notice requested. Changes or cancellations within 48 hours incur 50%; within 24 hours incur 100%.",
            "sourceId": "menu"
          },
          "deposit": {
            "value": null,
            "sourceId": null
          },
          "noShow": {
            "value": null,
            "sourceId": null
          },
          "lateArrival": {
            "value": "Arriving more than 15 minutes late incurs 100% of the service fee.",
            "sourceId": "menu"
          },
          "consultation": {
            "value": "Consultation requested for becoming a bleach-and-tone client; transformational color requires current and desired-hair photos. Consultation-dependent services should be discussed before booking.",
            "sourceId": "menu"
          },
          "payment": {
            "value": null,
            "sourceId": null
          },
          "walkIns": {
            "value": null,
            "sourceId": null
          }
        },
        "unknowns": [
          "No live appointment availability or booking confirmation was checked.",
          "Published prices are not a final total; applicable extra product, time, tax and gratuity must be confirmed.",
          "K18 is listed on individual stylist price lists but is not explicitly identified as an add-on there; it remains a treatment menu item.",
          "No deposit, no-show-specific or walk-in terms were found on reviewed pages."
        ],
        "conflicts": [
          "The website general menu lists All Over Color from $220, Mini Foil from $250 and Full Highlight/Balayage from $350; the booking menu lists $175+, $180+ and $355+ respectively. Stylist-specific website prices vary further. These are unresolved source differences, not verified offers.",
          "The booking menu includes an extended partial-highlight option with a zero price and no explicit complimentary-service claim. It is retained with unknown price.",
          "The public website says the salon was previously ORO; the existing slug retains that old name."
        ],
        "identityUpdate": {
          "name": "Blond.ish",
          "address": null,
          "sourceId": "home"
        }
      }
    },
    {
      "slug": "cowboys-and-angels-tenderloin",
      "ref": "san-francisco/hair-salon/cowboys-and-angels-tenderloin",
      "name": "Cowboys & Angels",
      "neighborhood": "Unknown",
      "researched_at": "2026-10-24T09:38:45.385061+00:00",
      "coverage": {
        "services": 41,
        "services_with_prices": 41,
        "services_with_durations": 41,
        "add_ons": 1,
        "stylists": 1,
        "published_policies": 3,
        "policy_fields": 7,
        "successfully_read_sources": 7
      },
      "unknowns": [
        "No live appointment availability or booking confirmation was checked.",
        "Published prices are not a final total; applicable extra product, time, tax and gratuity must be confirmed.",
        "Cancellation notice cutoff, deposit, no-show-specific fees, late-arrival and payment terms require confirmation.",
        "The Square menu includes a Blockout item without customer-service scope; it was excluded rather than treated as a treatment.",
        "Current postal code was not explicitly published on the official contact page reviewed.",
        "Bundles are kept at their displayed total; incremental charges are not inferred by subtraction."
      ],
      "conflicts": [
        "The current official site says the Powell Street salon has closed and moved to 520 Montgomery St, Suite 205. The existing Tenderloin slug and old address must not be used as current location evidence.",
        "Current Square text mentions a $100 cancellation fee but gives no readable notice interval. The older /online-booking page links STX and describes 24-hour notice with a first-time exception then 50%; do not silently combine these policies.",
        "Tint with Partial highlight is $415/150 minutes, while Partial highlight with tint is $405/180 minutes. These distinct public options may differ in scope; confirm the correct one."
      ],
      "url": "https://agentsalonsf.com/salons/cowboys-and-angels-tenderloin",
      "markdown_url": "https://agentsalonsf.com/salons/cowboys-and-angels-tenderloin.md",
      "api_url": "https://agentsalonsf.com/api/v1/salons/cowboys-and-angels-tenderloin",
      "public_research": {
        "salonSlug": "cowboys-and-angels-tenderloin",
        "researchedAt": "2026-10-24T09:38:45.385061+00:00",
        "summary": "Full public Square menu recovered, including haircut, color, treatments and combined options with prices and durations. Current official site confirms relocation. An older website booking page conflicts with the current Square cancellation text; confirm terms.",
        "sources": [
          {
            "id": "home",
            "url": "https://www.cowboysandangelssf.com/",
            "kind": "salon_website",
            "checkedAt": "2026-10-24T09:27:42.718454+00:00",
            "outcome": "read",
            "note": "Public page text reviewed."
          },
          {
            "id": "menu",
            "url": "https://www.cowboysandangelssf.com/services",
            "kind": "salon_website",
            "checkedAt": "2026-10-24T09:28:25.191316+00:00",
            "outcome": "read",
            "note": "Public page text reviewed."
          },
          {
            "id": "team",
            "url": "https://www.cowboysandangelssf.com/the-stylist",
            "kind": "salon_website",
            "checkedAt": "2026-10-24T09:28:26.216731+00:00",
            "outcome": "read",
            "note": "Public page text reviewed."
          },
          {
            "id": "contact",
            "url": "https://www.cowboysandangelssf.com/contact",
            "kind": "salon_website",
            "checkedAt": "2026-10-24T09:28:50.535202+00:00",
            "outcome": "read",
            "note": "Public page text reviewed."
          },
          {
            "id": "square",
            "url": "https://cowboysangelsstudio.square.site/",
            "kind": "booking_provider",
            "checkedAt": "2026-10-24T09:28:52.237894+00:00",
            "outcome": "read",
            "note": "Public Square Online HTML read; no customer service menu recoverable from the readable page. Template placeholder fields were excluded."
          },
          {
            "id": "legacy-booking",
            "url": "https://www.cowboysandangelssf.com/online-booking",
            "kind": "salon_website",
            "checkedAt": "2026-10-24T09:35:29.939175+00:00",
            "outcome": "read",
            "note": "Older official online-booking page still public; STX link and policies differ from the current Square route."
          },
          {
            "id": "legacy-stx",
            "url": "https://es.salontranscripts.com/533de73f000273872cc6a8c0/",
            "kind": "booking_provider",
            "checkedAt": "2026-10-24T09:35:53.191632+00:00",
            "outcome": "unavailable",
            "note": "Observed legacy link followed; public request failed. No account access attempted."
          },
          {
            "id": "square-direct",
            "url": "https://book.squareup.com/appointments/hp81qznihbea39/location/LK53AV06P3GH3/services?buttonTextColor=ffffff&color=000000&locale=en&referrer=so",
            "kind": "booking_provider",
            "checkedAt": "2026-10-24T09:36:18.475752+00:00",
            "outcome": "read",
            "note": "Full public customer menu and visible options read from Square HTML. Exact link discovered via SalonTonight outbound booking link; no third-party prices imported. Location ID matches the Square link on the official salon site."
          }
        ],
        "menuStatus": "published",
        "menu": [
          {
            "name": "Tint - Tint Only",
            "category": "color",
            "description": "Root single-process color plus overall gloss and simple blow-dry. Full blowout or haircut are separately priced combined options.",
            "price": {
              "kind": "fixed",
              "amount": 150,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option base price; final scope and charges require confirmation."
            },
            "durationMinutes": 90,
            "durationMaxMinutes": null,
            "sourceId": "square-direct",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Tint - + Blowout",
            "category": "color",
            "description": "Root single-process color plus overall gloss and simple blow-dry. Full blowout or haircut are separately priced combined options.",
            "price": {
              "kind": "fixed",
              "amount": 230,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option base price; final scope and charges require confirmation. Amount is the published combined option price, not an incremental add-on fee."
            },
            "durationMinutes": 120,
            "durationMaxMinutes": null,
            "sourceId": "square-direct",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Tint - + Haircut",
            "category": "color",
            "description": "Root single-process color plus overall gloss and simple blow-dry. Full blowout or haircut are separately priced combined options.",
            "price": {
              "kind": "fixed",
              "amount": 340,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option base price; final scope and charges require confirmation. Amount is the published combined option price, not an incremental add-on fee."
            },
            "durationMinutes": 150,
            "durationMaxMinutes": null,
            "sourceId": "square-direct",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Tint - Tint with Partial highlight",
            "category": "color",
            "description": "Root single-process color plus overall gloss and simple blow-dry. Full blowout or haircut are separately priced combined options.",
            "price": {
              "kind": "fixed",
              "amount": 415,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option base price; final scope and charges require confirmation."
            },
            "durationMinutes": 150,
            "durationMaxMinutes": null,
            "sourceId": "square-direct",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Tint with special effects - Tint with Special Effects",
            "category": "color",
            "description": "Face-framing foils or balayage with tint and gloss; haircut option available.",
            "price": {
              "kind": "fixed",
              "amount": 240,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option base price; final scope and charges require confirmation."
            },
            "durationMinutes": 120,
            "durationMaxMinutes": null,
            "sourceId": "square-direct",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Tint with special effects - + Haircut",
            "category": "color",
            "description": "Face-framing foils or balayage with tint and gloss; haircut option available.",
            "price": {
              "kind": "fixed",
              "amount": 370,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option base price; final scope and charges require confirmation. Amount is the published combined option price, not an incremental add-on fee."
            },
            "durationMinutes": 180,
            "durationMaxMinutes": null,
            "sourceId": "square-direct",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Clean up-please read description below",
            "category": "other",
            "description": "Existing clients only; between-haircut refresh without shampoo.",
            "price": {
              "kind": "fixed",
              "amount": 70,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option base price; final scope and charges require confirmation."
            },
            "durationMinutes": 30,
            "durationMaxMinutes": null,
            "sourceId": "square-direct",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Children's cut (under 16 years )",
            "category": "haircut",
            "description": "Only children of existing clients.",
            "price": {
              "kind": "fixed",
              "amount": 95,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option base price; final scope and charges require confirmation."
            },
            "durationMinutes": 60,
            "durationMaxMinutes": null,
            "sourceId": "square-direct",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Partial Highlight - Partial Highlight",
            "category": "color",
            "description": "Foils around hairline, part and crown, with gloss.",
            "price": {
              "kind": "fixed",
              "amount": 265,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option base price; final scope and charges require confirmation."
            },
            "durationMinutes": 120,
            "durationMaxMinutes": null,
            "sourceId": "square-direct",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Partial Highlight - + Base Adjust",
            "category": "color",
            "description": "Foils around hairline, part and crown, with gloss.",
            "price": {
              "kind": "fixed",
              "amount": 325,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option base price; final scope and charges require confirmation. Amount is the published combined option price, not an incremental add-on fee."
            },
            "durationMinutes": 150,
            "durationMaxMinutes": null,
            "sourceId": "square-direct",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Partial Highlight - + Haircut & Tint",
            "category": "color",
            "description": "Foils around hairline, part and crown, with gloss.",
            "price": {
              "kind": "fixed",
              "amount": 605,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option base price; final scope and charges require confirmation. Amount is the published combined option price, not an incremental add-on fee."
            },
            "durationMinutes": 270,
            "durationMaxMinutes": null,
            "sourceId": "square-direct",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Partial Highlight - + Haircut",
            "category": "color",
            "description": "Foils around hairline, part and crown, with gloss.",
            "price": {
              "kind": "fixed",
              "amount": 445,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option base price; final scope and charges require confirmation. Amount is the published combined option price, not an incremental add-on fee."
            },
            "durationMinutes": 180,
            "durationMaxMinutes": null,
            "sourceId": "square-direct",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Partial Highlight - Partial highlight with tint",
            "category": "color",
            "description": "Foils around hairline, part and crown, with gloss.",
            "price": {
              "kind": "fixed",
              "amount": 405,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option base price; final scope and charges require confirmation."
            },
            "durationMinutes": 180,
            "durationMaxMinutes": null,
            "sourceId": "square-direct",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Partial Highlight - Partial highlight with blowdry",
            "category": "color",
            "description": "Foils around hairline, part and crown, with gloss.",
            "price": {
              "kind": "fixed",
              "amount": 345,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option base price; final scope and charges require confirmation."
            },
            "durationMinutes": 150,
            "durationMaxMinutes": null,
            "sourceId": "square-direct",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Full Highlight - Full Hightlight",
            "category": "color",
            "description": "Full-head foils with overall gloss.",
            "price": {
              "kind": "fixed",
              "amount": 295,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option base price; final scope and charges require confirmation."
            },
            "durationMinutes": 150,
            "durationMaxMinutes": null,
            "sourceId": "square-direct",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Full Highlight - + Base Adjust",
            "category": "color",
            "description": "Full-head foils with overall gloss.",
            "price": {
              "kind": "fixed",
              "amount": 345,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option base price; final scope and charges require confirmation. Amount is the published combined option price, not an incremental add-on fee."
            },
            "durationMinutes": 180,
            "durationMaxMinutes": null,
            "sourceId": "square-direct",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Full Highlight - + Haircut",
            "category": "color",
            "description": "Full-head foils with overall gloss.",
            "price": {
              "kind": "fixed",
              "amount": 485,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option base price; final scope and charges require confirmation. Amount is the published combined option price, not an incremental add-on fee."
            },
            "durationMinutes": 210,
            "durationMaxMinutes": null,
            "sourceId": "square-direct",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Full Balayage",
            "category": "color",
            "description": "Full-head hand-painted color; optional shadow-root and haircut bundles.",
            "price": {
              "kind": "fixed",
              "amount": 295,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option base price; final scope and charges require confirmation."
            },
            "durationMinutes": 150,
            "durationMaxMinutes": null,
            "sourceId": "square-direct",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Full Balayage - + Shadow Root",
            "category": "color",
            "description": "Full-head hand-painted color; optional shadow-root and haircut bundles.",
            "price": {
              "kind": "fixed",
              "amount": 355,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option base price; final scope and charges require confirmation. Amount is the published combined option price, not an incremental add-on fee."
            },
            "durationMinutes": 180,
            "durationMaxMinutes": null,
            "sourceId": "square-direct",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Full Balayage - + Haircut",
            "category": "color",
            "description": "Full-head hand-painted color; optional shadow-root and haircut bundles.",
            "price": {
              "kind": "fixed",
              "amount": 485,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option base price; final scope and charges require confirmation. Amount is the published combined option price, not an incremental add-on fee."
            },
            "durationMinutes": 180,
            "durationMaxMinutes": null,
            "sourceId": "square-direct",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Full Balayage - Full balayage with tint",
            "category": "color",
            "description": "Full-head hand-painted color; optional shadow-root and haircut bundles.",
            "price": {
              "kind": "fixed",
              "amount": 425,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option base price; final scope and charges require confirmation."
            },
            "durationMinutes": 210,
            "durationMaxMinutes": null,
            "sourceId": "square-direct",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Gloss",
            "category": "color",
            "description": "Standalone gloss leaves hair wet; the blow-dry bundle costs more.",
            "price": {
              "kind": "fixed",
              "amount": 90,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option base price; final scope and charges require confirmation."
            },
            "durationMinutes": 30,
            "durationMaxMinutes": null,
            "sourceId": "square-direct",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Gloss - +blowdry",
            "category": "color",
            "description": "Standalone gloss leaves hair wet; the blow-dry bundle costs more.",
            "price": {
              "kind": "fixed",
              "amount": 150,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option base price; final scope and charges require confirmation. Amount is the published combined option price, not an incremental add-on fee."
            },
            "durationMinutes": 60,
            "durationMaxMinutes": null,
            "sourceId": "square-direct",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Bang trim -please text me to book bang trim",
            "category": "haircut",
            "description": "Contact the salon to arrange this service.",
            "price": {
              "kind": "fixed",
              "amount": 30,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option base price; final scope and charges require confirmation."
            },
            "durationMinutes": 15,
            "durationMaxMinutes": null,
            "sourceId": "square-direct",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Blowdry only with another service or already a client of mine",
            "category": "styling",
            "description": "Restricted to an accompanying service or existing clients.",
            "price": {
              "kind": "fixed",
              "amount": 80,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option base price; final scope and charges require confirmation."
            },
            "durationMinutes": 60,
            "durationMaxMinutes": null,
            "sourceId": "square-direct",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Highlights short hair top only",
            "category": "color",
            "description": null,
            "price": {
              "kind": "fixed",
              "amount": 185,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option base price; final scope and charges require confirmation."
            },
            "durationMinutes": 90,
            "durationMaxMinutes": null,
            "sourceId": "square-direct",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Virgin bleach & tone (consultation needed before booking)",
            "category": "color",
            "description": "Consultation required before booking.",
            "price": {
              "kind": "fixed",
              "amount": 450,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option base price; final scope and charges require confirmation."
            },
            "durationMinutes": 240,
            "durationMaxMinutes": null,
            "sourceId": "square-direct",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Bleach & tone touch up  (pricing and time may vary dependig on regrowth)",
            "category": "color",
            "description": "Retouch price and duration depend on regrowth.",
            "price": {
              "kind": "fixed",
              "amount": 275,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option base price; final scope and charges require confirmation. The salon explicitly says price and time may vary with regrowth."
            },
            "durationMinutes": 120,
            "durationMaxMinutes": null,
            "sourceId": "square-direct",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Haircut",
            "category": "haircut",
            "description": null,
            "price": {
              "kind": "fixed",
              "amount": 190,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option base price; final scope and charges require confirmation."
            },
            "durationMinutes": 90,
            "durationMaxMinutes": null,
            "sourceId": "square-direct",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Haircut - Haircut with Gloss",
            "category": "haircut",
            "description": null,
            "price": {
              "kind": "fixed",
              "amount": 270,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option base price; final scope and charges require confirmation."
            },
            "durationMinutes": 120,
            "durationMaxMinutes": null,
            "sourceId": "square-direct",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Haircut - Haircut with Tint",
            "category": "haircut",
            "description": null,
            "price": {
              "kind": "fixed",
              "amount": 340,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option base price; final scope and charges require confirmation."
            },
            "durationMinutes": 150,
            "durationMaxMinutes": null,
            "sourceId": "square-direct",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Haircut - Haircut with money piece",
            "category": "haircut",
            "description": null,
            "price": {
              "kind": "fixed",
              "amount": 350,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option base price; final scope and charges require confirmation."
            },
            "durationMinutes": 150,
            "durationMaxMinutes": null,
            "sourceId": "square-direct",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Money piece",
            "category": "color",
            "description": "Front-hairline highlight or balayage only.",
            "price": {
              "kind": "fixed",
              "amount": 160,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option base price; final scope and charges require confirmation."
            },
            "durationMinutes": 90,
            "durationMaxMinutes": null,
            "sourceId": "square-direct",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Consultatio",
            "category": "other",
            "description": "Public menu consultation entry; displayed $0 and 15-minute block.",
            "price": {
              "kind": "fixed",
              "amount": 0,
              "amountMax": null,
              "currency": "USD",
              "note": "Public customer menu displays $0 for this consultation; the paid service price is separate."
            },
            "durationMinutes": 15,
            "durationMaxMinutes": null,
            "sourceId": "square-direct",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Partial Balayage",
            "category": "color",
            "description": null,
            "price": {
              "kind": "fixed",
              "amount": 265,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option base price; final scope and charges require confirmation."
            },
            "durationMinutes": 120,
            "durationMaxMinutes": null,
            "sourceId": "square-direct",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Partial Balayage - Partial balayage with tint",
            "category": "color",
            "description": null,
            "price": {
              "kind": "fixed",
              "amount": 415,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option base price; final scope and charges require confirmation."
            },
            "durationMinutes": 180,
            "durationMaxMinutes": null,
            "sourceId": "square-direct",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Partial Balayage - Partial balayage with haircut",
            "category": "color",
            "description": null,
            "price": {
              "kind": "fixed",
              "amount": 445,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option base price; final scope and charges require confirmation."
            },
            "durationMinutes": 210,
            "durationMaxMinutes": null,
            "sourceId": "square-direct",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Partial Balayage - + blowdry",
            "category": "color",
            "description": null,
            "price": {
              "kind": "fixed",
              "amount": 345,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option base price; final scope and charges require confirmation. Amount is the published combined option price, not an incremental add-on fee."
            },
            "durationMinutes": 150,
            "durationMaxMinutes": null,
            "sourceId": "square-direct",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Partial Balayage - + haircut and tint",
            "category": "color",
            "description": null,
            "price": {
              "kind": "fixed",
              "amount": 605,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option base price; final scope and charges require confirmation. Amount is the published combined option price, not an incremental add-on fee."
            },
            "durationMinutes": 270,
            "durationMaxMinutes": null,
            "sourceId": "square-direct",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Conditioning treatment",
            "category": "treatment",
            "description": "Treatment alone or a separately priced blow-dry bundle.",
            "price": {
              "kind": "fixed",
              "amount": 60,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option base price; final scope and charges require confirmation."
            },
            "durationMinutes": 30,
            "durationMaxMinutes": null,
            "sourceId": "square-direct",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Conditioning treatment - Blowdry",
            "category": "treatment",
            "description": "Treatment alone or a separately priced blow-dry bundle.",
            "price": {
              "kind": "fixed",
              "amount": 140,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option base price; final scope and charges require confirmation."
            },
            "durationMinutes": 90,
            "durationMaxMinutes": null,
            "sourceId": "square-direct",
            "priceSourceId": null,
            "durationSourceId": null
          }
        ],
        "addOnsStatus": "published",
        "addOns": [
          {
            "name": "Blowdry only with another service or already a client of mine",
            "category": "styling",
            "description": "Published as available with another service or for an existing client; not unrestricted standalone service.",
            "price": {
              "kind": "fixed",
              "amount": 80,
              "amountMax": null,
              "currency": "USD",
              "note": null
            },
            "durationMinutes": 60,
            "durationMaxMinutes": null,
            "sourceId": "square-direct",
            "priceSourceId": null,
            "durationSourceId": null
          }
        ],
        "stylistsStatus": "published",
        "stylists": [
          {
            "name": "Louise",
            "specialties": [
              "precision cutting"
            ],
            "bio": "Public team page identifies Louise as stylist and owner.",
            "bookingUrl": null,
            "portfolioUrl": null,
            "sourceId": "team"
          }
        ],
        "policies": {
          "cancellation": {
            "value": "Current Square cancellation text states a $100 fee with exceptions but omits a readable notice period. Confirm the cutoff; an older website policy instead describes 24 hours and 50% after a first-time exception.",
            "sourceId": "square-direct"
          },
          "deposit": {
            "value": null,
            "sourceId": null
          },
          "noShow": {
            "value": null,
            "sourceId": null
          },
          "lateArrival": {
            "value": null,
            "sourceId": null
          },
          "consultation": {
            "value": "Virgin bleach-and-tone requires a consultation before booking.",
            "sourceId": "square-direct"
          },
          "payment": {
            "value": null,
            "sourceId": null
          },
          "walkIns": {
            "value": "Appointments only.",
            "sourceId": "contact"
          }
        },
        "unknowns": [
          "No live appointment availability or booking confirmation was checked.",
          "Published prices are not a final total; applicable extra product, time, tax and gratuity must be confirmed.",
          "Cancellation notice cutoff, deposit, no-show-specific fees, late-arrival and payment terms require confirmation.",
          "The Square menu includes a Blockout item without customer-service scope; it was excluded rather than treated as a treatment.",
          "Current postal code was not explicitly published on the official contact page reviewed.",
          "Bundles are kept at their displayed total; incremental charges are not inferred by subtraction."
        ],
        "conflicts": [
          "The current official site says the Powell Street salon has closed and moved to 520 Montgomery St, Suite 205. The existing Tenderloin slug and old address must not be used as current location evidence.",
          "Current Square text mentions a $100 cancellation fee but gives no readable notice interval. The older /online-booking page links STX and describes 24-hour notice with a first-time exception then 50%; do not silently combine these policies.",
          "Tint with Partial highlight is $415/150 minutes, while Partial highlight with tint is $405/180 minutes. These distinct public options may differ in scope; confirm the correct one."
        ],
        "identityUpdate": {
          "name": null,
          "address": {
            "street": "520 Montgomery St Ste 205",
            "city": "San Francisco",
            "region": "CA",
            "postalCode": null,
            "country": "US"
          },
          "sourceId": "contact"
        }
      }
    },
    {
      "slug": "crown-salon-lone-mountain-usf",
      "ref": "san-francisco/hair-salon/crown-salon-lone-mountain-usf",
      "name": "Crown Salon",
      "neighborhood": "Lone Mountain / USF",
      "researched_at": "2026-10-24T09:38:45.385230+00:00",
      "coverage": {
        "services": 44,
        "services_with_prices": 43,
        "services_with_durations": 44,
        "add_ons": 2,
        "stylists": 2,
        "published_policies": 6,
        "policy_fields": 7,
        "successfully_read_sources": 3
      },
      "unknowns": [
        "No live appointment availability or booking confirmation was checked.",
        "Published prices are not a final total; product, time and other applicable extras require confirmation. Ariana’s published pricing includes gratuity; Aimee’s inclusion is not stated.",
        "Deposit requirements are unknown in the retained salon and customer-booking sources.",
        "Crown’s general policy and Ariana’s customer-menu cancellation terms differ; confirm the selected provider’s terms.",
        "Personal-site sources are withheld under the publication privacy rule. Three website-only bridal package prices and bridal deposit language were omitted because the retained sources do not support them."
      ],
      "conflicts": [
        "Crown’s general website cancellation policy charges 100% for under 48 hours notice. Ariana’s public Square menu says 50% within 48 hours and 100% for no-call/no-show. Policies are provider-specific or inconsistent; confirm which applies. Sources: home and square-ariana-direct."
      ],
      "url": "https://agentsalonsf.com/salons/crown-salon-lone-mountain-usf",
      "markdown_url": "https://agentsalonsf.com/salons/crown-salon-lone-mountain-usf.md",
      "api_url": "https://agentsalonsf.com/api/v1/salons/crown-salon-lone-mountain-usf",
      "public_research": {
        "salonSlug": "crown-salon-lone-mountain-usf",
        "researchedAt": "2026-10-24T09:38:45.385230+00:00",
        "summary": "Both stylists’ public customer menus were recovered with service prices and durations and two explicit add-ons. Ariana’s prices include gratuity. General salon and Ariana-specific cancellation fees differ; confirm the applicable policy. Personal-site-only bridal details are withheld under the publication privacy rule.",
        "sources": [
          {
            "id": "home",
            "url": "https://www.crownsalonsf.com/",
            "kind": "salon_website",
            "checkedAt": "2026-10-24T09:27:42.718562+00:00",
            "outcome": "read",
            "note": "Public page text reviewed."
          },
          {
            "id": "square-aimee",
            "url": "https://book.squareup.com/appointments/5oalm9wytnn8k8/location/LB3GN66AZBQ71/services",
            "kind": "booking_provider",
            "checkedAt": "2026-10-24T09:28:53.480573+00:00",
            "outcome": "read",
            "note": "Public customer menu and visible options read from page HTML."
          },
          {
            "id": "square-ariana-direct",
            "url": "https://book.squareup.com/appointments/9zdgh3pisy5j86/location/LW48TVR873C5Q/services",
            "kind": "booking_provider",
            "checkedAt": "2026-10-24T09:37:56.409765+00:00",
            "outcome": "read",
            "note": "Full customer menu and displayed policies read from the public Square page titled Crown Salon. Exact link discovered via the outbound booking button on SalonTonight; no third-party facts imported."
          }
        ],
        "menuStatus": "published",
        "menu": [
          {
            "name": "Single Color - Aimee",
            "category": "color",
            "description": "Root touch-up, solid color or glaze/toner; excludes solid bleach touch-up.",
            "price": {
              "kind": "fixed",
              "amount": 175,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option base price; final scope and charges require confirmation. This is Aimee’s individual customer menu; Ariana’s pricing is separate."
            },
            "durationMinutes": 90,
            "durationMaxMinutes": null,
            "sourceId": "square-aimee",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Single Color - Single Color/ Thick or Long Hair - Aimee",
            "category": "color",
            "description": "Root touch-up, solid color or glaze/toner; excludes solid bleach touch-up.",
            "price": {
              "kind": "fixed",
              "amount": 195,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option base price; final scope and charges require confirmation. This is Aimee’s individual customer menu; Ariana’s pricing is separate."
            },
            "durationMinutes": 105,
            "durationMaxMinutes": null,
            "sourceId": "square-aimee",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Mens Haircut - Aimee",
            "category": "haircut",
            "description": "Scissor haircut; clipper cuts are not offered by Aimee.",
            "price": {
              "kind": "fixed",
              "amount": 100,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option base price; final scope and charges require confirmation. This is Aimee’s individual customer menu; Ariana’s pricing is separate."
            },
            "durationMinutes": 45,
            "durationMaxMinutes": null,
            "sourceId": "square-aimee",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Women's Blow-dry - Women's Blow-out Thick or Long Hair - Aimee",
            "category": "styling",
            "description": "Wash and blow-dry; thick/long hair and iron/curl options are explicitly listed.",
            "price": {
              "kind": "fixed",
              "amount": 150,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option base price; final scope and charges require confirmation. This is Aimee’s individual customer menu; Ariana’s pricing is separate."
            },
            "durationMinutes": 60,
            "durationMaxMinutes": null,
            "sourceId": "square-aimee",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Women's Blow-dry - Women's Blow-dry with flat iron or curls - Aimee",
            "category": "styling",
            "description": "Wash and blow-dry; thick/long hair and iron/curl options are explicitly listed.",
            "price": {
              "kind": "fixed",
              "amount": 150,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option base price; final scope and charges require confirmation. This is Aimee’s individual customer menu; Ariana’s pricing is separate."
            },
            "durationMinutes": 60,
            "durationMaxMinutes": null,
            "sourceId": "square-aimee",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Women's Haircut w/ Blow-dry - Aimee",
            "category": "haircut",
            "description": null,
            "price": {
              "kind": "fixed",
              "amount": 140,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option base price; final scope and charges require confirmation. This is Aimee’s individual customer menu; Ariana’s pricing is separate."
            },
            "durationMinutes": 60,
            "durationMaxMinutes": null,
            "sourceId": "square-aimee",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Women's Haircut w/ Blow-dry - Women's Extra Thick or Long Haircut w/ Blow-Dry - Aimee",
            "category": "haircut",
            "description": null,
            "price": {
              "kind": "fixed",
              "amount": 160,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option base price; final scope and charges require confirmation. This is Aimee’s individual customer menu; Ariana’s pricing is separate."
            },
            "durationMinutes": 75,
            "durationMaxMinutes": null,
            "sourceId": "square-aimee",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Keratin Treatment - Aimee",
            "category": "treatment",
            "description": null,
            "price": {
              "kind": "fixed",
              "amount": 390,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option base price; final scope and charges require confirmation. This is Aimee’s individual customer menu; Ariana’s pricing is separate."
            },
            "durationMinutes": 135,
            "durationMaxMinutes": null,
            "sourceId": "square-aimee",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Keratin Treatment - Keratin Treatment/Extra Thick or Long Hair - Aimee",
            "category": "treatment",
            "description": null,
            "price": {
              "kind": "fixed",
              "amount": 450,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option base price; final scope and charges require confirmation. This is Aimee’s individual customer menu; Ariana’s pricing is separate."
            },
            "durationMinutes": 180,
            "durationMaxMinutes": null,
            "sourceId": "square-aimee",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Partial Highlight w/ Blow-Dry - Aimee",
            "category": "color",
            "description": "Around-face and top-of-head highlights, including root tap/melt.",
            "price": {
              "kind": "fixed",
              "amount": 285,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option base price; final scope and charges require confirmation. This is Aimee’s individual customer menu; Ariana’s pricing is separate."
            },
            "durationMinutes": 135,
            "durationMaxMinutes": null,
            "sourceId": "square-aimee",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Partial Highlight w/ Blow-Dry - Extra Thick/Long Partial Highlight w/ Blow-Dry - Aimee",
            "category": "color",
            "description": "Around-face and top-of-head highlights, including root tap/melt.",
            "price": {
              "kind": "fixed",
              "amount": 325,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option base price; final scope and charges require confirmation. This is Aimee’s individual customer menu; Ariana’s pricing is separate."
            },
            "durationMinutes": 150,
            "durationMaxMinutes": null,
            "sourceId": "square-aimee",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Full Highlight w/ Blow-dry - Aimee",
            "category": "color",
            "description": "Refresh existing highlights; root tap/melt included.",
            "price": {
              "kind": "fixed",
              "amount": 325,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option base price; final scope and charges require confirmation. This is Aimee’s individual customer menu; Ariana’s pricing is separate."
            },
            "durationMinutes": 135,
            "durationMaxMinutes": null,
            "sourceId": "square-aimee",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Full Highlight w/ Blow-dry - THICK OR LONG FULL HIGHLIGHT W/ BLOWDRY - Aimee",
            "category": "color",
            "description": "Refresh existing highlights; root tap/melt included.",
            "price": {
              "kind": "fixed",
              "amount": 375,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option base price; final scope and charges require confirmation. This is Aimee’s individual customer menu; Ariana’s pricing is separate."
            },
            "durationMinutes": 150,
            "durationMaxMinutes": null,
            "sourceId": "square-aimee",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Full Highlight & Women's Haircut w/ Blow-dry - Aimee",
            "category": "color",
            "description": null,
            "price": {
              "kind": "fixed",
              "amount": 390,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option base price; final scope and charges require confirmation. This is Aimee’s individual customer menu; Ariana’s pricing is separate."
            },
            "durationMinutes": 150,
            "durationMaxMinutes": null,
            "sourceId": "square-aimee",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Full Highlight & Women's Haircut w/ Blow-dry - EXTRA THICK OR LONG FULL HIGHLIGHT W/ HAIRCUT & BLOWDRY - Aimee",
            "category": "color",
            "description": null,
            "price": {
              "kind": "fixed",
              "amount": 450,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option base price; final scope and charges require confirmation. This is Aimee’s individual customer menu; Ariana’s pricing is separate."
            },
            "durationMinutes": 180,
            "durationMaxMinutes": null,
            "sourceId": "square-aimee",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Mens Haircut and Solid Color - Aimee",
            "category": "color",
            "description": null,
            "price": {
              "kind": "fixed",
              "amount": 265,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option base price; final scope and charges require confirmation. This is Aimee’s individual customer menu; Ariana’s pricing is separate."
            },
            "durationMinutes": 105,
            "durationMaxMinutes": null,
            "sourceId": "square-aimee",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Mens Haircut & Highlights or Low Lights - Aimee",
            "category": "color",
            "description": null,
            "price": {
              "kind": "fixed",
              "amount": 300,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option base price; final scope and charges require confirmation. This is Aimee’s individual customer menu; Ariana’s pricing is separate."
            },
            "durationMinutes": 135,
            "durationMaxMinutes": null,
            "sourceId": "square-aimee",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Single Color and Womens Haircut w/ Blowdry - Aimee",
            "category": "color",
            "description": null,
            "price": {
              "kind": "fixed",
              "amount": 310,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option base price; final scope and charges require confirmation. This is Aimee’s individual customer menu; Ariana’s pricing is separate."
            },
            "durationMinutes": 120,
            "durationMaxMinutes": null,
            "sourceId": "square-aimee",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Single Color and Womens Haircut w/ Blowdry - Long or Thick SingleColor w/ Haircut & Blow-dry - Aimee",
            "category": "color",
            "description": null,
            "price": {
              "kind": "fixed",
              "amount": 375,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option base price; final scope and charges require confirmation. This is Aimee’s individual customer menu; Ariana’s pricing is separate."
            },
            "durationMinutes": 150,
            "durationMaxMinutes": null,
            "sourceId": "square-aimee",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Partial Highlight & Women's Haircut w/ Blow-dry - Aimee",
            "category": "color",
            "description": null,
            "price": {
              "kind": "fixed",
              "amount": 325,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option base price; final scope and charges require confirmation. This is Aimee’s individual customer menu; Ariana’s pricing is separate."
            },
            "durationMinutes": 135,
            "durationMaxMinutes": null,
            "sourceId": "square-aimee",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Balayage & Women's Haircut - Aimee",
            "category": "color",
            "description": "Rooty blonde balayage with haircut and root tap/melt.",
            "price": {
              "kind": "fixed",
              "amount": 400,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option base price; final scope and charges require confirmation. This is Aimee’s individual customer menu; Ariana’s pricing is separate."
            },
            "durationMinutes": 165,
            "durationMaxMinutes": null,
            "sourceId": "square-aimee",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Balayage & Women's Haircut - (Thick or long) Balayage & Women's Haircut w/ Blow-dry - Aimee",
            "category": "color",
            "description": "Rooty blonde balayage with haircut and root tap/melt.",
            "price": {
              "kind": "fixed",
              "amount": 475,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option base price; final scope and charges require confirmation. This is Aimee’s individual customer menu; Ariana’s pricing is separate."
            },
            "durationMinutes": 195,
            "durationMaxMinutes": null,
            "sourceId": "square-aimee",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Balayage & Blow-dry - Aimee",
            "category": "color",
            "description": "Lightening while preserving root depth.",
            "price": {
              "kind": "fixed",
              "amount": 325,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option base price; final scope and charges require confirmation. This is Aimee’s individual customer menu; Ariana’s pricing is separate."
            },
            "durationMinutes": 150,
            "durationMaxMinutes": null,
            "sourceId": "square-aimee",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Balayage & Blow-dry - Long or Thick Hair - Aimee",
            "category": "color",
            "description": "Lightening while preserving root depth.",
            "price": {
              "kind": "fixed",
              "amount": 375,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option base price; final scope and charges require confirmation. This is Aimee’s individual customer menu; Ariana’s pricing is separate."
            },
            "durationMinutes": 165,
            "durationMaxMinutes": null,
            "sourceId": "square-aimee",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Haircut (1.5 hours) - Ariana",
            "category": "haircut",
            "description": "Customized haircut; gratuity included.",
            "price": {
              "kind": "fixed",
              "amount": 225,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option base price; final scope and charges require confirmation. Ariana’s pricing includes gratuity according to the salon website; additional service scope may still cost more."
            },
            "durationMinutes": 90,
            "durationMaxMinutes": null,
            "sourceId": "square-ariana-direct",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Short Clipper Haircut (1 hour) - Ariana",
            "category": "haircut",
            "description": "Short clipper cuts; recurring-client trims require prior approval and depend on hair density.",
            "price": {
              "kind": "fixed",
              "amount": 150,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option base price; final scope and charges require confirmation. Ariana’s pricing includes gratuity according to the salon website; additional service scope may still cost more."
            },
            "durationMinutes": 60,
            "durationMaxMinutes": null,
            "sourceId": "square-ariana-direct",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Fringe Trim - Ariana",
            "category": "haircut",
            "description": "Between-haircut bang trim.",
            "price": {
              "kind": "fixed",
              "amount": 45,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option base price; final scope and charges require confirmation. Ariana’s pricing includes gratuity according to the salon website; additional service scope may still cost more."
            },
            "durationMinutes": 15,
            "durationMaxMinutes": null,
            "sourceId": "square-ariana-direct",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Root Touch Up - Ariana",
            "category": "color",
            "description": "One-shade root/gray coverage; coloring mid-lengths or ends costs extra based on product used.",
            "price": {
              "kind": "fixed",
              "amount": 225,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option base price; final scope and charges require confirmation. Ariana’s pricing includes gratuity according to the salon website; additional service scope may still cost more."
            },
            "durationMinutes": 120,
            "durationMaxMinutes": null,
            "sourceId": "square-ariana-direct",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Full Dimensional Color - Ariana",
            "category": "color",
            "description": "New or returning clients; full-head highlights, balayage and/or lowlights.",
            "price": {
              "kind": "fixed",
              "amount": 450,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option base price; final scope and charges require confirmation. Ariana’s pricing includes gratuity according to the salon website; additional service scope may still cost more."
            },
            "durationMinutes": 240,
            "durationMaxMinutes": null,
            "sourceId": "square-ariana-direct",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Full Dimensional Color + Haircut - Ariana",
            "category": "color",
            "description": "Full-head dimensional color plus haircut for new or returning clients.",
            "price": {
              "kind": "fixed",
              "amount": 575,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option base price; final scope and charges require confirmation. Ariana’s pricing includes gratuity according to the salon website; additional service scope may still cost more."
            },
            "durationMinutes": 270,
            "durationMaxMinutes": null,
            "sourceId": "square-ariana-direct",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Partial Dimensional Color - Ariana",
            "category": "color",
            "description": "Returning clients; refresh highlights, balayage or lowlights on sides and top.",
            "price": {
              "kind": "fixed",
              "amount": 375,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option base price; final scope and charges require confirmation. Ariana’s pricing includes gratuity according to the salon website; additional service scope may still cost more."
            },
            "durationMinutes": 210,
            "durationMaxMinutes": null,
            "sourceId": "square-ariana-direct",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Partial Dimensional Color + Haircut - Ariana",
            "category": "color",
            "description": "Returning clients; partial dimensional color plus haircut.",
            "price": {
              "kind": "fixed",
              "amount": 500,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option base price; final scope and charges require confirmation. Ariana’s pricing includes gratuity according to the salon website; additional service scope may still cost more."
            },
            "durationMinutes": 240,
            "durationMaxMinutes": null,
            "sourceId": "square-ariana-direct",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Brow Shaping - Ariana",
            "category": "other",
            "description": "Waxing, threading and/or tweezing.",
            "price": {
              "kind": "fixed",
              "amount": 50,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option base price; final scope and charges require confirmation. Ariana’s pricing includes gratuity according to the salon website; additional service scope may still cost more."
            },
            "durationMinutes": 30,
            "durationMaxMinutes": null,
            "sourceId": "square-ariana-direct",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Root Touch Up + Haircut - Ariana",
            "category": "color",
            "description": "Root color plus haircut; mid-length/end coloring has an additional product-based fee.",
            "price": {
              "kind": "fixed",
              "amount": 350,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option base price; final scope and charges require confirmation. Ariana’s pricing includes gratuity according to the salon website; additional service scope may still cost more."
            },
            "durationMinutes": 150,
            "durationMaxMinutes": null,
            "sourceId": "square-ariana-direct",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Gloss - Ariana",
            "category": "color",
            "description": "Returning clients; tonal refresh without blowout or finish.",
            "price": {
              "kind": "fixed",
              "amount": 125,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option base price; final scope and charges require confirmation. Ariana’s pricing includes gratuity according to the salon website; additional service scope may still cost more."
            },
            "durationMinutes": 45,
            "durationMaxMinutes": null,
            "sourceId": "square-ariana-direct",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Gloss + Haircut - Ariana",
            "category": "color",
            "description": "Returning clients; tonal refresh plus haircut.",
            "price": {
              "kind": "fixed",
              "amount": 300,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option base price; final scope and charges require confirmation. Ariana’s pricing includes gratuity according to the salon website; additional service scope may still cost more."
            },
            "durationMinutes": 120,
            "durationMaxMinutes": null,
            "sourceId": "square-ariana-direct",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Brow Shaping + Tint - Ariana",
            "category": "other",
            "description": "Brow color and shaping.",
            "price": {
              "kind": "fixed",
              "amount": 80,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option base price; final scope and charges require confirmation. Ariana’s pricing includes gratuity according to the salon website; additional service scope may still cost more."
            },
            "durationMinutes": 30,
            "durationMaxMinutes": null,
            "sourceId": "square-ariana-direct",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Brow Shaping + Brow/Lash Tint - Ariana",
            "category": "other",
            "description": "Brow and lash color plus brow shaping.",
            "price": {
              "kind": "fixed",
              "amount": 100,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option base price; final scope and charges require confirmation. Ariana’s pricing includes gratuity according to the salon website; additional service scope may still cost more."
            },
            "durationMinutes": 45,
            "durationMaxMinutes": null,
            "sourceId": "square-ariana-direct",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Hair Styling - Blow out - Ariana",
            "category": "styling",
            "description": "Special-occasion blowout.",
            "price": {
              "kind": "fixed",
              "amount": 115,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option base price; final scope and charges require confirmation. Ariana’s pricing includes gratuity according to the salon website; additional service scope may still cost more."
            },
            "durationMinutes": 45,
            "durationMaxMinutes": null,
            "sourceId": "square-ariana-direct",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Makeup Application - Ariana",
            "category": "other",
            "description": "Special-event makeup, excluding bridal; bridal/on-location work requires a separate inquiry.",
            "price": {
              "kind": "fixed",
              "amount": 200,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option base price; final scope and charges require confirmation. Ariana’s pricing includes gratuity according to the salon website; additional service scope may still cost more."
            },
            "durationMinutes": 90,
            "durationMaxMinutes": null,
            "sourceId": "square-ariana-direct",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Consultation - Ariana",
            "category": "other",
            "description": "In-salon discussion before booking; excludes bridal consultation. Fee not published.",
            "price": {
              "kind": "unknown",
              "amount": null,
              "amountMax": null,
              "currency": "USD",
              "note": "No numeric price was published for this option. Ariana’s pricing includes gratuity according to the salon website; additional service scope may still cost more."
            },
            "durationMinutes": 15,
            "durationMaxMinutes": null,
            "sourceId": "square-ariana-direct",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Lash Tint - Ariana",
            "category": "other",
            "description": null,
            "price": {
              "kind": "fixed",
              "amount": 45,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option base price; final scope and charges require confirmation. Ariana’s pricing includes gratuity according to the salon website; additional service scope may still cost more."
            },
            "durationMinutes": 20,
            "durationMaxMinutes": null,
            "sourceId": "square-ariana-direct",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Hair Styling - Event | Half up | Updo - Ariana",
            "category": "styling",
            "description": "Half-up or full-updo styling.",
            "price": {
              "kind": "fixed",
              "amount": 200,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option base price; final scope and charges require confirmation. Ariana’s pricing includes gratuity according to the salon website; additional service scope may still cost more."
            },
            "durationMinutes": 90,
            "durationMaxMinutes": null,
            "sourceId": "square-ariana-direct",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Mini dimensional color - Ariana",
            "category": "color",
            "description": null,
            "price": {
              "kind": "fixed",
              "amount": 300,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option base price; final scope and charges require confirmation. Ariana’s pricing includes gratuity according to the salon website; additional service scope may still cost more."
            },
            "durationMinutes": 165,
            "durationMaxMinutes": null,
            "sourceId": "square-ariana-direct",
            "priceSourceId": null,
            "durationSourceId": null
          }
        ],
        "addOnsStatus": "published",
        "addOns": [
          {
            "name": "Root Touch up Add On - Ariana",
            "category": "color",
            "description": "Only with Partial or Full Dimensional Color, for additional gray coverage.",
            "price": {
              "kind": "fixed",
              "amount": 75,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option base price; final scope and charges require confirmation. Ariana’s pricing includes gratuity according to the salon website; additional service scope may still cost more."
            },
            "durationMinutes": 30,
            "durationMaxMinutes": null,
            "sourceId": "square-ariana-direct",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Treatment - Ariana",
            "category": "treatment",
            "description": "Only with a hair service that includes shampoo; customized detox, hydration or bond-repair treatment.",
            "price": {
              "kind": "fixed",
              "amount": 25,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option base price; final scope and charges require confirmation. Ariana’s pricing includes gratuity according to the salon website; additional service scope may still cost more."
            },
            "durationMinutes": 15,
            "durationMaxMinutes": null,
            "sourceId": "square-ariana-direct",
            "priceSourceId": null,
            "durationSourceId": null
          }
        ],
        "stylistsStatus": "published",
        "stylists": [
          {
            "name": "Ariana",
            "specialties": [
              "low-maintenance hair",
              "eyebrow shaping",
              "makeup"
            ],
            "bio": null,
            "bookingUrl": null,
            "portfolioUrl": null,
            "sourceId": "home"
          },
          {
            "name": "Aimee",
            "specialties": [
              "lived-in color",
              "personalized cuts"
            ],
            "bio": null,
            "bookingUrl": null,
            "portfolioUrl": null,
            "sourceId": "home"
          }
        ],
        "policies": {
          "cancellation": {
            "value": "Cancellation requires 48 hours notice; otherwise the full missed-service cost is charged.",
            "sourceId": "home"
          },
          "deposit": {
            "value": null,
            "sourceId": null
          },
          "noShow": {
            "value": "No-shows incur 100% of the missed-service price.",
            "sourceId": "home"
          },
          "lateArrival": {
            "value": "If 15 or more minutes late requires rescheduling, the full missed-service cost is charged.",
            "sourceId": "home"
          },
          "consultation": {
            "value": "Ariana’s customer menu offers an in-salon consultation before booking a hair appointment. Bridal consultation is excluded; consultation price is not published.",
            "sourceId": "square-ariana-direct"
          },
          "payment": {
            "value": "Tips are included in Ariana’s pricing. The site does not extend that statement to Aimee.",
            "sourceId": "home"
          },
          "walkIns": {
            "value": "Open by appointment only; hours vary.",
            "sourceId": "home"
          }
        },
        "unknowns": [
          "No live appointment availability or booking confirmation was checked.",
          "Published prices are not a final total; product, time and other applicable extras require confirmation. Ariana’s published pricing includes gratuity; Aimee’s inclusion is not stated.",
          "Deposit requirements are unknown in the retained salon and customer-booking sources.",
          "Crown’s general policy and Ariana’s customer-menu cancellation terms differ; confirm the selected provider’s terms.",
          "Personal-site sources are withheld under the publication privacy rule. Three website-only bridal package prices and bridal deposit language were omitted because the retained sources do not support them."
        ],
        "conflicts": [
          "Crown’s general website cancellation policy charges 100% for under 48 hours notice. Ariana’s public Square menu says 50% within 48 hours and 100% for no-call/no-show. Policies are provider-specific or inconsistent; confirm which applies. Sources: home and square-ariana-direct."
        ]
      }
    },
    {
      "slug": "cutthroat-barbershop-west-of-twin-peaks",
      "ref": "san-francisco/hair-salon/cutthroat-barbershop-west-of-twin-peaks",
      "name": "Cutthroat Barbershop",
      "neighborhood": "West of Twin Peaks",
      "researched_at": "2026-10-24T09:34:11Z",
      "coverage": {
        "services": 5,
        "services_with_prices": 5,
        "services_with_durations": 5,
        "add_ons": 0,
        "stylists": 2,
        "published_policies": 1,
        "policy_fields": 7,
        "successfully_read_sources": 2
      },
      "unknowns": [
        "Exact final total, including applicable extras, tax and gratuity, is not established by a published base price.",
        "Appointment availability was not checked.",
        "The booking menu, prices and duration for Genie were not separately established.",
        "No usable public terms established for: deposit, noShow, lateArrival, consultation, payment, walkIns.",
        "No separate priced add-on list was established on the pages checked; this does not establish that there are no extra charges."
      ],
      "conflicts": [
        "Website labels Buzz $25+; the booking menu labels it $25 without a starting-price qualifier. The booking base is preserved, not treated as an all-in total."
      ],
      "url": "https://agentsalonsf.com/salons/cutthroat-barbershop-west-of-twin-peaks",
      "markdown_url": "https://agentsalonsf.com/salons/cutthroat-barbershop-west-of-twin-peaks.md",
      "api_url": "https://agentsalonsf.com/api/v1/salons/cutthroat-barbershop-west-of-twin-peaks",
      "public_research": {
        "salonSlug": "cutthroat-barbershop-west-of-twin-peaks",
        "researchedAt": "2026-10-24T09:34:11Z",
        "summary": "Five publicly listed booking services with prices and durations. Website also names Genie; the inspected booking menu names Rodney only.",
        "sources": [
          {
            "id": "website",
            "url": "https://cutthroatbarbershopsf.com/",
            "kind": "salon_website",
            "checkedAt": "2026-10-24T09:34:11Z",
            "outcome": "read",
            "note": "Public page read for services, team or stated policies."
          },
          {
            "id": "booking",
            "url": "https://book.squareup.com/appointments/dbfa0b94-7168-40e5-a256-a08fe0a52ada/location/KHT52Z0B30KAD",
            "kind": "booking_provider",
            "checkedAt": "2026-10-24T09:29:50Z",
            "outcome": "read",
            "note": "Public customer booking HTML service metadata; no slot requests."
          }
        ],
        "menuStatus": "published",
        "menu": [
          {
            "name": "Kids Cut",
            "category": "haircut",
            "description": null,
            "price": {
              "kind": "starting_at",
              "amount": 30,
              "amountMax": null,
              "currency": "USD",
              "note": "Published base price; final total unverified."
            },
            "durationMinutes": 30,
            "durationMaxMinutes": null,
            "sourceId": "booking",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "HairCut",
            "category": "haircut",
            "description": "Basic haircut.",
            "price": {
              "kind": "starting_at",
              "amount": 40,
              "amountMax": null,
              "currency": "USD",
              "note": "Published base price; final total unverified."
            },
            "durationMinutes": 30,
            "durationMaxMinutes": null,
            "sourceId": "booking",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Beard Trim",
            "category": "beard",
            "description": null,
            "price": {
              "kind": "starting_at",
              "amount": 15,
              "amountMax": null,
              "currency": "USD",
              "note": "Published base price; final total unverified."
            },
            "durationMinutes": 15,
            "durationMaxMinutes": null,
            "sourceId": "booking",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Razor shave",
            "category": "beard",
            "description": null,
            "price": {
              "kind": "starting_at",
              "amount": 25,
              "amountMax": null,
              "currency": "USD",
              "note": "Published base price; final total unverified."
            },
            "durationMinutes": 30,
            "durationMaxMinutes": null,
            "sourceId": "booking",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Buzz",
            "category": "haircut",
            "description": "Single-guard cut.",
            "price": {
              "kind": "fixed",
              "amount": 25,
              "amountMax": null,
              "currency": "USD",
              "note": "Published base price; final total unverified."
            },
            "durationMinutes": 15,
            "durationMaxMinutes": null,
            "sourceId": "booking",
            "priceSourceId": null,
            "durationSourceId": null
          }
        ],
        "addOnsStatus": "unknown",
        "addOns": [],
        "stylistsStatus": "published",
        "stylists": [
          {
            "name": "Rodney",
            "specialties": [],
            "bio": null,
            "bookingUrl": "https://book.squareup.com/appointments/dbfa0b94-7168-40e5-a256-a08fe0a52ada/location/KHT52Z0B30KAD",
            "portfolioUrl": null,
            "sourceId": "booking"
          },
          {
            "name": "Genie",
            "specialties": [],
            "bio": null,
            "bookingUrl": null,
            "portfolioUrl": null,
            "sourceId": "website"
          }
        ],
        "policies": {
          "cancellation": {
            "value": "At least 24 hours of notice is requested; cancellations within 24 hours incur 50% of the scheduled service cost.",
            "sourceId": "website"
          },
          "deposit": {
            "value": null,
            "sourceId": null
          },
          "noShow": {
            "value": null,
            "sourceId": null
          },
          "lateArrival": {
            "value": null,
            "sourceId": null
          },
          "consultation": {
            "value": null,
            "sourceId": null
          },
          "payment": {
            "value": null,
            "sourceId": null
          },
          "walkIns": {
            "value": null,
            "sourceId": null
          }
        },
        "unknowns": [
          "Exact final total, including applicable extras, tax and gratuity, is not established by a published base price.",
          "Appointment availability was not checked.",
          "The booking menu, prices and duration for Genie were not separately established.",
          "No usable public terms established for: deposit, noShow, lateArrival, consultation, payment, walkIns.",
          "No separate priced add-on list was established on the pages checked; this does not establish that there are no extra charges."
        ],
        "conflicts": [
          "Website labels Buzz $25+; the booking menu labels it $25 without a starting-price qualifier. The booking base is preserved, not treated as an all-in total."
        ]
      }
    },
    {
      "slug": "elenie-for-hair-west-of-twin-peaks",
      "ref": "san-francisco/hair-salon/elenie-for-hair-west-of-twin-peaks",
      "name": "Elenie for Hair",
      "neighborhood": "West of Twin Peaks",
      "researched_at": "2026-10-24T09:38:45.385605+00:00",
      "coverage": {
        "services": 13,
        "services_with_prices": 12,
        "services_with_durations": 13,
        "add_ons": 1,
        "stylists": 1,
        "published_policies": 5,
        "policy_fields": 7,
        "successfully_read_sources": 2
      },
      "unknowns": [
        "No live appointment availability or booking confirmation was checked.",
        "Published prices are not a final total; applicable extra product, time, tax and gratuity must be confirmed.",
        "Gloss inclusion and the final combined highlight-plus-gloss price require confirmation.",
        "Payment methods and walk-in policy were not found on the checked pages."
      ],
      "conflicts": [
        "Deposit scope is inconsistent between the public policy heading and body; do not apply a universal $100 surcharge.",
        "Website and Square published hours differ (including Tuesday availability). Neither hours source establishes appointment availability."
      ],
      "url": "https://agentsalonsf.com/salons/elenie-for-hair-west-of-twin-peaks",
      "markdown_url": "https://agentsalonsf.com/salons/elenie-for-hair-west-of-twin-peaks.md",
      "api_url": "https://agentsalonsf.com/api/v1/salons/elenie-for-hair-west-of-twin-peaks",
      "public_research": {
        "salonSlug": "elenie-for-hair-west-of-twin-peaks",
        "researchedAt": "2026-10-24T09:38:45.385605+00:00",
        "summary": "Full public appointment menu and booking policies reviewed. Published amounts are starting prices, except the explicit $65 toner add-on; highlight services may require additional gloss. Deposit scope differs between its heading and body.",
        "sources": [
          {
            "id": "home",
            "url": "https://www.elenieforhair.com/",
            "kind": "salon_website",
            "checkedAt": "2026-10-24T09:27:44.100267+00:00",
            "outcome": "read",
            "note": "Public page text reviewed."
          },
          {
            "id": "square",
            "url": "https://square.site/book/27JKMG7NYVRBM/elenie-for-hair-san-francisco-ca",
            "kind": "booking_provider",
            "checkedAt": "2026-10-24T09:28:52.257793+00:00",
            "outcome": "read",
            "note": "Public customer menu and visible options read from page HTML."
          }
        ],
        "menuStatus": "published",
        "menu": [
          {
            "name": "Womans Haircut",
            "category": "haircut",
            "description": "Wash, cut and blow-dry included.",
            "price": {
              "kind": "starting_at",
              "amount": 120,
              "amountMax": null,
              "currency": "USD",
              "note": "Published starting price; final scope and extras require confirmation."
            },
            "durationMinutes": 60,
            "durationMaxMinutes": null,
            "sourceId": "square",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Partial Balayage",
            "category": "color",
            "description": "Lightening focused around the face and crown.",
            "price": {
              "kind": "starting_at",
              "amount": 250,
              "amountMax": null,
              "currency": "USD",
              "note": "Published starting price; final scope and extras require confirmation."
            },
            "durationMinutes": 180,
            "durationMaxMinutes": null,
            "sourceId": "square",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Full Balayage",
            "category": "color",
            "description": "Balayage throughout the head.",
            "price": {
              "kind": "starting_at",
              "amount": 290,
              "amountMax": null,
              "currency": "USD",
              "note": "Published starting price; final scope and extras require confirmation."
            },
            "durationMinutes": 165,
            "durationMaxMinutes": null,
            "sourceId": "square",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Blowout",
            "category": "styling",
            "description": null,
            "price": {
              "kind": "starting_at",
              "amount": 65,
              "amountMax": null,
              "currency": "USD",
              "note": "Published starting price; final scope and extras require confirmation."
            },
            "durationMinutes": 45,
            "durationMaxMinutes": null,
            "sourceId": "square",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Tint Touch Up",
            "category": "color",
            "description": "For at most one inch of regrowth; finished with a style.",
            "price": {
              "kind": "starting_at",
              "amount": 120,
              "amountMax": null,
              "currency": "USD",
              "note": "Published starting price; final scope and extras require confirmation."
            },
            "durationMinutes": 80,
            "durationMaxMinutes": null,
            "sourceId": "square",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Hair color - All over (Roots to ends)",
            "category": "color",
            "description": "Single-process roots-to-ends color; extra-long or dense hair costs extra. Not a bleach-and-tone service.",
            "price": {
              "kind": "starting_at",
              "amount": 185,
              "amountMax": null,
              "currency": "USD",
              "note": "Published starting price; final scope and extras require confirmation."
            },
            "durationMinutes": 90,
            "durationMaxMinutes": null,
            "sourceId": "square",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Partial Highlight",
            "category": "color",
            "description": "Top and side foil highlights. Salon says gloss is added in 90% of cases; inclusion must be confirmed.",
            "price": {
              "kind": "starting_at",
              "amount": 220,
              "amountMax": null,
              "currency": "USD",
              "note": "Published starting price; final scope and extras require confirmation."
            },
            "durationMinutes": 120,
            "durationMaxMinutes": null,
            "sourceId": "square",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Full Highlight",
            "category": "color",
            "description": "Front-to-back foil highlights. Salon says gloss is added in 90% of cases; inclusion must be confirmed.",
            "price": {
              "kind": "starting_at",
              "amount": 260,
              "amountMax": null,
              "currency": "USD",
              "note": "Published starting price; final scope and extras require confirmation."
            },
            "durationMinutes": 150,
            "durationMaxMinutes": null,
            "sourceId": "square",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Keratin Complex Hair Therapy",
            "category": "treatment",
            "description": "Smoothing treatment; published aftercare says not to wet hair for 72 hours.",
            "price": {
              "kind": "starting_at",
              "amount": 300,
              "amountMax": null,
              "currency": "USD",
              "note": "Published starting price; final scope and extras require confirmation."
            },
            "durationMinutes": 180,
            "durationMaxMinutes": null,
            "sourceId": "square",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Hair Extensions Consultation",
            "category": "other",
            "description": "Call the salon for consultation before booking extensions.",
            "price": {
              "kind": "consultation",
              "amount": null,
              "amountMax": null,
              "currency": "USD",
              "note": "Price determined upon consultation."
            },
            "durationMinutes": 15,
            "durationMaxMinutes": null,
            "sourceId": "square",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Keratin Complex Express Blowout",
            "category": "treatment",
            "description": "Express smoothing treatment; published aftercare says wait eight hours before wetting hair.",
            "price": {
              "kind": "starting_at",
              "amount": 230,
              "amountMax": null,
              "currency": "USD",
              "note": "Published starting price; final scope and extras require confirmation."
            },
            "durationMinutes": 120,
            "durationMaxMinutes": null,
            "sourceId": "square",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Tint touch and partial highlights",
            "category": "color",
            "description": "Root color with highlights around the face and crown.",
            "price": {
              "kind": "starting_at",
              "amount": 280,
              "amountMax": null,
              "currency": "USD",
              "note": "Published starting price; final scope and extras require confirmation."
            },
            "durationMinutes": 175,
            "durationMaxMinutes": null,
            "sourceId": "square",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Tint touch up and Women's haircut",
            "category": "color",
            "description": "Root color combined with haircut.",
            "price": {
              "kind": "starting_at",
              "amount": 240,
              "amountMax": null,
              "currency": "USD",
              "note": "Published starting price; final scope and extras require confirmation."
            },
            "durationMinutes": 90,
            "durationMaxMinutes": null,
            "sourceId": "square",
            "priceSourceId": null,
            "durationSourceId": null
          }
        ],
        "addOnsStatus": "published",
        "addOns": [
          {
            "name": "Toner or Gloss ADD ON TO EXISTING SERVICE",
            "category": "color",
            "description": "Only in addition to an existing service.",
            "price": {
              "kind": "fixed",
              "amount": 65,
              "amountMax": null,
              "currency": "USD",
              "note": null
            },
            "durationMinutes": 30,
            "durationMaxMinutes": null,
            "sourceId": "square",
            "priceSourceId": null,
            "durationSourceId": null
          }
        ],
        "stylistsStatus": "published",
        "stylists": [
          {
            "name": "Elenie",
            "specialties": [],
            "bio": null,
            "bookingUrl": null,
            "portfolioUrl": null,
            "sourceId": "square"
          }
        ],
        "policies": {
          "cancellation": {
            "value": "Cancel or reschedule at least 48 hours ahead. Under 48 hours costs 50%; under 24 hours costs 100%. Repeated cancellations may result in removal from the schedule.",
            "sourceId": "square"
          },
          "deposit": {
            "value": "A $100 non-refundable booking fee is credited to the final bill and forfeited when rescheduling with less than 48 hours notice. The heading names keratin, balayage and highlights, while the body names straightener, perm or smoothing treatments; confirm whether it applies to the chosen service.",
            "sourceId": "square"
          },
          "noShow": {
            "value": "No-call/no-show clients will not be rebooked. A separate no-show fee is not stated.",
            "sourceId": "square"
          },
          "lateArrival": {
            "value": "Clients 15 or more minutes late cannot be accepted and may be rescheduled with a charge of 50% of scheduled services.",
            "sourceId": "square"
          },
          "consultation": {
            "value": "Extension clients must discuss care, maintenance, matching and prices before booking.",
            "sourceId": "square"
          },
          "payment": {
            "value": null,
            "sourceId": null
          },
          "walkIns": {
            "value": null,
            "sourceId": null
          }
        },
        "unknowns": [
          "No live appointment availability or booking confirmation was checked.",
          "Published prices are not a final total; applicable extra product, time, tax and gratuity must be confirmed.",
          "Gloss inclusion and the final combined highlight-plus-gloss price require confirmation.",
          "Payment methods and walk-in policy were not found on the checked pages."
        ],
        "conflicts": [
          "Deposit scope is inconsistent between the public policy heading and body; do not apply a universal $100 surcharge.",
          "Website and Square published hours differ (including Tuesday availability). Neither hours source establishes appointment availability."
        ]
      }
    },
    {
      "slug": "fco-barbershop-tenderloin",
      "ref": "san-francisco/hair-salon/fco-barbershop-tenderloin",
      "name": "Fco. Barbershop",
      "neighborhood": "Tenderloin",
      "researched_at": "2026-10-24T09:34:11Z",
      "coverage": {
        "services": 8,
        "services_with_prices": 8,
        "services_with_durations": 7,
        "add_ons": 0,
        "stylists": 1,
        "published_policies": 2,
        "policy_fields": 7,
        "successfully_read_sources": 3
      },
      "unknowns": [
        "Exact final total, including applicable extras, tax and gratuity, is not established by a published base price.",
        "Appointment availability was not checked.",
        "After-hours duration is not published. Contact and footer hours differ; no appointment availability was inferred from either.",
        "No usable public terms established for: deposit, noShow, lateArrival, consultation, payment.",
        "No separate priced add-on list was established on the pages checked; this does not establish that there are no extra charges."
      ],
      "conflicts": [
        "Both beard booking descriptions say clippers only, including the item named Beard trim with blade; the website describes blade contouring for the latter. The method needs confirmation.",
        "Both beard descriptions still request proof of vaccination. This text is present, but its current enforcement was not verified."
      ],
      "url": "https://agentsalonsf.com/salons/fco-barbershop-tenderloin",
      "markdown_url": "https://agentsalonsf.com/salons/fco-barbershop-tenderloin.md",
      "api_url": "https://agentsalonsf.com/api/v1/salons/fco-barbershop-tenderloin",
      "public_research": {
        "salonSlug": "fco-barbershop-tenderloin",
        "researchedAt": "2026-10-24T09:34:11Z",
        "summary": "Seven public booking services plus the website-only after-hours haircut. Two beard descriptions contain unresolved wording that requires confirmation.",
        "sources": [
          {
            "id": "website",
            "url": "https://www.fcobarbershop.com/",
            "kind": "salon_website",
            "checkedAt": "2026-10-24T09:34:11Z",
            "outcome": "read",
            "note": "Public page read for services, team or stated policies."
          },
          {
            "id": "contact",
            "url": "https://www.fcobarbershop.com/contact",
            "kind": "salon_website",
            "checkedAt": "2026-10-24T09:34:11Z",
            "outcome": "read",
            "note": "Public page read for services, team or stated policies."
          },
          {
            "id": "booking",
            "url": "https://book.squareup.com/appointments/rdjem72kycnqnw/location/L3STH79KKKA30",
            "kind": "booking_provider",
            "checkedAt": "2026-10-24T09:28:28Z",
            "outcome": "read",
            "note": "Public customer booking HTML menu, durations and displayed cancellation text."
          }
        ],
        "menuStatus": "published",
        "menu": [
          {
            "name": "Haircut",
            "category": "haircut",
            "description": null,
            "price": {
              "kind": "fixed",
              "amount": 75,
              "amountMax": null,
              "currency": "USD",
              "note": "Published base price; final total unverified."
            },
            "durationMinutes": 60,
            "durationMaxMinutes": null,
            "sourceId": "booking",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Haircut (65+ senior discount)",
            "category": "haircut",
            "description": "Published senior rate for clients age 65 or older.",
            "price": {
              "kind": "fixed",
              "amount": 50,
              "amountMax": null,
              "currency": "USD",
              "note": "Published base price; final total unverified."
            },
            "durationMinutes": 45,
            "durationMaxMinutes": null,
            "sourceId": "booking",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Back & sides",
            "category": "haircut",
            "description": null,
            "price": {
              "kind": "fixed",
              "amount": 50,
              "amountMax": null,
              "currency": "USD",
              "note": "Published base price; final total unverified."
            },
            "durationMinutes": 30,
            "durationMaxMinutes": null,
            "sourceId": "booking",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Buzz",
            "category": "haircut",
            "description": null,
            "price": {
              "kind": "fixed",
              "amount": 35,
              "amountMax": null,
              "currency": "USD",
              "note": "Published base price; final total unverified."
            },
            "durationMinutes": 30,
            "durationMaxMinutes": null,
            "sourceId": "booking",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Buzz with fade",
            "category": "haircut",
            "description": null,
            "price": {
              "kind": "fixed",
              "amount": 40,
              "amountMax": null,
              "currency": "USD",
              "note": "Published base price; final total unverified."
            },
            "durationMinutes": 45,
            "durationMaxMinutes": null,
            "sourceId": "booking",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Beard Trim",
            "category": "beard",
            "description": "The booking description says clipper-only; see source ambiguity in conflicts.",
            "price": {
              "kind": "fixed",
              "amount": 40,
              "amountMax": null,
              "currency": "USD",
              "note": "Published base price; final total unverified."
            },
            "durationMinutes": 30,
            "durationMaxMinutes": null,
            "sourceId": "booking",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Beard trim with blade",
            "category": "beard",
            "description": "The item name says blade but its description says clipper-only; confirm the method.",
            "price": {
              "kind": "fixed",
              "amount": 45,
              "amountMax": null,
              "currency": "USD",
              "note": "Published base price; final total unverified."
            },
            "durationMinutes": 45,
            "durationMaxMinutes": null,
            "sourceId": "booking",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "After hours service",
            "category": "haircut",
            "description": "After-hours appointment with a complimentary hot towel; arrange directly with the shop.",
            "price": {
              "kind": "fixed",
              "amount": 130,
              "amountMax": null,
              "currency": "USD",
              "note": null
            },
            "durationMinutes": null,
            "durationMaxMinutes": null,
            "sourceId": "website",
            "priceSourceId": null,
            "durationSourceId": null
          }
        ],
        "addOnsStatus": "unknown",
        "addOns": [],
        "stylistsStatus": "published",
        "stylists": [
          {
            "name": "Jose",
            "specialties": [],
            "bio": null,
            "bookingUrl": "https://book.squareup.com/appointments/rdjem72kycnqnw/location/L3STH79KKKA30",
            "portfolioUrl": null,
            "sourceId": "booking"
          }
        ],
        "policies": {
          "cancellation": {
            "value": "Cancellation with less than 12 hours of notice incurs the full booked service price.",
            "sourceId": "booking"
          },
          "deposit": {
            "value": null,
            "sourceId": null
          },
          "noShow": {
            "value": null,
            "sourceId": null
          },
          "lateArrival": {
            "value": null,
            "sourceId": null
          },
          "consultation": {
            "value": null,
            "sourceId": null
          },
          "payment": {
            "value": null,
            "sourceId": null
          },
          "walkIns": {
            "value": "The website describes the shop as appointment-only.",
            "sourceId": "website"
          }
        },
        "unknowns": [
          "Exact final total, including applicable extras, tax and gratuity, is not established by a published base price.",
          "Appointment availability was not checked.",
          "After-hours duration is not published. Contact and footer hours differ; no appointment availability was inferred from either.",
          "No usable public terms established for: deposit, noShow, lateArrival, consultation, payment.",
          "No separate priced add-on list was established on the pages checked; this does not establish that there are no extra charges."
        ],
        "conflicts": [
          "Both beard booking descriptions say clippers only, including the item named Beard trim with blade; the website describes blade contouring for the latter. The method needs confirmation.",
          "Both beard descriptions still request proof of vaccination. This text is present, but its current enforcement was not verified."
        ]
      }
    },
    {
      "slug": "habitat-nob-hill",
      "ref": "san-francisco/hair-salon/habitat-nob-hill",
      "name": "Habitat",
      "neighborhood": "Nob Hill",
      "researched_at": "2026-10-24T09:38:45.385678+00:00",
      "coverage": {
        "services": 38,
        "services_with_prices": 37,
        "services_with_durations": 37,
        "add_ons": 2,
        "stylists": 5,
        "published_policies": 2,
        "policy_fields": 7,
        "successfully_read_sources": 4
      },
      "unknowns": [
        "No live appointment availability or booking confirmation was checked.",
        "Published prices are not a final total; applicable extra product, time, tax and gratuity must be confirmed.",
        "Square instructs check-in next door at The Birdcage, 816 Sutter Street, except after 3pm Sundays or Mondays; confirm the appointment-specific arrival location.",
        "Deposit, no-show-specific, late-arrival, payment and walk-in terms were not found."
      ],
      "conflicts": [
        "Correct public booking route is https://book.squareup.com/appointments/856s2ddhpsx5u2/location/LD0R0ENTP3M6Z/services, linked on the official service-menu and team pages. The catalog previously contained a duplicated malformed URL.",
        "Website advertises Hair Cut from $110, Partial Placement from $250 and Full Placement from $300. Visible booking options instead include Hair Cut $100/$140, Partial Placement $275 and Full Placement $375; confirm the current option and price.",
        "Website Gloss or Toner starts at $70, while the booking menu has a Gloss/Toner + Blow Dry bundle at $165. These are not assumed to be identical scopes."
      ],
      "url": "https://agentsalonsf.com/salons/habitat-nob-hill",
      "markdown_url": "https://agentsalonsf.com/salons/habitat-nob-hill.md",
      "api_url": "https://agentsalonsf.com/api/v1/salons/habitat-nob-hill",
      "public_research": {
        "salonSlug": "habitat-nob-hill",
        "researchedAt": "2026-10-24T09:38:45.385678+00:00",
        "summary": "Full customer booking menu with visible options, durations, explicit treatment add-ons and policies reviewed. Website and booking prices differ. A malformed catalog booking route was traced to the correct link published by the salon.",
        "sources": [
          {
            "id": "home",
            "url": "https://habitathairsalon.com/",
            "kind": "salon_website",
            "checkedAt": "2026-10-24T09:27:45.431526+00:00",
            "outcome": "read",
            "note": "Public page text reviewed."
          },
          {
            "id": "menu",
            "url": "https://habitathairsalon.com/service-menu",
            "kind": "salon_website",
            "checkedAt": "2026-10-24T09:28:28.013635+00:00",
            "outcome": "read",
            "note": "Public page text reviewed."
          },
          {
            "id": "team",
            "url": "https://habitathairsalon.com/our-team",
            "kind": "salon_website",
            "checkedAt": "2026-10-24T09:28:28.347773+00:00",
            "outcome": "read",
            "note": "Public page text reviewed."
          },
          {
            "id": "square",
            "url": "https://book.squareup.com/appointments/856s2ddhpsx5u2/location/LD0R0ENTP3M6Z/services",
            "kind": "booking_provider",
            "checkedAt": "2026-10-24T09:28:54.125583+00:00",
            "outcome": "read",
            "note": "Public customer menu and visible options read from page HTML."
          }
        ],
        "menuStatus": "published",
        "menu": [
          {
            "name": "Short Hair Cut/ Clipper Cut - Chauntae",
            "category": "haircut",
            "description": "Hair must already be short, above chin length.",
            "price": {
              "kind": "fixed",
              "amount": 80,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option base price; final scope and charges require confirmation."
            },
            "durationMinutes": 45,
            "durationMaxMinutes": null,
            "sourceId": "square",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Short Hair Cut/ Clipper Cut - Mary",
            "category": "haircut",
            "description": "Hair must already be short, above chin length.",
            "price": {
              "kind": "fixed",
              "amount": 80,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option base price; final scope and charges require confirmation."
            },
            "durationMinutes": 45,
            "durationMaxMinutes": null,
            "sourceId": "square",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Short Hair Cut/ Clipper Cut - Tony",
            "category": "haircut",
            "description": "Hair must already be short, above chin length.",
            "price": {
              "kind": "fixed",
              "amount": 85,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option base price; final scope and charges require confirmation."
            },
            "durationMinutes": 60,
            "durationMaxMinutes": null,
            "sourceId": "square",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Full Placement - Mary",
            "category": "color",
            "description": "Full-head foil or balayage placement, including toner. First-time clients require consultation.",
            "price": {
              "kind": "fixed",
              "amount": 375,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option base price; final scope and charges require confirmation."
            },
            "durationMinutes": 240,
            "durationMaxMinutes": null,
            "sourceId": "square",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Full Placement - Chauntae",
            "category": "color",
            "description": "Full-head foil or balayage placement, including toner. First-time clients require consultation.",
            "price": {
              "kind": "fixed",
              "amount": 375,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option base price; final scope and charges require confirmation."
            },
            "durationMinutes": 240,
            "durationMaxMinutes": null,
            "sourceId": "square",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Consultation - Mary",
            "category": "other",
            "description": null,
            "price": {
              "kind": "unknown",
              "amount": null,
              "amountMax": null,
              "currency": "USD",
              "note": "No numeric price was published for this option."
            },
            "durationMinutes": 15,
            "durationMaxMinutes": null,
            "sourceId": "square",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Consultation - Chauntae",
            "category": "other",
            "description": null,
            "price": {
              "kind": "fixed",
              "amount": 0,
              "amountMax": null,
              "currency": "USD",
              "note": "The public customer menu displays $0 for this consultation; this is not the price of a subsequent service."
            },
            "durationMinutes": 15,
            "durationMaxMinutes": null,
            "sourceId": "square",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Hair Cut - Chauntae",
            "category": "haircut",
            "description": "For hair starting at chin length; includes blow-out.",
            "price": {
              "kind": "fixed",
              "amount": 140,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option base price; final scope and charges require confirmation."
            },
            "durationMinutes": 75,
            "durationMaxMinutes": null,
            "sourceId": "square",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Hair Cut - Mary",
            "category": "haircut",
            "description": "For hair starting at chin length; includes blow-out.",
            "price": {
              "kind": "fixed",
              "amount": 140,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option base price; final scope and charges require confirmation."
            },
            "durationMinutes": 75,
            "durationMaxMinutes": null,
            "sourceId": "square",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Hair Cut - Tony",
            "category": "haircut",
            "description": "For hair starting at chin length; includes blow-out.",
            "price": {
              "kind": "fixed",
              "amount": 140,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option base price; final scope and charges require confirmation."
            },
            "durationMinutes": 90,
            "durationMaxMinutes": null,
            "sourceId": "square",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Hair Cut - Danielle",
            "category": "haircut",
            "description": "For hair starting at chin length; includes blow-out.",
            "price": {
              "kind": "fixed",
              "amount": 100,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option base price; final scope and charges require confirmation."
            },
            "durationMinutes": 90,
            "durationMaxMinutes": null,
            "sourceId": "square",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Gloss/Toner + Blow Dry - Mary",
            "category": "color",
            "description": "Semi/demi color refresh, including vivid colors and blow-dry.",
            "price": {
              "kind": "fixed",
              "amount": 165,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option base price; final scope and charges require confirmation."
            },
            "durationMinutes": 90,
            "durationMaxMinutes": null,
            "sourceId": "square",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Gloss/Toner + Blow Dry - Chauntae",
            "category": "color",
            "description": "Semi/demi color refresh, including vivid colors and blow-dry.",
            "price": {
              "kind": "fixed",
              "amount": 165,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option base price; final scope and charges require confirmation."
            },
            "durationMinutes": 90,
            "durationMaxMinutes": null,
            "sourceId": "square",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Extra Long + Dense Haircut - Chauntae",
            "category": "haircut",
            "description": "Choose this longer appointment for substantial length or density.",
            "price": {
              "kind": "fixed",
              "amount": 170,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option base price; final scope and charges require confirmation."
            },
            "durationMinutes": 90,
            "durationMaxMinutes": null,
            "sourceId": "square",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Extra Long + Dense Haircut - Mary",
            "category": "haircut",
            "description": "Choose this longer appointment for substantial length or density.",
            "price": {
              "kind": "fixed",
              "amount": 170,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option base price; final scope and charges require confirmation."
            },
            "durationMinutes": 90,
            "durationMaxMinutes": null,
            "sourceId": "square",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Extra Long + Dense Haircut - Danielle",
            "category": "haircut",
            "description": "Choose this longer appointment for substantial length or density.",
            "price": {
              "kind": "fixed",
              "amount": 115,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option base price; final scope and charges require confirmation."
            },
            "durationMinutes": 105,
            "durationMaxMinutes": null,
            "sourceId": "square",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Transformation Cut - Chauntae",
            "category": "haircut",
            "description": "Extended appointment for a major haircut change.",
            "price": {
              "kind": "fixed",
              "amount": 170,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option base price; final scope and charges require confirmation."
            },
            "durationMinutes": 90,
            "durationMaxMinutes": null,
            "sourceId": "square",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Transformation Cut - Mary",
            "category": "haircut",
            "description": "Extended appointment for a major haircut change.",
            "price": {
              "kind": "fixed",
              "amount": 170,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option base price; final scope and charges require confirmation."
            },
            "durationMinutes": 90,
            "durationMaxMinutes": null,
            "sourceId": "square",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Bleach and tone - Mary",
            "category": "color",
            "description": "For returning clients; new clients must arrange a consultation first.",
            "price": {
              "kind": "fixed",
              "amount": 440,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option base price; final scope and charges require confirmation."
            },
            "durationMinutes": 240,
            "durationMaxMinutes": null,
            "sourceId": "square",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Bleach and tone - Chauntae",
            "category": "color",
            "description": "For returning clients; new clients must arrange a consultation first.",
            "price": {
              "kind": "fixed",
              "amount": 440,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option base price; final scope and charges require confirmation."
            },
            "durationMinutes": 240,
            "durationMaxMinutes": null,
            "sourceId": "square",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Haircut- Bob - Chauntae",
            "category": "haircut",
            "description": "For chin-to-above-collarbone hair; blow-out included.",
            "price": {
              "kind": "fixed",
              "amount": 140,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option base price; final scope and charges require confirmation."
            },
            "durationMinutes": 75,
            "durationMaxMinutes": null,
            "sourceId": "square",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Haircut- Bob - Mary",
            "category": "haircut",
            "description": "For chin-to-above-collarbone hair; blow-out included.",
            "price": {
              "kind": "fixed",
              "amount": 140,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option base price; final scope and charges require confirmation."
            },
            "durationMinutes": 75,
            "durationMaxMinutes": null,
            "sourceId": "square",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Haircut- Bob - Tony",
            "category": "haircut",
            "description": "For chin-to-above-collarbone hair; blow-out included.",
            "price": {
              "kind": "fixed",
              "amount": 140,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option base price; final scope and charges require confirmation."
            },
            "durationMinutes": 90,
            "durationMaxMinutes": null,
            "sourceId": "square",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Haircut- Bob - Danielle",
            "category": "haircut",
            "description": "For chin-to-above-collarbone hair; blow-out included.",
            "price": {
              "kind": "fixed",
              "amount": 100,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option base price; final scope and charges require confirmation."
            },
            "durationMinutes": 90,
            "durationMaxMinutes": null,
            "sourceId": "square",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "All-Over Color - Mary",
            "category": "color",
            "description": "Full-head color; all first-time clients require consultation.",
            "price": {
              "kind": "fixed",
              "amount": 240,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option base price; final scope and charges require confirmation."
            },
            "durationMinutes": 120,
            "durationMaxMinutes": null,
            "sourceId": "square",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "All-Over Color - Chauntae",
            "category": "color",
            "description": "Full-head color; all first-time clients require consultation.",
            "price": {
              "kind": "fixed",
              "amount": 240,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option base price; final scope and charges require confirmation."
            },
            "durationMinutes": 120,
            "durationMaxMinutes": null,
            "sourceId": "square",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Partial Placement - Mary",
            "category": "color",
            "description": "Partial-head foil or balayage placement, including toner. First-time clients require consultation.",
            "price": {
              "kind": "fixed",
              "amount": 275,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option base price; final scope and charges require confirmation."
            },
            "durationMinutes": 150,
            "durationMaxMinutes": null,
            "sourceId": "square",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Partial Placement - Chauntae",
            "category": "color",
            "description": "Partial-head foil or balayage placement, including toner. First-time clients require consultation.",
            "price": {
              "kind": "fixed",
              "amount": 275,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option base price; final scope and charges require confirmation."
            },
            "durationMinutes": 150,
            "durationMaxMinutes": null,
            "sourceId": "square",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Haircut- Pixie - Chauntae",
            "category": "haircut",
            "description": "For hair starting above chin length; style included.",
            "price": {
              "kind": "fixed",
              "amount": 95,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option base price; final scope and charges require confirmation."
            },
            "durationMinutes": 60,
            "durationMaxMinutes": null,
            "sourceId": "square",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Haircut- Pixie - Mary",
            "category": "haircut",
            "description": "For hair starting above chin length; style included.",
            "price": {
              "kind": "fixed",
              "amount": 95,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option base price; final scope and charges require confirmation."
            },
            "durationMinutes": 60,
            "durationMaxMinutes": null,
            "sourceId": "square",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Haircut- Pixie - Tony",
            "category": "haircut",
            "description": "For hair starting above chin length; style included.",
            "price": {
              "kind": "fixed",
              "amount": 140,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option base price; final scope and charges require confirmation."
            },
            "durationMinutes": 90,
            "durationMaxMinutes": null,
            "sourceId": "square",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Buzz Cut - Chauntae",
            "category": "haircut",
            "description": "All-over clipper cut using at most two guards.",
            "price": {
              "kind": "fixed",
              "amount": 50,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option base price; final scope and charges require confirmation."
            },
            "durationMinutes": 30,
            "durationMaxMinutes": null,
            "sourceId": "square",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Bang Trim - Chauntae",
            "category": "haircut",
            "description": "Trim of existing bangs.",
            "price": {
              "kind": "fixed",
              "amount": 30,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option base price; final scope and charges require confirmation."
            },
            "durationMinutes": 15,
            "durationMaxMinutes": null,
            "sourceId": "square",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Bang Trim - Mary",
            "category": "haircut",
            "description": "Trim of existing bangs.",
            "price": {
              "kind": "fixed",
              "amount": 30,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option base price; final scope and charges require confirmation."
            },
            "durationMinutes": 15,
            "durationMaxMinutes": null,
            "sourceId": "square",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Short Hair Cut + Beard Trim",
            "category": "haircut",
            "description": "Short haircut plus beard shaping and neckline finishing.",
            "price": {
              "kind": "fixed",
              "amount": 95,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option base price; final scope and charges require confirmation."
            },
            "durationMinutes": 60,
            "durationMaxMinutes": null,
            "sourceId": "square",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Child’s Short Cut - Chauntae",
            "category": "haircut",
            "description": "Short haircut for children under ten.",
            "price": {
              "kind": "fixed",
              "amount": 50,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option base price; final scope and charges require confirmation."
            },
            "durationMinutes": 30,
            "durationMaxMinutes": null,
            "sourceId": "square",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Children’s Long Cut",
            "category": "haircut",
            "description": "For children twelve or under with shoulder-length or longer hair.",
            "price": {
              "kind": "fixed",
              "amount": 90,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option base price; final scope and charges require confirmation."
            },
            "durationMinutes": 60,
            "durationMaxMinutes": null,
            "sourceId": "square",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Gloss or Toner",
            "category": "color",
            "description": "Semi/demi color refresh, including vivid colors; confirm finishing requirements.",
            "price": {
              "kind": "starting_at",
              "amount": 70,
              "amountMax": null,
              "currency": "USD",
              "note": "Website-only starting price; blow-dry inclusion is not stated. The booking menu separately offers Gloss/Toner + Blow Dry for $165."
            },
            "durationMinutes": null,
            "durationMaxMinutes": null,
            "sourceId": "menu",
            "priceSourceId": null,
            "durationSourceId": null
          }
        ],
        "addOnsStatus": "published",
        "addOns": [
          {
            "name": "R + Co concentrate Treatment ( add on service- no blow dry )",
            "category": "treatment",
            "description": "Treatment add-on only; no blow-dry.",
            "price": {
              "kind": "fixed",
              "amount": 35,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option base price; final scope and charges require confirmation."
            },
            "durationMinutes": 15,
            "durationMaxMinutes": null,
            "sourceId": "square",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Innersence Scalp Treatment (Add to a service, no styling or blow dry included)",
            "category": "treatment",
            "description": "Scalp treatment add-on only; styling and blow-dry excluded.",
            "price": {
              "kind": "fixed",
              "amount": 50,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option base price; final scope and charges require confirmation."
            },
            "durationMinutes": 30,
            "durationMaxMinutes": null,
            "sourceId": "square",
            "priceSourceId": null,
            "durationSourceId": null
          }
        ],
        "stylistsStatus": "published",
        "stylists": [
          {
            "name": "Mary",
            "specialties": [
              "custom cuts",
              "barbering",
              "lived-in low-maintenance color"
            ],
            "bio": null,
            "bookingUrl": null,
            "portfolioUrl": null,
            "sourceId": "team"
          },
          {
            "name": "Chauntae",
            "specialties": [
              "haircuts",
              "color",
              "texture"
            ],
            "bio": null,
            "bookingUrl": null,
            "portfolioUrl": null,
            "sourceId": "team"
          },
          {
            "name": "Danielle",
            "specialties": [
              "long layers",
              "simple bobs"
            ],
            "bio": "Junior stylist.",
            "bookingUrl": null,
            "portfolioUrl": null,
            "sourceId": "team"
          },
          {
            "name": "Staizsh",
            "specialties": [],
            "bio": "Apprentice; website says model cuts are planned, not that appointments are currently available.",
            "bookingUrl": null,
            "portfolioUrl": null,
            "sourceId": "team"
          },
          {
            "name": "Tony",
            "specialties": [
              "precision bobs",
              "shags",
              "barber cuts"
            ],
            "bio": "Periodic guest stylist.",
            "bookingUrl": null,
            "portfolioUrl": null,
            "sourceId": "team"
          }
        ],
        "policies": {
          "cancellation": {
            "value": "At least 24 hours notice for haircut cancellations and 48 hours for color; otherwise 50% is charged the first time and 100% on subsequent occurrences.",
            "sourceId": "square"
          },
          "deposit": {
            "value": null,
            "sourceId": null
          },
          "noShow": {
            "value": null,
            "sourceId": null
          },
          "lateArrival": {
            "value": null,
            "sourceId": null
          },
          "consultation": {
            "value": "First-time clients require consultation before full/partial placement, all-over color, or bleach-and-tone service.",
            "sourceId": "square"
          },
          "payment": {
            "value": null,
            "sourceId": null
          },
          "walkIns": {
            "value": null,
            "sourceId": null
          }
        },
        "unknowns": [
          "No live appointment availability or booking confirmation was checked.",
          "Published prices are not a final total; applicable extra product, time, tax and gratuity must be confirmed.",
          "Square instructs check-in next door at The Birdcage, 816 Sutter Street, except after 3pm Sundays or Mondays; confirm the appointment-specific arrival location.",
          "Deposit, no-show-specific, late-arrival, payment and walk-in terms were not found."
        ],
        "conflicts": [
          "Correct public booking route is https://book.squareup.com/appointments/856s2ddhpsx5u2/location/LD0R0ENTP3M6Z/services, linked on the official service-menu and team pages. The catalog previously contained a duplicated malformed URL.",
          "Website advertises Hair Cut from $110, Partial Placement from $250 and Full Placement from $300. Visible booking options instead include Hair Cut $100/$140, Partial Placement $275 and Full Placement $375; confirm the current option and price.",
          "Website Gloss or Toner starts at $70, while the booking menu has a Gloss/Toner + Blow Dry bundle at $165. These are not assumed to be identical scopes."
        ],
        "bookingUpdate": {
          "url": "https://book.squareup.com/appointments/856s2ddhpsx5u2/location/LD0R0ENTP3M6Z/services",
          "provider": "square",
          "sourceId": "menu",
          "note": "Correct current public booking route linked by the salon service-menu and team pages."
        }
      }
    },
    {
      "slug": "hairglim-beauty-outer-richmond",
      "ref": "san-francisco/hair-salon/hairglim-beauty-outer-richmond",
      "name": "Hairglim Beauty",
      "neighborhood": "Outer Richmond",
      "researched_at": "2026-10-24T09:38:45.386055+00:00",
      "coverage": {
        "services": 28,
        "services_with_prices": 23,
        "services_with_durations": 28,
        "add_ons": 3,
        "stylists": 2,
        "published_policies": 5,
        "policy_fields": 7,
        "successfully_read_sources": 5
      },
      "unknowns": [
        "No live appointment availability or booking confirmation was checked.",
        "Published prices are not a final total; applicable extra product, time, tax and gratuity must be confirmed.",
        "Independent providers manage their own pricing, scheduling and terms; the reviewed menu does not establish every provider’s full menu.",
        "Extension quantity, hair purchase price and final installation total are unknown.",
        "No deposit or walk-in terms were found.",
        "Ben’s individually linked Booksy menu could not be read from the public shell. The detailed Square menu covers the salon route labeled for George; it is not asserted to be Ben’s menu."
      ],
      "conflicts": [
        "Deep conditioning treatment & blow out: description starts at $100 for short hair while the visible option is $150. No single price is selected as current.",
        "The website identifies George while the customer booking staff label is Gurgen. No identity equivalence is assumed.",
        "Color concern window is three days in one part of the policy, while chemical-service concerns are limited to 24 hours elsewhere; confirm the applicable adjustment policy."
      ],
      "url": "https://agentsalonsf.com/salons/hairglim-beauty-outer-richmond",
      "markdown_url": "https://agentsalonsf.com/salons/hairglim-beauty-outer-richmond.md",
      "api_url": "https://agentsalonsf.com/api/v1/salons/hairglim-beauty-outer-richmond",
      "public_research": {
        "salonSlug": "hairglim-beauty-outer-richmond",
        "researchedAt": "2026-10-24T09:38:45.386055+00:00",
        "summary": "Public hair-service menu and visible options reviewed, including extension unit rates, explicit blowout surcharges and payment terms. Long marketing and legal text is not treated as verified health or safety claims. One treatment price conflicts within the booking menu.",
        "sources": [
          {
            "id": "home",
            "url": "https://www.hairglim.com/",
            "kind": "salon_website",
            "checkedAt": "2026-10-24T09:27:45.844701+00:00",
            "outcome": "read",
            "note": "Public page text reviewed."
          },
          {
            "id": "policy",
            "url": "https://www.hairglim.com/booking",
            "kind": "salon_website",
            "checkedAt": "2026-10-24T09:28:28.383692+00:00",
            "outcome": "read",
            "note": "Public page text reviewed."
          },
          {
            "id": "team",
            "url": "https://www.hairglim.com/hairglim-team",
            "kind": "salon_website",
            "checkedAt": "2026-10-24T09:28:28.400273+00:00",
            "outcome": "read",
            "note": "Public page text reviewed."
          },
          {
            "id": "square",
            "url": "https://book.squareup.com/appointments/3jolsr7sv57yek/location/LGBGKZN92PBZK/services",
            "kind": "booking_provider",
            "checkedAt": "2026-10-24T09:28:54.196669+00:00",
            "outcome": "read",
            "note": "Public customer menu and visible options read from page HTML."
          },
          {
            "id": "booksy-ben",
            "url": "https://booksy.com/en-us/instant-experiences/widget/1170007?instant_experiences_enabled=true&ig_ix=true",
            "kind": "booking_provider",
            "checkedAt": "2026-10-24T09:37:39.299953+00:00",
            "outcome": "read",
            "note": "Official team page’s Book with Ben link followed. Public Booksy page returned a client-rendered shell without this provider’s service menu; no private API called."
          }
        ],
        "menuStatus": "published",
        "menu": [
          {
            "name": "Haircut - hair cut man woman kids starting",
            "category": "haircut",
            "description": "Published haircut starting price.",
            "price": {
              "kind": "starting_at",
              "amount": 110,
              "amountMax": null,
              "currency": "USD",
              "note": "Starting price is stated in the customer service description; final amount depends on hair and scope."
            },
            "durationMinutes": 40,
            "durationMaxMinutes": null,
            "sourceId": "square",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Organic Keratin treatment - Depends on size till",
            "category": "treatment",
            "description": "Smoothing treatment; send a hair photo for consultation and pricing.",
            "price": {
              "kind": "starting_at",
              "amount": 400,
              "amountMax": null,
              "currency": "USD",
              "note": "Starting price is stated in the customer service description; final amount depends on hair and scope."
            },
            "durationMinutes": 210,
            "durationMaxMinutes": null,
            "sourceId": "square",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Hair btox (treatment) reconstruction intense not straightening - Depends on lenght antiyellow",
            "category": "treatment",
            "description": "Reconstruction treatment described as not straightening; from $350 for short bob-length hair.",
            "price": {
              "kind": "starting_at",
              "amount": 350,
              "amountMax": null,
              "currency": "USD",
              "note": "Starting price is stated in the customer service description; final amount depends on hair and scope."
            },
            "durationMinutes": 180,
            "durationMaxMinutes": null,
            "sourceId": "square",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Root touch up coloring 1inch - Regular root coloring 2-3 cm",
            "category": "color",
            "description": "Single-color root retouch without bleach. Longer regrowth can change the price.",
            "price": {
              "kind": "fixed",
              "amount": 115,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option base price; final scope and charges require confirmation."
            },
            "durationMinutes": 90,
            "durationMaxMinutes": null,
            "sourceId": "square",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Balayage shatush teasing hand touch - shatush mix hand touch air touch etc",
            "category": "color",
            "description": "Includes conditioning, custom color and blow-dry. Send hair photos before booking; wash hair the previous day.",
            "price": {
              "kind": "starting_at",
              "amount": 400,
              "amountMax": null,
              "currency": "USD",
              "note": "Starting price is stated in the customer service description; final amount depends on hair and scope. Description publishes 4-6 hours; the booking block is six hours."
            },
            "durationMinutes": 240,
            "durationMaxMinutes": 360,
            "sourceId": "square",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "UpDo / hairstyle / Wedding - Regular starting updo",
            "category": "styling",
            "description": "Price depends on style; send reference photos before booking.",
            "price": {
              "kind": "starting_at",
              "amount": 150,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option price; description says final price depends on style."
            },
            "durationMinutes": 60,
            "durationMaxMinutes": null,
            "sourceId": "square",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "UpDo / hairstyle / Wedding - Styling wedding etc till up do",
            "category": "styling",
            "description": "Price depends on style; send reference photos before booking.",
            "price": {
              "kind": "starting_at",
              "amount": 400,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option price; description says final price depends on style."
            },
            "durationMinutes": 90,
            "durationMaxMinutes": null,
            "sourceId": "square",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "UpDo / hairstyle / Wedding - Hollywood waves",
            "category": "styling",
            "description": "Price depends on style; send reference photos before booking.",
            "price": {
              "kind": "starting_at",
              "amount": 120,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option price; description says final price depends on style."
            },
            "durationMinutes": 45,
            "durationMaxMinutes": null,
            "sourceId": "square",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Deep conditioning treatment & blow out",
            "category": "treatment",
            "description": "Nourishing treatment including wash and blow-dry; description and option price differ.",
            "price": {
              "kind": "unknown",
              "amount": null,
              "amountMax": null,
              "currency": "USD",
              "note": "Description says starts at $100 for short hair, but the visible booking option is $150. Confirm which applies."
            },
            "durationMinutes": 45,
            "durationMaxMinutes": null,
            "sourceId": "square",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Hg polishen",
            "category": "haircut",
            "description": "Split-end polishing; consultation recommended.",
            "price": {
              "kind": "starting_at",
              "amount": 150,
              "amountMax": null,
              "currency": "USD",
              "note": "Starting price is stated in the customer service description; final amount depends on hair and scope."
            },
            "durationMinutes": 40,
            "durationMaxMinutes": null,
            "sourceId": "square",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Root total bleach touch up 2-3 cm  1 inch and tone",
            "category": "color",
            "description": "Bleach root retouch and tone, not highlights or balayage; arrange consultation first.",
            "price": {
              "kind": "starting_at",
              "amount": 350,
              "amountMax": null,
              "currency": "USD",
              "note": "Starting price is stated in the customer service description; final amount depends on hair and scope."
            },
            "durationMinutes": 225,
            "durationMaxMinutes": null,
            "sourceId": "square",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Full Highlights bleach + coloring  starting 400$",
            "category": "color",
            "description": "Highlights, conditioning mask, toner and blowout; hair photos requested before booking.",
            "price": {
              "kind": "starting_at",
              "amount": 400,
              "amountMax": null,
              "currency": "USD",
              "note": "Starting price is stated in the customer service description; final amount depends on hair and scope. Description publishes approximately 3-5 hours; the booking block is five hours."
            },
            "durationMinutes": 180,
            "durationMaxMinutes": 300,
            "sourceId": "square",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Hair Extensions Text for app k tip only !!! - Regular instalation 3$ per piece k tip",
            "category": "other",
            "description": "K-tip installation and maintenance; hair is not included in published unit rates.",
            "price": {
              "kind": "unknown",
              "amount": null,
              "amountMax": null,
              "currency": "USD",
              "note": "Unit rates only: installation starts at $3 per piece excluding hair; removal $1.50 per piece; rebonding $2 per piece excluding installation. Quantity and total are unknown."
            },
            "durationMinutes": 330,
            "durationMaxMinutes": null,
            "sourceId": "square",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Hair Extensions Text for app k tip only !!! - Extension removal service half price of instalation",
            "category": "other",
            "description": "K-tip installation and maintenance; hair is not included in published unit rates.",
            "price": {
              "kind": "unknown",
              "amount": null,
              "amountMax": null,
              "currency": "USD",
              "note": "Unit rates only: installation starts at $3 per piece excluding hair; removal $1.50 per piece; rebonding $2 per piece excluding installation. Quantity and total are unknown."
            },
            "durationMinutes": 150,
            "durationMaxMinutes": null,
            "sourceId": "square",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Hair Extensions Text for app k tip only !!! - Rebonding 2$ per piece not instaling included",
            "category": "other",
            "description": "K-tip installation and maintenance; hair is not included in published unit rates.",
            "price": {
              "kind": "unknown",
              "amount": null,
              "amountMax": null,
              "currency": "USD",
              "note": "Unit rates only: installation starts at $3 per piece excluding hair; removal $1.50 per piece; rebonding $2 per piece excluding installation. Quantity and total are unknown."
            },
            "durationMinutes": 210,
            "durationMaxMinutes": null,
            "sourceId": "square",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Consultation",
            "category": "other",
            "description": null,
            "price": {
              "kind": "fixed",
              "amount": 0,
              "amountMax": null,
              "currency": "USD",
              "note": "The public customer menu displays $0 for this consultation; this is not the price of a subsequent service."
            },
            "durationMinutes": 15,
            "durationMaxMinutes": null,
            "sourceId": "square",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Blow out starting",
            "category": "styling",
            "description": "Wash and blow-dry. Published extras apply for iron styling, extensions, and very thick/long hair.",
            "price": {
              "kind": "starting_at",
              "amount": 65,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option base price; final scope and charges require confirmation."
            },
            "durationMinutes": 40,
            "durationMaxMinutes": null,
            "sourceId": "square",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Blow out starting - Blowout + plus iron work",
            "category": "styling",
            "description": "Wash and blow-dry. Published extras apply for iron styling, extensions, and very thick/long hair.",
            "price": {
              "kind": "starting_at",
              "amount": 80,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option base price; final scope and charges require confirmation."
            },
            "durationMinutes": 55,
            "durationMaxMinutes": null,
            "sourceId": "square",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Coloring from roots till ends",
            "category": "color",
            "description": "Roots-to-ends color; hair length, density and desired color can change the price.",
            "price": {
              "kind": "starting_at",
              "amount": 200,
              "amountMax": null,
              "currency": "USD",
              "note": "Starting price is stated in the customer service description; final amount depends on hair and scope."
            },
            "durationMinutes": 110,
            "durationMaxMinutes": null,
            "sourceId": "square",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Partial highlights, air touch Balayage",
            "category": "color",
            "description": "Half-head highlighting; consultation and hair preparation instructions apply.",
            "price": {
              "kind": "starting_at",
              "amount": 350,
              "amountMax": null,
              "currency": "USD",
              "note": "Starting price is stated in the customer service description; final amount depends on hair and scope."
            },
            "durationMinutes": 270,
            "durationMaxMinutes": null,
            "sourceId": "square",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Oxo Organic keratin streightning. Text send hair picture for appointment",
            "category": "treatment",
            "description": "OXO smoothing service; consultation photos requested. Product safety or efficacy claims were not independently verified.",
            "price": {
              "kind": "starting_at",
              "amount": 400,
              "amountMax": null,
              "currency": "USD",
              "note": "Starting price is stated in the customer service description; final amount depends on hair and scope."
            },
            "durationMinutes": 240,
            "durationMaxMinutes": null,
            "sourceId": "square",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Air touch technique, bleaching plus coloring starting",
            "category": "color",
            "description": "Includes conditioning, custom color and blow-dry; consultation photos requested.",
            "price": {
              "kind": "starting_at",
              "amount": 400,
              "amountMax": null,
              "currency": "USD",
              "note": "Starting price is stated in the customer service description; final amount depends on hair and scope."
            },
            "durationMinutes": 360,
            "durationMaxMinutes": null,
            "sourceId": "square",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Make up services",
            "category": "other",
            "description": "Makeup by appointment; reference photos requested.",
            "price": {
              "kind": "fixed",
              "amount": 150,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option base price; final scope and charges require confirmation."
            },
            "durationMinutes": 90,
            "durationMaxMinutes": null,
            "sourceId": "square",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Scalp Detox Therapy Treatment Davines - Scalp Treatment Davines",
            "category": "treatment",
            "description": "Scalp assessment, cleansing and treatment; optional Darsonval variant. Medical outcome claims were not evaluated.",
            "price": {
              "kind": "fixed",
              "amount": 150,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option base price; final scope and charges require confirmation."
            },
            "durationMinutes": 60,
            "durationMaxMinutes": null,
            "sourceId": "square",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Scalp Detox Therapy Treatment Davines - Davines Scalp therapy plus Darsonval",
            "category": "treatment",
            "description": "Scalp assessment, cleansing and treatment; optional Darsonval variant. Medical outcome claims were not evaluated.",
            "price": {
              "kind": "fixed",
              "amount": 220,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option base price; final scope and charges require confirmation."
            },
            "durationMinutes": 90,
            "durationMaxMinutes": null,
            "sourceId": "square",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Darsonval Scalp Therapy",
            "category": "treatment",
            "description": "Published scalp treatment; efficacy claims were not evaluated.",
            "price": {
              "kind": "fixed",
              "amount": 70,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option base price; final scope and charges require confirmation."
            },
            "durationMinutes": 30,
            "durationMaxMinutes": null,
            "sourceId": "square",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Tape in Extension text before booking appointment",
            "category": "other",
            "description": "Hair purchase excluded; contact salon before booking.",
            "price": {
              "kind": "unknown",
              "amount": null,
              "amountMax": null,
              "currency": "USD",
              "note": "Installation $200 per pack of 20 pieces; re-installation $175 per pack. Hair excluded. Number of packs and final total are unknown."
            },
            "durationMinutes": 150,
            "durationMaxMinutes": null,
            "sourceId": "square",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Clear Gloss Treatment regular blow out",
            "category": "color",
            "description": "Clear gloss treatment without hair color; results depend on hair and chosen treatment.",
            "price": {
              "kind": "fixed",
              "amount": 120,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option base price; final scope and charges require confirmation."
            },
            "durationMinutes": 60,
            "durationMaxMinutes": null,
            "sourceId": "square",
            "priceSourceId": null,
            "durationSourceId": null
          }
        ],
        "addOnsStatus": "published",
        "addOns": [
          {
            "name": "Flat iron or curling iron styling",
            "category": "styling",
            "description": "Explicit additional charge on the blowout description; applicability must be confirmed.",
            "price": {
              "kind": "fixed",
              "amount": 15,
              "amountMax": null,
              "currency": "USD",
              "note": null
            },
            "durationMinutes": null,
            "durationMaxMinutes": null,
            "sourceId": "square",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Extensions surcharge for blowout",
            "category": "styling",
            "description": "Explicit additional charge on the blowout description; applicability must be confirmed.",
            "price": {
              "kind": "fixed",
              "amount": 15,
              "amountMax": null,
              "currency": "USD",
              "note": null
            },
            "durationMinutes": null,
            "durationMaxMinutes": null,
            "sourceId": "square",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Very thick and long hair surcharge for blowout",
            "category": "styling",
            "description": "Explicit additional charge on the blowout description; applicability must be confirmed.",
            "price": {
              "kind": "fixed",
              "amount": 15,
              "amountMax": null,
              "currency": "USD",
              "note": null
            },
            "durationMinutes": null,
            "durationMaxMinutes": null,
            "sourceId": "square",
            "priceSourceId": null,
            "durationSourceId": null
          }
        ],
        "stylistsStatus": "published",
        "stylists": [
          {
            "name": "George",
            "specialties": [
              "precision cuts",
              "color",
              "styling",
              "tape-in extensions"
            ],
            "bio": null,
            "bookingUrl": null,
            "portfolioUrl": null,
            "sourceId": "team"
          },
          {
            "name": "Ben",
            "specialties": [
              "haircuts",
              "color",
              "balayage",
              "highlights"
            ],
            "bio": "Also publicly presented as Benito.",
            "bookingUrl": null,
            "portfolioUrl": null,
            "sourceId": "team"
          }
        ],
        "policies": {
          "cancellation": {
            "value": "Haircuts require 24 hours notice; color and specialty services require 48 hours. Late cancellations incur a 50% service fee.",
            "sourceId": "policy"
          },
          "deposit": {
            "value": null,
            "sourceId": null
          },
          "noShow": {
            "value": "No-shows incur 100% of the service fee before rebooking.",
            "sourceId": "policy"
          },
          "lateArrival": {
            "value": "Arriving 15 or more minutes late without notice may be treated as a no-show and charged the full service fee.",
            "sourceId": "policy"
          },
          "consultation": {
            "value": "Color, smoothing and extension descriptions request hair photos and consultation before booking; final price may vary with hair and required work.",
            "sourceId": "square"
          },
          "payment": {
            "value": "Customer menu lists cash, credit cards, Venmo and Zelle. Cash is preferred; credit cards incur a published 3% transaction fee.",
            "sourceId": "square"
          },
          "walkIns": {
            "value": null,
            "sourceId": null
          }
        },
        "unknowns": [
          "No live appointment availability or booking confirmation was checked.",
          "Published prices are not a final total; applicable extra product, time, tax and gratuity must be confirmed.",
          "Independent providers manage their own pricing, scheduling and terms; the reviewed menu does not establish every provider’s full menu.",
          "Extension quantity, hair purchase price and final installation total are unknown.",
          "No deposit or walk-in terms were found.",
          "Ben’s individually linked Booksy menu could not be read from the public shell. The detailed Square menu covers the salon route labeled for George; it is not asserted to be Ben’s menu."
        ],
        "conflicts": [
          "Deep conditioning treatment & blow out: description starts at $100 for short hair while the visible option is $150. No single price is selected as current.",
          "The website identifies George while the customer booking staff label is Gurgen. No identity equivalence is assumed.",
          "Color concern window is three days in one part of the policy, while chemical-service concerns are limited to 24 hours elsewhere; confirm the applicable adjustment policy."
        ]
      }
    },
    {
      "slug": "headprint-studio-castro-castro-upper-market",
      "ref": "san-francisco/hair-salon/headprint-studio-castro-castro-upper-market",
      "name": "Headprint Studio Castro",
      "neighborhood": "Castro / Upper Market",
      "researched_at": "2026-10-24T09:38:45.386630+00:00",
      "coverage": {
        "services": 87,
        "services_with_prices": 83,
        "services_with_durations": 83,
        "add_ons": 1,
        "stylists": 7,
        "published_policies": 2,
        "policy_fields": 7,
        "successfully_read_sources": 6
      },
      "unknowns": [
        "No live appointment availability or booking confirmation was checked.",
        "Published prices are not a final total; applicable extra product, time, tax and gratuity must be confirmed.",
        "Cow Hollow-only staff and services were not imported into this Castro profile.",
        "A booking option’s stylist label is preserved as an option label, not an independently confirmed staff-service assignment.",
        "No deposit, no-show-specific, late-arrival, payment or walk-in terms were found.",
        "The website references extensions and special-event styling but the Castro booking menu does not establish their prices or appointment durations."
      ],
      "conflicts": [
        "Website FAQ says hourly rates are $50-$200; team page includes $250/hour and a different lower bound. No universal rate is assigned.",
        "Website team calls Bud a Cow Hollow stylist, while the Castro customer menu lists Bud options. Those options remain labeled as public menu entries, not confirmed current staffing or availability.",
        "Website pricing describes root-only color as one hour, FAQ describes a retouch as 90-120 minutes, and the Castro booking options specify 90-120 minutes. Service-specific booking blocks are retained.",
        "Grey Blending Color description says 30 minutes, but the James option is 45 minutes. The specific published option duration is retained."
      ],
      "url": "https://agentsalonsf.com/salons/headprint-studio-castro-castro-upper-market",
      "markdown_url": "https://agentsalonsf.com/salons/headprint-studio-castro-castro-upper-market.md",
      "api_url": "https://agentsalonsf.com/api/v1/salons/headprint-studio-castro-castro-upper-market",
      "public_research": {
        "salonSlug": "headprint-studio-castro-castro-upper-market",
        "researchedAt": "2026-10-24T09:38:45.386630+00:00",
        "summary": "Castro-specific public booking menu reviewed with all visible service options and durations. Website pricing is hourly and differs in staff/rate coverage; booking amounts are recorded without calculating a total from hourly rates. Color-correction consultation is kept distinct from the paid service.",
        "sources": [
          {
            "id": "home",
            "url": "https://www.headprintstudio.com/",
            "kind": "salon_website",
            "checkedAt": "2026-10-24T09:27:46.202401+00:00",
            "outcome": "read",
            "note": "Public page text reviewed."
          },
          {
            "id": "team",
            "url": "https://www.headprintstudio.com/team",
            "kind": "salon_website",
            "checkedAt": "2026-10-24T09:28:28.637815+00:00",
            "outcome": "read",
            "note": "Public page text reviewed."
          },
          {
            "id": "pricing",
            "url": "https://www.headprintstudio.com/pricing",
            "kind": "salon_website",
            "checkedAt": "2026-10-24T09:28:49.219901+00:00",
            "outcome": "read",
            "note": "Public page text reviewed."
          },
          {
            "id": "faq",
            "url": "https://www.headprintstudio.com/faqs",
            "kind": "salon_website",
            "checkedAt": "2026-10-24T09:28:49.220247+00:00",
            "outcome": "read",
            "note": "Public page text reviewed."
          },
          {
            "id": "visit",
            "url": "https://www.headprintstudio.com/plan-a-visit",
            "kind": "salon_website",
            "checkedAt": "2026-10-24T09:28:49.220356+00:00",
            "outcome": "read",
            "note": "Public page text reviewed."
          },
          {
            "id": "square",
            "url": "https://book.squareup.com/appointments/sggdattnqgnorv/location/L65T9MY5RFW4Z/services?buttonTextColor=ffffff&color=000000&locale=en&referrer=so&team_member_id=TMr9rZlSzqF68_YF",
            "kind": "booking_provider",
            "checkedAt": "2026-10-24T09:31:55.291211+00:00",
            "outcome": "read",
            "note": "Public customer menu and visible options read from page HTML."
          }
        ],
        "menuStatus": "published",
        "menu": [
          {
            "name": "A Haircut - with Teddy",
            "category": "haircut",
            "description": "Custom haircut, shampoo and scalp massage.",
            "price": {
              "kind": "fixed",
              "amount": 250,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option base price; final scope and charges require confirmation. The website says charging is hourly; confirm how booked time and any overrun affect the total."
            },
            "durationMinutes": 60,
            "durationMaxMinutes": null,
            "sourceId": "square",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "A Haircut - with Bud",
            "category": "haircut",
            "description": "Custom haircut, shampoo and scalp massage.",
            "price": {
              "kind": "fixed",
              "amount": 100,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option base price; final scope and charges require confirmation. The website says charging is hourly; confirm how booked time and any overrun affect the total."
            },
            "durationMinutes": 60,
            "durationMaxMinutes": null,
            "sourceId": "square",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "A Haircut - with Vivi",
            "category": "haircut",
            "description": "Custom haircut, shampoo and scalp massage.",
            "price": {
              "kind": "fixed",
              "amount": 110,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option base price; final scope and charges require confirmation. The website says charging is hourly; confirm how booked time and any overrun affect the total."
            },
            "durationMinutes": 75,
            "durationMaxMinutes": null,
            "sourceId": "square",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "A Haircut - with Deja",
            "category": "haircut",
            "description": "Custom haircut, shampoo and scalp massage.",
            "price": {
              "kind": "fixed",
              "amount": 100,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option base price; final scope and charges require confirmation. The website says charging is hourly; confirm how booked time and any overrun affect the total."
            },
            "durationMinutes": 60,
            "durationMaxMinutes": null,
            "sourceId": "square",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "A Haircut - with Sarah",
            "category": "haircut",
            "description": "Custom haircut, shampoo and scalp massage.",
            "price": {
              "kind": "fixed",
              "amount": 100,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option base price; final scope and charges require confirmation. The website says charging is hourly; confirm how booked time and any overrun affect the total."
            },
            "durationMinutes": 60,
            "durationMaxMinutes": null,
            "sourceId": "square",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "A Haircut - with Roy",
            "category": "haircut",
            "description": "Custom haircut, shampoo and scalp massage.",
            "price": {
              "kind": "fixed",
              "amount": 80,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option base price; final scope and charges require confirmation. The website says charging is hourly; confirm how booked time and any overrun affect the total."
            },
            "durationMinutes": 60,
            "durationMaxMinutes": null,
            "sourceId": "square",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "A Haircut - with James",
            "category": "haircut",
            "description": "Custom haircut, shampoo and scalp massage.",
            "price": {
              "kind": "fixed",
              "amount": 110,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option base price; final scope and charges require confirmation. The website says charging is hourly; confirm how booked time and any overrun affect the total."
            },
            "durationMinutes": 60,
            "durationMaxMinutes": null,
            "sourceId": "square",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "A Haircut - with Karli",
            "category": "haircut",
            "description": "Custom haircut, shampoo and scalp massage.",
            "price": {
              "kind": "fixed",
              "amount": 120,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option base price; final scope and charges require confirmation. The website says charging is hourly; confirm how booked time and any overrun affect the total."
            },
            "durationMinutes": 75,
            "durationMaxMinutes": null,
            "sourceId": "square",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "A Clipper Cut - with Teddy",
            "category": "haircut",
            "description": "Clipper cut with scissor finishing.",
            "price": {
              "kind": "fixed",
              "amount": 175,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option base price; final scope and charges require confirmation. The website says charging is hourly; confirm how booked time and any overrun affect the total."
            },
            "durationMinutes": 45,
            "durationMaxMinutes": null,
            "sourceId": "square",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "A Clipper Cut - with Roy",
            "category": "haircut",
            "description": "Clipper cut with scissor finishing.",
            "price": {
              "kind": "fixed",
              "amount": 60,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option base price; final scope and charges require confirmation. The website says charging is hourly; confirm how booked time and any overrun affect the total."
            },
            "durationMinutes": 45,
            "durationMaxMinutes": null,
            "sourceId": "square",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "A Clipper Cut - with Bud",
            "category": "haircut",
            "description": "Clipper cut with scissor finishing.",
            "price": {
              "kind": "fixed",
              "amount": 75,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option base price; final scope and charges require confirmation. The website says charging is hourly; confirm how booked time and any overrun affect the total."
            },
            "durationMinutes": 45,
            "durationMaxMinutes": null,
            "sourceId": "square",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "A Clipper Cut - with Deja",
            "category": "haircut",
            "description": "Clipper cut with scissor finishing.",
            "price": {
              "kind": "fixed",
              "amount": 80,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option base price; final scope and charges require confirmation. The website says charging is hourly; confirm how booked time and any overrun affect the total."
            },
            "durationMinutes": 45,
            "durationMaxMinutes": null,
            "sourceId": "square",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "A Clipper Cut - with Karli",
            "category": "haircut",
            "description": "Clipper cut with scissor finishing.",
            "price": {
              "kind": "fixed",
              "amount": 80,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option base price; final scope and charges require confirmation. The website says charging is hourly; confirm how booked time and any overrun affect the total."
            },
            "durationMinutes": 60,
            "durationMaxMinutes": null,
            "sourceId": "square",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Accent Color - with Bud",
            "category": "color",
            "description": "Face-framing color; a consultation is recommended if unsure.",
            "price": {
              "kind": "fixed",
              "amount": 200,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option base price; final scope and charges require confirmation. The website says charging is hourly; confirm how booked time and any overrun affect the total."
            },
            "durationMinutes": 120,
            "durationMaxMinutes": null,
            "sourceId": "square",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Accent Color - with James",
            "category": "color",
            "description": "Face-framing color; a consultation is recommended if unsure.",
            "price": {
              "kind": "fixed",
              "amount": 220,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option base price; final scope and charges require confirmation. The website says charging is hourly; confirm how booked time and any overrun affect the total."
            },
            "durationMinutes": 120,
            "durationMaxMinutes": null,
            "sourceId": "square",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Root Retouch - with Teddy",
            "category": "color",
            "description": "Root/gray color, not highlights; blow-dry included. Book toner separately to refresh ends.",
            "price": {
              "kind": "fixed",
              "amount": 375,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option base price; final scope and charges require confirmation. The website says charging is hourly; confirm how booked time and any overrun affect the total."
            },
            "durationMinutes": 90,
            "durationMaxMinutes": null,
            "sourceId": "square",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Root Retouch - with Bud",
            "category": "color",
            "description": "Root/gray color, not highlights; blow-dry included. Book toner separately to refresh ends.",
            "price": {
              "kind": "fixed",
              "amount": 200,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option base price; final scope and charges require confirmation. The website says charging is hourly; confirm how booked time and any overrun affect the total."
            },
            "durationMinutes": 120,
            "durationMaxMinutes": null,
            "sourceId": "square",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Root Retouch - with James",
            "category": "color",
            "description": "Root/gray color, not highlights; blow-dry included. Book toner separately to refresh ends.",
            "price": {
              "kind": "fixed",
              "amount": 240,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option base price; final scope and charges require confirmation. The website says charging is hourly; confirm how booked time and any overrun affect the total."
            },
            "durationMinutes": 120,
            "durationMaxMinutes": null,
            "sourceId": "square",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Root Retouch - with Karli",
            "category": "color",
            "description": "Root/gray color, not highlights; blow-dry included. Book toner separately to refresh ends.",
            "price": {
              "kind": "fixed",
              "amount": 180,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option base price; final scope and charges require confirmation. The website says charging is hourly; confirm how booked time and any overrun affect the total."
            },
            "durationMinutes": 90,
            "durationMaxMinutes": null,
            "sourceId": "square",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Partial Hi-Light/Balayage - with Teddy",
            "category": "color",
            "description": "Partial-head foils or hair painting; blow-dry included.",
            "price": {
              "kind": "fixed",
              "amount": 625,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option base price; final scope and charges require confirmation. The website says charging is hourly; confirm how booked time and any overrun affect the total."
            },
            "durationMinutes": 150,
            "durationMaxMinutes": null,
            "sourceId": "square",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Partial Hi-Light/Balayage - with Bud",
            "category": "color",
            "description": "Partial-head foils or hair painting; blow-dry included.",
            "price": {
              "kind": "fixed",
              "amount": 350,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option base price; final scope and charges require confirmation. The website says charging is hourly; confirm how booked time and any overrun affect the total."
            },
            "durationMinutes": 210,
            "durationMaxMinutes": null,
            "sourceId": "square",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Partial Hi-Light/Balayage - with James",
            "category": "color",
            "description": "Partial-head foils or hair painting; blow-dry included.",
            "price": {
              "kind": "fixed",
              "amount": 385,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option base price; final scope and charges require confirmation. The website says charging is hourly; confirm how booked time and any overrun affect the total."
            },
            "durationMinutes": 210,
            "durationMaxMinutes": null,
            "sourceId": "square",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Full Hi-Light/Balayage - with Teddy",
            "category": "color",
            "description": "Full-head custom color placement.",
            "price": {
              "kind": "fixed",
              "amount": 875,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option base price; final scope and charges require confirmation. The website says charging is hourly; confirm how booked time and any overrun affect the total."
            },
            "durationMinutes": 210,
            "durationMaxMinutes": null,
            "sourceId": "square",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Full Hi-Light/Balayage - with James",
            "category": "color",
            "description": "Full-head custom color placement.",
            "price": {
              "kind": "fixed",
              "amount": 495,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option base price; final scope and charges require confirmation. The website says charging is hourly; confirm how booked time and any overrun affect the total."
            },
            "durationMinutes": 270,
            "durationMaxMinutes": null,
            "sourceId": "square",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Bleach/Tone Touch-Up - with James",
            "category": "color",
            "description": "Root bleach-and-tone touch-up; first-time clients need consultation.",
            "price": {
              "kind": "fixed",
              "amount": 300,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option base price; final scope and charges require confirmation. The website says charging is hourly; confirm how booked time and any overrun affect the total."
            },
            "durationMinutes": 180,
            "durationMaxMinutes": null,
            "sourceId": "square",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Color Correction (consultation required first) - with James",
            "category": "other",
            "description": "The displayed 15-minute, $0 option is a required consultation. Actual correction is hourly and its total price and duration are unknown.",
            "price": {
              "kind": "consultation",
              "amount": null,
              "amountMax": null,
              "currency": "USD",
              "note": "Free 15-minute consultation is displayed; the actual color correction is priced hourly with unknown total."
            },
            "durationMinutes": null,
            "durationMaxMinutes": null,
            "sourceId": "square",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "A Blowdry - with Deja",
            "category": "styling",
            "description": "Shampoo, scalp massage and styling.",
            "price": {
              "kind": "fixed",
              "amount": 75,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option base price; final scope and charges require confirmation. The website says charging is hourly; confirm how booked time and any overrun affect the total."
            },
            "durationMinutes": 45,
            "durationMaxMinutes": null,
            "sourceId": "square",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "A Blowdry - with Bud",
            "category": "styling",
            "description": "Shampoo, scalp massage and styling.",
            "price": {
              "kind": "fixed",
              "amount": 100,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option base price; final scope and charges require confirmation. The website says charging is hourly; confirm how booked time and any overrun affect the total."
            },
            "durationMinutes": 60,
            "durationMaxMinutes": null,
            "sourceId": "square",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "A Blowdry - with Sarah",
            "category": "styling",
            "description": "Shampoo, scalp massage and styling.",
            "price": {
              "kind": "fixed",
              "amount": 75,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option base price; final scope and charges require confirmation. The website says charging is hourly; confirm how booked time and any overrun affect the total."
            },
            "durationMinutes": 45,
            "durationMaxMinutes": null,
            "sourceId": "square",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "A Blowdry - with Roy",
            "category": "styling",
            "description": "Shampoo, scalp massage and styling.",
            "price": {
              "kind": "fixed",
              "amount": 80,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option base price; final scope and charges require confirmation. The website says charging is hourly; confirm how booked time and any overrun affect the total."
            },
            "durationMinutes": 60,
            "durationMaxMinutes": null,
            "sourceId": "square",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "A Blowdry - with James",
            "category": "styling",
            "description": "Shampoo, scalp massage and styling.",
            "price": {
              "kind": "fixed",
              "amount": 80,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option base price; final scope and charges require confirmation. The website says charging is hourly; confirm how booked time and any overrun affect the total."
            },
            "durationMinutes": 45,
            "durationMaxMinutes": null,
            "sourceId": "square",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "A Blowdry - with Karli",
            "category": "styling",
            "description": "Shampoo, scalp massage and styling.",
            "price": {
              "kind": "fixed",
              "amount": 80,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option base price; final scope and charges require confirmation. The website says charging is hourly; confirm how booked time and any overrun affect the total."
            },
            "durationMinutes": 45,
            "durationMaxMinutes": null,
            "sourceId": "square",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Root Retouch&Cut - with Teddy",
            "category": "color",
            "description": "Root color, haircut and blow-dry; toner for ends is additional.",
            "price": {
              "kind": "fixed",
              "amount": 500,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option base price; final scope and charges require confirmation. The website says charging is hourly; confirm how booked time and any overrun affect the total."
            },
            "durationMinutes": 120,
            "durationMaxMinutes": null,
            "sourceId": "square",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Root Retouch&Cut - with Bud",
            "category": "color",
            "description": "Root color, haircut and blow-dry; toner for ends is additional.",
            "price": {
              "kind": "fixed",
              "amount": 250,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option base price; final scope and charges require confirmation. The website says charging is hourly; confirm how booked time and any overrun affect the total."
            },
            "durationMinutes": 150,
            "durationMaxMinutes": null,
            "sourceId": "square",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Root Retouch&Cut - with James",
            "category": "color",
            "description": "Root color, haircut and blow-dry; toner for ends is additional.",
            "price": {
              "kind": "fixed",
              "amount": 275,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option base price; final scope and charges require confirmation. The website says charging is hourly; confirm how booked time and any overrun affect the total."
            },
            "durationMinutes": 150,
            "durationMaxMinutes": null,
            "sourceId": "square",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Root Retouch&Cut - with Karli",
            "category": "color",
            "description": "Root color, haircut and blow-dry; toner for ends is additional.",
            "price": {
              "kind": "fixed",
              "amount": 275,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option base price; final scope and charges require confirmation. The website says charging is hourly; confirm how booked time and any overrun affect the total."
            },
            "durationMinutes": 150,
            "durationMaxMinutes": null,
            "sourceId": "square",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Full Hi-Light&Cut - with Teddy",
            "category": "color",
            "description": "Full-head custom color with haircut.",
            "price": {
              "kind": "fixed",
              "amount": 1000,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option base price; final scope and charges require confirmation. The website says charging is hourly; confirm how booked time and any overrun affect the total."
            },
            "durationMinutes": 240,
            "durationMaxMinutes": null,
            "sourceId": "square",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Full Hi-Light&Cut - with Bud",
            "category": "color",
            "description": "Full-head custom color with haircut.",
            "price": {
              "kind": "fixed",
              "amount": 500,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option base price; final scope and charges require confirmation. The website says charging is hourly; confirm how booked time and any overrun affect the total."
            },
            "durationMinutes": 300,
            "durationMaxMinutes": null,
            "sourceId": "square",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Full Hi-Light&Cut - with James",
            "category": "color",
            "description": "Full-head custom color with haircut.",
            "price": {
              "kind": "fixed",
              "amount": 605,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option base price; final scope and charges require confirmation. The website says charging is hourly; confirm how booked time and any overrun affect the total."
            },
            "durationMinutes": 330,
            "durationMaxMinutes": null,
            "sourceId": "square",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Partial Hi-Light&Cut - with Teddy",
            "category": "color",
            "description": "Partial-head custom color with haircut.",
            "price": {
              "kind": "fixed",
              "amount": 750,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option base price; final scope and charges require confirmation. The website says charging is hourly; confirm how booked time and any overrun affect the total."
            },
            "durationMinutes": 180,
            "durationMaxMinutes": null,
            "sourceId": "square",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Partial Hi-Light&Cut - with Bud",
            "category": "color",
            "description": "Partial-head custom color with haircut.",
            "price": {
              "kind": "fixed",
              "amount": 450,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option base price; final scope and charges require confirmation. The website says charging is hourly; confirm how booked time and any overrun affect the total."
            },
            "durationMinutes": 270,
            "durationMaxMinutes": null,
            "sourceId": "square",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Partial Hi-Light&Cut - with James",
            "category": "color",
            "description": "Partial-head custom color with haircut.",
            "price": {
              "kind": "fixed",
              "amount": 495,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option base price; final scope and charges require confirmation. The website says charging is hourly; confirm how booked time and any overrun affect the total."
            },
            "durationMinutes": 270,
            "durationMaxMinutes": null,
            "sourceId": "square",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "A Bang Trim/Clean Up - with Bud",
            "category": "haircut",
            "description": "Neckline or fringe trim, not a full haircut.",
            "price": {
              "kind": "fixed",
              "amount": 25,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option base price; final scope and charges require confirmation. The website says charging is hourly; confirm how booked time and any overrun affect the total."
            },
            "durationMinutes": 15,
            "durationMaxMinutes": null,
            "sourceId": "square",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "A Bang Trim/Clean Up - with Sarah",
            "category": "haircut",
            "description": "Neckline or fringe trim, not a full haircut.",
            "price": {
              "kind": "fixed",
              "amount": 25,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option base price; final scope and charges require confirmation. The website says charging is hourly; confirm how booked time and any overrun affect the total."
            },
            "durationMinutes": 15,
            "durationMaxMinutes": null,
            "sourceId": "square",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "A Bang Trim/Clean Up - with Deja",
            "category": "haircut",
            "description": "Neckline or fringe trim, not a full haircut.",
            "price": {
              "kind": "fixed",
              "amount": 25,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option base price; final scope and charges require confirmation. The website says charging is hourly; confirm how booked time and any overrun affect the total."
            },
            "durationMinutes": 15,
            "durationMaxMinutes": null,
            "sourceId": "square",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "A Bang Trim/Clean Up - with Vivi",
            "category": "haircut",
            "description": "Neckline or fringe trim, not a full haircut.",
            "price": {
              "kind": "fixed",
              "amount": 25,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option base price; final scope and charges require confirmation. The website says charging is hourly; confirm how booked time and any overrun affect the total."
            },
            "durationMinutes": 15,
            "durationMaxMinutes": null,
            "sourceId": "square",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "A Bang Trim/Clean Up - with Roy",
            "category": "haircut",
            "description": "Neckline or fringe trim, not a full haircut.",
            "price": {
              "kind": "fixed",
              "amount": 20,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option base price; final scope and charges require confirmation. The website says charging is hourly; confirm how booked time and any overrun affect the total."
            },
            "durationMinutes": 15,
            "durationMaxMinutes": null,
            "sourceId": "square",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "A Bang Trim/Clean Up - with James",
            "category": "haircut",
            "description": "Neckline or fringe trim, not a full haircut.",
            "price": {
              "kind": "fixed",
              "amount": 27,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option base price; final scope and charges require confirmation. The website says charging is hourly; confirm how booked time and any overrun affect the total."
            },
            "durationMinutes": 15,
            "durationMaxMinutes": null,
            "sourceId": "square",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "A Bang Trim/Clean Up - with Karli",
            "category": "haircut",
            "description": "Neckline or fringe trim, not a full haircut.",
            "price": {
              "kind": "fixed",
              "amount": 30,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option base price; final scope and charges require confirmation. The website says charging is hourly; confirm how booked time and any overrun affect the total."
            },
            "durationMinutes": 15,
            "durationMaxMinutes": null,
            "sourceId": "square",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Transformational HairCut - with Bud",
            "category": "haircut",
            "description": "For cutting five or more inches or going long-to-short; blow-dry included.",
            "price": {
              "kind": "fixed",
              "amount": 200,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option base price; final scope and charges require confirmation. The website says charging is hourly; confirm how booked time and any overrun affect the total."
            },
            "durationMinutes": 120,
            "durationMaxMinutes": null,
            "sourceId": "square",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Transformational HairCut - with Vivi",
            "category": "haircut",
            "description": "For cutting five or more inches or going long-to-short; blow-dry included.",
            "price": {
              "kind": "fixed",
              "amount": 165,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option base price; final scope and charges require confirmation. The website says charging is hourly; confirm how booked time and any overrun affect the total."
            },
            "durationMinutes": 105,
            "durationMaxMinutes": null,
            "sourceId": "square",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Transformational HairCut - with Sarah",
            "category": "haircut",
            "description": "For cutting five or more inches or going long-to-short; blow-dry included.",
            "price": {
              "kind": "fixed",
              "amount": 200,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option base price; final scope and charges require confirmation. The website says charging is hourly; confirm how booked time and any overrun affect the total."
            },
            "durationMinutes": 120,
            "durationMaxMinutes": null,
            "sourceId": "square",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Transformational HairCut - with Deja",
            "category": "haircut",
            "description": "For cutting five or more inches or going long-to-short; blow-dry included.",
            "price": {
              "kind": "fixed",
              "amount": 150,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option base price; final scope and charges require confirmation. The website says charging is hourly; confirm how booked time and any overrun affect the total."
            },
            "durationMinutes": 90,
            "durationMaxMinutes": null,
            "sourceId": "square",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Transformational HairCut - with James",
            "category": "haircut",
            "description": "For cutting five or more inches or going long-to-short; blow-dry included.",
            "price": {
              "kind": "fixed",
              "amount": 155,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option base price; final scope and charges require confirmation. The website says charging is hourly; confirm how booked time and any overrun affect the total."
            },
            "durationMinutes": 90,
            "durationMaxMinutes": null,
            "sourceId": "square",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Transformational HairCut - with Roy",
            "category": "haircut",
            "description": "For cutting five or more inches or going long-to-short; blow-dry included.",
            "price": {
              "kind": "fixed",
              "amount": 120,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option base price; final scope and charges require confirmation. The website says charging is hourly; confirm how booked time and any overrun affect the total."
            },
            "durationMinutes": 90,
            "durationMaxMinutes": null,
            "sourceId": "square",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Transformational HairCut - with Karli",
            "category": "haircut",
            "description": "For cutting five or more inches or going long-to-short; blow-dry included.",
            "price": {
              "kind": "fixed",
              "amount": 180,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option base price; final scope and charges require confirmation. The website says charging is hourly; confirm how booked time and any overrun affect the total."
            },
            "durationMinutes": 90,
            "durationMaxMinutes": null,
            "sourceId": "square",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "A Refresh (return guests only) - with Roy",
            "category": "other",
            "description": "Returning clients only; short adjustment without shampoo or blow-dry. Long hair not advised.",
            "price": {
              "kind": "fixed",
              "amount": 45,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option base price; final scope and charges require confirmation. The website says charging is hourly; confirm how booked time and any overrun affect the total."
            },
            "durationMinutes": 30,
            "durationMaxMinutes": null,
            "sourceId": "square",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "A Refresh (return guests only) - with Deja",
            "category": "other",
            "description": "Returning clients only; short adjustment without shampoo or blow-dry. Long hair not advised.",
            "price": {
              "kind": "fixed",
              "amount": 50,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option base price; final scope and charges require confirmation. The website says charging is hourly; confirm how booked time and any overrun affect the total."
            },
            "durationMinutes": 30,
            "durationMaxMinutes": null,
            "sourceId": "square",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Toner - with Bud",
            "category": "color",
            "description": "Toner appointment with blowout.",
            "price": {
              "kind": "fixed",
              "amount": 150,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option base price; final scope and charges require confirmation. The website says charging is hourly; confirm how booked time and any overrun affect the total."
            },
            "durationMinutes": 90,
            "durationMaxMinutes": null,
            "sourceId": "square",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Toner - with James",
            "category": "color",
            "description": "Toner appointment with blowout.",
            "price": {
              "kind": "fixed",
              "amount": 110,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option base price; final scope and charges require confirmation. The website says charging is hourly; confirm how booked time and any overrun affect the total."
            },
            "durationMinutes": 60,
            "durationMaxMinutes": null,
            "sourceId": "square",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Toner - with Karli",
            "category": "color",
            "description": "Toner appointment with blowout.",
            "price": {
              "kind": "fixed",
              "amount": 120,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option base price; final scope and charges require confirmation. The website says charging is hourly; confirm how booked time and any overrun affect the total."
            },
            "durationMinutes": 60,
            "durationMaxMinutes": null,
            "sourceId": "square",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Root Retouch and Toner - with Bud",
            "category": "color",
            "description": "Root color and toner with shampoo, conditioning and blow-dry.",
            "price": {
              "kind": "fixed",
              "amount": 200,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option base price; final scope and charges require confirmation. The website says charging is hourly; confirm how booked time and any overrun affect the total."
            },
            "durationMinutes": 120,
            "durationMaxMinutes": null,
            "sourceId": "square",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Root Retouch and Toner - with Teddy",
            "category": "color",
            "description": "Root color and toner with shampoo, conditioning and blow-dry.",
            "price": {
              "kind": "fixed",
              "amount": 500,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option base price; final scope and charges require confirmation. The website says charging is hourly; confirm how booked time and any overrun affect the total."
            },
            "durationMinutes": 120,
            "durationMaxMinutes": null,
            "sourceId": "square",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Root Retouch and Toner - with James",
            "category": "color",
            "description": "Root color and toner with shampoo, conditioning and blow-dry.",
            "price": {
              "kind": "fixed",
              "amount": 210,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option base price; final scope and charges require confirmation. The website says charging is hourly; confirm how booked time and any overrun affect the total."
            },
            "durationMinutes": 120,
            "durationMaxMinutes": null,
            "sourceId": "square",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Root Retouch and Toner - with Karli",
            "category": "color",
            "description": "Root color and toner with shampoo, conditioning and blow-dry.",
            "price": {
              "kind": "fixed",
              "amount": 240,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option base price; final scope and charges require confirmation. The website says charging is hourly; confirm how booked time and any overrun affect the total."
            },
            "durationMinutes": 120,
            "durationMaxMinutes": null,
            "sourceId": "square",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Grey Blending Color (short clipper hair) - with Bud",
            "category": "color",
            "description": "Gray blending for short clipper hair; shampoo and styling included.",
            "price": {
              "kind": "fixed",
              "amount": 50,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option base price; final scope and charges require confirmation. The website says charging is hourly; confirm how booked time and any overrun affect the total."
            },
            "durationMinutes": 30,
            "durationMaxMinutes": null,
            "sourceId": "square",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Grey Blending Color (short clipper hair) - with Roy",
            "category": "color",
            "description": "Gray blending for short clipper hair; shampoo and styling included.",
            "price": {
              "kind": "fixed",
              "amount": 50,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option base price; final scope and charges require confirmation. The website says charging is hourly; confirm how booked time and any overrun affect the total."
            },
            "durationMinutes": 30,
            "durationMaxMinutes": null,
            "sourceId": "square",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Grey Blending Color (short clipper hair) - with James",
            "category": "color",
            "description": "Gray blending for short clipper hair; shampoo and styling included.",
            "price": {
              "kind": "fixed",
              "amount": 80,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option base price; final scope and charges require confirmation. The website says charging is hourly; confirm how booked time and any overrun affect the total."
            },
            "durationMinutes": 45,
            "durationMaxMinutes": null,
            "sourceId": "square",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "2 hour color service (return client only) with Deja",
            "category": "color",
            "description": "Explicit fixed-length appointment option for returning clients of the named stylist; not a quoted result or availability guarantee.",
            "price": {
              "kind": "fixed",
              "amount": 200,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option base price; final scope and charges require confirmation. The website says charging is hourly; confirm how booked time and any overrun affect the total."
            },
            "durationMinutes": 120,
            "durationMaxMinutes": null,
            "sourceId": "square",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "3 hour color service (return client only) with Deja",
            "category": "color",
            "description": "Explicit fixed-length appointment option for returning clients of the named stylist; not a quoted result or availability guarantee.",
            "price": {
              "kind": "fixed",
              "amount": 300,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option base price; final scope and charges require confirmation. The website says charging is hourly; confirm how booked time and any overrun affect the total."
            },
            "durationMinutes": 180,
            "durationMaxMinutes": null,
            "sourceId": "square",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "4 hour color service (return client only) with Deja",
            "category": "color",
            "description": "Explicit fixed-length appointment option for returning clients of the named stylist; not a quoted result or availability guarantee.",
            "price": {
              "kind": "fixed",
              "amount": 400,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option base price; final scope and charges require confirmation. The website says charging is hourly; confirm how booked time and any overrun affect the total."
            },
            "durationMinutes": 240,
            "durationMaxMinutes": null,
            "sourceId": "square",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "2 hour color service (returning client only) with Roy",
            "category": "color",
            "description": "Explicit fixed-length appointment option for returning clients of the named stylist; not a quoted result or availability guarantee.",
            "price": {
              "kind": "fixed",
              "amount": 160,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option base price; final scope and charges require confirmation. The website says charging is hourly; confirm how booked time and any overrun affect the total."
            },
            "durationMinutes": 120,
            "durationMaxMinutes": null,
            "sourceId": "square",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "3 hour color service (returning client only) with Roy",
            "category": "color",
            "description": "Explicit fixed-length appointment option for returning clients of the named stylist; not a quoted result or availability guarantee.",
            "price": {
              "kind": "fixed",
              "amount": 240,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option base price; final scope and charges require confirmation. The website says charging is hourly; confirm how booked time and any overrun affect the total."
            },
            "durationMinutes": 180,
            "durationMaxMinutes": null,
            "sourceId": "square",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "4 hour color service (returning client only) with Roy",
            "category": "color",
            "description": "Explicit fixed-length appointment option for returning clients of the named stylist; not a quoted result or availability guarantee.",
            "price": {
              "kind": "fixed",
              "amount": 320,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option base price; final scope and charges require confirmation. The website says charging is hourly; confirm how booked time and any overrun affect the total."
            },
            "durationMinutes": 240,
            "durationMaxMinutes": null,
            "sourceId": "square",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "2 hour color service (return client only) with Karli",
            "category": "color",
            "description": "Explicit fixed-length appointment option for returning clients of the named stylist; not a quoted result or availability guarantee.",
            "price": {
              "kind": "fixed",
              "amount": 240,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option base price; final scope and charges require confirmation. The website says charging is hourly; confirm how booked time and any overrun affect the total."
            },
            "durationMinutes": 120,
            "durationMaxMinutes": null,
            "sourceId": "square",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "3 hour color service (return client only) with Karli",
            "category": "color",
            "description": "Explicit fixed-length appointment option for returning clients of the named stylist; not a quoted result or availability guarantee.",
            "price": {
              "kind": "fixed",
              "amount": 360,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option base price; final scope and charges require confirmation. The website says charging is hourly; confirm how booked time and any overrun affect the total."
            },
            "durationMinutes": 180,
            "durationMaxMinutes": null,
            "sourceId": "square",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "4 hour color service (return client only) with Karli",
            "category": "color",
            "description": "Explicit fixed-length appointment option for returning clients of the named stylist; not a quoted result or availability guarantee.",
            "price": {
              "kind": "fixed",
              "amount": 480,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option base price; final scope and charges require confirmation. The website says charging is hourly; confirm how booked time and any overrun affect the total."
            },
            "durationMinutes": 240,
            "durationMaxMinutes": null,
            "sourceId": "square",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Clipper cut + neck shave",
            "category": "haircut",
            "description": "Includes beard trim, neck shave, hot towel and facial treatment.",
            "price": {
              "kind": "fixed",
              "amount": 110,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option base price; final scope and charges require confirmation. The website says charging is hourly; confirm how booked time and any overrun affect the total."
            },
            "durationMinutes": 75,
            "durationMaxMinutes": null,
            "sourceId": "square",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Beard-trim and Neck Shave",
            "category": "beard",
            "description": null,
            "price": {
              "kind": "fixed",
              "amount": 40,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option base price; final scope and charges require confirmation. The website says charging is hourly; confirm how booked time and any overrun affect the total."
            },
            "durationMinutes": 30,
            "durationMaxMinutes": null,
            "sourceId": "square",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Consult for Color - with Bud",
            "category": "other",
            "description": "Complimentary consultation before deciding on the service.",
            "price": {
              "kind": "fixed",
              "amount": 0,
              "amountMax": null,
              "currency": "USD",
              "note": "The public customer menu displays $0 for this consultation; this is not the price of a subsequent service."
            },
            "durationMinutes": 15,
            "durationMaxMinutes": null,
            "sourceId": "square",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Consult for Color - with Roy",
            "category": "other",
            "description": "Complimentary consultation before deciding on the service.",
            "price": {
              "kind": "fixed",
              "amount": 0,
              "amountMax": null,
              "currency": "USD",
              "note": "The public customer menu displays $0 for this consultation; this is not the price of a subsequent service."
            },
            "durationMinutes": 15,
            "durationMaxMinutes": null,
            "sourceId": "square",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Consult for Color - with James",
            "category": "other",
            "description": "Complimentary consultation before deciding on the service.",
            "price": {
              "kind": "fixed",
              "amount": 0,
              "amountMax": null,
              "currency": "USD",
              "note": "The public customer menu displays $0 for this consultation; this is not the price of a subsequent service."
            },
            "durationMinutes": 15,
            "durationMaxMinutes": null,
            "sourceId": "square",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Consult for Color - with Deja",
            "category": "other",
            "description": "Complimentary consultation before deciding on the service.",
            "price": {
              "kind": "fixed",
              "amount": 0,
              "amountMax": null,
              "currency": "USD",
              "note": "The public customer menu displays $0 for this consultation; this is not the price of a subsequent service."
            },
            "durationMinutes": 15,
            "durationMaxMinutes": null,
            "sourceId": "square",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Consult for Color - with Karli",
            "category": "other",
            "description": "Complimentary consultation before deciding on the service.",
            "price": {
              "kind": "fixed",
              "amount": 0,
              "amountMax": null,
              "currency": "USD",
              "note": "The public customer menu displays $0 for this consultation; this is not the price of a subsequent service."
            },
            "durationMinutes": 15,
            "durationMaxMinutes": null,
            "sourceId": "square",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Extensions consultation",
            "category": "other",
            "description": "Company-wide FAQ requires consultation for extensions; Castro-specific service offering, price and duration need confirmation.",
            "price": {
              "kind": "consultation",
              "amount": null,
              "amountMax": null,
              "currency": "USD",
              "note": null
            },
            "durationMinutes": null,
            "durationMaxMinutes": null,
            "sourceId": "faq",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Fashion Colors Vibrant colors",
            "category": "color",
            "description": "Company-wide FAQ requests consultation; returning clients should ask their stylist for the hourly price.",
            "price": {
              "kind": "consultation",
              "amount": null,
              "amountMax": null,
              "currency": "USD",
              "note": null
            },
            "durationMinutes": null,
            "durationMaxMinutes": null,
            "sourceId": "faq",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Special Events Stylings",
            "category": "styling",
            "description": "Company-wide FAQ offers private/group styling, excluding weddings. Confirm Castro location, scope and price.",
            "price": {
              "kind": "unknown",
              "amount": null,
              "amountMax": null,
              "currency": "USD",
              "note": null
            },
            "durationMinutes": null,
            "durationMaxMinutes": null,
            "sourceId": "faq",
            "priceSourceId": null,
            "durationSourceId": null
          }
        ],
        "addOnsStatus": "published",
        "addOns": [
          {
            "name": "Accent Your Color",
            "category": "color",
            "description": "Company-wide FAQ calls this an add-on to a custom color retouch. Castro-specific price and applicability require confirmation.",
            "price": {
              "kind": "unknown",
              "amount": null,
              "amountMax": null,
              "currency": "USD",
              "note": null
            },
            "durationMinutes": 120,
            "durationMaxMinutes": null,
            "sourceId": "faq",
            "priceSourceId": null,
            "durationSourceId": null
          }
        ],
        "stylistsStatus": "published",
        "stylists": [
          {
            "name": "Deja",
            "specialties": [
              "creative cuts",
              "blowouts",
              "vivid color"
            ],
            "bio": null,
            "bookingUrl": null,
            "portfolioUrl": null,
            "sourceId": "team"
          },
          {
            "name": "Sarah",
            "specialties": [
              "creative cuts",
              "bangs",
              "natural styling"
            ],
            "bio": null,
            "bookingUrl": null,
            "portfolioUrl": null,
            "sourceId": "team"
          },
          {
            "name": "Vivi",
            "specialties": [
              "precision bobs",
              "layering",
              "alternative cuts"
            ],
            "bio": null,
            "bookingUrl": null,
            "portfolioUrl": null,
            "sourceId": "team"
          },
          {
            "name": "Roy",
            "specialties": [
              "long haircuts",
              "barber cuts",
              "color",
              "scalp treatments"
            ],
            "bio": null,
            "bookingUrl": null,
            "portfolioUrl": null,
            "sourceId": "team"
          },
          {
            "name": "Teddy",
            "specialties": [],
            "bio": "Owner; team page lists Castro and Cow Hollow.",
            "bookingUrl": null,
            "portfolioUrl": null,
            "sourceId": "team"
          },
          {
            "name": "James",
            "specialties": [
              "custom color",
              "haircuts"
            ],
            "bio": null,
            "bookingUrl": null,
            "portfolioUrl": null,
            "sourceId": "team"
          },
          {
            "name": "Karli",
            "specialties": [
              "cuts",
              "vivid color",
              "all textures"
            ],
            "bio": null,
            "bookingUrl": null,
            "portfolioUrl": null,
            "sourceId": "team"
          }
        ],
        "policies": {
          "cancellation": {
            "value": "Website FAQ refers to a 24-hour cancellation policy and 50% service charge. Square says failure to receive cancellation incurs 50% but omits the cutoff; confirm the exact applicable deadline.",
            "sourceId": "faq"
          },
          "deposit": {
            "value": null,
            "sourceId": null
          },
          "noShow": {
            "value": null,
            "sourceId": null
          },
          "lateArrival": {
            "value": null,
            "sourceId": null
          },
          "consultation": {
            "value": "Complimentary consultations are offered; color correction requires consultation, and new bleach-and-tone clients must consult first.",
            "sourceId": "square"
          },
          "payment": {
            "value": null,
            "sourceId": null
          },
          "walkIns": {
            "value": null,
            "sourceId": null
          }
        },
        "unknowns": [
          "No live appointment availability or booking confirmation was checked.",
          "Published prices are not a final total; applicable extra product, time, tax and gratuity must be confirmed.",
          "Cow Hollow-only staff and services were not imported into this Castro profile.",
          "A booking option’s stylist label is preserved as an option label, not an independently confirmed staff-service assignment.",
          "No deposit, no-show-specific, late-arrival, payment or walk-in terms were found.",
          "The website references extensions and special-event styling but the Castro booking menu does not establish their prices or appointment durations."
        ],
        "conflicts": [
          "Website FAQ says hourly rates are $50-$200; team page includes $250/hour and a different lower bound. No universal rate is assigned.",
          "Website team calls Bud a Cow Hollow stylist, while the Castro customer menu lists Bud options. Those options remain labeled as public menu entries, not confirmed current staffing or availability.",
          "Website pricing describes root-only color as one hour, FAQ describes a retouch as 90-120 minutes, and the Castro booking options specify 90-120 minutes. Service-specific booking blocks are retained.",
          "Grey Blending Color description says 30 minutes, but the James option is 45 minutes. The specific published option duration is retained."
        ]
      }
    },
    {
      "slug": "hook-and-scissor-financial-district-south-beach",
      "ref": "san-francisco/hair-salon/hook-and-scissor-financial-district-south-beach",
      "name": "Hook & Scissor",
      "neighborhood": "Financial District / South Beach",
      "researched_at": "2026-10-24T09:34:11Z",
      "coverage": {
        "services": 19,
        "services_with_prices": 19,
        "services_with_durations": 19,
        "add_ons": 2,
        "stylists": 1,
        "published_policies": 1,
        "policy_fields": 7,
        "successfully_read_sources": 2
      },
      "unknowns": [
        "Exact final total, including applicable extras, tax and gratuity, is not established by a published base price.",
        "Appointment availability was not checked.",
        "No usable public terms established for: cancellation, deposit, noShow, lateArrival, payment, walkIns."
      ],
      "conflicts": [],
      "url": "https://agentsalonsf.com/salons/hook-and-scissor-financial-district-south-beach",
      "markdown_url": "https://agentsalonsf.com/salons/hook-and-scissor-financial-district-south-beach.md",
      "api_url": "https://agentsalonsf.com/api/v1/salons/hook-and-scissor-financial-district-south-beach",
      "public_research": {
        "salonSlug": "hook-and-scissor-financial-district-south-beach",
        "researchedAt": "2026-10-24T09:34:11Z",
        "summary": "Full readable public booking menu: nineteen primary services and a priced Olaplex add-on. Thermal styling is mentioned as extra without a price.",
        "sources": [
          {
            "id": "website",
            "url": "https://hookandscissor.com/",
            "kind": "salon_website",
            "checkedAt": "2026-10-24T09:34:11Z",
            "outcome": "read",
            "note": "Public page read for services, team or stated policies."
          },
          {
            "id": "booking",
            "url": "https://square.site/book/AS1YHK0VAK7BQ/hook-scissor-san-francisco-ca",
            "kind": "booking_provider",
            "checkedAt": "2026-10-24T09:28:29Z",
            "outcome": "read",
            "note": "Readable public service list, prices, durations and staff."
          },
          {
            "id": "booking-new",
            "url": "https://book.squareup.com/appointments/bd020d87-2cc3-42b5-8fc3-402863a1adac/location/AS1YHK0VAK7BQ",
            "kind": "booking_provider",
            "checkedAt": "2026-10-24T09:34:11Z",
            "outcome": "blocked",
            "note": "Direct public page returned HTTP 429; legacy public menu was readable."
          }
        ],
        "menuStatus": "published",
        "menu": [
          {
            "name": "Short Haircut",
            "category": "haircut",
            "description": "Chin length or shorter; wash and styling included.",
            "price": {
              "kind": "fixed",
              "amount": 55,
              "amountMax": null,
              "currency": "USD",
              "note": null
            },
            "durationMinutes": 30,
            "durationMaxMinutes": null,
            "sourceId": "booking",
            "priceSourceId": null,
            "durationSourceId": null,
            "includes": {
              "shampoo": true,
              "rinse": null,
              "blowDry": null,
              "style": true,
              "consultation": null
            }
          },
          {
            "name": "Blowout",
            "category": "styling",
            "description": "Thermal styling costs extra; amount unpublished.",
            "price": {
              "kind": "starting_at",
              "amount": 65,
              "amountMax": null,
              "currency": "USD",
              "note": null
            },
            "durationMinutes": 45,
            "durationMaxMinutes": null,
            "sourceId": "booking",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Long Haircut",
            "category": "haircut",
            "description": "Below chin length; wash and styling included.",
            "price": {
              "kind": "starting_at",
              "amount": 90,
              "amountMax": null,
              "currency": "USD",
              "note": null
            },
            "durationMinutes": 60,
            "durationMaxMinutes": null,
            "sourceId": "booking",
            "priceSourceId": null,
            "durationSourceId": null,
            "includes": {
              "shampoo": true,
              "rinse": null,
              "blowDry": null,
              "style": true,
              "consultation": null
            }
          },
          {
            "name": "Buzzcuts",
            "category": "haircut",
            "description": null,
            "price": {
              "kind": "fixed",
              "amount": 30,
              "amountMax": null,
              "currency": "USD",
              "note": null
            },
            "durationMinutes": 25,
            "durationMaxMinutes": null,
            "sourceId": "booking",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Bang Trim",
            "category": "haircut",
            "description": null,
            "price": {
              "kind": "fixed",
              "amount": 15,
              "amountMax": null,
              "currency": "USD",
              "note": null
            },
            "durationMinutes": 15,
            "durationMaxMinutes": null,
            "sourceId": "booking",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Neck Trim",
            "category": "haircut",
            "description": null,
            "price": {
              "kind": "fixed",
              "amount": 10,
              "amountMax": null,
              "currency": "USD",
              "note": null
            },
            "durationMinutes": 15,
            "durationMaxMinutes": null,
            "sourceId": "booking",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Beard Trim",
            "category": "beard",
            "description": null,
            "price": {
              "kind": "fixed",
              "amount": 25,
              "amountMax": null,
              "currency": "USD",
              "note": null
            },
            "durationMinutes": 15,
            "durationMaxMinutes": null,
            "sourceId": "booking",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Root Retouch",
            "category": "color",
            "description": "Color on new growth only.",
            "price": {
              "kind": "fixed",
              "amount": 110,
              "amountMax": null,
              "currency": "USD",
              "note": null
            },
            "durationMinutes": 90,
            "durationMaxMinutes": null,
            "sourceId": "booking",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "All Over Color",
            "category": "color",
            "description": null,
            "price": {
              "kind": "starting_at",
              "amount": 150,
              "amountMax": null,
              "currency": "USD",
              "note": null
            },
            "durationMinutes": 120,
            "durationMaxMinutes": null,
            "sourceId": "booking",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Partial Highlights or Balayage",
            "category": "color",
            "description": null,
            "price": {
              "kind": "starting_at",
              "amount": 180,
              "amountMax": null,
              "currency": "USD",
              "note": null
            },
            "durationMinutes": 180,
            "durationMaxMinutes": null,
            "sourceId": "booking",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Full Highlights or Balayage",
            "category": "color",
            "description": null,
            "price": {
              "kind": "starting_at",
              "amount": 200,
              "amountMax": null,
              "currency": "USD",
              "note": null
            },
            "durationMinutes": 210,
            "durationMaxMinutes": null,
            "sourceId": "booking",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Toner",
            "category": "color",
            "description": null,
            "price": {
              "kind": "fixed",
              "amount": 80,
              "amountMax": null,
              "currency": "USD",
              "note": null
            },
            "durationMinutes": 75,
            "durationMaxMinutes": null,
            "sourceId": "booking",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Bleach & Tone",
            "category": "color",
            "description": "Bleach and toner without foil highlights.",
            "price": {
              "kind": "starting_at",
              "amount": 200,
              "amountMax": null,
              "currency": "USD",
              "note": null
            },
            "durationMinutes": 210,
            "durationMaxMinutes": null,
            "sourceId": "booking",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Short All Over Color",
            "category": "color",
            "description": "For hair above the chin and neck.",
            "price": {
              "kind": "fixed",
              "amount": 75,
              "amountMax": null,
              "currency": "USD",
              "note": null
            },
            "durationMinutes": 60,
            "durationMaxMinutes": null,
            "sourceId": "booking",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Creative Color Consultation",
            "category": "other",
            "description": "Consultation before the color appointment to establish goals and price.",
            "price": {
              "kind": "fixed",
              "amount": 0,
              "amountMax": null,
              "currency": "USD",
              "note": null
            },
            "durationMinutes": 10,
            "durationMaxMinutes": null,
            "sourceId": "booking",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Corrective Color Consultation",
            "category": "other",
            "description": "Consultation before the correction appointment to establish goals and price.",
            "price": {
              "kind": "fixed",
              "amount": 0,
              "amountMax": null,
              "currency": "USD",
              "note": null
            },
            "durationMinutes": 10,
            "durationMaxMinutes": null,
            "sourceId": "booking",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Deep Conditioning Treatment",
            "category": "treatment",
            "description": "Blowout is not included.",
            "price": {
              "kind": "fixed",
              "amount": 45,
              "amountMax": null,
              "currency": "USD",
              "note": null
            },
            "durationMinutes": 30,
            "durationMaxMinutes": null,
            "sourceId": "booking",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Deep Conditioning + Blowout",
            "category": "treatment",
            "description": null,
            "price": {
              "kind": "starting_at",
              "amount": 95,
              "amountMax": null,
              "currency": "USD",
              "note": null
            },
            "durationMinutes": 75,
            "durationMaxMinutes": null,
            "sourceId": "booking",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Olaplex Treatment",
            "category": "treatment",
            "description": "Blowout is not included.",
            "price": {
              "kind": "fixed",
              "amount": 55,
              "amountMax": null,
              "currency": "USD",
              "note": null
            },
            "durationMinutes": 30,
            "durationMaxMinutes": null,
            "sourceId": "booking",
            "priceSourceId": null,
            "durationSourceId": null
          }
        ],
        "addOnsStatus": "published",
        "addOns": [
          {
            "name": "Olaplex Add On",
            "category": "treatment",
            "description": "Addition to a color appointment.",
            "price": {
              "kind": "fixed",
              "amount": 30,
              "amountMax": null,
              "currency": "USD",
              "note": null
            },
            "durationMinutes": 10,
            "durationMaxMinutes": null,
            "sourceId": "booking",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Thermal styling",
            "category": "styling",
            "description": "Blowout description identifies an extra charge without an amount.",
            "price": {
              "kind": "unknown",
              "amount": null,
              "amountMax": null,
              "currency": "USD",
              "note": null
            },
            "durationMinutes": null,
            "durationMaxMinutes": null,
            "sourceId": "booking",
            "priceSourceId": null,
            "durationSourceId": null
          }
        ],
        "stylistsStatus": "published",
        "stylists": [
          {
            "name": "Gloria",
            "specialties": [],
            "bio": null,
            "bookingUrl": "https://square.site/book/AS1YHK0VAK7BQ/hook-scissor-san-francisco-ca",
            "portfolioUrl": null,
            "sourceId": "booking"
          }
        ],
        "policies": {
          "cancellation": {
            "value": null,
            "sourceId": null
          },
          "deposit": {
            "value": null,
            "sourceId": null
          },
          "noShow": {
            "value": null,
            "sourceId": null
          },
          "lateArrival": {
            "value": null,
            "sourceId": null
          },
          "consultation": {
            "value": "Creative and corrective color listings require a preliminary consultation to discuss the result and price. Both listed consultations are free and 10 minutes.",
            "sourceId": "booking"
          },
          "payment": {
            "value": null,
            "sourceId": null
          },
          "walkIns": {
            "value": null,
            "sourceId": null
          }
        },
        "unknowns": [
          "Exact final total, including applicable extras, tax and gratuity, is not established by a published base price.",
          "Appointment availability was not checked.",
          "No usable public terms established for: cancellation, deposit, noShow, lateArrival, payment, walkIns."
        ],
        "conflicts": []
      }
    },
    {
      "slug": "hue-hair-salon-japantown",
      "ref": "san-francisco/hair-salon/hue-hair-salon-japantown",
      "name": "Hue Hair Salon",
      "neighborhood": "Japantown",
      "researched_at": "2026-10-24T09:38:45.387335+00:00",
      "coverage": {
        "services": 22,
        "services_with_prices": 21,
        "services_with_durations": 21,
        "add_ons": 0,
        "stylists": 3,
        "published_policies": 2,
        "policy_fields": 7,
        "successfully_read_sources": 2
      },
      "unknowns": [
        "No live appointment availability or booking confirmation was checked.",
        "Published prices are not a final total; applicable extra product, time, tax and gratuity must be confirmed.",
        "No explicit add-on prices, deposit, no-show-specific, late-arrival, payment or walk-in terms were found.",
        "Some booking blocks are shorter than a consumer might expect for chemical services; they are published block durations, not independently verified elapsed time."
      ],
      "conflicts": [
        "Website gives Japanese straightening as $350-$550; the booking menu publishes only a $350 starting price. No upper bound is applied to the booking price."
      ],
      "url": "https://agentsalonsf.com/salons/hue-hair-salon-japantown",
      "markdown_url": "https://agentsalonsf.com/salons/hue-hair-salon-japantown.md",
      "api_url": "https://agentsalonsf.com/api/v1/salons/hue-hair-salon-japantown",
      "public_research": {
        "salonSlug": "hue-hair-salon-japantown",
        "researchedAt": "2026-10-24T09:38:45.387335+00:00",
        "summary": "Full public customer menu reviewed, including explicit price ranges, consultation-only services and durations. Numeric service prices are starting amounts; the paid result is separate from a complimentary consultation.",
        "sources": [
          {
            "id": "home",
            "url": "https://huehairsalonsf.com/",
            "kind": "salon_website",
            "checkedAt": "2026-10-24T09:27:47.511369+00:00",
            "outcome": "read",
            "note": "Public page text reviewed."
          },
          {
            "id": "square",
            "url": "https://book.squareup.com/appointments/ogl89g89acwyvr/location/LNF6Q9F0C4HJH",
            "kind": "booking_provider",
            "checkedAt": "2026-10-24T09:28:54.982894+00:00",
            "outcome": "read",
            "note": "Public customer menu and visible options read from page HTML."
          }
        ],
        "menuStatus": "published",
        "menu": [
          {
            "name": "Women's Haircut",
            "category": "haircut",
            "description": null,
            "price": {
              "kind": "range",
              "amount": 125,
              "amountMax": 145,
              "currency": "USD",
              "note": "Published range; final service scope and charges require confirmation."
            },
            "durationMinutes": 90,
            "durationMaxMinutes": null,
            "sourceId": "square",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Men's Haircut",
            "category": "haircut",
            "description": null,
            "price": {
              "kind": "range",
              "amount": 65,
              "amountMax": 85,
              "currency": "USD",
              "note": "Published range; final service scope and charges require confirmation."
            },
            "durationMinutes": 40,
            "durationMaxMinutes": null,
            "sourceId": "square",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Shampoo & Blowdry",
            "category": "styling",
            "description": null,
            "price": {
              "kind": "starting_at",
              "amount": 65,
              "amountMax": null,
              "currency": "USD",
              "note": "Published customer-menu price; final scope and charges require confirmation."
            },
            "durationMinutes": 60,
            "durationMaxMinutes": null,
            "sourceId": "square",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Shampoo, Blowdry & Curls",
            "category": "styling",
            "description": null,
            "price": {
              "kind": "starting_at",
              "amount": 80,
              "amountMax": null,
              "currency": "USD",
              "note": "Published customer-menu price; final scope and charges require confirmation."
            },
            "durationMinutes": 75,
            "durationMaxMinutes": null,
            "sourceId": "square",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Partial Highlight",
            "category": "color",
            "description": null,
            "price": {
              "kind": "starting_at",
              "amount": 185,
              "amountMax": null,
              "currency": "USD",
              "note": "Published customer-menu price; final scope and charges require confirmation."
            },
            "durationMinutes": 60,
            "durationMaxMinutes": null,
            "sourceId": "square",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Full Highlights",
            "category": "color",
            "description": null,
            "price": {
              "kind": "starting_at",
              "amount": 285,
              "amountMax": null,
              "currency": "USD",
              "note": "Published customer-menu price; final scope and charges require confirmation."
            },
            "durationMinutes": 90,
            "durationMaxMinutes": null,
            "sourceId": "square",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Single Process Haircolor",
            "category": "color",
            "description": null,
            "price": {
              "kind": "starting_at",
              "amount": 185,
              "amountMax": null,
              "currency": "USD",
              "note": "Published customer-menu price; final scope and charges require confirmation."
            },
            "durationMinutes": 90,
            "durationMaxMinutes": null,
            "sourceId": "square",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Toning - Glaze (Not include Blow Dry)",
            "category": "color",
            "description": "Glaze option excludes blow-dry.",
            "price": {
              "kind": "starting_at",
              "amount": 165,
              "amountMax": null,
              "currency": "USD",
              "note": "Published customer-menu price; final scope and charges require confirmation."
            },
            "durationMinutes": 60,
            "durationMaxMinutes": null,
            "sourceId": "square",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Roots Touch Up",
            "category": "color",
            "description": null,
            "price": {
              "kind": "starting_at",
              "amount": 125,
              "amountMax": null,
              "currency": "USD",
              "note": "Published customer-menu price; final scope and charges require confirmation."
            },
            "durationMinutes": 90,
            "durationMaxMinutes": null,
            "sourceId": "square",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Balayage / Ombre Consultation",
            "category": "other",
            "description": "Complimentary consultation; service price determined after consultation.",
            "price": {
              "kind": "fixed",
              "amount": 0,
              "amountMax": null,
              "currency": "USD",
              "note": "The public customer menu displays $0 for this consultation; this is not the price of a subsequent service."
            },
            "durationMinutes": 15,
            "durationMaxMinutes": null,
            "sourceId": "square",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Bleach & Tone Consultation",
            "category": "other",
            "description": "Complimentary consultation; service price determined after consultation.",
            "price": {
              "kind": "fixed",
              "amount": 0,
              "amountMax": null,
              "currency": "USD",
              "note": "The public customer menu displays $0 for this consultation; this is not the price of a subsequent service."
            },
            "durationMinutes": 15,
            "durationMaxMinutes": null,
            "sourceId": "square",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Color Correction Consultation",
            "category": "other",
            "description": "Complimentary consultation; service price determined after consultation.",
            "price": {
              "kind": "fixed",
              "amount": 0,
              "amountMax": null,
              "currency": "USD",
              "note": "The public customer menu displays $0 for this consultation; this is not the price of a subsequent service."
            },
            "durationMinutes": 15,
            "durationMaxMinutes": null,
            "sourceId": "square",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Partial Balayage",
            "category": "color",
            "description": "Consultation strongly recommended for first-time clients; send current and desired-hair photos.",
            "price": {
              "kind": "starting_at",
              "amount": 350,
              "amountMax": null,
              "currency": "USD",
              "note": "Published customer-menu price; final scope and charges require confirmation."
            },
            "durationMinutes": 60,
            "durationMaxMinutes": null,
            "sourceId": "square",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Balayage Touch-up",
            "category": "color",
            "description": null,
            "price": {
              "kind": "starting_at",
              "amount": 350,
              "amountMax": null,
              "currency": "USD",
              "note": "Published customer-menu price; final scope and charges require confirmation."
            },
            "durationMinutes": 80,
            "durationMaxMinutes": null,
            "sourceId": "square",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Bleach & Tone Touch Up",
            "category": "color",
            "description": null,
            "price": {
              "kind": "starting_at",
              "amount": 210,
              "amountMax": null,
              "currency": "USD",
              "note": "Published customer-menu price; final scope and charges require confirmation."
            },
            "durationMinutes": 90,
            "durationMaxMinutes": null,
            "sourceId": "square",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Japanese Hair Straightening",
            "category": "treatment",
            "description": "Contact salon to arrange appointment.",
            "price": {
              "kind": "starting_at",
              "amount": 350,
              "amountMax": null,
              "currency": "USD",
              "note": "Published customer-menu price; final scope and charges require confirmation."
            },
            "durationMinutes": 90,
            "durationMaxMinutes": null,
            "sourceId": "square",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Hair Revitalization (Not include Blow Dry)",
            "category": "styling",
            "description": "Blow-dry excluded.",
            "price": {
              "kind": "starting_at",
              "amount": 65,
              "amountMax": null,
              "currency": "USD",
              "note": "Published customer-menu price; final scope and charges require confirmation."
            },
            "durationMinutes": 60,
            "durationMaxMinutes": null,
            "sourceId": "square",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Keratin Treatment Express",
            "category": "treatment",
            "description": null,
            "price": {
              "kind": "starting_at",
              "amount": 165,
              "amountMax": null,
              "currency": "USD",
              "note": "Published customer-menu price; final scope and charges require confirmation."
            },
            "durationMinutes": 60,
            "durationMaxMinutes": null,
            "sourceId": "square",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Keratin Treatment",
            "category": "treatment",
            "description": null,
            "price": {
              "kind": "starting_at",
              "amount": 350,
              "amountMax": null,
              "currency": "USD",
              "note": "Published customer-menu price; final scope and charges require confirmation."
            },
            "durationMinutes": 120,
            "durationMaxMinutes": null,
            "sourceId": "square",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Keratin for Blondes",
            "category": "color",
            "description": null,
            "price": {
              "kind": "starting_at",
              "amount": 350,
              "amountMax": null,
              "currency": "USD",
              "note": "Published customer-menu price; final scope and charges require confirmation."
            },
            "durationMinutes": 120,
            "durationMaxMinutes": null,
            "sourceId": "square",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Bang Trim",
            "category": "haircut",
            "description": null,
            "price": {
              "kind": "fixed",
              "amount": 25,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option base price; final scope and charges require confirmation."
            },
            "durationMinutes": 15,
            "durationMaxMinutes": null,
            "sourceId": "square",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Extensions Consultation",
            "category": "other",
            "description": null,
            "price": {
              "kind": "consultation",
              "amount": null,
              "amountMax": null,
              "currency": "USD",
              "note": "Website requests a call for consultation; fee and duration not published."
            },
            "durationMinutes": null,
            "durationMaxMinutes": null,
            "sourceId": "home",
            "priceSourceId": null,
            "durationSourceId": null
          }
        ],
        "addOnsStatus": "unknown",
        "addOns": [],
        "stylistsStatus": "published",
        "stylists": [
          {
            "name": "John",
            "specialties": [
              "balayage",
              "highlights",
              "color correction",
              "haircuts"
            ],
            "bio": null,
            "bookingUrl": null,
            "portfolioUrl": null,
            "sourceId": "home"
          },
          {
            "name": "Franny",
            "specialties": [
              "haircuts",
              "color",
              "keratin treatments"
            ],
            "bio": null,
            "bookingUrl": null,
            "portfolioUrl": null,
            "sourceId": "home"
          },
          {
            "name": "Deisy",
            "specialties": [
              "color correction"
            ],
            "bio": null,
            "bookingUrl": null,
            "portfolioUrl": null,
            "sourceId": "home"
          }
        ],
        "policies": {
          "cancellation": {
            "value": "48 hours notice requested. Cancellation without 24-hour notice incurs 100% of the service price. A $25 charge may apply to rebooking within 24 hours; the 24-48 hour fee is not specified.",
            "sourceId": "square"
          },
          "deposit": {
            "value": null,
            "sourceId": null
          },
          "noShow": {
            "value": null,
            "sourceId": null
          },
          "lateArrival": {
            "value": null,
            "sourceId": null
          },
          "consultation": {
            "value": "Complimentary consultations are offered before balayage/ombre, bleach-and-tone and color correction. The paid service price is determined separately.",
            "sourceId": "square"
          },
          "payment": {
            "value": null,
            "sourceId": null
          },
          "walkIns": {
            "value": null,
            "sourceId": null
          }
        },
        "unknowns": [
          "No live appointment availability or booking confirmation was checked.",
          "Published prices are not a final total; applicable extra product, time, tax and gratuity must be confirmed.",
          "No explicit add-on prices, deposit, no-show-specific, late-arrival, payment or walk-in terms were found.",
          "Some booking blocks are shorter than a consumer might expect for chemical services; they are published block durations, not independently verified elapsed time."
        ],
        "conflicts": [
          "Website gives Japanese straightening as $350-$550; the booking menu publishes only a $350 starting price. No upper bound is applied to the booking price."
        ]
      }
    },
    {
      "slug": "joes-barbershop-castro-upper-market",
      "ref": "san-francisco/hair-salon/joes-barbershop-castro-upper-market",
      "name": "Joe's Barbershop",
      "neighborhood": "Castro / Upper Market",
      "researched_at": "2026-10-24T09:34:11Z",
      "coverage": {
        "services": 12,
        "services_with_prices": 10,
        "services_with_durations": 7,
        "add_ons": 3,
        "stylists": 11,
        "published_policies": 1,
        "policy_fields": 7,
        "successfully_read_sources": 4
      },
      "unknowns": [
        "Exact final total, including applicable extras, tax and gratuity, is not established by a published base price.",
        "Appointment availability was not checked.",
        "Basil and Kermit linked pages were JavaScript shells; Oscar’s public booking route rate-limited the read. No prices or durations were inferred for these barbers.",
        "Individual website profiles for Dante, Jennifer, John, Kermit, Lynne, Randy and Basil provide schedules/contact routes but no additional priced menu. Wesley’s profile was not readable. No personal contact details are retained.",
        "Public crew lists differ between website sections; names are published roster evidence, not confirmation that each barber currently takes appointments.",
        "No usable public terms established for: cancellation, deposit, noShow, lateArrival, consultation, payment."
      ],
      "conflicts": [],
      "url": "https://agentsalonsf.com/salons/joes-barbershop-castro-upper-market",
      "markdown_url": "https://agentsalonsf.com/salons/joes-barbershop-castro-upper-market.md",
      "api_url": "https://agentsalonsf.com/api/v1/salons/joes-barbershop-castro-upper-market",
      "public_research": {
        "salonSlug": "joes-barbershop-castro-upper-market",
        "researchedAt": "2026-10-24T09:34:11Z",
        "summary": "Website walk-in prices and Joe-specific appointment prices are separate contexts. All readable rows from each are retained; other barbers’ linked booking menus were inaccessible or lacked readable prices.",
        "sources": [
          {
            "id": "website",
            "url": "https://joesbarbershop.com/",
            "kind": "salon_website",
            "checkedAt": "2026-10-24T09:34:11Z",
            "outcome": "read",
            "note": "Public page read for services, team or stated policies."
          },
          {
            "id": "walk-in-menu",
            "url": "https://joesbarbershop.com/prices/",
            "kind": "salon_website",
            "checkedAt": "2026-10-24T09:34:11Z",
            "outcome": "read",
            "note": "Public page read for services, team or stated policies."
          },
          {
            "id": "appointments",
            "url": "https://joesbarbershop.com/appointments/",
            "kind": "salon_website",
            "checkedAt": "2026-10-24T09:34:11Z",
            "outcome": "read",
            "note": "Public page read for services, team or stated policies."
          },
          {
            "id": "booking-joe",
            "url": "https://square.site/book/00FXSMCP487WD/joe-joe-s-barbershop-in-san-francisco-san-francisco-ca",
            "kind": "booking_provider",
            "checkedAt": "2026-10-24T09:34:11Z",
            "outcome": "read",
            "note": "Readable public Joe-only service list and durations; excludes other barbers."
          },
          {
            "id": "booking-joe-new",
            "url": "https://book.squareup.com/appointments/68d84ea4-5732-424b-82c0-c917c46f3ac0/location/00FXSMCP487WD",
            "kind": "booking_provider",
            "checkedAt": "2026-10-24T09:34:11Z",
            "outcome": "blocked",
            "note": "Public request returned HTTP 429; legacy page was readable."
          },
          {
            "id": "booking-basil",
            "url": "https://basilgreenhair.square.site/",
            "kind": "booking_provider",
            "checkedAt": "2026-10-24T09:29:51Z",
            "outcome": "unavailable",
            "note": "Client-rendered public page did not expose a readable menu."
          },
          {
            "id": "booking-kermit",
            "url": "https://hair-by-kermit.square.site/",
            "kind": "booking_provider",
            "checkedAt": "2026-10-24T09:29:51Z",
            "outcome": "unavailable",
            "note": "Client-rendered public page did not expose a readable menu."
          },
          {
            "id": "booking-oscar",
            "url": "https://book.squareup.com/appointments/f23b161c-de43-4d45-9a75-458b0ef7299d/location/AZ0E9EE47ZDSB/services",
            "kind": "booking_provider",
            "checkedAt": "2026-10-24T09:34:11Z",
            "outcome": "blocked",
            "note": "Public request returned HTTP 429."
          }
        ],
        "menuStatus": "published",
        "menu": [
          {
            "name": "Standard",
            "category": "haircut",
            "description": null,
            "price": {
              "kind": "fixed",
              "amount": 40,
              "amountMax": null,
              "currency": "USD",
              "note": "Walk-in price list, first available barber. Not a selected-barber appointment quote."
            },
            "durationMinutes": null,
            "durationMaxMinutes": null,
            "sourceId": "walk-in-menu",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Scissors Only",
            "category": "haircut",
            "description": null,
            "price": {
              "kind": "starting_at",
              "amount": 50,
              "amountMax": null,
              "currency": "USD",
              "note": "Walk-in price list, first available barber. Not a selected-barber appointment quote."
            },
            "durationMinutes": null,
            "durationMaxMinutes": null,
            "sourceId": "walk-in-menu",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "1 Blade",
            "category": "haircut",
            "description": null,
            "price": {
              "kind": "fixed",
              "amount": 25,
              "amountMax": null,
              "currency": "USD",
              "note": "Walk-in price list, first available barber. Not a selected-barber appointment quote."
            },
            "durationMinutes": null,
            "durationMaxMinutes": null,
            "sourceId": "walk-in-menu",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Beard Trim Only",
            "category": "beard",
            "description": null,
            "price": {
              "kind": "starting_at",
              "amount": 20,
              "amountMax": null,
              "currency": "USD",
              "note": "Walk-in price list, first available barber. Not a selected-barber appointment quote."
            },
            "durationMinutes": null,
            "durationMaxMinutes": null,
            "sourceId": "walk-in-menu",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Line Up Edges Only (Not a Haircut)",
            "category": "haircut",
            "description": null,
            "price": {
              "kind": "fixed",
              "amount": 10,
              "amountMax": null,
              "currency": "USD",
              "note": "Walk-in price list, first available barber. Not a selected-barber appointment quote."
            },
            "durationMinutes": null,
            "durationMaxMinutes": null,
            "sourceId": "walk-in-menu",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Haircut",
            "category": "haircut",
            "description": null,
            "price": {
              "kind": "fixed",
              "amount": 45,
              "amountMax": null,
              "currency": "USD",
              "note": "Joe-only appointment menu; not the general walk-in tariff."
            },
            "durationMinutes": 30,
            "durationMaxMinutes": null,
            "sourceId": "booking-joe",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Haircut w/ Foil Razor",
            "category": "haircut",
            "description": null,
            "price": {
              "kind": "fixed",
              "amount": 54,
              "amountMax": null,
              "currency": "USD",
              "note": "Joe-only appointment menu; not the general walk-in tariff."
            },
            "durationMinutes": 30,
            "durationMaxMinutes": null,
            "sourceId": "booking-joe",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Haircut w/ Beard Trim",
            "category": "haircut",
            "description": null,
            "price": {
              "kind": "fixed",
              "amount": 54,
              "amountMax": null,
              "currency": "USD",
              "note": "Joe-only appointment menu; not the general walk-in tariff."
            },
            "durationMinutes": 30,
            "durationMaxMinutes": null,
            "sourceId": "booking-joe",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Haircut w/ Foil Razor & Beard Trim",
            "category": "haircut",
            "description": null,
            "price": {
              "kind": "fixed",
              "amount": 68,
              "amountMax": null,
              "currency": "USD",
              "note": "Joe-only appointment menu; not the general walk-in tariff."
            },
            "durationMinutes": 45,
            "durationMaxMinutes": null,
            "sourceId": "booking-joe",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Beard Trim (no haircut)",
            "category": "beard",
            "description": null,
            "price": {
              "kind": "fixed",
              "amount": 45,
              "amountMax": null,
              "currency": "USD",
              "note": "Joe-only appointment menu; not the general walk-in tariff."
            },
            "durationMinutes": 30,
            "durationMaxMinutes": null,
            "sourceId": "booking-joe",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Mullett",
            "category": "haircut",
            "description": "Contact Joe to establish service details and price.",
            "price": {
              "kind": "unknown",
              "amount": null,
              "amountMax": null,
              "currency": "USD",
              "note": "Joe-only appointment menu; not the general walk-in tariff."
            },
            "durationMinutes": 45,
            "durationMaxMinutes": null,
            "sourceId": "booking-joe",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Long Hair (All Scissors)",
            "category": "haircut",
            "description": "Contact Joe to establish service details and price.",
            "price": {
              "kind": "unknown",
              "amount": null,
              "amountMax": null,
              "currency": "USD",
              "note": "Joe-only appointment menu; not the general walk-in tariff."
            },
            "durationMinutes": 45,
            "durationMaxMinutes": null,
            "sourceId": "booking-joe",
            "priceSourceId": null,
            "durationSourceId": null
          }
        ],
        "addOnsStatus": "published",
        "addOns": [
          {
            "name": "Add Shampoo",
            "category": "styling",
            "description": "Addition in the walk-in haircut price list.",
            "price": {
              "kind": "fixed",
              "amount": 5,
              "amountMax": null,
              "currency": "USD",
              "note": "Walk-in/first-available context only."
            },
            "durationMinutes": null,
            "durationMaxMinutes": null,
            "sourceId": "walk-in-menu",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Add Foil Razor",
            "category": "haircut",
            "description": "Addition in the walk-in haircut price list.",
            "price": {
              "kind": "fixed",
              "amount": 5,
              "amountMax": null,
              "currency": "USD",
              "note": "Walk-in/first-available context only."
            },
            "durationMinutes": null,
            "durationMaxMinutes": null,
            "sourceId": "walk-in-menu",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Add Beard Trim",
            "category": "beard",
            "description": "Addition in the walk-in haircut price list.",
            "price": {
              "kind": "starting_at",
              "amount": 10,
              "amountMax": null,
              "currency": "USD",
              "note": "Walk-in/first-available context only."
            },
            "durationMinutes": null,
            "durationMaxMinutes": null,
            "sourceId": "walk-in-menu",
            "priceSourceId": null,
            "durationSourceId": null
          }
        ],
        "stylistsStatus": "published",
        "stylists": [
          {
            "name": "Joe",
            "specialties": [],
            "bio": null,
            "bookingUrl": "https://square.site/book/00FXSMCP487WD/joe-joe-s-barbershop-in-san-francisco-san-francisco-ca",
            "portfolioUrl": null,
            "sourceId": "website"
          },
          {
            "name": "Basil",
            "specialties": [],
            "bio": null,
            "bookingUrl": null,
            "portfolioUrl": null,
            "sourceId": "website"
          },
          {
            "name": "Dante",
            "specialties": [],
            "bio": null,
            "bookingUrl": null,
            "portfolioUrl": null,
            "sourceId": "website"
          },
          {
            "name": "Jennifer",
            "specialties": [],
            "bio": null,
            "bookingUrl": null,
            "portfolioUrl": null,
            "sourceId": "website"
          },
          {
            "name": "John",
            "specialties": [],
            "bio": null,
            "bookingUrl": null,
            "portfolioUrl": null,
            "sourceId": "website"
          },
          {
            "name": "Kermit",
            "specialties": [],
            "bio": null,
            "bookingUrl": "https://hair-by-kermit.square.site/",
            "portfolioUrl": null,
            "sourceId": "website"
          },
          {
            "name": "Lynne",
            "specialties": [],
            "bio": null,
            "bookingUrl": null,
            "portfolioUrl": null,
            "sourceId": "website"
          },
          {
            "name": "Randy",
            "specialties": [],
            "bio": null,
            "bookingUrl": null,
            "portfolioUrl": null,
            "sourceId": "website"
          },
          {
            "name": "Wesley",
            "specialties": [],
            "bio": null,
            "bookingUrl": null,
            "portfolioUrl": null,
            "sourceId": "website"
          },
          {
            "name": "Julio",
            "specialties": [],
            "bio": null,
            "bookingUrl": null,
            "portfolioUrl": null,
            "sourceId": "website"
          },
          {
            "name": "Oscar",
            "specialties": [],
            "bio": null,
            "bookingUrl": null,
            "portfolioUrl": null,
            "sourceId": "website"
          }
        ],
        "policies": {
          "cancellation": {
            "value": null,
            "sourceId": null
          },
          "deposit": {
            "value": null,
            "sourceId": null
          },
          "noShow": {
            "value": null,
            "sourceId": null
          },
          "lateArrival": {
            "value": null,
            "sourceId": null
          },
          "consultation": {
            "value": null,
            "sourceId": null
          },
          "payment": {
            "value": null,
            "sourceId": null
          },
          "walkIns": {
            "value": "The website publishes a walk-in price list for the first available barber. Selected-barber appointments have separate booking routes and may have different prices.",
            "sourceId": "walk-in-menu"
          }
        },
        "unknowns": [
          "Exact final total, including applicable extras, tax and gratuity, is not established by a published base price.",
          "Appointment availability was not checked.",
          "Basil and Kermit linked pages were JavaScript shells; Oscar’s public booking route rate-limited the read. No prices or durations were inferred for these barbers.",
          "Individual website profiles for Dante, Jennifer, John, Kermit, Lynne, Randy and Basil provide schedules/contact routes but no additional priced menu. Wesley’s profile was not readable. No personal contact details are retained.",
          "Public crew lists differ between website sections; names are published roster evidence, not confirmation that each barber currently takes appointments.",
          "No usable public terms established for: cancellation, deposit, noShow, lateArrival, consultation, payment."
        ],
        "conflicts": []
      }
    },
    {
      "slug": "jungle-red-castro-upper-market",
      "ref": "san-francisco/hair-salon/jungle-red-castro-upper-market",
      "name": "Jungle Red",
      "neighborhood": "Castro / Upper Market",
      "researched_at": "2026-10-24T09:38:45.387596+00:00",
      "coverage": {
        "services": 86,
        "services_with_prices": 78,
        "services_with_durations": 73,
        "add_ons": 3,
        "stylists": 5,
        "published_policies": 4,
        "policy_fields": 7,
        "successfully_read_sources": 6
      },
      "unknowns": [
        "No live appointment availability or booking confirmation was checked.",
        "Published prices are not a final total; applicable extra product, time, tax and gratuity must be confirmed.",
        "Online booking is published as available only at least 48 hours ahead; same/next-day requests require contacting the salon. This is a booking-window rule, not evidence of open slots.",
        "Express services cannot be booked online according to the salon.",
        "No deposit, no-show-specific fee or walk-in policy was found."
      ],
      "conflicts": [
        "Partial HighLights / Andrea: the public booking option amount is $200, while its price description says 'Starts at $185'. Price remains unknown until clarified.",
        "Partial HighLights / Nicole: the public booking option amount is $165, while its price description says 'Starts at $130'. Price remains unknown until clarified.",
        "Full HighLights / Andrea: the public booking option amount is $250, while its price description says 'Starts at $225'. Price remains unknown until clarified.",
        "Full HighLights / Lucas: the public booking option amount is $300, while its price description says 'Starts at $250'. Price remains unknown until clarified.",
        "Full HighLights / Jen: the public booking option amount is $250, while its price description says 'Starts at $225'. Price remains unknown until clarified.",
        "Full HighLights / Nicole: the public booking option amount is $200, while its price description says 'Starts at $165'. Price remains unknown until clarified.",
        "Full Highlight & Cut / Trevor: the public booking option amount is $345, while its price description says 'Starts at $300'. Price remains unknown until clarified.",
        "General website prices (for example $65/$75 haircuts and $140+ highlights) differ from the visible stylist options. General prices are not substituted for a specific option.",
        "Some service-level aggregate amounts differ from their visible option amounts. Visible customer option amounts are retained; explicit option amount/description conflicts remain unknown.",
        "The customer menu contains a Lucie blow-dry option, while the reviewed team page does not list Lucie. This remains an unconfirmed option label, not a current staff assertion."
      ],
      "url": "https://agentsalonsf.com/salons/jungle-red-castro-upper-market",
      "markdown_url": "https://agentsalonsf.com/salons/jungle-red-castro-upper-market.md",
      "api_url": "https://agentsalonsf.com/api/v1/salons/jungle-red-castro-upper-market",
      "public_research": {
        "salonSlug": "jungle-red-castro-upper-market",
        "researchedAt": "2026-10-24T09:38:45.387596+00:00",
        "summary": "Website menu plus all visible customer booking variants reviewed. Multiple booking amount/description conflicts are retained as unknown prices. Express services require direct salon contact and are separate from the online menu.",
        "sources": [
          {
            "id": "home",
            "url": "https://www.jungleredsf.com/",
            "kind": "salon_website",
            "checkedAt": "2026-10-24T09:27:47.977418+00:00",
            "outcome": "read",
            "note": "Public page text reviewed."
          },
          {
            "id": "menu",
            "url": "https://www.jungleredsf.com/services",
            "kind": "salon_website",
            "checkedAt": "2026-10-24T09:28:30.895740+00:00",
            "outcome": "read",
            "note": "Public page text reviewed."
          },
          {
            "id": "team",
            "url": "https://www.jungleredsf.com/our-team",
            "kind": "salon_website",
            "checkedAt": "2026-10-24T09:28:31.029292+00:00",
            "outcome": "read",
            "note": "Public page text reviewed."
          },
          {
            "id": "book",
            "url": "https://www.jungleredsf.com/bookings",
            "kind": "salon_website",
            "checkedAt": "2026-10-24T09:28:31.188533+00:00",
            "outcome": "read",
            "note": "Public page text reviewed."
          },
          {
            "id": "policy",
            "url": "https://www.jungleredsf.com/cancellations",
            "kind": "salon_website",
            "checkedAt": "2026-10-24T09:28:50.404700+00:00",
            "outcome": "read",
            "note": "Public page text reviewed."
          },
          {
            "id": "square",
            "url": "https://book.squareup.com/appointments/14396c37-62fb-4d9b-8651-bbdddf036199/location/DVH6PS05WHXFF/services",
            "kind": "booking_provider",
            "checkedAt": "2026-10-24T09:28:55.146002+00:00",
            "outcome": "read",
            "note": "Public customer menu and visible options read from page HTML."
          }
        ],
        "menuStatus": "published",
        "menu": [
          {
            "name": "Hair Cut - Andrea",
            "category": "haircut",
            "description": null,
            "price": {
              "kind": "fixed",
              "amount": 135,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option base price; final scope and charges require confirmation."
            },
            "durationMinutes": 60,
            "durationMaxMinutes": null,
            "sourceId": "square",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Hair Cut - Jen",
            "category": "haircut",
            "description": null,
            "price": {
              "kind": "fixed",
              "amount": 125,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option base price; final scope and charges require confirmation."
            },
            "durationMinutes": 60,
            "durationMaxMinutes": null,
            "sourceId": "square",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Hair Cut - Lucas",
            "category": "haircut",
            "description": null,
            "price": {
              "kind": "fixed",
              "amount": 125,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option base price; final scope and charges require confirmation."
            },
            "durationMinutes": 60,
            "durationMaxMinutes": null,
            "sourceId": "square",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Hair Cut - Trevor",
            "category": "haircut",
            "description": null,
            "price": {
              "kind": "fixed",
              "amount": 100,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option base price; final scope and charges require confirmation."
            },
            "durationMinutes": 60,
            "durationMaxMinutes": null,
            "sourceId": "square",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Hair Cut - Nicole",
            "category": "haircut",
            "description": null,
            "price": {
              "kind": "fixed",
              "amount": 85,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option base price; final scope and charges require confirmation."
            },
            "durationMinutes": 90,
            "durationMaxMinutes": null,
            "sourceId": "square",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Single Process - Andrea",
            "category": "other",
            "description": null,
            "price": {
              "kind": "fixed",
              "amount": 130,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option base price; final scope and charges require confirmation."
            },
            "durationMinutes": 90,
            "durationMaxMinutes": null,
            "sourceId": "square",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Single Process - Jenn",
            "category": "other",
            "description": null,
            "price": {
              "kind": "fixed",
              "amount": 130,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option base price; final scope and charges require confirmation."
            },
            "durationMinutes": 90,
            "durationMaxMinutes": null,
            "sourceId": "square",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Single Process - Lucas",
            "category": "other",
            "description": null,
            "price": {
              "kind": "fixed",
              "amount": 130,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option base price; final scope and charges require confirmation."
            },
            "durationMinutes": 90,
            "durationMaxMinutes": null,
            "sourceId": "square",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Single Process - Trevor",
            "category": "other",
            "description": null,
            "price": {
              "kind": "fixed",
              "amount": 120,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option base price; final scope and charges require confirmation."
            },
            "durationMinutes": 90,
            "durationMaxMinutes": null,
            "sourceId": "square",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Single Process - Nicole",
            "category": "other",
            "description": null,
            "price": {
              "kind": "fixed",
              "amount": 100,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option base price; final scope and charges require confirmation."
            },
            "durationMinutes": 120,
            "durationMaxMinutes": null,
            "sourceId": "square",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Partial HighLights - Jen",
            "category": "color",
            "description": null,
            "price": {
              "kind": "starting_at",
              "amount": 175,
              "amountMax": null,
              "currency": "USD",
              "note": "Published customer-menu price; final scope and charges require confirmation."
            },
            "durationMinutes": 120,
            "durationMaxMinutes": null,
            "sourceId": "square",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Partial HighLights - Andrea",
            "category": "color",
            "description": null,
            "price": {
              "kind": "unknown",
              "amount": null,
              "amountMax": null,
              "currency": "USD",
              "note": "Partial HighLights / Andrea: the public booking option amount is $200, while its price description says 'Starts at $185'. Price remains unknown until clarified."
            },
            "durationMinutes": 120,
            "durationMaxMinutes": null,
            "sourceId": "square",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Partial HighLights - Lucas",
            "category": "color",
            "description": null,
            "price": {
              "kind": "starting_at",
              "amount": 185,
              "amountMax": null,
              "currency": "USD",
              "note": "Published customer-menu price; final scope and charges require confirmation."
            },
            "durationMinutes": 120,
            "durationMaxMinutes": null,
            "sourceId": "square",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Partial HighLights - Trevor",
            "category": "color",
            "description": null,
            "price": {
              "kind": "starting_at",
              "amount": 175,
              "amountMax": null,
              "currency": "USD",
              "note": "Published customer-menu price; final scope and charges require confirmation."
            },
            "durationMinutes": 120,
            "durationMaxMinutes": null,
            "sourceId": "square",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Partial HighLights - Nicole",
            "category": "color",
            "description": null,
            "price": {
              "kind": "unknown",
              "amount": null,
              "amountMax": null,
              "currency": "USD",
              "note": "Partial HighLights / Nicole: the public booking option amount is $165, while its price description says 'Starts at $130'. Price remains unknown until clarified."
            },
            "durationMinutes": 210,
            "durationMaxMinutes": null,
            "sourceId": "square",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Hair Painting - Jen",
            "category": "color",
            "description": "New clients require consultation.",
            "price": {
              "kind": "fixed",
              "amount": 200,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option base price; final scope and charges require confirmation."
            },
            "durationMinutes": 180,
            "durationMaxMinutes": null,
            "sourceId": "square",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Hair Painting - Lucas",
            "category": "color",
            "description": "New clients require consultation.",
            "price": {
              "kind": "fixed",
              "amount": 200,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option base price; final scope and charges require confirmation."
            },
            "durationMinutes": 180,
            "durationMaxMinutes": null,
            "sourceId": "square",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Hair Painting - Trevor",
            "category": "color",
            "description": "New clients require consultation.",
            "price": {
              "kind": "fixed",
              "amount": 250,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option base price; final scope and charges require confirmation."
            },
            "durationMinutes": 180,
            "durationMaxMinutes": null,
            "sourceId": "square",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Full HighLights - Andrea",
            "category": "color",
            "description": null,
            "price": {
              "kind": "unknown",
              "amount": null,
              "amountMax": null,
              "currency": "USD",
              "note": "Full HighLights / Andrea: the public booking option amount is $250, while its price description says 'Starts at $225'. Price remains unknown until clarified."
            },
            "durationMinutes": 120,
            "durationMaxMinutes": null,
            "sourceId": "square",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Full HighLights - Lucas",
            "category": "color",
            "description": null,
            "price": {
              "kind": "unknown",
              "amount": null,
              "amountMax": null,
              "currency": "USD",
              "note": "Full HighLights / Lucas: the public booking option amount is $300, while its price description says 'Starts at $250'. Price remains unknown until clarified."
            },
            "durationMinutes": 150,
            "durationMaxMinutes": null,
            "sourceId": "square",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Full HighLights - Jen",
            "category": "color",
            "description": null,
            "price": {
              "kind": "unknown",
              "amount": null,
              "amountMax": null,
              "currency": "USD",
              "note": "Full HighLights / Jen: the public booking option amount is $250, while its price description says 'Starts at $225'. Price remains unknown until clarified."
            },
            "durationMinutes": 150,
            "durationMaxMinutes": null,
            "sourceId": "square",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Full HighLights - Trevor",
            "category": "color",
            "description": null,
            "price": {
              "kind": "starting_at",
              "amount": 250,
              "amountMax": null,
              "currency": "USD",
              "note": "Published customer-menu price; final scope and charges require confirmation."
            },
            "durationMinutes": 240,
            "durationMaxMinutes": null,
            "sourceId": "square",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Full HighLights - Nicole",
            "category": "color",
            "description": null,
            "price": {
              "kind": "unknown",
              "amount": null,
              "amountMax": null,
              "currency": "USD",
              "note": "Full HighLights / Nicole: the public booking option amount is $200, while its price description says 'Starts at $165'. Price remains unknown until clarified."
            },
            "durationMinutes": 240,
            "durationMaxMinutes": null,
            "sourceId": "square",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Barbering Haircut - Lucas",
            "category": "haircut",
            "description": null,
            "price": {
              "kind": "fixed",
              "amount": 85,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option base price; final scope and charges require confirmation."
            },
            "durationMinutes": 45,
            "durationMaxMinutes": null,
            "sourceId": "square",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Barbering Haircut - Andrea",
            "category": "haircut",
            "description": null,
            "price": {
              "kind": "fixed",
              "amount": 115,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option base price; final scope and charges require confirmation."
            },
            "durationMinutes": 45,
            "durationMaxMinutes": null,
            "sourceId": "square",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Barbering Haircut - Trevor",
            "category": "haircut",
            "description": null,
            "price": {
              "kind": "fixed",
              "amount": 85,
              "amountMax": null,
              "currency": "USD",
              "note": "Published customer-menu price; final scope and charges require confirmation."
            },
            "durationMinutes": 45,
            "durationMaxMinutes": null,
            "sourceId": "square",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Barbering Haircut - Jenn",
            "category": "haircut",
            "description": null,
            "price": {
              "kind": "fixed",
              "amount": 90,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option base price; final scope and charges require confirmation."
            },
            "durationMinutes": 60,
            "durationMaxMinutes": null,
            "sourceId": "square",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Full Highlight & Cut - Trevor",
            "category": "color",
            "description": null,
            "price": {
              "kind": "unknown",
              "amount": null,
              "amountMax": null,
              "currency": "USD",
              "note": "Full Highlight & Cut / Trevor: the public booking option amount is $345, while its price description says 'Starts at $300'. Price remains unknown until clarified."
            },
            "durationMinutes": 240,
            "durationMaxMinutes": null,
            "sourceId": "square",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Full Highlight & Cut - Andrea",
            "category": "color",
            "description": null,
            "price": {
              "kind": "fixed",
              "amount": 385,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option base price; final scope and charges require confirmation."
            },
            "durationMinutes": 180,
            "durationMaxMinutes": null,
            "sourceId": "square",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Full Highlight & Cut - Jenn",
            "category": "color",
            "description": null,
            "price": {
              "kind": "fixed",
              "amount": 325,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option base price; final scope and charges require confirmation."
            },
            "durationMinutes": 180,
            "durationMaxMinutes": null,
            "sourceId": "square",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Full Highlight & Cut - Lucas",
            "category": "color",
            "description": null,
            "price": {
              "kind": "fixed",
              "amount": 425,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option base price; final scope and charges require confirmation."
            },
            "durationMinutes": 180,
            "durationMaxMinutes": null,
            "sourceId": "square",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Full Highlight & Cut - Nicole",
            "category": "color",
            "description": null,
            "price": {
              "kind": "fixed",
              "amount": 285,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option base price; final scope and charges require confirmation."
            },
            "durationMinutes": 270,
            "durationMaxMinutes": null,
            "sourceId": "square",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Bleach-Tone - Nicole",
            "category": "color",
            "description": null,
            "price": {
              "kind": "fixed",
              "amount": 200,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option base price; final scope and charges require confirmation."
            },
            "durationMinutes": 210,
            "durationMaxMinutes": null,
            "sourceId": "square",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Bleach-Tone - Trevor",
            "category": "color",
            "description": null,
            "price": {
              "kind": "fixed",
              "amount": 200,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option base price; final scope and charges require confirmation."
            },
            "durationMinutes": 180,
            "durationMaxMinutes": null,
            "sourceId": "square",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Color-Cut - Andrea",
            "category": "color",
            "description": null,
            "price": {
              "kind": "fixed",
              "amount": 255,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option base price; final scope and charges require confirmation."
            },
            "durationMinutes": 120,
            "durationMaxMinutes": null,
            "sourceId": "square",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Color-Cut - Jennifer",
            "category": "color",
            "description": null,
            "price": {
              "kind": "fixed",
              "amount": 250,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option base price; final scope and charges require confirmation."
            },
            "durationMinutes": 120,
            "durationMaxMinutes": null,
            "sourceId": "square",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Color-Cut - Lucas",
            "category": "color",
            "description": null,
            "price": {
              "kind": "fixed",
              "amount": 255,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option base price; final scope and charges require confirmation."
            },
            "durationMinutes": 120,
            "durationMaxMinutes": null,
            "sourceId": "square",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Color-Cut - Trevor",
            "category": "color",
            "description": null,
            "price": {
              "kind": "fixed",
              "amount": 200,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option base price; final scope and charges require confirmation."
            },
            "durationMinutes": 120,
            "durationMaxMinutes": null,
            "sourceId": "square",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Color-Cut - Nicole",
            "category": "color",
            "description": null,
            "price": {
              "kind": "fixed",
              "amount": 185,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option base price; final scope and charges require confirmation."
            },
            "durationMinutes": 180,
            "durationMaxMinutes": null,
            "sourceId": "square",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Hair Painting-Cut - Jennifer",
            "category": "color",
            "description": null,
            "price": {
              "kind": "fixed",
              "amount": 310,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option base price; final scope and charges require confirmation."
            },
            "durationMinutes": 180,
            "durationMaxMinutes": null,
            "sourceId": "square",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Hair Painting-Cut - Lucas",
            "category": "color",
            "description": null,
            "price": {
              "kind": "fixed",
              "amount": 315,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option base price; final scope and charges require confirmation."
            },
            "durationMinutes": 180,
            "durationMaxMinutes": null,
            "sourceId": "square",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Hair Painting-Cut - Trevor",
            "category": "color",
            "description": null,
            "price": {
              "kind": "starting_at",
              "amount": 300,
              "amountMax": null,
              "currency": "USD",
              "note": "Published customer-menu price; final scope and charges require confirmation."
            },
            "durationMinutes": 180,
            "durationMaxMinutes": null,
            "sourceId": "square",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Dimensional Color - Andrea",
            "category": "color",
            "description": null,
            "price": {
              "kind": "fixed",
              "amount": 210,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option base price; final scope and charges require confirmation."
            },
            "durationMinutes": 120,
            "durationMaxMinutes": null,
            "sourceId": "square",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Dimensional Color - Nicole",
            "category": "color",
            "description": null,
            "price": {
              "kind": "fixed",
              "amount": 180,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option base price; final scope and charges require confirmation."
            },
            "durationMinutes": 180,
            "durationMaxMinutes": null,
            "sourceId": "square",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Dimensional Color - Trevor",
            "category": "color",
            "description": null,
            "price": {
              "kind": "fixed",
              "amount": 200,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option base price; final scope and charges require confirmation."
            },
            "durationMinutes": 150,
            "durationMaxMinutes": null,
            "sourceId": "square",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Dimensional Color - Jen",
            "category": "color",
            "description": null,
            "price": {
              "kind": "fixed",
              "amount": 175,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option base price; final scope and charges require confirmation. Published booking block is 30 minutes; confirm elapsed time, especially when a haircut is included."
            },
            "durationMinutes": 30,
            "durationMaxMinutes": null,
            "sourceId": "square",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Dimensional Color & Cut - Andrea",
            "category": "color",
            "description": null,
            "price": {
              "kind": "fixed",
              "amount": 345,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option base price; final scope and charges require confirmation."
            },
            "durationMinutes": 150,
            "durationMaxMinutes": null,
            "sourceId": "square",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Dimensional Color & Cut - Trevor",
            "category": "color",
            "description": null,
            "price": {
              "kind": "fixed",
              "amount": 290,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option base price; final scope and charges require confirmation."
            },
            "durationMinutes": 180,
            "durationMaxMinutes": null,
            "sourceId": "square",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Dimensional Color & Cut - Nicole",
            "category": "color",
            "description": null,
            "price": {
              "kind": "fixed",
              "amount": 265,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option base price; final scope and charges require confirmation."
            },
            "durationMinutes": 210,
            "durationMaxMinutes": null,
            "sourceId": "square",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Dimensional Color & Cut - Jen",
            "category": "color",
            "description": null,
            "price": {
              "kind": "fixed",
              "amount": 300,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option base price; final scope and charges require confirmation. Published booking block is 30 minutes; confirm elapsed time, especially when a haircut is included."
            },
            "durationMinutes": 30,
            "durationMaxMinutes": null,
            "sourceId": "square",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Barberlites - Trevor",
            "category": "color",
            "description": "For hair no longer than three inches.",
            "price": {
              "kind": "fixed",
              "amount": 100,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option base price; final scope and charges require confirmation."
            },
            "durationMinutes": 45,
            "durationMaxMinutes": null,
            "sourceId": "square",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Child Cut - Jen",
            "category": "haircut",
            "description": null,
            "price": {
              "kind": "fixed",
              "amount": 70,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option base price; final scope and charges require confirmation."
            },
            "durationMinutes": 60,
            "durationMaxMinutes": null,
            "sourceId": "square",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Partial Color - Lucas",
            "category": "color",
            "description": null,
            "price": {
              "kind": "fixed",
              "amount": 75,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option base price; final scope and charges require confirmation."
            },
            "durationMinutes": 60,
            "durationMaxMinutes": null,
            "sourceId": "square",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Partial Color - Jen",
            "category": "color",
            "description": null,
            "price": {
              "kind": "fixed",
              "amount": 90,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option base price; final scope and charges require confirmation."
            },
            "durationMinutes": 60,
            "durationMaxMinutes": null,
            "sourceId": "square",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Partial Color - Trevor",
            "category": "color",
            "description": null,
            "price": {
              "kind": "fixed",
              "amount": 60,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option base price; final scope and charges require confirmation."
            },
            "durationMinutes": 60,
            "durationMaxMinutes": null,
            "sourceId": "square",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Partial Color - Nicole",
            "category": "color",
            "description": null,
            "price": {
              "kind": "fixed",
              "amount": 65,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option base price; final scope and charges require confirmation."
            },
            "durationMinutes": 60,
            "durationMaxMinutes": null,
            "sourceId": "square",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Blow-dry - Nicole",
            "category": "styling",
            "description": null,
            "price": {
              "kind": "fixed",
              "amount": 50,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option base price; final scope and charges require confirmation."
            },
            "durationMinutes": 60,
            "durationMaxMinutes": null,
            "sourceId": "square",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Blow-dry - Andrea",
            "category": "styling",
            "description": null,
            "price": {
              "kind": "fixed",
              "amount": 85,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option base price; final scope and charges require confirmation."
            },
            "durationMinutes": 30,
            "durationMaxMinutes": null,
            "sourceId": "square",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Blow-dry - Jennifer",
            "category": "styling",
            "description": null,
            "price": {
              "kind": "fixed",
              "amount": 70,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option base price; final scope and charges require confirmation."
            },
            "durationMinutes": 30,
            "durationMaxMinutes": null,
            "sourceId": "square",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Blow-dry - Trevor",
            "category": "styling",
            "description": null,
            "price": {
              "kind": "fixed",
              "amount": 60,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option base price; final scope and charges require confirmation."
            },
            "durationMinutes": 45,
            "durationMaxMinutes": null,
            "sourceId": "square",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Blow-dry - Lucie",
            "category": "styling",
            "description": null,
            "price": {
              "kind": "unknown",
              "amount": null,
              "amountMax": null,
              "currency": "USD",
              "note": "No numeric price was published for this option."
            },
            "durationMinutes": 45,
            "durationMaxMinutes": null,
            "sourceId": "square",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Barbering cut & Grey Blending - Andrea",
            "category": "haircut",
            "description": null,
            "price": {
              "kind": "fixed",
              "amount": 172,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option base price; final scope and charges require confirmation."
            },
            "durationMinutes": 60,
            "durationMaxMinutes": null,
            "sourceId": "square",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Barbering cut & Grey Blending - Lucas",
            "category": "haircut",
            "description": null,
            "price": {
              "kind": "fixed",
              "amount": 140,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option base price; final scope and charges require confirmation."
            },
            "durationMinutes": 60,
            "durationMaxMinutes": null,
            "sourceId": "square",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Barbering cut & Grey Blending - Trevor",
            "category": "haircut",
            "description": null,
            "price": {
              "kind": "fixed",
              "amount": 135,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option base price; final scope and charges require confirmation."
            },
            "durationMinutes": 60,
            "durationMaxMinutes": null,
            "sourceId": "square",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Partial Hilite-Cut - Andrea",
            "category": "color",
            "description": null,
            "price": {
              "kind": "fixed",
              "amount": 335,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option base price; final scope and charges require confirmation."
            },
            "durationMinutes": 150,
            "durationMaxMinutes": null,
            "sourceId": "square",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Partial Hilite-Cut - Jennifer",
            "category": "color",
            "description": null,
            "price": {
              "kind": "fixed",
              "amount": 295,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option base price; final scope and charges require confirmation."
            },
            "durationMinutes": 150,
            "durationMaxMinutes": null,
            "sourceId": "square",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Partial Hilite-Cut - Lucas",
            "category": "color",
            "description": null,
            "price": {
              "kind": "fixed",
              "amount": 310,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option base price; final scope and charges require confirmation."
            },
            "durationMinutes": 150,
            "durationMaxMinutes": null,
            "sourceId": "square",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Partial Hilite-Cut - Trevor",
            "category": "color",
            "description": null,
            "price": {
              "kind": "fixed",
              "amount": 270,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option base price; final scope and charges require confirmation."
            },
            "durationMinutes": 180,
            "durationMaxMinutes": null,
            "sourceId": "square",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Partial Hilite-Cut - Nicole",
            "category": "color",
            "description": null,
            "price": {
              "kind": "fixed",
              "amount": 250,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option base price; final scope and charges require confirmation."
            },
            "durationMinutes": 240,
            "durationMaxMinutes": null,
            "sourceId": "square",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Cut & Beard Trim - Trevor",
            "category": "haircut",
            "description": null,
            "price": {
              "kind": "fixed",
              "amount": 100,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option base price; final scope and charges require confirmation."
            },
            "durationMinutes": 60,
            "durationMaxMinutes": null,
            "sourceId": "square",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Olaplex Treatment - Ola Gloss",
            "category": "treatment",
            "description": "The visible option is labeled OlaGloss; confirm exact treatment scope.",
            "price": {
              "kind": "fixed",
              "amount": 60,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option base price; final scope and charges require confirmation."
            },
            "durationMinutes": 30,
            "durationMaxMinutes": null,
            "sourceId": "square",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Haircuts - men",
            "category": "haircut",
            "description": "Website general starting price; exact current stylist option must be confirmed.",
            "price": {
              "kind": "starting_at",
              "amount": 65,
              "amountMax": null,
              "currency": "USD",
              "note": "Website menu starting price; compare current booking option and confirm before appointment."
            },
            "durationMinutes": null,
            "durationMaxMinutes": null,
            "sourceId": "menu",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Haircuts - women",
            "category": "haircut",
            "description": "Website general starting price; exact current stylist option must be confirmed.",
            "price": {
              "kind": "starting_at",
              "amount": 75,
              "amountMax": null,
              "currency": "USD",
              "note": "Website menu starting price; compare current booking option and confirm before appointment."
            },
            "durationMinutes": null,
            "durationMaxMinutes": null,
            "sourceId": "menu",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Styling",
            "category": "styling",
            "description": null,
            "price": {
              "kind": "starting_at",
              "amount": 65,
              "amountMax": null,
              "currency": "USD",
              "note": "Website menu starting price; compare current booking option and confirm before appointment."
            },
            "durationMinutes": null,
            "durationMaxMinutes": null,
            "sourceId": "menu",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Treatments",
            "category": "treatment",
            "description": "Davines scalp/hair treatment; type and duration unspecified.",
            "price": {
              "kind": "starting_at",
              "amount": 25,
              "amountMax": null,
              "currency": "USD",
              "note": "Website menu starting price; compare current booking option and confirm before appointment."
            },
            "durationMinutes": null,
            "durationMaxMinutes": null,
            "sourceId": "menu",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Hair Bonding",
            "category": "treatment",
            "description": "Available as a standalone treatment or color additive.",
            "price": {
              "kind": "starting_at",
              "amount": 45,
              "amountMax": null,
              "currency": "USD",
              "note": "Website menu starting price; compare current booking option and confirm before appointment."
            },
            "durationMinutes": null,
            "durationMaxMinutes": null,
            "sourceId": "menu",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Perms",
            "category": "treatment",
            "description": null,
            "price": {
              "kind": "starting_at",
              "amount": 150,
              "amountMax": null,
              "currency": "USD",
              "note": "Website menu starting price; compare current booking option and confirm before appointment."
            },
            "durationMinutes": null,
            "durationMaxMinutes": null,
            "sourceId": "menu",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Tints",
            "category": "color",
            "description": null,
            "price": {
              "kind": "starting_at",
              "amount": 85,
              "amountMax": null,
              "currency": "USD",
              "note": "Website menu starting price; compare current booking option and confirm before appointment."
            },
            "durationMinutes": null,
            "durationMaxMinutes": null,
            "sourceId": "menu",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Bayalage",
            "category": "color",
            "description": null,
            "price": {
              "kind": "starting_at",
              "amount": 200,
              "amountMax": null,
              "currency": "USD",
              "note": "Website menu starting price; compare current booking option and confirm before appointment."
            },
            "durationMinutes": null,
            "durationMaxMinutes": null,
            "sourceId": "menu",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Highlights",
            "category": "color",
            "description": null,
            "price": {
              "kind": "starting_at",
              "amount": 140,
              "amountMax": null,
              "currency": "USD",
              "note": "Website menu starting price; compare current booking option and confirm before appointment."
            },
            "durationMinutes": null,
            "durationMaxMinutes": null,
            "sourceId": "menu",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Gloss",
            "category": "color",
            "description": null,
            "price": {
              "kind": "starting_at",
              "amount": 40,
              "amountMax": null,
              "currency": "USD",
              "note": "Website menu starting price; compare current booking option and confirm before appointment."
            },
            "durationMinutes": null,
            "durationMaxMinutes": null,
            "sourceId": "menu",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Henna",
            "category": "color",
            "description": null,
            "price": {
              "kind": "starting_at",
              "amount": 100,
              "amountMax": null,
              "currency": "USD",
              "note": "Website menu starting price; compare current booking option and confirm before appointment."
            },
            "durationMinutes": null,
            "durationMaxMinutes": null,
            "sourceId": "menu",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "EXPRESS Gloss",
            "category": "color",
            "description": "Salon contact required. Five minutes describes application only, not total appointment duration.",
            "price": {
              "kind": "starting_at",
              "amount": 45,
              "amountMax": null,
              "currency": "USD",
              "note": "Website menu starting price; compare current booking option and confirm before appointment."
            },
            "durationMinutes": null,
            "durationMaxMinutes": null,
            "sourceId": "menu",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "EXPRESS Blow-dry",
            "category": "styling",
            "description": "Salon contact required; arrives with already clean hair.",
            "price": {
              "kind": "starting_at",
              "amount": 50,
              "amountMax": null,
              "currency": "USD",
              "note": "Website menu starting price; compare current booking option and confirm before appointment."
            },
            "durationMinutes": 30,
            "durationMaxMinutes": null,
            "sourceId": "menu",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "EXPRESS Treatment",
            "category": "treatment",
            "description": "Salon contact required; moisture/reconstruction treatment.",
            "price": {
              "kind": "starting_at",
              "amount": 25,
              "amountMax": null,
              "currency": "USD",
              "note": "Website menu starting price; compare current booking option and confirm before appointment."
            },
            "durationMinutes": null,
            "durationMaxMinutes": null,
            "sourceId": "menu",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "NEW CLIENTS Fringe Trim / Neck Trim",
            "category": "haircut",
            "description": "Complimentary for existing clients; published new-client starting amount.",
            "price": {
              "kind": "starting_at",
              "amount": 15,
              "amountMax": null,
              "currency": "USD",
              "note": "Website menu starting price; compare current booking option and confirm before appointment."
            },
            "durationMinutes": 5,
            "durationMaxMinutes": 10,
            "sourceId": "menu",
            "priceSourceId": null,
            "durationSourceId": null
          }
        ],
        "addOnsStatus": "published",
        "addOns": [
          {
            "name": "EXPRESS blow-dry add-on",
            "category": "styling",
            "description": "With Express Gloss or Express Treatment.",
            "price": {
              "kind": "fixed",
              "amount": 20,
              "amountMax": null,
              "currency": "USD",
              "note": null
            },
            "durationMinutes": null,
            "durationMaxMinutes": null,
            "sourceId": "menu",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "EXPRESS shampoo add-on",
            "category": "styling",
            "description": "With Express Blow-dry.",
            "price": {
              "kind": "fixed",
              "amount": 20,
              "amountMax": null,
              "currency": "USD",
              "note": null
            },
            "durationMinutes": null,
            "durationMaxMinutes": null,
            "sourceId": "menu",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Hair Bonding added to color",
            "category": "treatment",
            "description": "Explicit color additive; also offered standalone.",
            "price": {
              "kind": "starting_at",
              "amount": 45,
              "amountMax": null,
              "currency": "USD",
              "note": null
            },
            "durationMinutes": null,
            "durationMaxMinutes": null,
            "sourceId": "menu",
            "priceSourceId": null,
            "durationSourceId": null
          }
        ],
        "stylistsStatus": "published",
        "stylists": [
          {
            "name": "Lucas",
            "specialties": [
              "color"
            ],
            "bio": "Owner and master colorist.",
            "bookingUrl": null,
            "portfolioUrl": null,
            "sourceId": "team"
          },
          {
            "name": "Andrea",
            "specialties": [
              "precision cutting",
              "multidimensional color"
            ],
            "bio": null,
            "bookingUrl": null,
            "portfolioUrl": null,
            "sourceId": "team"
          },
          {
            "name": "Jennifer",
            "specialties": [
              "cutting",
              "color"
            ],
            "bio": null,
            "bookingUrl": null,
            "portfolioUrl": null,
            "sourceId": "team"
          },
          {
            "name": "Trevor",
            "specialties": [
              "short and long precision cuts",
              "color",
              "color correction",
              "henna"
            ],
            "bio": null,
            "bookingUrl": null,
            "portfolioUrl": null,
            "sourceId": "team"
          },
          {
            "name": "Nicole",
            "specialties": [
              "color"
            ],
            "bio": "Team page describes developing/apprentice experience; current service options must be confirmed.",
            "bookingUrl": null,
            "portfolioUrl": null,
            "sourceId": "team"
          }
        ],
        "policies": {
          "cancellation": {
            "value": "Haircuts and color require 48 hours notice during regular business hours. Tuesday appointments must be canceled by 5pm the preceding Saturday to avoid an unspecified cancellation fee.",
            "sourceId": "policy"
          },
          "deposit": {
            "value": null,
            "sourceId": null
          },
          "noShow": {
            "value": null,
            "sourceId": null
          },
          "lateArrival": {
            "value": "Notify the salon when running late. More than 15 minutes late may require rescheduling.",
            "sourceId": "policy"
          },
          "consultation": {
            "value": "Bleach-and-tone, balayage, creative color and color correction require an in-salon consultation before booking.",
            "sourceId": "policy"
          },
          "payment": {
            "value": "Cash or check preferred. Tips cannot be paid by credit card; tips may be included in a check, or paid by cash or the stylist’s Venmo.",
            "sourceId": "policy"
          },
          "walkIns": {
            "value": null,
            "sourceId": null
          }
        },
        "unknowns": [
          "No live appointment availability or booking confirmation was checked.",
          "Published prices are not a final total; applicable extra product, time, tax and gratuity must be confirmed.",
          "Online booking is published as available only at least 48 hours ahead; same/next-day requests require contacting the salon. This is a booking-window rule, not evidence of open slots.",
          "Express services cannot be booked online according to the salon.",
          "No deposit, no-show-specific fee or walk-in policy was found."
        ],
        "conflicts": [
          "Partial HighLights / Andrea: the public booking option amount is $200, while its price description says 'Starts at $185'. Price remains unknown until clarified.",
          "Partial HighLights / Nicole: the public booking option amount is $165, while its price description says 'Starts at $130'. Price remains unknown until clarified.",
          "Full HighLights / Andrea: the public booking option amount is $250, while its price description says 'Starts at $225'. Price remains unknown until clarified.",
          "Full HighLights / Lucas: the public booking option amount is $300, while its price description says 'Starts at $250'. Price remains unknown until clarified.",
          "Full HighLights / Jen: the public booking option amount is $250, while its price description says 'Starts at $225'. Price remains unknown until clarified.",
          "Full HighLights / Nicole: the public booking option amount is $200, while its price description says 'Starts at $165'. Price remains unknown until clarified.",
          "Full Highlight & Cut / Trevor: the public booking option amount is $345, while its price description says 'Starts at $300'. Price remains unknown until clarified.",
          "General website prices (for example $65/$75 haircuts and $140+ highlights) differ from the visible stylist options. General prices are not substituted for a specific option.",
          "Some service-level aggregate amounts differ from their visible option amounts. Visible customer option amounts are retained; explicit option amount/description conflicts remain unknown.",
          "The customer menu contains a Lucie blow-dry option, while the reviewed team page does not list Lucie. This remains an unconfirmed option label, not a current staff assertion."
        ]
      }
    },
    {
      "slug": "ki-to-ne-hairworks-outer-richmond",
      "ref": "san-francisco/hair-salon/ki-to-ne-hairworks-outer-richmond",
      "name": "KI-TO-NE hairworks",
      "neighborhood": "Outer Richmond",
      "researched_at": "2026-10-24T09:38:45.388227+00:00",
      "coverage": {
        "services": 44,
        "services_with_prices": 41,
        "services_with_durations": 44,
        "add_ons": 4,
        "stylists": 1,
        "published_policies": 2,
        "policy_fields": 7,
        "successfully_read_sources": 2
      },
      "unknowns": [
        "Public Square Online homepage states that new clients cannot currently be accepted. Confirm this restriction before any new-client recommendation.",
        "No live appointment availability or booking confirmation was checked.",
        "Published prices are not a final total; applicable extra product, time, tax and gratuity must be confirmed.",
        "Standalone website could not be read with or without www; the public Square customer menu is the factual source.",
        "Deposit, no-show fees, consultation, payment and walk-in terms were not found.",
        "A public booking menu is not evidence that new-client appointments are available."
      ],
      "conflicts": [
        "Keratin add-on description publishes $60-$100 while the option label starts at $55. The numeric price is withheld pending clarification."
      ],
      "url": "https://agentsalonsf.com/salons/ki-to-ne-hairworks-outer-richmond",
      "markdown_url": "https://agentsalonsf.com/salons/ki-to-ne-hairworks-outer-richmond.md",
      "api_url": "https://agentsalonsf.com/api/v1/salons/ki-to-ne-hairworks-outer-richmond",
      "public_research": {
        "salonSlug": "ki-to-ne-hairworks-outer-richmond",
        "researchedAt": "2026-10-24T09:38:45.388227+00:00",
        "summary": "Full public Square menu recovered, including hair-length options, prices, durations and four explicit add-ons. Its public Square Online homepage still states that new clients are not accepted. This restriction must be confirmed before recommending a new-client visit.",
        "sources": [
          {
            "id": "home",
            "url": "https://kitone-hairworks.square.site/",
            "kind": "booking_provider",
            "checkedAt": "2026-10-24T09:27:48.286175+00:00",
            "outcome": "read",
            "note": "Public Square Online page and customer-visible banner text reviewed. The page returned a client-rendered service shell; no service menu was readable."
          },
          {
            "id": "website",
            "url": "https://www.kitonehairworks.com/",
            "kind": "salon_website",
            "checkedAt": "2026-10-24T09:30:02.680148+00:00",
            "outcome": "unavailable",
            "note": "Public page text reviewed."
          },
          {
            "id": "website-alt",
            "url": "https://kitonehairworks.com/",
            "kind": "salon_website",
            "checkedAt": "2026-10-24T09:31:55.291325+00:00",
            "outcome": "unavailable",
            "note": "Public page text reviewed."
          },
          {
            "id": "square-direct",
            "url": "https://book.squareup.com/appointments/23b1edbc-467f-46cd-ba4b-d5b77c4af0bc/location/WQR1KBK7HSD5W",
            "kind": "booking_provider",
            "checkedAt": "2026-10-24T09:36:18.476039+00:00",
            "outcome": "read",
            "note": "Full public customer menu, visible hair-length options and displayed policies read from Square HTML. Exact public link discovered from SalonTonight; no third-party prices, descriptions, staff or ratings imported. Business name and Geary Boulevard location match the public salon page."
          }
        ],
        "menuStatus": "published",
        "menu": [
          {
            "name": "Bang Trim",
            "category": "haircut",
            "description": null,
            "price": {
              "kind": "fixed",
              "amount": 12,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option base price; final scope and charges require confirmation."
            },
            "durationMinutes": 15,
            "durationMaxMinutes": null,
            "sourceId": "square-direct",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Touch Up Color (up to 1 inch)",
            "category": "color",
            "description": "Includes haircut, shampoo and blow-dry; no bleach.",
            "price": {
              "kind": "fixed",
              "amount": 145,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option base price; final scope and charges require confirmation."
            },
            "durationMinutes": 120,
            "durationMaxMinutes": null,
            "sourceId": "square-direct",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Haircut",
            "category": "haircut",
            "description": "Shampoo and blow-dry included.",
            "price": {
              "kind": "range",
              "amount": 70,
              "amountMax": 75,
              "currency": "USD",
              "note": "Published range; final service scope and charges require confirmation."
            },
            "durationMinutes": 75,
            "durationMaxMinutes": null,
            "sourceId": "square-direct",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Child Hair Cut (Under 6 y/o)",
            "category": "haircut",
            "description": null,
            "price": {
              "kind": "starting_at",
              "amount": 45,
              "amountMax": null,
              "currency": "USD",
              "note": "Published customer-menu price; final scope and charges require confirmation."
            },
            "durationMinutes": 45,
            "durationMaxMinutes": null,
            "sourceId": "square-direct",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Child Hair Cut (Under 16 y/o)",
            "category": "haircut",
            "description": "Shampoo and blow-dry included.",
            "price": {
              "kind": "starting_at",
              "amount": 55,
              "amountMax": null,
              "currency": "USD",
              "note": "Published customer-menu price; final scope and charges require confirmation."
            },
            "durationMinutes": 75,
            "durationMaxMinutes": null,
            "sourceId": "square-direct",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Deep Treatment -Milbon Repair - For short hair",
            "category": "treatment",
            "description": "Four-step conditioning treatment; efficacy and longevity claims were not independently evaluated.",
            "price": {
              "kind": "fixed",
              "amount": 65,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option base price; final scope and charges require confirmation."
            },
            "durationMinutes": 50,
            "durationMaxMinutes": null,
            "sourceId": "square-direct",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Deep Treatment -Milbon Repair - For Medium hair",
            "category": "treatment",
            "description": "Four-step conditioning treatment; efficacy and longevity claims were not independently evaluated.",
            "price": {
              "kind": "fixed",
              "amount": 75,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option base price; final scope and charges require confirmation."
            },
            "durationMinutes": 60,
            "durationMaxMinutes": null,
            "sourceId": "square-direct",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Deep Treatment -Milbon Repair - For Long Hair",
            "category": "treatment",
            "description": "Four-step conditioning treatment; efficacy and longevity claims were not independently evaluated.",
            "price": {
              "kind": "fixed",
              "amount": 85,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option base price; final scope and charges require confirmation."
            },
            "durationMinutes": 60,
            "durationMaxMinutes": null,
            "sourceId": "square-direct",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Japanese Thermal Straightening - bang only and more",
            "category": "treatment",
            "description": "Includes haircut, shampoo and blow-dry; price depends on length and density.",
            "price": {
              "kind": "unknown",
              "amount": null,
              "amountMax": null,
              "currency": "USD",
              "note": "No numeric price was published for this option."
            },
            "durationMinutes": 150,
            "durationMaxMinutes": null,
            "sourceId": "square-direct",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Japanese Thermal Straightening - For short hair",
            "category": "treatment",
            "description": "Includes haircut, shampoo and blow-dry; price depends on length and density.",
            "price": {
              "kind": "fixed",
              "amount": 300,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option base price; final scope and charges require confirmation."
            },
            "durationMinutes": 195,
            "durationMaxMinutes": null,
            "sourceId": "square-direct",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Japanese Thermal Straightening - For medium hair",
            "category": "treatment",
            "description": "Includes haircut, shampoo and blow-dry; price depends on length and density.",
            "price": {
              "kind": "fixed",
              "amount": 330,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option base price; final scope and charges require confirmation."
            },
            "durationMinutes": 210,
            "durationMaxMinutes": null,
            "sourceId": "square-direct",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Japanese Thermal Straightening - For long hair",
            "category": "treatment",
            "description": "Includes haircut, shampoo and blow-dry; price depends on length and density.",
            "price": {
              "kind": "fixed",
              "amount": 360,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option base price; final scope and charges require confirmation."
            },
            "durationMinutes": 240,
            "durationMaxMinutes": null,
            "sourceId": "square-direct",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Digital Perm",
            "category": "treatment",
            "description": "Includes haircut, shampoo and blow-dry; price depends on length.",
            "price": {
              "kind": "starting_at",
              "amount": 210,
              "amountMax": null,
              "currency": "USD",
              "note": "Published customer-menu price; final scope and charges require confirmation."
            },
            "durationMinutes": 180,
            "durationMaxMinutes": null,
            "sourceId": "square-direct",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Digital Perm - For medium hair",
            "category": "treatment",
            "description": "Includes haircut, shampoo and blow-dry; price depends on length.",
            "price": {
              "kind": "fixed",
              "amount": 220,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option base price; final scope and charges require confirmation."
            },
            "durationMinutes": 150,
            "durationMaxMinutes": null,
            "sourceId": "square-direct",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Digital Perm - For long hair",
            "category": "treatment",
            "description": "Includes haircut, shampoo and blow-dry; price depends on length.",
            "price": {
              "kind": "fixed",
              "amount": 250,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option base price; final scope and charges require confirmation."
            },
            "durationMinutes": 180,
            "durationMaxMinutes": null,
            "sourceId": "square-direct",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Single Process Hair Color - For short hair",
            "category": "color",
            "description": "Includes haircut, shampoo and blow-dry.",
            "price": {
              "kind": "fixed",
              "amount": 165,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option base price; final scope and charges require confirmation."
            },
            "durationMinutes": 150,
            "durationMaxMinutes": null,
            "sourceId": "square-direct",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Single Process Hair Color - For medium hair",
            "category": "color",
            "description": "Includes haircut, shampoo and blow-dry.",
            "price": {
              "kind": "fixed",
              "amount": 200,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option base price; final scope and charges require confirmation."
            },
            "durationMinutes": 150,
            "durationMaxMinutes": null,
            "sourceId": "square-direct",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Single Process Hair Color - For long hair",
            "category": "color",
            "description": "Includes haircut, shampoo and blow-dry.",
            "price": {
              "kind": "fixed",
              "amount": 230,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option base price; final scope and charges require confirmation."
            },
            "durationMinutes": 180,
            "durationMaxMinutes": null,
            "sourceId": "square-direct",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Head Spa",
            "category": "other",
            "description": "Published scalp care service; medical outcome claims were not evaluated.",
            "price": {
              "kind": "fixed",
              "amount": 70,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option base price; final scope and charges require confirmation."
            },
            "durationMinutes": 60,
            "durationMaxMinutes": null,
            "sourceId": "square-direct",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Shampoo and blow-dry",
            "category": "styling",
            "description": null,
            "price": {
              "kind": "fixed",
              "amount": 50,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option base price; final scope and charges require confirmation."
            },
            "durationMinutes": 60,
            "durationMaxMinutes": null,
            "sourceId": "square-direct",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Keratin Treatment - For short hair",
            "category": "treatment",
            "description": "Express keratin treatment; product efficacy or longevity not independently verified.",
            "price": {
              "kind": "fixed",
              "amount": 170,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option base price; final scope and charges require confirmation."
            },
            "durationMinutes": 120,
            "durationMaxMinutes": null,
            "sourceId": "square-direct",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Keratin Treatment - For medium hair",
            "category": "treatment",
            "description": "Express keratin treatment; product efficacy or longevity not independently verified.",
            "price": {
              "kind": "fixed",
              "amount": 200,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option base price; final scope and charges require confirmation."
            },
            "durationMinutes": 135,
            "durationMaxMinutes": null,
            "sourceId": "square-direct",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Keratin Treatment - For long hair",
            "category": "treatment",
            "description": "Express keratin treatment; product efficacy or longevity not independently verified.",
            "price": {
              "kind": "fixed",
              "amount": 230,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option base price; final scope and charges require confirmation."
            },
            "durationMinutes": 150,
            "durationMaxMinutes": null,
            "sourceId": "square-direct",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Keratin Complex Smoothing Treatment - For short hair",
            "category": "treatment",
            "description": "Published smoothing treatment; efficacy or longevity not independently verified.",
            "price": {
              "kind": "fixed",
              "amount": 200,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option base price; final scope and charges require confirmation."
            },
            "durationMinutes": 150,
            "durationMaxMinutes": null,
            "sourceId": "square-direct",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Keratin Complex Smoothing Treatment - For medium hair",
            "category": "treatment",
            "description": "Published smoothing treatment; efficacy or longevity not independently verified.",
            "price": {
              "kind": "fixed",
              "amount": 240,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option base price; final scope and charges require confirmation."
            },
            "durationMinutes": 210,
            "durationMaxMinutes": null,
            "sourceId": "square-direct",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Keratin Complex Smoothing Treatment - For long hair",
            "category": "treatment",
            "description": "Published smoothing treatment; efficacy or longevity not independently verified.",
            "price": {
              "kind": "fixed",
              "amount": 270,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option base price; final scope and charges require confirmation."
            },
            "durationMinutes": 210,
            "durationMaxMinutes": null,
            "sourceId": "square-direct",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Deep Treatment -Milbon Smooth- - For Short hair",
            "category": "treatment",
            "description": "Includes shampoo and blow-dry, but not haircut.",
            "price": {
              "kind": "fixed",
              "amount": 60,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option base price; final scope and charges require confirmation."
            },
            "durationMinutes": 45,
            "durationMaxMinutes": null,
            "sourceId": "square-direct",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Deep Treatment -Milbon Smooth- - For Medium hair",
            "category": "treatment",
            "description": "Includes shampoo and blow-dry, but not haircut.",
            "price": {
              "kind": "fixed",
              "amount": 65,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option base price; final scope and charges require confirmation."
            },
            "durationMinutes": 45,
            "durationMaxMinutes": null,
            "sourceId": "square-direct",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Deep Treatment -Milbon Smooth- - For Long hair",
            "category": "treatment",
            "description": "Includes shampoo and blow-dry, but not haircut.",
            "price": {
              "kind": "fixed",
              "amount": 70,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option base price; final scope and charges require confirmation."
            },
            "durationMinutes": 60,
            "durationMaxMinutes": null,
            "sourceId": "square-direct",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Regular Perm - Bang only",
            "category": "treatment",
            "description": "Includes haircut, shampoo and blow-dry; price depends on length.",
            "price": {
              "kind": "fixed",
              "amount": 110,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option base price; final scope and charges require confirmation."
            },
            "durationMinutes": 105,
            "durationMaxMinutes": null,
            "sourceId": "square-direct",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Regular Perm - For short hair",
            "category": "treatment",
            "description": "Includes haircut, shampoo and blow-dry; price depends on length.",
            "price": {
              "kind": "fixed",
              "amount": 165,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option base price; final scope and charges require confirmation."
            },
            "durationMinutes": 150,
            "durationMaxMinutes": null,
            "sourceId": "square-direct",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Regular Perm - For medium hair",
            "category": "treatment",
            "description": "Includes haircut, shampoo and blow-dry; price depends on length.",
            "price": {
              "kind": "fixed",
              "amount": 185,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option base price; final scope and charges require confirmation."
            },
            "durationMinutes": 165,
            "durationMaxMinutes": null,
            "sourceId": "square-direct",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Regular Perm - For long hair",
            "category": "treatment",
            "description": "Includes haircut, shampoo and blow-dry; price depends on length.",
            "price": {
              "kind": "fixed",
              "amount": 220,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option base price; final scope and charges require confirmation."
            },
            "durationMinutes": 195,
            "durationMaxMinutes": null,
            "sourceId": "square-direct",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Partial Highlight - For short hair",
            "category": "color",
            "description": "Regular-color highlights without bleach; includes haircut, shampoo and blow-dry.",
            "price": {
              "kind": "fixed",
              "amount": 155,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option base price; final scope and charges require confirmation."
            },
            "durationMinutes": 150,
            "durationMaxMinutes": null,
            "sourceId": "square-direct",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Partial Highlight - For medium hair",
            "category": "color",
            "description": "Regular-color highlights without bleach; includes haircut, shampoo and blow-dry.",
            "price": {
              "kind": "fixed",
              "amount": 180,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option base price; final scope and charges require confirmation."
            },
            "durationMinutes": 150,
            "durationMaxMinutes": null,
            "sourceId": "square-direct",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Partial Highlight - For long hair",
            "category": "color",
            "description": "Regular-color highlights without bleach; includes haircut, shampoo and blow-dry.",
            "price": {
              "kind": "fixed",
              "amount": 200,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option base price; final scope and charges require confirmation."
            },
            "durationMinutes": 150,
            "durationMaxMinutes": null,
            "sourceId": "square-direct",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Full Highlight - For short hair",
            "category": "color",
            "description": "Regular-color highlights without bleach; includes haircut, shampoo and blow-dry.",
            "price": {
              "kind": "fixed",
              "amount": 180,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option base price; final scope and charges require confirmation."
            },
            "durationMinutes": 165,
            "durationMaxMinutes": null,
            "sourceId": "square-direct",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Full Highlight - For medium hair",
            "category": "color",
            "description": "Regular-color highlights without bleach; includes haircut, shampoo and blow-dry.",
            "price": {
              "kind": "fixed",
              "amount": 200,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option base price; final scope and charges require confirmation."
            },
            "durationMinutes": 165,
            "durationMaxMinutes": null,
            "sourceId": "square-direct",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Full Highlight - For long hair",
            "category": "color",
            "description": "Regular-color highlights without bleach; includes haircut, shampoo and blow-dry.",
            "price": {
              "kind": "fixed",
              "amount": 230,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option base price; final scope and charges require confirmation."
            },
            "durationMinutes": 195,
            "durationMaxMinutes": null,
            "sourceId": "square-direct",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Bleach Highlights and Tone",
            "category": "color",
            "description": null,
            "price": {
              "kind": "unknown",
              "amount": null,
              "amountMax": null,
              "currency": "USD",
              "note": "No numeric price was published for this option."
            },
            "durationMinutes": 240,
            "durationMaxMinutes": null,
            "sourceId": "square-direct",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Double Process Color, Bleach and Tone - For short hair",
            "category": "color",
            "description": "Includes haircut, shampoo and blow-dry; price varies with length and density.",
            "price": {
              "kind": "fixed",
              "amount": 240,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option base price; final scope and charges require confirmation."
            },
            "durationMinutes": 210,
            "durationMaxMinutes": null,
            "sourceId": "square-direct",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Double Process Color, Bleach and Tone - For medium hair",
            "category": "color",
            "description": "Includes haircut, shampoo and blow-dry; price varies with length and density.",
            "price": {
              "kind": "fixed",
              "amount": 270,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option base price; final scope and charges require confirmation."
            },
            "durationMinutes": 240,
            "durationMaxMinutes": null,
            "sourceId": "square-direct",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Double Process Color, Bleach and Tone - For long hair",
            "category": "color",
            "description": "Includes haircut, shampoo and blow-dry; price varies with length and density.",
            "price": {
              "kind": "fixed",
              "amount": 320,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option base price; final scope and charges require confirmation."
            },
            "durationMinutes": 270,
            "durationMaxMinutes": null,
            "sourceId": "square-direct",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Ombre, Balayage",
            "category": "color",
            "description": "Includes haircut, shampoo and blow-dry; numeric price not published.",
            "price": {
              "kind": "unknown",
              "amount": null,
              "amountMax": null,
              "currency": "USD",
              "note": "No numeric price was published for this option."
            },
            "durationMinutes": 240,
            "durationMaxMinutes": null,
            "sourceId": "square-direct",
            "priceSourceId": null,
            "durationSourceId": null
          }
        ],
        "addOnsStatus": "published",
        "addOns": [
          {
            "name": "Deep Treatment -Milbon Smooth- (add on other services)",
            "category": "treatment",
            "description": "Hair-length-dependent treatment add-on.",
            "price": {
              "kind": "range",
              "amount": 30,
              "amountMax": 45,
              "currency": "USD",
              "note": "Description publishes $30-$45 by hair length; booking label starts at $30."
            },
            "durationMinutes": 30,
            "durationMaxMinutes": null,
            "sourceId": "square-direct",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Deep Treatment -Milbon Repair-(add on other service)",
            "category": "treatment",
            "description": "Hair-length-dependent repair treatment add-on.",
            "price": {
              "kind": "range",
              "amount": 35,
              "amountMax": 55,
              "currency": "USD",
              "note": "Description publishes $35-$55 by hair length; booking label starts at $35."
            },
            "durationMinutes": 45,
            "durationMaxMinutes": null,
            "sourceId": "square-direct",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Head Spa (add on with other services)",
            "category": "other",
            "description": null,
            "price": {
              "kind": "fixed",
              "amount": 45,
              "amountMax": null,
              "currency": "USD",
              "note": "Published option base price; final scope and charges require confirmation."
            },
            "durationMinutes": 30,
            "durationMaxMinutes": null,
            "sourceId": "square-direct",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Keratin Treatment ( add on other services )",
            "category": "treatment",
            "description": "Hair-length-dependent treatment add-on; price description conflicts with the booking starting amount.",
            "price": {
              "kind": "unknown",
              "amount": null,
              "amountMax": null,
              "currency": "USD",
              "note": "Description publishes $60-$100 but booking label starts at $55; confirm the current add-on price."
            },
            "durationMinutes": 45,
            "durationMaxMinutes": null,
            "sourceId": "square-direct",
            "priceSourceId": null,
            "durationSourceId": null
          }
        ],
        "stylistsStatus": "published",
        "stylists": [
          {
            "name": "Rena",
            "specialties": [],
            "bio": "Public customer booking page displays this staff first name; no specialties stated.",
            "bookingUrl": null,
            "portfolioUrl": null,
            "sourceId": "square-direct"
          }
        ],
        "policies": {
          "cancellation": {
            "value": "Cancel or reschedule at least 24 hours before the appointment; a fee is not stated.",
            "sourceId": "square-direct"
          },
          "deposit": {
            "value": null,
            "sourceId": null
          },
          "noShow": {
            "value": null,
            "sourceId": null
          },
          "lateArrival": {
            "value": "If the client has not arrived within 15 minutes after the appointment time and has not notified the salon, the appointment is canceled.",
            "sourceId": "square-direct"
          },
          "consultation": {
            "value": null,
            "sourceId": null
          },
          "payment": {
            "value": null,
            "sourceId": null
          },
          "walkIns": {
            "value": null,
            "sourceId": null
          }
        },
        "unknowns": [
          "Public Square Online homepage states that new clients cannot currently be accepted. Confirm this restriction before any new-client recommendation.",
          "No live appointment availability or booking confirmation was checked.",
          "Published prices are not a final total; applicable extra product, time, tax and gratuity must be confirmed.",
          "Standalone website could not be read with or without www; the public Square customer menu is the factual source.",
          "Deposit, no-show fees, consultation, payment and walk-in terms were not found.",
          "A public booking menu is not evidence that new-client appointments are available."
        ],
        "conflicts": [
          "Keratin add-on description publishes $60-$100 while the option label starts at $55. The numeric price is withheld pending clarification."
        ]
      }
    },
    {
      "slug": "kyles-barbershop-financial-district-south-beach",
      "ref": "san-francisco/hair-salon/kyles-barbershop-financial-district-south-beach",
      "name": "Kyle's BarberShop",
      "neighborhood": "Financial District / South Beach",
      "researched_at": "2026-10-24T09:33:36Z",
      "coverage": {
        "services": 3,
        "services_with_prices": 3,
        "services_with_durations": 3,
        "add_ons": 0,
        "stylists": 1,
        "published_policies": 0,
        "policy_fields": 7,
        "successfully_read_sources": 2
      },
      "unknowns": [
        "Live appointment availability was not checked.",
        "Final total including any mandatory extras, tax and tip is not established by published base prices.",
        "cancellation terms were not established from the public pages checked.",
        "deposit terms were not established from the public pages checked.",
        "noShow terms were not established from the public pages checked.",
        "lateArrival terms were not established from the public pages checked.",
        "consultation terms were not established from the public pages checked.",
        "payment terms were not established from the public pages checked.",
        "walkIns terms were not established from the public pages checked."
      ],
      "conflicts": [],
      "url": "https://agentsalonsf.com/salons/kyles-barbershop-financial-district-south-beach",
      "markdown_url": "https://agentsalonsf.com/salons/kyles-barbershop-financial-district-south-beach.md",
      "api_url": "https://agentsalonsf.com/api/v1/salons/kyles-barbershop-financial-district-south-beach",
      "public_research": {
        "salonSlug": "kyles-barbershop-financial-district-south-beach",
        "researchedAt": "2026-10-24T09:33:36Z",
        "summary": "All three services and the public barber name were recovered from the customer booking page; cancellation and deposit terms were not published in the pages checked.",
        "sources": [
          {
            "id": "business",
            "url": "https://square.site/book/EEC2RMRWC7NVH/kyle-s-barbershop-san-francisco-ca",
            "kind": "booking_provider",
            "checkedAt": "2026-10-24T09:33:36Z",
            "outcome": "read",
            "note": "Public business page: location, three services, prices, durations and Kyle."
          },
          {
            "id": "booking",
            "url": "https://book.squareup.com/appointments/1ac531c4-d9f1-463e-83db-b835fb293c90/location/EEC2RMRWC7NVH",
            "kind": "booking_provider",
            "checkedAt": "2026-10-24T09:33:36Z",
            "outcome": "read",
            "note": "Read customer-facing service menu embedded in public HTML; no slot query or booking action."
          }
        ],
        "menuStatus": "published",
        "menu": [
          {
            "name": "Haircut+Beard Trim",
            "category": "haircut",
            "description": null,
            "price": {
              "kind": "fixed",
              "amount": 80,
              "amountMax": null,
              "currency": "USD",
              "note": null
            },
            "durationMinutes": 60,
            "durationMaxMinutes": null,
            "sourceId": "booking",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Zero/Skin fade",
            "category": "haircut",
            "description": "Includes a haircut with the sides taken to zero or skin.",
            "price": {
              "kind": "fixed",
              "amount": 70,
              "amountMax": null,
              "currency": "USD",
              "note": null
            },
            "durationMinutes": 45,
            "durationMaxMinutes": null,
            "sourceId": "booking",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Men’s Haircut",
            "category": "haircut",
            "description": null,
            "price": {
              "kind": "fixed",
              "amount": 65,
              "amountMax": null,
              "currency": "USD",
              "note": null
            },
            "durationMinutes": 45,
            "durationMaxMinutes": null,
            "sourceId": "booking",
            "priceSourceId": null,
            "durationSourceId": null
          }
        ],
        "addOnsStatus": "unknown",
        "addOns": [],
        "stylistsStatus": "published",
        "stylists": [
          {
            "name": "Kyle",
            "specialties": [],
            "bio": null,
            "bookingUrl": "https://book.squareup.com/appointments/1ac531c4-d9f1-463e-83db-b835fb293c90/location/EEC2RMRWC7NVH",
            "portfolioUrl": null,
            "sourceId": "business"
          }
        ],
        "policies": {
          "cancellation": {
            "value": null,
            "sourceId": null
          },
          "deposit": {
            "value": null,
            "sourceId": null
          },
          "noShow": {
            "value": null,
            "sourceId": null
          },
          "lateArrival": {
            "value": null,
            "sourceId": null
          },
          "consultation": {
            "value": null,
            "sourceId": null
          },
          "payment": {
            "value": null,
            "sourceId": null
          },
          "walkIns": {
            "value": null,
            "sourceId": null
          }
        },
        "unknowns": [
          "Live appointment availability was not checked.",
          "Final total including any mandatory extras, tax and tip is not established by published base prices.",
          "cancellation terms were not established from the public pages checked.",
          "deposit terms were not established from the public pages checked.",
          "noShow terms were not established from the public pages checked.",
          "lateArrival terms were not established from the public pages checked.",
          "consultation terms were not established from the public pages checked.",
          "payment terms were not established from the public pages checked.",
          "walkIns terms were not established from the public pages checked."
        ],
        "conflicts": []
      }
    },
    {
      "slug": "lets-get-cute-outer-mission",
      "ref": "san-francisco/hair-salon/lets-get-cute-outer-mission",
      "name": "Let's Get Cute",
      "neighborhood": "Outer Mission",
      "researched_at": "2026-10-24T09:36:49Z",
      "coverage": {
        "services": 99,
        "services_with_prices": 99,
        "services_with_durations": 99,
        "add_ons": 19,
        "stylists": 7,
        "published_policies": 5,
        "policy_fields": 7,
        "successfully_read_sources": 10
      },
      "unknowns": [
        "Live appointment availability was not checked.",
        "Final total including any mandatory extras, tax and tip is not established by published base prices.",
        "Other independent professionals' full menus are not exposed by their placeholder profiles.",
        "The broad salon handoff should be the official homepage, which directs customers to the correct independent professional.",
        "noShow terms were not established from the public pages checked.",
        "walkIns terms were not established from the public pages checked.",
        "Asa deposit crediting is not explicit; its image card permits cash for the remaining balance and requires final payment at the appointment. These are not salon-wide terms."
      ],
      "conflicts": [
        "Catalog Square link shygrlbeauty.square.site is explicitly the nail technician route. Hair booking is linked by the homepage to letsgetcutelounge.as.me and Asa to acedbyasa.as.me.",
        "Joy calendar requires a $25 non-creditable booking fee, while a service description mentions a $25-$50 deposit. Confirm the selected stylist/service terms.",
        "The add-on list has a $25 squeeze-in fee and detangling from $15, while several service descriptions warn of $45 unplanned-wash and $25 unplanned-detangling fees. Do not treat these as interchangeable.",
        "Several public team subpages contain default template names and placeholder contacts; those were excluded."
      ],
      "url": "https://agentsalonsf.com/salons/lets-get-cute-outer-mission",
      "markdown_url": "https://agentsalonsf.com/salons/lets-get-cute-outer-mission.md",
      "api_url": "https://agentsalonsf.com/api/v1/salons/lets-get-cute-outer-mission",
      "public_research": {
        "salonSlug": "lets-get-cute-outer-mission",
        "researchedAt": "2026-10-24T09:36:49Z",
        "summary": "Public hair menus from the salon Acuity calendar and separately linked Asa calendar, including their add-ons. Independent professionals have different deposits/fees; the catalog Square route belongs to the nail technician.",
        "sources": [
          {
            "id": "website",
            "url": "https://www.letsgetcute.com/",
            "kind": "salon_website",
            "checkedAt": "2026-10-24T09:33:36Z",
            "outcome": "read",
            "note": "Read independent hair team and exact salon/Asa hair booking links."
          },
          {
            "id": "lashondra",
            "url": "https://www.letsgetcute.com/atthelounge",
            "kind": "salon_website",
            "checkedAt": "2026-10-24T09:33:36Z",
            "outcome": "read",
            "note": "Read owner professional specialty biography."
          },
          {
            "id": "nail",
            "url": "https://www.letsgetcute.com/nailtechnician",
            "kind": "salon_website",
            "checkedAt": "2026-10-24T09:33:36Z",
            "outcome": "read",
            "note": "Read explicit Nail Technician label and link to shygrlbeauty.square.site."
          },
          {
            "id": "lounge",
            "url": "https://letsgetcutelounge.as.me/schedule/a9fc65dc",
            "kind": "booking_provider",
            "checkedAt": "2026-10-24T09:33:36Z",
            "outcome": "read",
            "note": "Official salon-linked public HTML embeds active, non-private customer service menu, add-ons and calendar descriptions. No client data or hidden appointment types retained."
          },
          {
            "id": "asa",
            "url": "https://acedbyasa.as.me/schedule/75c77f0c",
            "kind": "booking_provider",
            "checkedAt": "2026-10-24T09:36:49Z",
            "outcome": "read",
            "note": "Official Asa booking link; public active, non-private customer menu has 16 services. The text states a $30 deposit. Eight embedded public image cards were inspected for policy/preparation information; personal contacts and photographs are not republished."
          },
          {
            "id": "joy",
            "url": "https://www.letsgetcute.com/esthetician",
            "kind": "salon_website",
            "checkedAt": "2026-10-24T09:33:36Z",
            "outcome": "read",
            "note": "Profile checked; template/placeholder biography content was not treated as a fact."
          },
          {
            "id": "tiana",
            "url": "https://www.letsgetcute.com/about-6-1",
            "kind": "salon_website",
            "checkedAt": "2026-10-24T09:33:36Z",
            "outcome": "read",
            "note": "Profile checked; template/placeholder biography content was not treated as a fact."
          },
          {
            "id": "mariah",
            "url": "https://www.letsgetcute.com/team-1-1",
            "kind": "salon_website",
            "checkedAt": "2026-10-24T09:33:36Z",
            "outcome": "read",
            "note": "Profile checked; template/placeholder biography content was not treated as a fact."
          },
          {
            "id": "asa-profile",
            "url": "https://www.letsgetcute.com/about-6-2",
            "kind": "salon_website",
            "checkedAt": "2026-10-24T09:33:36Z",
            "outcome": "read",
            "note": "Profile checked; template/placeholder biography content was not treated as a fact."
          },
          {
            "id": "asia",
            "url": "https://www.letsgetcute.com/about-6-3",
            "kind": "salon_website",
            "checkedAt": "2026-10-24T09:33:36Z",
            "outcome": "read",
            "note": "Profile checked; template/placeholder biography content was not treated as a fact."
          }
        ],
        "menuStatus": "published",
        "menu": [
          {
            "name": "Consultation",
            "category": "other",
            "description": "Public calendar: Joy, LaShondra.",
            "price": {
              "kind": "fixed",
              "amount": 0,
              "amountMax": null,
              "currency": "USD",
              "note": null
            },
            "durationMinutes": 10,
            "durationMaxMinutes": null,
            "sourceId": "lounge",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Lashes (Strips)",
            "category": "other",
            "description": "Public calendar: LaShondra.",
            "price": {
              "kind": "fixed",
              "amount": 10,
              "amountMax": null,
              "currency": "USD",
              "note": null
            },
            "durationMinutes": 15,
            "durationMaxMinutes": null,
            "sourceId": "lounge",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Crochet",
            "category": "styling",
            "description": "Public calendar: Meme.",
            "price": {
              "kind": "fixed",
              "amount": 200,
              "amountMax": null,
              "currency": "USD",
              "note": "Published estimate $200; price/time vary with hair or requested work. Not a final total."
            },
            "durationMinutes": 180,
            "durationMaxMinutes": null,
            "sourceId": "lounge",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Small Box Braids",
            "category": "styling",
            "description": "Public calendar: Joy. Menu group: Braids. Consultation required before booking.",
            "price": {
              "kind": "fixed",
              "amount": 450,
              "amountMax": null,
              "currency": "USD",
              "note": "Published estimate $450; price/time vary with hair or requested work. Not a final total. Joy calendar says prices/timing vary and a separate $25 booking fee is not part of the service price."
            },
            "durationMinutes": 480,
            "durationMaxMinutes": null,
            "sourceId": "lounge",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Medium Box Braids",
            "category": "styling",
            "description": "Public calendar: Joy. Menu group: Braids. Consultation required before booking.",
            "price": {
              "kind": "fixed",
              "amount": 375,
              "amountMax": null,
              "currency": "USD",
              "note": "Published estimate $375; price/time vary with hair or requested work. Not a final total. Joy calendar says prices/timing vary and a separate $25 booking fee is not part of the service price."
            },
            "durationMinutes": 360,
            "durationMaxMinutes": null,
            "sourceId": "lounge",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Large Box Braids",
            "category": "styling",
            "description": "Public calendar: Joy. Menu group: Braids.",
            "price": {
              "kind": "fixed",
              "amount": 300,
              "amountMax": null,
              "currency": "USD",
              "note": "Published estimate $300; price/time vary with hair or requested work. Not a final total. Joy calendar says prices/timing vary and a separate $25 booking fee is not part of the service price."
            },
            "durationMinutes": 240,
            "durationMaxMinutes": null,
            "sourceId": "lounge",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Jumbo Box Braids",
            "category": "styling",
            "description": "Public calendar: Joy, Meme. Menu group: Braids. Consultation required before booking.",
            "price": {
              "kind": "fixed",
              "amount": 250,
              "amountMax": null,
              "currency": "USD",
              "note": "Published estimate $250; price/time vary with hair or requested work. Not a final total."
            },
            "durationMinutes": 180,
            "durationMaxMinutes": null,
            "sourceId": "lounge",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "2 Feedin Braids",
            "category": "styling",
            "description": "Public calendar: Joy, Meme. Menu group: Braids. Consultation required before booking.",
            "price": {
              "kind": "fixed",
              "amount": 75,
              "amountMax": null,
              "currency": "USD",
              "note": "Published estimate $75; price/time vary with hair or requested work. Not a final total."
            },
            "durationMinutes": 60,
            "durationMaxMinutes": null,
            "sourceId": "lounge",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "4 Feedin Braids",
            "category": "styling",
            "description": "Public calendar: Joy. Menu group: Braids. Consultation required before booking.",
            "price": {
              "kind": "fixed",
              "amount": 150,
              "amountMax": null,
              "currency": "USD",
              "note": "Published estimate $150; price/time vary with hair or requested work. Not a final total. Joy calendar says prices/timing vary and a separate $25 booking fee is not part of the service price."
            },
            "durationMinutes": 120,
            "durationMaxMinutes": null,
            "sourceId": "lounge",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "6 Feedin Braids",
            "category": "styling",
            "description": "Public calendar: Joy. Menu group: Braids. Consultation required before booking.",
            "price": {
              "kind": "fixed",
              "amount": 185,
              "amountMax": null,
              "currency": "USD",
              "note": "Published estimate $185; price/time vary with hair or requested work. Not a final total. Joy calendar says prices/timing vary and a separate $25 booking fee is not part of the service price."
            },
            "durationMinutes": 150,
            "durationMaxMinutes": null,
            "sourceId": "lounge",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Big Braided Pony",
            "category": "styling",
            "description": "Public calendar: Joy. Menu group: Braids. Washing/conditioning excluded; select the appropriate full service separately. Extension hair is sold separately.",
            "price": {
              "kind": "fixed",
              "amount": 180,
              "amountMax": null,
              "currency": "USD",
              "note": "Published estimate $180; price/time vary with hair or requested work. Not a final total. Joy calendar says prices/timing vary and a separate $25 booking fee is not part of the service price."
            },
            "durationMinutes": 200,
            "durationMaxMinutes": null,
            "sourceId": "lounge",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Medium Braided Pony",
            "category": "styling",
            "description": "Public calendar: Joy. Menu group: Braids. Washing/conditioning excluded; select the appropriate full service separately. Extension hair is sold separately.",
            "price": {
              "kind": "fixed",
              "amount": 280,
              "amountMax": null,
              "currency": "USD",
              "note": "Published estimate $280; price/time vary with hair or requested work. Not a final total. Joy calendar says prices/timing vary and a separate $25 booking fee is not part of the service price."
            },
            "durationMinutes": 200,
            "durationMaxMinutes": null,
            "sourceId": "lounge",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Small Braided Pony",
            "category": "styling",
            "description": "Public calendar: Joy. Menu group: Braids. Washing/conditioning excluded; select the appropriate full service separately. Extension hair is sold separately.",
            "price": {
              "kind": "fixed",
              "amount": 380,
              "amountMax": null,
              "currency": "USD",
              "note": "Published estimate $380; price/time vary with hair or requested work. Not a final total. Joy calendar says prices/timing vary and a separate $25 booking fee is not part of the service price."
            },
            "durationMinutes": 200,
            "durationMaxMinutes": null,
            "sourceId": "lounge",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Children’s Natural hair (braids)",
            "category": "styling",
            "description": "Public calendar: Joy. Menu group: Children Braids. Consultation required before booking.",
            "price": {
              "kind": "fixed",
              "amount": 100,
              "amountMax": null,
              "currency": "USD",
              "note": "Published estimate $100; price/time vary with hair or requested work. Not a final total. Joy calendar says prices/timing vary and a separate $25 booking fee is not part of the service price."
            },
            "durationMinutes": 150,
            "durationMaxMinutes": null,
            "sourceId": "lounge",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Children’s extensions",
            "category": "styling",
            "description": "Public calendar: Joy. Menu group: Children Braids. Consultation required before booking.",
            "price": {
              "kind": "fixed",
              "amount": 150,
              "amountMax": null,
              "currency": "USD",
              "note": "Published estimate $150; price/time vary with hair or requested work. Not a final total. Joy calendar says prices/timing vary and a separate $25 booking fee is not part of the service price."
            },
            "durationMinutes": 210,
            "durationMaxMinutes": null,
            "sourceId": "lounge",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Children’s extended ends only",
            "category": "styling",
            "description": "Public calendar: Joy. Menu group: Children Braids. Consultation required before booking.",
            "price": {
              "kind": "fixed",
              "amount": 125,
              "amountMax": null,
              "currency": "USD",
              "note": "Published estimate $125; price/time vary with hair or requested work. Not a final total. Joy calendar says prices/timing vary and a separate $25 booking fee is not part of the service price."
            },
            "durationMinutes": 180,
            "durationMaxMinutes": null,
            "sourceId": "lounge",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Children’s Full service",
            "category": "styling",
            "description": "Public calendar: Joy. Menu group: Children Braids. Consultation required before booking.",
            "price": {
              "kind": "fixed",
              "amount": 200,
              "amountMax": null,
              "currency": "USD",
              "note": "Published estimate $200; price/time vary with hair or requested work. Not a final total. Joy calendar says prices/timing vary and a separate $25 booking fee is not part of the service price."
            },
            "durationMinutes": 180,
            "durationMaxMinutes": null,
            "sourceId": "lounge",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Children’s Natural hair",
            "category": "styling",
            "description": "Public calendar: Joy. Menu group: Children Braids. Consultation required before booking.",
            "price": {
              "kind": "fixed",
              "amount": 85,
              "amountMax": null,
              "currency": "USD",
              "note": "Published estimate $85; price/time vary with hair or requested work. Not a final total. Joy calendar says prices/timing vary and a separate $25 booking fee is not part of the service price."
            },
            "durationMinutes": 90,
            "durationMaxMinutes": null,
            "sourceId": "lounge",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Children’s extensions",
            "category": "styling",
            "description": "Public calendar: Joy. Menu group: Children Braids. Consultation required before booking.",
            "price": {
              "kind": "fixed",
              "amount": 125,
              "amountMax": null,
              "currency": "USD",
              "note": "Published estimate $125; price/time vary with hair or requested work. Not a final total. Joy calendar says prices/timing vary and a separate $25 booking fee is not part of the service price."
            },
            "durationMinutes": 180,
            "durationMaxMinutes": null,
            "sourceId": "lounge",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Children’s Full service",
            "category": "styling",
            "description": "Public calendar: Joy. Menu group: Children Braids. Consultation required before booking.",
            "price": {
              "kind": "fixed",
              "amount": 200,
              "amountMax": null,
              "currency": "USD",
              "note": "Published estimate $200; price/time vary with hair or requested work. Not a final total. Joy calendar says prices/timing vary and a separate $25 booking fee is not part of the service price."
            },
            "durationMinutes": 420,
            "durationMaxMinutes": null,
            "sourceId": "lounge",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Relaxer and style",
            "category": "treatment",
            "description": "Public calendar: LaShondra. Menu group: Full Service.",
            "price": {
              "kind": "fixed",
              "amount": 150,
              "amountMax": null,
              "currency": "USD",
              "note": null
            },
            "durationMinutes": 130,
            "durationMaxMinutes": null,
            "sourceId": "lounge",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Shampoo/ deep condtioning and straighten/curly",
            "category": "treatment",
            "description": "Public calendar: LaShondra, Meme. Menu group: Full Service. Prebook detangling or the service text warns of a $25 timing-related fee.",
            "price": {
              "kind": "fixed",
              "amount": 100,
              "amountMax": null,
              "currency": "USD",
              "note": "Published estimate $100; price/time vary with hair or requested work. Not a final total."
            },
            "durationMinutes": 120,
            "durationMaxMinutes": null,
            "sourceId": "lounge",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Color and style",
            "category": "color",
            "description": "Public calendar: LaShondra. Menu group: Full Service. Consultation required before booking.",
            "price": {
              "kind": "fixed",
              "amount": 125,
              "amountMax": null,
              "currency": "USD",
              "note": null
            },
            "durationMinutes": 150,
            "durationMaxMinutes": null,
            "sourceId": "lounge",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Take down no shampoo (no new clients)",
            "category": "styling",
            "description": "Public calendar: LaShondra. Menu group: Full Service. Existing install clients only; other stylists' braids are excluded and installs over three months are excluded.",
            "price": {
              "kind": "fixed",
              "amount": 50,
              "amountMax": null,
              "currency": "USD",
              "note": null
            },
            "durationMinutes": 30,
            "durationMaxMinutes": null,
            "sourceId": "lounge",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Takedown and re due  Sew In  ( no new clients)",
            "category": "styling",
            "description": "Public calendar: LaShondra. Menu group: Full Service. Existing install clients only; other stylists' braids are excluded and installs over three months are excluded.",
            "price": {
              "kind": "fixed",
              "amount": 265,
              "amountMax": null,
              "currency": "USD",
              "note": null
            },
            "durationMinutes": 300,
            "durationMaxMinutes": null,
            "sourceId": "lounge",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Take down Shampoo and style (no new clients)",
            "category": "styling",
            "description": "Public calendar: LaShondra. Menu group: Full Service. Existing install clients only; other stylists' braids are excluded and installs over three months are excluded.",
            "price": {
              "kind": "fixed",
              "amount": 150,
              "amountMax": null,
              "currency": "USD",
              "note": null
            },
            "durationMinutes": 145,
            "durationMaxMinutes": null,
            "sourceId": "lounge",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Take down, Shampoo, blow dry (no new clients)",
            "category": "styling",
            "description": "Public calendar: LaShondra. Menu group: Full Service. Existing install clients only; other stylists' braids are excluded and installs over three months are excluded.",
            "price": {
              "kind": "fixed",
              "amount": 100,
              "amountMax": null,
              "currency": "USD",
              "note": null
            },
            "durationMinutes": 105,
            "durationMaxMinutes": null,
            "sourceId": "lounge",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Shampoo, Deep Conditioning and Blow Dry",
            "category": "treatment",
            "description": "Public calendar: Joy, LaShondra, Meme. Menu group: Full Service. Prebook detangling or the service text warns of a $25 timing-related fee.",
            "price": {
              "kind": "fixed",
              "amount": 50,
              "amountMax": null,
              "currency": "USD",
              "note": "Published estimate $50; price/time vary with hair or requested work. Not a final total."
            },
            "durationMinutes": 45,
            "durationMaxMinutes": null,
            "sourceId": "lounge",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Smoothing treatment straightening",
            "category": "treatment",
            "description": "Public calendar: LaShondra. Menu group: Full Service.",
            "price": {
              "kind": "fixed",
              "amount": 125,
              "amountMax": null,
              "currency": "USD",
              "note": "Published estimate $125; price/time vary with hair or requested work. Not a final total."
            },
            "durationMinutes": 120,
            "durationMaxMinutes": null,
            "sourceId": "lounge",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Semi smoothing straightening system",
            "category": "treatment",
            "description": "Public calendar: LaShondra, Meme. Menu group: Full Service.",
            "price": {
              "kind": "fixed",
              "amount": 150,
              "amountMax": null,
              "currency": "USD",
              "note": null
            },
            "durationMinutes": 150,
            "durationMaxMinutes": null,
            "sourceId": "lounge",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Natural Twist",
            "category": "styling",
            "description": "Public calendar: Joy. Menu group: Joy Specialities. Natural-hair service; extensions excluded.",
            "price": {
              "kind": "fixed",
              "amount": 150,
              "amountMax": null,
              "currency": "USD",
              "note": "Published estimate $150; price/time vary with hair or requested work. Not a final total. Joy calendar says prices/timing vary and a separate $25 booking fee is not part of the service price."
            },
            "durationMinutes": 120,
            "durationMaxMinutes": null,
            "sourceId": "lounge",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Double strand twist",
            "category": "styling",
            "description": "Public calendar: Joy. Menu group: Joy Specialities. Washing/conditioning excluded; select the appropriate full service separately. Natural-hair service; extensions excluded.",
            "price": {
              "kind": "fixed",
              "amount": 185,
              "amountMax": null,
              "currency": "USD",
              "note": "Published estimate $185; price/time vary with hair or requested work. Not a final total. Joy calendar says prices/timing vary and a separate $25 booking fee is not part of the service price."
            },
            "durationMinutes": 180,
            "durationMaxMinutes": null,
            "sourceId": "lounge",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Twist out",
            "category": "styling",
            "description": "Public calendar: Joy. Menu group: Joy Specialities. Natural-hair service; extensions excluded.",
            "price": {
              "kind": "fixed",
              "amount": 225,
              "amountMax": null,
              "currency": "USD",
              "note": "Published estimate $225; price/time vary with hair or requested work. Not a final total. Joy calendar says prices/timing vary and a separate $25 booking fee is not part of the service price."
            },
            "durationMinutes": 420,
            "durationMaxMinutes": null,
            "sourceId": "lounge",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Bantu Knots",
            "category": "styling",
            "description": "Public calendar: Joy. Menu group: Joy Specialities. Natural-hair service; extensions excluded.",
            "price": {
              "kind": "fixed",
              "amount": 180,
              "amountMax": null,
              "currency": "USD",
              "note": "Published estimate $180; price/time vary with hair or requested work. Not a final total. Joy calendar says prices/timing vary and a separate $25 booking fee is not part of the service price."
            },
            "durationMinutes": 180,
            "durationMaxMinutes": null,
            "sourceId": "lounge",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Foam Rod",
            "category": "styling",
            "description": "Public calendar: Joy. Menu group: Joy Specialities. Natural-hair service; extensions excluded.",
            "price": {
              "kind": "fixed",
              "amount": 150,
              "amountMax": null,
              "currency": "USD",
              "note": "Published estimate $150; price/time vary with hair or requested work. Not a final total. Joy calendar says prices/timing vary and a separate $25 booking fee is not part of the service price."
            },
            "durationMinutes": 120,
            "durationMaxMinutes": null,
            "sourceId": "lounge",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Straw Set",
            "category": "styling",
            "description": "Public calendar: Joy. Menu group: Joy Specialities. Natural-hair service; extensions excluded.",
            "price": {
              "kind": "fixed",
              "amount": 350,
              "amountMax": null,
              "currency": "USD",
              "note": "Published estimate $350; price/time vary with hair or requested work. Not a final total. Joy calendar says prices/timing vary and a separate $25 booking fee is not part of the service price."
            },
            "durationMinutes": 300,
            "durationMaxMinutes": null,
            "sourceId": "lounge",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Starter Locs",
            "category": "styling",
            "description": "Public calendar: Joy. Menu group: Joy Specialities.",
            "price": {
              "kind": "fixed",
              "amount": 150,
              "amountMax": null,
              "currency": "USD",
              "note": "Joy calendar says prices/timing vary and a separate $25 booking fee is not part of the service price."
            },
            "durationMinutes": 180,
            "durationMaxMinutes": null,
            "sourceId": "lounge",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Traditional Retwist",
            "category": "styling",
            "description": "Public calendar: Joy. Menu group: Joy Specialities. Natural-hair service; extensions excluded.",
            "price": {
              "kind": "fixed",
              "amount": 185,
              "amountMax": null,
              "currency": "USD",
              "note": "Published estimate $185; price/time vary with hair or requested work. Not a final total. Joy calendar says prices/timing vary and a separate $25 booking fee is not part of the service price."
            },
            "durationMinutes": 240,
            "durationMaxMinutes": null,
            "sourceId": "lounge",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "4 point Crochet",
            "category": "styling",
            "description": "Public calendar: Joy. Menu group: Joy Specialities.",
            "price": {
              "kind": "fixed",
              "amount": 350,
              "amountMax": null,
              "currency": "USD",
              "note": "Joy calendar says prices/timing vary and a separate $25 booking fee is not part of the service price."
            },
            "durationMinutes": 240,
            "durationMaxMinutes": null,
            "sourceId": "lounge",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Needle Point Crochet",
            "category": "styling",
            "description": "Public calendar: Joy. Menu group: Joy Specialities. Natural-hair service; extensions excluded.",
            "price": {
              "kind": "fixed",
              "amount": 450,
              "amountMax": null,
              "currency": "USD",
              "note": "Published estimate $450; price/time vary with hair or requested work. Not a final total. Joy calendar says prices/timing vary and a separate $25 booking fee is not part of the service price."
            },
            "durationMinutes": 300,
            "durationMaxMinutes": null,
            "sourceId": "lounge",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Reattachment",
            "category": "styling",
            "description": "Public calendar: Joy. Menu group: Joy Specialities. Natural-hair service; extensions excluded.",
            "price": {
              "kind": "fixed",
              "amount": 650,
              "amountMax": null,
              "currency": "USD",
              "note": "Published estimate $650; price/time vary with hair or requested work. Not a final total. Joy calendar says prices/timing vary and a separate $25 booking fee is not part of the service price."
            },
            "durationMinutes": 420,
            "durationMaxMinutes": null,
            "sourceId": "lounge",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Crochet",
            "category": "styling",
            "description": "Public calendar: Joy. Menu group: Joy Specialities. Consultation required before booking.",
            "price": {
              "kind": "fixed",
              "amount": 350,
              "amountMax": null,
              "currency": "USD",
              "note": "Published estimate $350; price/time vary with hair or requested work. Not a final total. Joy calendar says prices/timing vary and a separate $25 booking fee is not part of the service price."
            },
            "durationMinutes": 240,
            "durationMaxMinutes": null,
            "sourceId": "lounge",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Single Crochet",
            "category": "styling",
            "description": "Public calendar: Joy. Menu group: Joy Specialities.",
            "price": {
              "kind": "fixed",
              "amount": 400,
              "amountMax": null,
              "currency": "USD",
              "note": "Joy calendar says prices/timing vary and a separate $25 booking fee is not part of the service price."
            },
            "durationMinutes": 360,
            "durationMaxMinutes": null,
            "sourceId": "lounge",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Extensions",
            "category": "styling",
            "description": "Public calendar: Joy. Menu group: Joy Specialities.",
            "price": {
              "kind": "fixed",
              "amount": 750,
              "amountMax": null,
              "currency": "USD",
              "note": "Joy calendar says prices/timing vary and a separate $25 booking fee is not part of the service price."
            },
            "durationMinutes": 480,
            "durationMaxMinutes": null,
            "sourceId": "lounge",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Traditional",
            "category": "styling",
            "description": "Public calendar: Joy. Menu group: Joy Specialities.",
            "price": {
              "kind": "fixed",
              "amount": 600,
              "amountMax": null,
              "currency": "USD",
              "note": "Joy calendar says prices/timing vary and a separate $25 booking fee is not part of the service price."
            },
            "durationMinutes": 480,
            "durationMaxMinutes": null,
            "sourceId": "lounge",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Small Senegalese Twists",
            "category": "styling",
            "description": "Public calendar: Joy. Menu group: Joy Specialities. Consultation required before booking.",
            "price": {
              "kind": "fixed",
              "amount": 450,
              "amountMax": null,
              "currency": "USD",
              "note": "Published estimate $450; price/time vary with hair or requested work. Not a final total. Joy calendar says prices/timing vary and a separate $25 booking fee is not part of the service price."
            },
            "durationMinutes": 360,
            "durationMaxMinutes": null,
            "sourceId": "lounge",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Medium Senegalese Twists",
            "category": "styling",
            "description": "Public calendar: Joy. Menu group: Joy Specialities.",
            "price": {
              "kind": "fixed",
              "amount": 350,
              "amountMax": null,
              "currency": "USD",
              "note": "Joy calendar says prices/timing vary and a separate $25 booking fee is not part of the service price."
            },
            "durationMinutes": 300,
            "durationMaxMinutes": null,
            "sourceId": "lounge",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Large Senegalese Twists",
            "category": "styling",
            "description": "Public calendar: Joy. Menu group: Joy Specialities. Consultation required before booking.",
            "price": {
              "kind": "fixed",
              "amount": 300,
              "amountMax": null,
              "currency": "USD",
              "note": "Published estimate $300; price/time vary with hair or requested work. Not a final total. Joy calendar says prices/timing vary and a separate $25 booking fee is not part of the service price."
            },
            "durationMinutes": 240,
            "durationMaxMinutes": null,
            "sourceId": "lounge",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Jumbo Senegalese Twists",
            "category": "styling",
            "description": "Public calendar: Joy. Menu group: Joy Specialities. Consultation required before booking.",
            "price": {
              "kind": "fixed",
              "amount": 260,
              "amountMax": null,
              "currency": "USD",
              "note": "Published estimate $260; price/time vary with hair or requested work. Not a final total. Joy calendar says prices/timing vary and a separate $25 booking fee is not part of the service price."
            },
            "durationMinutes": 180,
            "durationMaxMinutes": null,
            "sourceId": "lounge",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Braid take down, wash, deep conditioning & blow dry",
            "category": "treatment",
            "description": "Public calendar: Joy. Menu group: Joy Specialities.",
            "price": {
              "kind": "fixed",
              "amount": 150,
              "amountMax": null,
              "currency": "USD",
              "note": "Published estimate $150; price/time vary with hair or requested work. Not a final total. Joy calendar says prices/timing vary and a separate $25 booking fee is not part of the service price."
            },
            "durationMinutes": 120,
            "durationMaxMinutes": null,
            "sourceId": "lounge",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Small Knotless",
            "category": "styling",
            "description": "Public calendar: Joy. Menu group: Knotless.",
            "price": {
              "kind": "fixed",
              "amount": 450,
              "amountMax": null,
              "currency": "USD",
              "note": "Joy calendar says prices/timing vary and a separate $25 booking fee is not part of the service price."
            },
            "durationMinutes": 400,
            "durationMaxMinutes": null,
            "sourceId": "lounge",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Medium Knotless",
            "category": "styling",
            "description": "Public calendar: Joy. Menu group: Knotless.",
            "price": {
              "kind": "fixed",
              "amount": 400,
              "amountMax": null,
              "currency": "USD",
              "note": "Joy calendar says prices/timing vary and a separate $25 booking fee is not part of the service price."
            },
            "durationMinutes": 400,
            "durationMaxMinutes": null,
            "sourceId": "lounge",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Large Knotless",
            "category": "styling",
            "description": "Public calendar: Joy. Menu group: Knotless.",
            "price": {
              "kind": "fixed",
              "amount": 350,
              "amountMax": null,
              "currency": "USD",
              "note": "Joy calendar says prices/timing vary and a separate $25 booking fee is not part of the service price."
            },
            "durationMinutes": 300,
            "durationMaxMinutes": null,
            "sourceId": "lounge",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Jumbo Knotless",
            "category": "styling",
            "description": "Public calendar: Joy. Menu group: Knotless.",
            "price": {
              "kind": "fixed",
              "amount": 300,
              "amountMax": null,
              "currency": "USD",
              "note": "Joy calendar says prices/timing vary and a separate $25 booking fee is not part of the service price."
            },
            "durationMinutes": 240,
            "durationMaxMinutes": null,
            "sourceId": "lounge",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Men 2 Braids",
            "category": "styling",
            "description": "Public calendar: Joy. Menu group: Men.",
            "price": {
              "kind": "fixed",
              "amount": 65,
              "amountMax": null,
              "currency": "USD",
              "note": "Published estimate $65; price/time vary with hair or requested work. Not a final total. Joy calendar says prices/timing vary and a separate $25 booking fee is not part of the service price."
            },
            "durationMinutes": 60,
            "durationMaxMinutes": null,
            "sourceId": "lounge",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Mens 4 Braids",
            "category": "styling",
            "description": "Public calendar: Joy. Menu group: Men.",
            "price": {
              "kind": "fixed",
              "amount": 125,
              "amountMax": null,
              "currency": "USD",
              "note": "Published estimate $125; price/time vary with hair or requested work. Not a final total. Joy calendar says prices/timing vary and a separate $25 booking fee is not part of the service price."
            },
            "durationMinutes": 90,
            "durationMaxMinutes": null,
            "sourceId": "lounge",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Mens 6 Braids",
            "category": "styling",
            "description": "Public calendar: Joy. Menu group: Men.",
            "price": {
              "kind": "fixed",
              "amount": 160,
              "amountMax": null,
              "currency": "USD",
              "note": "Published estimate $160; price/time vary with hair or requested work. Not a final total. Joy calendar says prices/timing vary and a separate $25 booking fee is not part of the service price."
            },
            "durationMinutes": 120,
            "durationMaxMinutes": null,
            "sourceId": "lounge",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Simple Pony",
            "category": "styling",
            "description": "Public calendar: LaShondra. Menu group: Pony's. Extension hair is sold separately. Prebook detangling or the service text warns of a $25 timing-related fee. Prebook a wash or the text warns of a $45 timing-related fee.",
            "price": {
              "kind": "fixed",
              "amount": 110,
              "amountMax": null,
              "currency": "USD",
              "note": null
            },
            "durationMinutes": 130,
            "durationMaxMinutes": null,
            "sourceId": "lounge",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Pony Up Due",
            "category": "styling",
            "description": "Public calendar: LaShondra. Menu group: Pony's. Extension hair is sold separately. Prebook detangling or the service text warns of a $25 timing-related fee. Prebook a wash or the text warns of a $45 timing-related fee.",
            "price": {
              "kind": "fixed",
              "amount": 125,
              "amountMax": null,
              "currency": "USD",
              "note": "Published estimate $125; price/time vary with hair or requested work. Not a final total."
            },
            "durationMinutes": 150,
            "durationMaxMinutes": null,
            "sourceId": "lounge",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "14’16’18’’",
            "category": "styling",
            "description": "Public calendar: LaShondra. Menu group: SewIn Bundles Included. Hair bundles, braid-down and styling are included; closure/frontal is separate. Prebook detangling or the service text warns of a $25 timing-related fee. Prebook a wash or the text warns of a $45 timing-related fee.",
            "price": {
              "kind": "fixed",
              "amount": 350,
              "amountMax": null,
              "currency": "USD",
              "note": null
            },
            "durationMinutes": 300,
            "durationMaxMinutes": null,
            "sourceId": "lounge",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "16’18’’20’",
            "category": "styling",
            "description": "Public calendar: LaShondra. Menu group: SewIn Bundles Included. Hair bundles, braid-down and styling are included; closure/frontal is separate. Prebook detangling or the service text warns of a $25 timing-related fee. Prebook a wash or the text warns of a $45 timing-related fee.",
            "price": {
              "kind": "fixed",
              "amount": 365,
              "amountMax": null,
              "currency": "USD",
              "note": null
            },
            "durationMinutes": 300,
            "durationMaxMinutes": null,
            "sourceId": "lounge",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "’18’’20’22”",
            "category": "styling",
            "description": "Public calendar: LaShondra. Menu group: SewIn Bundles Included. Hair bundles, braid-down and styling are included; closure/frontal is separate. Prebook detangling or the service text warns of a $25 timing-related fee. Prebook a wash or the text warns of a $45 timing-related fee.",
            "price": {
              "kind": "fixed",
              "amount": 380,
              "amountMax": null,
              "currency": "USD",
              "note": null
            },
            "durationMinutes": 300,
            "durationMaxMinutes": null,
            "sourceId": "lounge",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "20’22”24”",
            "category": "styling",
            "description": "Public calendar: LaShondra. Menu group: SewIn Bundles Included. Hair bundles, braid-down and styling are included; closure/frontal is separate. Prebook detangling or the service text warns of a $25 timing-related fee. Prebook a wash or the text warns of a $45 timing-related fee.",
            "price": {
              "kind": "fixed",
              "amount": 395,
              "amountMax": null,
              "currency": "USD",
              "note": null
            },
            "durationMinutes": 300,
            "durationMaxMinutes": null,
            "sourceId": "lounge",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "22”24”26”",
            "category": "styling",
            "description": "Public calendar: LaShondra. Menu group: SewIn Bundles Included. Hair bundles, braid-down and styling are included; closure/frontal is separate. Prebook detangling or the service text warns of a $25 timing-related fee. Prebook a wash or the text warns of a $45 timing-related fee.",
            "price": {
              "kind": "fixed",
              "amount": 410,
              "amountMax": null,
              "currency": "USD",
              "note": null
            },
            "durationMinutes": 300,
            "durationMaxMinutes": null,
            "sourceId": "lounge",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "24”26”28”",
            "category": "styling",
            "description": "Public calendar: LaShondra. Menu group: SewIn Bundles Included. Hair bundles, braid-down and styling are included; closure/frontal is separate. Prebook detangling or the service text warns of a $25 timing-related fee. Prebook a wash or the text warns of a $45 timing-related fee.",
            "price": {
              "kind": "fixed",
              "amount": 425,
              "amountMax": null,
              "currency": "USD",
              "note": null
            },
            "durationMinutes": 300,
            "durationMaxMinutes": null,
            "sourceId": "lounge",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "26”28”30”",
            "category": "styling",
            "description": "Public calendar: LaShondra. Menu group: SewIn Bundles Included. Hair bundles, braid-down and styling are included; closure/frontal is separate. Prebook detangling or the service text warns of a $25 timing-related fee. Prebook a wash or the text warns of a $45 timing-related fee.",
            "price": {
              "kind": "fixed",
              "amount": 440,
              "amountMax": null,
              "currency": "USD",
              "note": null
            },
            "durationMinutes": 300,
            "durationMaxMinutes": null,
            "sourceId": "lounge",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Thermal (straighten or curls)",
            "category": "treatment",
            "description": "Public calendar: LaShondra, Meme. Menu group: Single Service.",
            "price": {
              "kind": "fixed",
              "amount": 40,
              "amountMax": null,
              "currency": "USD",
              "note": null
            },
            "durationMinutes": 45,
            "durationMaxMinutes": null,
            "sourceId": "lounge",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Chemical",
            "category": "styling",
            "description": "Public calendar: LaShondra. Menu group: Single Service. Consultation required before booking. Wash/condition included; styling is extra.",
            "price": {
              "kind": "fixed",
              "amount": 70,
              "amountMax": null,
              "currency": "USD",
              "note": "Published estimate $70; price/time vary with hair or requested work. Not a final total."
            },
            "durationMinutes": 45,
            "durationMaxMinutes": null,
            "sourceId": "lounge",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Trim",
            "category": "haircut",
            "description": "Public calendar: LaShondra, Meme. Menu group: Single Service.",
            "price": {
              "kind": "fixed",
              "amount": 15,
              "amountMax": null,
              "currency": "USD",
              "note": null
            },
            "durationMinutes": 15,
            "durationMaxMinutes": null,
            "sourceId": "lounge",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Service",
            "category": "styling",
            "description": "Public calendar: LaShondra. Menu group: Single Service.",
            "price": {
              "kind": "fixed",
              "amount": 25,
              "amountMax": null,
              "currency": "USD",
              "note": null
            },
            "durationMinutes": 30,
            "durationMaxMinutes": null,
            "sourceId": "lounge",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Shampoo , Deep Conditioning and blow dry",
            "category": "treatment",
            "description": "Public calendar: Joy, LaShondra, Meme. Menu group: Single Service. Prebook detangling or the service text warns of a $25 timing-related fee.",
            "price": {
              "kind": "fixed",
              "amount": 50,
              "amountMax": null,
              "currency": "USD",
              "note": "Published estimate $50; price/time vary with hair or requested work. Not a final total."
            },
            "durationMinutes": 45,
            "durationMaxMinutes": null,
            "sourceId": "lounge",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Braid down",
            "category": "styling",
            "description": "Public calendar: LaShondra, Meme. Menu group: Single Service. Prebook detangling or the service text warns of a $25 timing-related fee. Prebook a wash or the text warns of a $45 timing-related fee.",
            "price": {
              "kind": "fixed",
              "amount": 50,
              "amountMax": null,
              "currency": "USD",
              "note": "Published estimate $50; price/time vary with hair or requested work. Not a final total."
            },
            "durationMinutes": 45,
            "durationMaxMinutes": null,
            "sourceId": "lounge",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Shampoo , Deep Conditioning and blow dry (Joy)",
            "category": "treatment",
            "description": "Public calendar: Joy. Menu group: Single Service. Styling excluded.",
            "price": {
              "kind": "fixed",
              "amount": 50,
              "amountMax": null,
              "currency": "USD",
              "note": "Joy calendar says prices/timing vary and a separate $25 booking fee is not part of the service price."
            },
            "durationMinutes": 45,
            "durationMaxMinutes": null,
            "sourceId": "lounge",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Braid down (Joyful Hands)",
            "category": "styling",
            "description": "Public calendar: Joy. Menu group: Single Service. Prebook detangling or the service text warns of a $25 timing-related fee. Prebook a wash or the text warns of a $45 timing-related fee.",
            "price": {
              "kind": "fixed",
              "amount": 75,
              "amountMax": null,
              "currency": "USD",
              "note": "Published estimate $75; price/time vary with hair or requested work. Not a final total. Joy calendar says prices/timing vary and a separate $25 booking fee is not part of the service price."
            },
            "durationMinutes": 45,
            "durationMaxMinutes": null,
            "sourceId": "lounge",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Sew-in",
            "category": "styling",
            "description": "Public calendar: LaShondra, Meme. Menu group: Weave Installs.",
            "price": {
              "kind": "fixed",
              "amount": 175,
              "amountMax": null,
              "currency": "USD",
              "note": null
            },
            "durationMinutes": 180,
            "durationMaxMinutes": null,
            "sourceId": "lounge",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Closure Quick Weave",
            "category": "styling",
            "description": "Public calendar: LaShondra. Menu group: Weave Installs. Extension hair is sold separately. Prebook detangling or the service text warns of a $25 timing-related fee. Prebook a wash or the text warns of a $45 timing-related fee.",
            "price": {
              "kind": "fixed",
              "amount": 125,
              "amountMax": null,
              "currency": "USD",
              "note": null
            },
            "durationMinutes": 160,
            "durationMaxMinutes": null,
            "sourceId": "lounge",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Closure Wig",
            "category": "styling",
            "description": "Public calendar: LaShondra. Menu group: Weave Installs. Extension hair is sold separately. Prebook detangling or the service text warns of a $25 timing-related fee. Prebook a wash or the text warns of a $45 timing-related fee.",
            "price": {
              "kind": "fixed",
              "amount": 175,
              "amountMax": null,
              "currency": "USD",
              "note": null
            },
            "durationMinutes": 180,
            "durationMaxMinutes": null,
            "sourceId": "lounge",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Closure W/ Bundles Sew In",
            "category": "styling",
            "description": "Public calendar: LaShondra. Menu group: Weave Installs. Extension hair is sold separately. Prebook detangling or the service text warns of a $25 timing-related fee. Prebook a wash or the text warns of a $45 timing-related fee. Extra bundles are $15 each.",
            "price": {
              "kind": "fixed",
              "amount": 200,
              "amountMax": null,
              "currency": "USD",
              "note": null
            },
            "durationMinutes": 200,
            "durationMaxMinutes": null,
            "sourceId": "lounge",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Frontal Wig",
            "category": "styling",
            "description": "Public calendar: LaShondra. Menu group: Weave Installs. Extension hair is sold separately. Prebook detangling or the service text warns of a $25 timing-related fee. Prebook a wash or the text warns of a $45 timing-related fee.",
            "price": {
              "kind": "fixed",
              "amount": 175,
              "amountMax": null,
              "currency": "USD",
              "note": null
            },
            "durationMinutes": 180,
            "durationMaxMinutes": null,
            "sourceId": "lounge",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Frontal Quick Weave",
            "category": "styling",
            "description": "Public calendar: LaShondra. Menu group: Weave Installs. Extension hair is sold separately. Prebook detangling or the service text warns of a $25 timing-related fee. Prebook a wash or the text warns of a $45 timing-related fee.",
            "price": {
              "kind": "fixed",
              "amount": 125,
              "amountMax": null,
              "currency": "USD",
              "note": null
            },
            "durationMinutes": 180,
            "durationMaxMinutes": null,
            "sourceId": "lounge",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Frontal W/ bundle Sew In",
            "category": "styling",
            "description": "Public calendar: LaShondra. Menu group: Weave Installs. Extension hair is sold separately. Prebook detangling or the service text warns of a $25 timing-related fee. Prebook a wash or the text warns of a $45 timing-related fee. Extra bundles are $15 each.",
            "price": {
              "kind": "fixed",
              "amount": 200,
              "amountMax": null,
              "currency": "USD",
              "note": null
            },
            "durationMinutes": 200,
            "durationMaxMinutes": null,
            "sourceId": "lounge",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Quick Weave",
            "category": "styling",
            "description": "Public calendar: LaShondra, Meme. Menu group: Weave Installs. Extension hair is sold separately. Prebook detangling or the service text warns of a $25 timing-related fee. Prebook a wash or the text warns of a $45 timing-related fee.",
            "price": {
              "kind": "fixed",
              "amount": 100,
              "amountMax": null,
              "currency": "USD",
              "note": null
            },
            "durationMinutes": 160,
            "durationMaxMinutes": null,
            "sourceId": "lounge",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "24”, 26”, 28”",
            "category": "styling",
            "description": "Public calendar: LaShondra. Menu group: Wig Included.",
            "price": {
              "kind": "fixed",
              "amount": 450,
              "amountMax": null,
              "currency": "USD",
              "note": null
            },
            "durationMinutes": 240,
            "durationMaxMinutes": null,
            "sourceId": "lounge",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Sew in",
            "category": "styling",
            "description": "Public calendar: Asa. Asa requires a nonrefundable $30 deposit and 24 hours notice for changes. More than 15 minutes late cancels the appointment. Wash is included per preparation card. Deposit crediting is not explicit.",
            "price": {
              "kind": "fixed",
              "amount": 317,
              "amountMax": null,
              "currency": "USD",
              "note": null
            },
            "durationMinutes": 240,
            "durationMaxMinutes": null,
            "sourceId": "asa",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Quick weave + bundles deal",
            "category": "styling",
            "description": "Public calendar: Asa. Bundle lengths: 22,24,26. Asa requires a nonrefundable $30 deposit and 24 hours notice for changes. More than 15 minutes late cancels the appointment. Wash is included per preparation card. Deposit crediting is not explicit.",
            "price": {
              "kind": "fixed",
              "amount": 600,
              "amountMax": null,
              "currency": "USD",
              "note": null
            },
            "durationMinutes": 180,
            "durationMaxMinutes": null,
            "sourceId": "asa",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Quick weave + bundles deal",
            "category": "styling",
            "description": "Public calendar: Asa. Bundle lengths: 20,22,24. Asa requires a nonrefundable $30 deposit and 24 hours notice for changes. More than 15 minutes late cancels the appointment. Wash is included per preparation card. Deposit crediting is not explicit.",
            "price": {
              "kind": "fixed",
              "amount": 580,
              "amountMax": null,
              "currency": "USD",
              "note": null
            },
            "durationMinutes": 180,
            "durationMaxMinutes": null,
            "sourceId": "asa",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Quick weave + bundle deal",
            "category": "styling",
            "description": "Public calendar: Asa. Bundle lengths: 18,20,22. Asa requires a nonrefundable $30 deposit and 24 hours notice for changes. More than 15 minutes late cancels the appointment. Wash is included per preparation card. Deposit crediting is not explicit.",
            "price": {
              "kind": "fixed",
              "amount": 560,
              "amountMax": null,
              "currency": "USD",
              "note": null
            },
            "durationMinutes": 180,
            "durationMaxMinutes": null,
            "sourceId": "asa",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Sew in / bundle deal",
            "category": "styling",
            "description": "Public calendar: Asa. Bundle lengths: 16,18,20. Asa requires a nonrefundable $30 deposit and 24 hours notice for changes. More than 15 minutes late cancels the appointment. Wash is included per preparation card. Deposit crediting is not explicit.",
            "price": {
              "kind": "fixed",
              "amount": 650,
              "amountMax": null,
              "currency": "USD",
              "note": null
            },
            "durationMinutes": 240,
            "durationMaxMinutes": null,
            "sourceId": "asa",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Wash and Flat Iron",
            "category": "styling",
            "description": "Public calendar: Asa. Menu group: Natural Hair. Asa requires a nonrefundable $30 deposit and 24 hours notice for changes. More than 15 minutes late cancels the appointment. Wash is included per preparation card. Deposit crediting is not explicit.",
            "price": {
              "kind": "fixed",
              "amount": 122,
              "amountMax": null,
              "currency": "USD",
              "note": null
            },
            "durationMinutes": 120,
            "durationMaxMinutes": null,
            "sourceId": "asa",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Braided Pony",
            "category": "styling",
            "description": "Public calendar: Asa. Menu group: Ponytails. Asa requires a nonrefundable $30 deposit and 24 hours notice for changes. More than 15 minutes late cancels the appointment. Wash is included per preparation card. Deposit crediting is not explicit.",
            "price": {
              "kind": "fixed",
              "amount": 162,
              "amountMax": null,
              "currency": "USD",
              "note": null
            },
            "durationMinutes": 180,
            "durationMaxMinutes": null,
            "sourceId": "asa",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "High Pony",
            "category": "styling",
            "description": "Public calendar: Asa. Menu group: Ponytails. Asa requires a nonrefundable $30 deposit and 24 hours notice for changes. More than 15 minutes late cancels the appointment. Wash is included per preparation card. Deposit crediting is not explicit.",
            "price": {
              "kind": "fixed",
              "amount": 152,
              "amountMax": null,
              "currency": "USD",
              "note": null
            },
            "durationMinutes": 180,
            "durationMaxMinutes": null,
            "sourceId": "asa",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Swoop Pony",
            "category": "styling",
            "description": "Public calendar: Asa. Menu group: Ponytails. Asa requires a nonrefundable $30 deposit and 24 hours notice for changes. More than 15 minutes late cancels the appointment. Wash is included per preparation card. Deposit crediting is not explicit.",
            "price": {
              "kind": "fixed",
              "amount": 162,
              "amountMax": null,
              "currency": "USD",
              "note": null
            },
            "durationMinutes": 180,
            "durationMaxMinutes": null,
            "sourceId": "asa",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Barbie Pony",
            "category": "styling",
            "description": "Public calendar: Asa. Menu group: Ponytails. Asa requires a nonrefundable $30 deposit and 24 hours notice for changes. More than 15 minutes late cancels the appointment. Wash is included per preparation card. Deposit crediting is not explicit.",
            "price": {
              "kind": "fixed",
              "amount": 162,
              "amountMax": null,
              "currency": "USD",
              "note": null
            },
            "durationMinutes": 200,
            "durationMaxMinutes": null,
            "sourceId": "asa",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Middle Part Pony",
            "category": "styling",
            "description": "Public calendar: Asa. Menu group: Ponytails. Asa requires a nonrefundable $30 deposit and 24 hours notice for changes. More than 15 minutes late cancels the appointment. Wash is included per preparation card. Deposit crediting is not explicit.",
            "price": {
              "kind": "fixed",
              "amount": 152,
              "amountMax": null,
              "currency": "USD",
              "note": null
            },
            "durationMinutes": 120,
            "durationMaxMinutes": null,
            "sourceId": "asa",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Up do bun",
            "category": "styling",
            "description": "Public calendar: Asa. Menu group: Ponytails. Asa requires a nonrefundable $30 deposit and 24 hours notice for changes. More than 15 minutes late cancels the appointment. Wash is included per preparation card. Deposit crediting is not explicit.",
            "price": {
              "kind": "fixed",
              "amount": 152,
              "amountMax": null,
              "currency": "USD",
              "note": null
            },
            "durationMinutes": 180,
            "durationMaxMinutes": null,
            "sourceId": "asa",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Middle Part",
            "category": "styling",
            "description": "Public calendar: Asa. Menu group: Quick Weaves. Asa requires a nonrefundable $30 deposit and 24 hours notice for changes. More than 15 minutes late cancels the appointment. Wash is included per preparation card. Deposit crediting is not explicit.",
            "price": {
              "kind": "fixed",
              "amount": 222,
              "amountMax": null,
              "currency": "USD",
              "note": null
            },
            "durationMinutes": 180,
            "durationMaxMinutes": null,
            "sourceId": "asa",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Half up Half Down",
            "category": "styling",
            "description": "Public calendar: Asa. Menu group: Quick Weaves. Asa requires a nonrefundable $30 deposit and 24 hours notice for changes. More than 15 minutes late cancels the appointment. Wash is included per preparation card. Deposit crediting is not explicit.",
            "price": {
              "kind": "fixed",
              "amount": 232,
              "amountMax": null,
              "currency": "USD",
              "note": null
            },
            "durationMinutes": 180,
            "durationMaxMinutes": null,
            "sourceId": "asa",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Versatile",
            "category": "styling",
            "description": "Public calendar: Asa. Menu group: Quick Weaves. Asa requires a nonrefundable $30 deposit and 24 hours notice for changes. More than 15 minutes late cancels the appointment. Wash is included per preparation card. Deposit crediting is not explicit.",
            "price": {
              "kind": "fixed",
              "amount": 222,
              "amountMax": null,
              "currency": "USD",
              "note": null
            },
            "durationMinutes": 180,
            "durationMaxMinutes": null,
            "sourceId": "asa",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Side Part",
            "category": "styling",
            "description": "Public calendar: Asa. Menu group: Quick Weaves. Asa requires a nonrefundable $30 deposit and 24 hours notice for changes. More than 15 minutes late cancels the appointment. Wash is included per preparation card. Deposit crediting is not explicit.",
            "price": {
              "kind": "fixed",
              "amount": 222,
              "amountMax": null,
              "currency": "USD",
              "note": null
            },
            "durationMinutes": 180,
            "durationMaxMinutes": null,
            "sourceId": "asa",
            "priceSourceId": null,
            "durationSourceId": null
          }
        ],
        "addOnsStatus": "published",
        "addOns": [
          {
            "name": "Braid down",
            "category": "styling",
            "description": "Published optional add-on; applicability depends on selected service.",
            "price": {
              "kind": "fixed",
              "amount": 50,
              "amountMax": null,
              "currency": "USD",
              "note": null
            },
            "durationMinutes": 45,
            "durationMaxMinutes": null,
            "sourceId": "lounge",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Bundles 14”16”18”",
            "category": "styling",
            "description": "Published optional add-on; applicability depends on selected service.",
            "price": {
              "kind": "fixed",
              "amount": 195,
              "amountMax": null,
              "currency": "USD",
              "note": null
            },
            "durationMinutes": 5,
            "durationMaxMinutes": null,
            "sourceId": "lounge",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Bundles 16”18”20”",
            "category": "styling",
            "description": "Published optional add-on; applicability depends on selected service.",
            "price": {
              "kind": "fixed",
              "amount": 210,
              "amountMax": null,
              "currency": "USD",
              "note": null
            },
            "durationMinutes": 5,
            "durationMaxMinutes": null,
            "sourceId": "lounge",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Bundles 18”20”22”",
            "category": "styling",
            "description": "Published optional add-on; applicability depends on selected service.",
            "price": {
              "kind": "fixed",
              "amount": 225,
              "amountMax": null,
              "currency": "USD",
              "note": null
            },
            "durationMinutes": 5,
            "durationMaxMinutes": null,
            "sourceId": "lounge",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Bundles 20”22”24”",
            "category": "styling",
            "description": "Published optional add-on; applicability depends on selected service.",
            "price": {
              "kind": "fixed",
              "amount": 240,
              "amountMax": null,
              "currency": "USD",
              "note": null
            },
            "durationMinutes": 5,
            "durationMaxMinutes": null,
            "sourceId": "lounge",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Bundles 24”26”28”",
            "category": "styling",
            "description": "Published optional add-on; applicability depends on selected service.",
            "price": {
              "kind": "fixed",
              "amount": 270,
              "amountMax": null,
              "currency": "USD",
              "note": null
            },
            "durationMinutes": 5,
            "durationMaxMinutes": null,
            "sourceId": "lounge",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Bundles 26”28”30”",
            "category": "styling",
            "description": "Published optional add-on; applicability depends on selected service.",
            "price": {
              "kind": "fixed",
              "amount": 285,
              "amountMax": null,
              "currency": "USD",
              "note": null
            },
            "durationMinutes": 5,
            "durationMaxMinutes": null,
            "sourceId": "lounge",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Clips Install",
            "category": "styling",
            "description": "Published optional add-on; applicability depends on selected service.",
            "price": {
              "kind": "fixed",
              "amount": 50,
              "amountMax": null,
              "currency": "USD",
              "note": null
            },
            "durationMinutes": 30,
            "durationMaxMinutes": null,
            "sourceId": "lounge",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Closure",
            "category": "styling",
            "description": "Published optional add-on; applicability depends on selected service.",
            "price": {
              "kind": "fixed",
              "amount": 110,
              "amountMax": null,
              "currency": "USD",
              "note": null
            },
            "durationMinutes": 10,
            "durationMaxMinutes": null,
            "sourceId": "lounge",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Detangle (fee starting at )",
            "category": "styling",
            "description": "Published optional add-on; applicability depends on selected service.",
            "price": {
              "kind": "starting_at",
              "amount": 15,
              "amountMax": null,
              "currency": "USD",
              "note": null
            },
            "durationMinutes": 20,
            "durationMaxMinutes": null,
            "sourceId": "lounge",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Frontal",
            "category": "styling",
            "description": "Published optional add-on; applicability depends on selected service.",
            "price": {
              "kind": "fixed",
              "amount": 125,
              "amountMax": null,
              "currency": "USD",
              "note": null
            },
            "durationMinutes": 25,
            "durationMaxMinutes": null,
            "sourceId": "lounge",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Hair trim",
            "category": "haircut",
            "description": "Published optional add-on; applicability depends on selected service.",
            "price": {
              "kind": "fixed",
              "amount": 15,
              "amountMax": null,
              "currency": "USD",
              "note": null
            },
            "durationMinutes": 10,
            "durationMaxMinutes": null,
            "sourceId": "lounge",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Scalp Scrub",
            "category": "treatment",
            "description": "Published optional add-on; applicability depends on selected service.",
            "price": {
              "kind": "fixed",
              "amount": 5,
              "amountMax": null,
              "currency": "USD",
              "note": null
            },
            "durationMinutes": 7,
            "durationMaxMinutes": null,
            "sourceId": "lounge",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Service",
            "category": "styling",
            "description": "Published optional add-on; applicability depends on selected service.",
            "price": {
              "kind": "fixed",
              "amount": 25,
              "amountMax": null,
              "currency": "USD",
              "note": null
            },
            "durationMinutes": 25,
            "durationMaxMinutes": null,
            "sourceId": "lounge",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Shampoo Deep cond and Blow Dry",
            "category": "styling",
            "description": "Published optional add-on; applicability depends on selected service.",
            "price": {
              "kind": "fixed",
              "amount": 50,
              "amountMax": null,
              "currency": "USD",
              "note": null
            },
            "durationMinutes": 30,
            "durationMaxMinutes": null,
            "sourceId": "lounge",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Shampoo hair extensions",
            "category": "styling",
            "description": "Published optional add-on; applicability depends on selected service.",
            "price": {
              "kind": "fixed",
              "amount": 35,
              "amountMax": null,
              "currency": "USD",
              "note": null
            },
            "durationMinutes": 15,
            "durationMaxMinutes": null,
            "sourceId": "lounge",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Smoothing system",
            "category": "treatment",
            "description": "Published optional add-on; applicability depends on selected service.",
            "price": {
              "kind": "fixed",
              "amount": 25,
              "amountMax": null,
              "currency": "USD",
              "note": null
            },
            "durationMinutes": 20,
            "durationMaxMinutes": null,
            "sourceId": "lounge",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Squeeze in fee",
            "category": "styling",
            "description": "Published optional add-on; applicability depends on selected service.",
            "price": {
              "kind": "fixed",
              "amount": 25,
              "amountMax": null,
              "currency": "USD",
              "note": null
            },
            "durationMinutes": 30,
            "durationMaxMinutes": null,
            "sourceId": "lounge",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Take down and Shampoo",
            "category": "styling",
            "description": "Published optional add-on; applicability depends on selected service.",
            "price": {
              "kind": "fixed",
              "amount": 100,
              "amountMax": null,
              "currency": "USD",
              "note": null
            },
            "durationMinutes": 65,
            "durationMaxMinutes": null,
            "sourceId": "lounge",
            "priceSourceId": null,
            "durationSourceId": null
          }
        ],
        "stylistsStatus": "published",
        "stylists": [
          {
            "name": "LaShondra",
            "specialties": [
              "Natural hair care",
              "Straightening",
              "Weaves",
              "Wigs"
            ],
            "bio": null,
            "bookingUrl": "https://letsgetcutelounge.as.me/schedule/a9fc65dc",
            "portfolioUrl": null,
            "sourceId": "lashondra"
          },
          {
            "name": "Joy",
            "specialties": [
              "Natural hair care"
            ],
            "bio": null,
            "bookingUrl": "https://letsgetcutelounge.as.me/schedule/a9fc65dc",
            "portfolioUrl": null,
            "sourceId": "website"
          },
          {
            "name": "Asa",
            "specialties": [
              "Weaves",
              "Ponytails",
              "Sew-ins"
            ],
            "bio": "Preparation rules exclude Amazon/TikTok bundles and require reused hair to be clean and in good condition.",
            "bookingUrl": "https://acedbyasa.as.me/schedule/75c77f0c",
            "portfolioUrl": null,
            "sourceId": "asa"
          },
          {
            "name": "Asia",
            "specialties": [],
            "bio": null,
            "bookingUrl": null,
            "portfolioUrl": null,
            "sourceId": "website"
          },
          {
            "name": "Mariah",
            "specialties": [],
            "bio": null,
            "bookingUrl": null,
            "portfolioUrl": null,
            "sourceId": "website"
          },
          {
            "name": "Tiana",
            "specialties": [],
            "bio": null,
            "bookingUrl": null,
            "portfolioUrl": null,
            "sourceId": "website"
          },
          {
            "name": "Meme",
            "specialties": [],
            "bio": null,
            "bookingUrl": "https://letsgetcutelounge.as.me/schedule/a9fc65dc",
            "portfolioUrl": null,
            "sourceId": "lounge"
          }
        ],
        "policies": {
          "cancellation": {
            "value": "LaShondra and Meme: changes at least 24 hours ahead may reuse the deposit; changes must go through the booking app. Other stylist rules are not established by this statement.",
            "sourceId": "lounge"
          },
          "deposit": {
            "value": "LaShondra and Meme: $25 nonrefundable deposit credited to service. Joy: a separate $25 nonrefundable/nontransferable booking fee is not included in the service price. These are different terms, not a salon-wide surcharge.",
            "sourceId": "lounge"
          },
          "noShow": {
            "value": null,
            "sourceId": null
          },
          "lateArrival": {
            "value": "Asa only: a 15-minute grace period is allowed, after which the appointment is cancelled. Other stylists' late rules were not established.",
            "sourceId": "asa"
          },
          "consultation": {
            "value": "A free 10-minute consultation is listed. Chemical services and some braid/crochet/twist services explicitly require a consultation.",
            "sourceId": "lounge"
          },
          "payment": {
            "value": "LaShondra/Meme deposit text lists Zelle/Apple Pay; Joy booking-fee text lists Zelle/Cash App. Final service payment methods remain unconfirmed.",
            "sourceId": "lounge"
          },
          "walkIns": {
            "value": null,
            "sourceId": null
          }
        },
        "unknowns": [
          "Live appointment availability was not checked.",
          "Final total including any mandatory extras, tax and tip is not established by published base prices.",
          "Other independent professionals' full menus are not exposed by their placeholder profiles.",
          "The broad salon handoff should be the official homepage, which directs customers to the correct independent professional.",
          "noShow terms were not established from the public pages checked.",
          "walkIns terms were not established from the public pages checked.",
          "Asa deposit crediting is not explicit; its image card permits cash for the remaining balance and requires final payment at the appointment. These are not salon-wide terms."
        ],
        "conflicts": [
          "Catalog Square link shygrlbeauty.square.site is explicitly the nail technician route. Hair booking is linked by the homepage to letsgetcutelounge.as.me and Asa to acedbyasa.as.me.",
          "Joy calendar requires a $25 non-creditable booking fee, while a service description mentions a $25-$50 deposit. Confirm the selected stylist/service terms.",
          "The add-on list has a $25 squeeze-in fee and detangling from $15, while several service descriptions warn of $45 unplanned-wash and $25 unplanned-detangling fees. Do not treat these as interchangeable.",
          "Several public team subpages contain default template names and placeholder contacts; those were excluded."
        ],
        "bookingUpdate": {
          "url": "https://letsgetcutelounge.as.me/schedule/a9fc65dc",
          "provider": "acuity",
          "sourceId": "website",
          "note": "Salon homepage links this lounge hair menu; Asa has a separate calendar linked in the public stylist profile. Individual service handoffs retain their own source menu. Previous Square route was nail-only."
        }
      }
    },
    {
      "slug": "man-cave-barber-and-shave-potrero-hill",
      "ref": "san-francisco/hair-salon/man-cave-barber-and-shave-potrero-hill",
      "name": "Man Cave Barber & Shave",
      "neighborhood": "Potrero Hill",
      "researched_at": "2026-10-24T09:34:11Z",
      "coverage": {
        "services": 7,
        "services_with_prices": 6,
        "services_with_durations": 6,
        "add_ons": 0,
        "stylists": 1,
        "published_policies": 0,
        "policy_fields": 7,
        "successfully_read_sources": 4
      },
      "unknowns": [
        "Exact final total, including applicable extras, tax and gratuity, is not established by a published base price.",
        "Appointment availability was not checked.",
        "The booking page cancellation text gives no usable deadline or fee; these terms remain unknown. Generic placeholder service-page descriptions were excluded.",
        "No usable public terms established for: cancellation, deposit, noShow, lateArrival, consultation, payment, walkIns.",
        "No separate priced add-on list was established on the pages checked; this does not establish that there are no extra charges."
      ],
      "conflicts": [
        "Website haircut is $50 and haircut with beard trim is $65; the Cornelius booking menu lists $60 and $70 respectively. Booking-menu amounts are not assumed to apply to every barber."
      ],
      "url": "https://agentsalonsf.com/salons/man-cave-barber-and-shave-potrero-hill",
      "markdown_url": "https://agentsalonsf.com/salons/man-cave-barber-and-shave-potrero-hill.md",
      "api_url": "https://agentsalonsf.com/api/v1/salons/man-cave-barber-and-shave-potrero-hill",
      "public_research": {
        "salonSlug": "man-cave-barber-and-shave-potrero-hill",
        "researchedAt": "2026-10-24T09:34:11Z",
        "summary": "Six services in the public Cornelius booking menu; the website has lower haircut prices. Website eyebrow trimming is also listed without price or duration.",
        "sources": [
          {
            "id": "website",
            "url": "https://www.mancavebarbersf.com/",
            "kind": "salon_website",
            "checkedAt": "2026-10-24T09:34:11Z",
            "outcome": "read",
            "note": "Public page read for services, team or stated policies."
          },
          {
            "id": "website-menu",
            "url": "https://www.mancavebarbersf.com/services.html",
            "kind": "salon_website",
            "checkedAt": "2026-10-24T09:34:11Z",
            "outcome": "read",
            "note": "Public page read for services, team or stated policies."
          },
          {
            "id": "updates",
            "url": "https://www.mancavebarbersf.com/updates",
            "kind": "salon_website",
            "checkedAt": "2026-10-24T09:34:11Z",
            "outcome": "read",
            "note": "Page read; placeholder content does not establish further service details."
          },
          {
            "id": "booking",
            "url": "https://book.squareup.com/appointments/7c1eff9f-3d0d-4abd-8d63-6ccc603545ee/location/2EJXMM2XZHBJ5",
            "kind": "booking_provider",
            "checkedAt": "2026-10-24T09:29:51Z",
            "outcome": "read",
            "note": "Public customer booking HTML menu, not an availability request."
          }
        ],
        "menuStatus": "published",
        "menu": [
          {
            "name": "Hair cut and beard trim",
            "category": "haircut",
            "description": null,
            "price": {
              "kind": "fixed",
              "amount": 70,
              "amountMax": null,
              "currency": "USD",
              "note": "Cornelius public booking menu."
            },
            "durationMinutes": 60,
            "durationMaxMinutes": null,
            "sourceId": "booking",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Hair Cut",
            "category": "haircut",
            "description": "Includes a line-up; shampoo and conditioner are excluded.",
            "price": {
              "kind": "fixed",
              "amount": 60,
              "amountMax": null,
              "currency": "USD",
              "note": "Cornelius public booking menu."
            },
            "durationMinutes": 60,
            "durationMaxMinutes": null,
            "sourceId": "booking",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Hot Towel Straight Razor Shave",
            "category": "beard",
            "description": null,
            "price": {
              "kind": "fixed",
              "amount": 50,
              "amountMax": null,
              "currency": "USD",
              "note": "Cornelius public booking menu."
            },
            "durationMinutes": 45,
            "durationMaxMinutes": null,
            "sourceId": "booking",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Beard and Mustache Trim",
            "category": "beard",
            "description": null,
            "price": {
              "kind": "fixed",
              "amount": 30,
              "amountMax": null,
              "currency": "USD",
              "note": "Cornelius public booking menu."
            },
            "durationMinutes": 30,
            "durationMaxMinutes": null,
            "sourceId": "booking",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Clean Up  (A Line Up & Tapering Of The Sideburns And Back Of Head)",
            "category": "haircut",
            "description": "Line-up and taper around sideburns and back; does not remove length from the top or sides.",
            "price": {
              "kind": "fixed",
              "amount": 27,
              "amountMax": null,
              "currency": "USD",
              "note": "Cornelius public booking menu."
            },
            "durationMinutes": 30,
            "durationMaxMinutes": null,
            "sourceId": "booking",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Bald Head Shave",
            "category": "haircut",
            "description": null,
            "price": {
              "kind": "fixed",
              "amount": 50,
              "amountMax": null,
              "currency": "USD",
              "note": "Cornelius public booking menu."
            },
            "durationMinutes": 30,
            "durationMaxMinutes": null,
            "sourceId": "booking",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Eyebrow trimming",
            "category": "other",
            "description": "Mentioned among website services without price or duration.",
            "price": {
              "kind": "unknown",
              "amount": null,
              "amountMax": null,
              "currency": "USD",
              "note": null
            },
            "durationMinutes": null,
            "durationMaxMinutes": null,
            "sourceId": "website",
            "priceSourceId": null,
            "durationSourceId": null
          }
        ],
        "addOnsStatus": "unknown",
        "addOns": [],
        "stylistsStatus": "published",
        "stylists": [
          {
            "name": "Cornelius",
            "specialties": [],
            "bio": null,
            "bookingUrl": "https://book.squareup.com/appointments/7c1eff9f-3d0d-4abd-8d63-6ccc603545ee/location/2EJXMM2XZHBJ5",
            "portfolioUrl": null,
            "sourceId": "booking"
          }
        ],
        "policies": {
          "cancellation": {
            "value": null,
            "sourceId": null
          },
          "deposit": {
            "value": null,
            "sourceId": null
          },
          "noShow": {
            "value": null,
            "sourceId": null
          },
          "lateArrival": {
            "value": null,
            "sourceId": null
          },
          "consultation": {
            "value": null,
            "sourceId": null
          },
          "payment": {
            "value": null,
            "sourceId": null
          },
          "walkIns": {
            "value": null,
            "sourceId": null
          }
        },
        "unknowns": [
          "Exact final total, including applicable extras, tax and gratuity, is not established by a published base price.",
          "Appointment availability was not checked.",
          "The booking page cancellation text gives no usable deadline or fee; these terms remain unknown. Generic placeholder service-page descriptions were excluded.",
          "No usable public terms established for: cancellation, deposit, noShow, lateArrival, consultation, payment, walkIns.",
          "No separate priced add-on list was established on the pages checked; this does not establish that there are no extra charges."
        ],
        "conflicts": [
          "Website haircut is $50 and haircut with beard trim is $65; the Cornelius booking menu lists $60 and $70 respectively. Booking-menu amounts are not assumed to apply to every barber."
        ]
      }
    },
    {
      "slug": "monterey-salon-west-of-twin-peaks",
      "ref": "san-francisco/hair-salon/monterey-salon-west-of-twin-peaks",
      "name": "Monterey Salon",
      "neighborhood": "West of Twin Peaks",
      "researched_at": "2026-10-24T09:33:36Z",
      "coverage": {
        "services": 14,
        "services_with_prices": 14,
        "services_with_durations": 14,
        "add_ons": 0,
        "stylists": 2,
        "published_policies": 0,
        "policy_fields": 7,
        "successfully_read_sources": 2
      },
      "unknowns": [
        "Live appointment availability was not checked.",
        "Final total including any mandatory extras, tax and tip is not established by published base prices.",
        "cancellation terms were not established from the public pages checked.",
        "deposit terms were not established from the public pages checked.",
        "noShow terms were not established from the public pages checked.",
        "lateArrival terms were not established from the public pages checked.",
        "consultation terms were not established from the public pages checked.",
        "payment terms were not established from the public pages checked.",
        "walkIns terms were not established from the public pages checked."
      ],
      "conflicts": [],
      "url": "https://agentsalonsf.com/salons/monterey-salon-west-of-twin-peaks",
      "markdown_url": "https://agentsalonsf.com/salons/monterey-salon-west-of-twin-peaks.md",
      "api_url": "https://agentsalonsf.com/api/v1/salons/monterey-salon-west-of-twin-peaks",
      "public_research": {
        "salonSlug": "monterey-salon-west-of-twin-peaks",
        "researchedAt": "2026-10-24T09:33:36Z",
        "summary": "Fourteen services with public prices and durations; two public staff display names. The booking page identifies the same 597 Monterey Boulevard salon and links back to the listed website.",
        "sources": [
          {
            "id": "website",
            "url": "https://monterey-hair-salon.square.site/",
            "kind": "salon_website",
            "checkedAt": "2026-10-24T09:33:36Z",
            "outcome": "read",
            "note": "Public site shell read; no menu text in the page body. Its embedded site content identifies Monterey Salon."
          },
          {
            "id": "appointments",
            "url": "https://monterey-hair-salon.square.site/s/appointments",
            "kind": "salon_website",
            "checkedAt": "2026-10-24T09:33:36Z",
            "outcome": "unavailable",
            "note": "Customer appointment page returned only a script-driven shell; no readable menu."
          },
          {
            "id": "booking",
            "url": "https://book.squareup.com/appointments/50ewmk1tzjyuhm/location/LJ43P8XB2PK1D",
            "kind": "booking_provider",
            "checkedAt": "2026-10-24T09:33:36Z",
            "outcome": "read",
            "note": "Public booking HTML identifies Monterey Salon, 597 MONTEREY BLVD, San Francisco and links back to monterey-hair-salon.square.site; 14 visible service variants."
          }
        ],
        "menuStatus": "published",
        "menu": [
          {
            "name": "Women's Haircut",
            "category": "haircut",
            "description": "Published option: Serve By Joshua.",
            "price": {
              "kind": "fixed",
              "amount": 55,
              "amountMax": null,
              "currency": "USD",
              "note": "$55"
            },
            "durationMinutes": 30,
            "durationMaxMinutes": null,
            "sourceId": "booking",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Kid’s Haircut",
            "category": "haircut",
            "description": "Published option: Serve By Joshua. For ages 12 and under.",
            "price": {
              "kind": "fixed",
              "amount": 45,
              "amountMax": null,
              "currency": "USD",
              "note": "$45"
            },
            "durationMinutes": 30,
            "durationMaxMinutes": null,
            "sourceId": "booking",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Senior's Haircut",
            "category": "haircut",
            "description": "Published option: Serve By Joshua. For ages 65 and over.",
            "price": {
              "kind": "fixed",
              "amount": 45,
              "amountMax": null,
              "currency": "USD",
              "note": "$45"
            },
            "durationMinutes": 30,
            "durationMaxMinutes": null,
            "sourceId": "booking",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Women's Fade ,Buzz Haircut",
            "category": "haircut",
            "description": null,
            "price": {
              "kind": "fixed",
              "amount": 50,
              "amountMax": null,
              "currency": "USD",
              "note": "$50"
            },
            "durationMinutes": 30,
            "durationMaxMinutes": null,
            "sourceId": "booking",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Tint touch up (roots only)",
            "category": "color",
            "description": "For one inch of regrowth; grey coverage or matching existing color. Styling is included.",
            "price": {
              "kind": "fixed",
              "amount": 85,
              "amountMax": null,
              "currency": "USD",
              "note": "$85"
            },
            "durationMinutes": 90,
            "durationMaxMinutes": null,
            "sourceId": "booking",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Men's Hair Wave Perm",
            "category": "treatment",
            "description": null,
            "price": {
              "kind": "fixed",
              "amount": 130,
              "amountMax": null,
              "currency": "USD",
              "note": "$130"
            },
            "durationMinutes": 90,
            "durationMaxMinutes": null,
            "sourceId": "booking",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Men’s Haircut",
            "category": "haircut",
            "description": "Published option: Haircut By Joshua.",
            "price": {
              "kind": "fixed",
              "amount": 50,
              "amountMax": null,
              "currency": "USD",
              "note": "$50"
            },
            "durationMinutes": 30,
            "durationMaxMinutes": null,
            "sourceId": "booking",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Men’s Haircut & shampoo",
            "category": "haircut",
            "description": "Published option: Serve By Joshua.",
            "price": {
              "kind": "fixed",
              "amount": 55,
              "amountMax": null,
              "currency": "USD",
              "note": "$55"
            },
            "durationMinutes": 30,
            "durationMaxMinutes": null,
            "sourceId": "booking",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Bang trim",
            "category": "haircut",
            "description": "Published option: Serve By Joshua.",
            "price": {
              "kind": "fixed",
              "amount": 15,
              "amountMax": null,
              "currency": "USD",
              "note": "$15"
            },
            "durationMinutes": 15,
            "durationMaxMinutes": null,
            "sourceId": "booking",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Men's hair cut and color",
            "category": "color",
            "description": "Haircut with grey-coverage color.",
            "price": {
              "kind": "starting_at",
              "amount": 85,
              "amountMax": null,
              "currency": "USD",
              "note": "Starting at $85"
            },
            "durationMinutes": 90,
            "durationMaxMinutes": null,
            "sourceId": "booking",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Women's Haircut & Shampoo",
            "category": "haircut",
            "description": null,
            "price": {
              "kind": "fixed",
              "amount": 70,
              "amountMax": null,
              "currency": "USD",
              "note": "$70"
            },
            "durationMinutes": 60,
            "durationMaxMinutes": null,
            "sourceId": "booking",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Women’s hair shampoo & blow dry",
            "category": "styling",
            "description": null,
            "price": {
              "kind": "fixed",
              "amount": 45,
              "amountMax": null,
              "currency": "USD",
              "note": null
            },
            "durationMinutes": 45,
            "durationMaxMinutes": null,
            "sourceId": "booking",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Japanese Permanent straightening hair",
            "category": "treatment",
            "description": null,
            "price": {
              "kind": "fixed",
              "amount": 230,
              "amountMax": null,
              "currency": "USD",
              "note": null
            },
            "durationMinutes": 180,
            "durationMaxMinutes": null,
            "sourceId": "booking",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Hair color-All over",
            "category": "color",
            "description": null,
            "price": {
              "kind": "starting_at",
              "amount": 150,
              "amountMax": null,
              "currency": "USD",
              "note": "Starting at $150"
            },
            "durationMinutes": 150,
            "durationMaxMinutes": null,
            "sourceId": "booking",
            "priceSourceId": null,
            "durationSourceId": null
          }
        ],
        "addOnsStatus": "unknown",
        "addOns": [],
        "stylistsStatus": "published",
        "stylists": [
          {
            "name": "Eugene",
            "specialties": [],
            "bio": null,
            "bookingUrl": "https://book.squareup.com/appointments/50ewmk1tzjyuhm/location/LJ43P8XB2PK1D",
            "portfolioUrl": null,
            "sourceId": "booking"
          },
          {
            "name": "Joshua",
            "specialties": [],
            "bio": null,
            "bookingUrl": "https://book.squareup.com/appointments/50ewmk1tzjyuhm/location/LJ43P8XB2PK1D",
            "portfolioUrl": null,
            "sourceId": "booking"
          }
        ],
        "policies": {
          "cancellation": {
            "value": null,
            "sourceId": null
          },
          "deposit": {
            "value": null,
            "sourceId": null
          },
          "noShow": {
            "value": null,
            "sourceId": null
          },
          "lateArrival": {
            "value": null,
            "sourceId": null
          },
          "consultation": {
            "value": null,
            "sourceId": null
          },
          "payment": {
            "value": null,
            "sourceId": null
          },
          "walkIns": {
            "value": null,
            "sourceId": null
          }
        },
        "unknowns": [
          "Live appointment availability was not checked.",
          "Final total including any mandatory extras, tax and tip is not established by published base prices.",
          "cancellation terms were not established from the public pages checked.",
          "deposit terms were not established from the public pages checked.",
          "noShow terms were not established from the public pages checked.",
          "lateArrival terms were not established from the public pages checked.",
          "consultation terms were not established from the public pages checked.",
          "payment terms were not established from the public pages checked.",
          "walkIns terms were not established from the public pages checked."
        ],
        "conflicts": []
      }
    },
    {
      "slug": "native-hair-mission",
      "ref": "san-francisco/hair-salon/native-hair-mission",
      "name": "Native Hair",
      "neighborhood": "Mission",
      "researched_at": "2026-10-24T09:33:36Z",
      "coverage": {
        "services": 10,
        "services_with_prices": 10,
        "services_with_durations": 10,
        "add_ons": 0,
        "stylists": 1,
        "published_policies": 0,
        "policy_fields": 7,
        "successfully_read_sources": 2
      },
      "unknowns": [
        "Live appointment availability was not checked.",
        "Final total including any mandatory extras, tax and tip is not established by published base prices.",
        "Return-to-work timing and appointment supply need direct confirmation; ordinary posted hours are not relied on during the limited-schedule period.",
        "cancellation terms were not established from the public pages checked.",
        "deposit terms were not established from the public pages checked.",
        "noShow terms were not established from the public pages checked.",
        "lateArrival terms were not established from the public pages checked.",
        "consultation terms were not established from the public pages checked.",
        "payment terms were not established from the public pages checked.",
        "walkIns terms were not established from the public pages checked."
      ],
      "conflicts": [],
      "url": "https://agentsalonsf.com/salons/native-hair-mission",
      "markdown_url": "https://agentsalonsf.com/salons/native-hair-mission.md",
      "api_url": "https://agentsalonsf.com/api/v1/salons/native-hair-mission",
      "public_research": {
        "salonSlug": "native-hair-mission",
        "researchedAt": "2026-10-24T09:33:36Z",
        "summary": "Ten public booking services with prices and durations. The website posts a limited operating schedule beginning September 2026; the menu is not evidence that appointments are currently available.",
        "sources": [
          {
            "id": "website",
            "url": "https://www.nativehairsf.com/",
            "kind": "salon_website",
            "checkedAt": "2026-10-24T09:33:36Z",
            "outcome": "read",
            "note": "Read public professional name, short-hair specialty and current limited-schedule notice."
          },
          {
            "id": "booking",
            "url": "https://book.squareup.com/appointments/c481f56e-3f8c-445a-a5a4-c1fe672a0f7a/location/B41TGT1QA4KBR",
            "kind": "booking_provider",
            "checkedAt": "2026-10-24T09:33:36Z",
            "outcome": "read",
            "note": "Public HTML customer menu; 10 services with visible variants, price/duration. Public display name is Noelle."
          }
        ],
        "menuStatus": "published",
        "menu": [
          {
            "name": "Haircut",
            "category": "haircut",
            "description": "Scissor/clippers or all-scissor cut. Menu directs shoulder-length-or-longer hair to Ladies Short Haircut.",
            "price": {
              "kind": "fixed",
              "amount": 50,
              "amountMax": null,
              "currency": "USD",
              "note": null
            },
            "durationMinutes": 30,
            "durationMaxMinutes": null,
            "sourceId": "booking",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Line up/Clean up",
            "category": "haircut",
            "description": "Maintenance of the hairline around ears and neck.",
            "price": {
              "kind": "fixed",
              "amount": 20,
              "amountMax": null,
              "currency": "USD",
              "note": null
            },
            "durationMinutes": 15,
            "durationMaxMinutes": null,
            "sourceId": "booking",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Fade Refresh",
            "category": "haircut",
            "description": "Fade maintenance between full haircuts.",
            "price": {
              "kind": "fixed",
              "amount": 40,
              "amountMax": null,
              "currency": "USD",
              "note": null
            },
            "durationMinutes": 30,
            "durationMaxMinutes": null,
            "sourceId": "booking",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Haircut & Beard Trim",
            "category": "haircut",
            "description": null,
            "price": {
              "kind": "fixed",
              "amount": 55,
              "amountMax": null,
              "currency": "USD",
              "note": null
            },
            "durationMinutes": 40,
            "durationMaxMinutes": null,
            "sourceId": "booking",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Fade Refresh & Beard Trim",
            "category": "haircut",
            "description": null,
            "price": {
              "kind": "fixed",
              "amount": 45,
              "amountMax": null,
              "currency": "USD",
              "note": null
            },
            "durationMinutes": 30,
            "durationMaxMinutes": null,
            "sourceId": "booking",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Ladies Short Haircut",
            "category": "haircut",
            "description": "Wash is excluded unless requested.",
            "price": {
              "kind": "fixed",
              "amount": 60,
              "amountMax": null,
              "currency": "USD",
              "note": null
            },
            "durationMinutes": 60,
            "durationMaxMinutes": null,
            "sourceId": "booking",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Ladies Short Haircut with Style",
            "category": "haircut",
            "description": null,
            "price": {
              "kind": "fixed",
              "amount": 80,
              "amountMax": null,
              "currency": "USD",
              "note": null
            },
            "durationMinutes": 75,
            "durationMaxMinutes": null,
            "sourceId": "booking",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Beard Trim",
            "category": "beard",
            "description": null,
            "price": {
              "kind": "fixed",
              "amount": 20,
              "amountMax": null,
              "currency": "USD",
              "note": null
            },
            "durationMinutes": 20,
            "durationMaxMinutes": null,
            "sourceId": "booking",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Bang Trim",
            "category": "haircut",
            "description": null,
            "price": {
              "kind": "fixed",
              "amount": 20,
              "amountMax": null,
              "currency": "USD",
              "note": null
            },
            "durationMinutes": 20,
            "durationMaxMinutes": null,
            "sourceId": "booking",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "One Blade Buzz Cut",
            "category": "haircut",
            "description": "One blade length over the entire head.",
            "price": {
              "kind": "fixed",
              "amount": 25,
              "amountMax": null,
              "currency": "USD",
              "note": null
            },
            "durationMinutes": 15,
            "durationMaxMinutes": null,
            "sourceId": "booking",
            "priceSourceId": null,
            "durationSourceId": null
          }
        ],
        "addOnsStatus": "unknown",
        "addOns": [],
        "stylistsStatus": "published",
        "stylists": [
          {
            "name": "Noelle",
            "specialties": [
              "Short hair"
            ],
            "bio": null,
            "bookingUrl": "https://book.squareup.com/appointments/c481f56e-3f8c-445a-a5a4-c1fe672a0f7a/location/B41TGT1QA4KBR",
            "portfolioUrl": null,
            "sourceId": "website"
          }
        ],
        "policies": {
          "cancellation": {
            "value": null,
            "sourceId": null
          },
          "deposit": {
            "value": null,
            "sourceId": null
          },
          "noShow": {
            "value": null,
            "sourceId": null
          },
          "lateArrival": {
            "value": null,
            "sourceId": null
          },
          "consultation": {
            "value": null,
            "sourceId": null
          },
          "payment": {
            "value": null,
            "sourceId": null
          },
          "walkIns": {
            "value": null,
            "sourceId": null
          }
        },
        "unknowns": [
          "Live appointment availability was not checked.",
          "Final total including any mandatory extras, tax and tip is not established by published base prices.",
          "Return-to-work timing and appointment supply need direct confirmation; ordinary posted hours are not relied on during the limited-schedule period.",
          "cancellation terms were not established from the public pages checked.",
          "deposit terms were not established from the public pages checked.",
          "noShow terms were not established from the public pages checked.",
          "lateArrival terms were not established from the public pages checked.",
          "consultation terms were not established from the public pages checked.",
          "payment terms were not established from the public pages checked.",
          "walkIns terms were not established from the public pages checked."
        ],
        "conflicts": []
      }
    },
    {
      "slug": "principle-salon-mission",
      "ref": "san-francisco/hair-salon/principle-salon-mission",
      "name": "Principle Salon",
      "neighborhood": "Mission",
      "researched_at": "2026-10-24T09:46:01Z",
      "coverage": {
        "services": 29,
        "services_with_prices": 27,
        "services_with_durations": 23,
        "add_ons": 3,
        "stylists": 6,
        "published_policies": 4,
        "policy_fields": 7,
        "successfully_read_sources": 4
      },
      "unknowns": [
        "Live appointment availability was not checked.",
        "Final total including any mandatory extras, tax and tip is not established by published base prices.",
        "Salon-wide deposit, cancellation, no-show and payment rules are not established; independently published stylist policies must not be generalized.",
        "deposit terms were not established from the public pages checked.",
        "noShow terms were not established from the public pages checked.",
        "payment terms were not established from the public pages checked.",
        "Alx/Heather current provider menus were not readable through the public pages available in this session. Erin and Jewel direct personal-name URLs are withheld; their menus remain unknown.",
        "Marian menu prices, service durations and consultation details are withheld: the only verified menu source has a personal-name URL. The official team page confirms first-name profile and specialties, but not those menu facts. Its embedded provider shortlink opens a generic provider homepage and is not corroborating menu evidence."
      ],
      "conflicts": [
        "Kelly Partial Highlight: Conflicting public price fields: label 280.00 +; numeric booking base $290. Confirm before relying on either.",
        "Kelly Root Touch-Up: Conflicting public price fields: label 170.00 +; numeric booking base $180. Confirm before relying on either."
      ],
      "url": "https://agentsalonsf.com/salons/principle-salon-mission",
      "markdown_url": "https://agentsalonsf.com/salons/principle-salon-mission.md",
      "api_url": "https://agentsalonsf.com/api/v1/salons/principle-salon-mission",
      "public_research": {
        "salonSlug": "principle-salon-mission",
        "researchedAt": "2026-10-24T09:46:01Z",
        "summary": "Salon guide and all accessible Kelly menu options retained. Six professional first-name profiles are supported by the official team page. Marian provider-menu facts are withheld because no privacy-safe public source URL could be verified; other independent menus remain unknown.",
        "sources": [
          {
            "id": "website",
            "url": "https://www.principlesalon.com/",
            "kind": "salon_website",
            "checkedAt": "2026-10-24T09:33:36Z",
            "outcome": "read",
            "note": "Official home links services, team and salon booking."
          },
          {
            "id": "menu",
            "url": "https://www.principlesalon.com/services",
            "kind": "salon_website",
            "checkedAt": "2026-10-24T09:33:36Z",
            "outcome": "read",
            "note": "Read all seven guide services; rates may vary by stylist."
          },
          {
            "id": "team",
            "url": "https://www.principlesalon.com/team",
            "kind": "salon_website",
            "checkedAt": "2026-10-24T09:46:01Z",
            "outcome": "read",
            "note": "Rechecked six professional first names and specialties. Personal-name provider URLs are withheld; the official team page remains the route to independently chosen booking links."
          },
          {
            "id": "main-booking",
            "url": "https://principlesalon.square.site/",
            "kind": "booking_provider",
            "checkedAt": "2026-10-24T09:33:36Z",
            "outcome": "unavailable",
            "note": "Public site shell and /s/appointments checked; no customer menu recovered."
          },
          {
            "id": "kelly",
            "url": "https://book.squareup.com/appointments/lo8mzrej2smhc3/location/LY31NZB0ZQF48",
            "kind": "booking_provider",
            "checkedAt": "2026-10-24T09:33:36Z",
            "outcome": "read",
            "note": "Official team page links this provider route. Public HTML menu identifies 3112 24th St and Kelly; visible variations and policy read."
          }
        ],
        "menuStatus": "published",
        "menu": [
          {
            "name": "Haircuts",
            "category": "haircut",
            "description": "Salon guide; rates vary by stylist.",
            "price": {
              "kind": "starting_at",
              "amount": 140,
              "amountMax": null,
              "currency": "USD",
              "note": null
            },
            "durationMinutes": null,
            "durationMaxMinutes": null,
            "sourceId": "menu",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Partial Highlight / Balayage",
            "category": "color",
            "description": "Salon guide; rates vary by stylist.",
            "price": {
              "kind": "starting_at",
              "amount": 315,
              "amountMax": null,
              "currency": "USD",
              "note": null
            },
            "durationMinutes": null,
            "durationMaxMinutes": null,
            "sourceId": "menu",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Full Highlight / Balayage",
            "category": "color",
            "description": "Salon guide; rates vary by stylist.",
            "price": {
              "kind": "starting_at",
              "amount": 365,
              "amountMax": null,
              "currency": "USD",
              "note": null
            },
            "durationMinutes": null,
            "durationMaxMinutes": null,
            "sourceId": "menu",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Tint / Root Touch-up",
            "category": "color",
            "description": "Salon guide; rates vary by stylist.",
            "price": {
              "kind": "starting_at",
              "amount": 180,
              "amountMax": null,
              "currency": "USD",
              "note": null
            },
            "durationMinutes": null,
            "durationMaxMinutes": null,
            "sourceId": "menu",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Gloss / Toner",
            "category": "color",
            "description": "Salon guide; rates vary by stylist.",
            "price": {
              "kind": "starting_at",
              "amount": 170,
              "amountMax": null,
              "currency": "USD",
              "note": null
            },
            "durationMinutes": null,
            "durationMaxMinutes": null,
            "sourceId": "menu",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Blow Dry",
            "category": "styling",
            "description": "Salon guide; rates vary by stylist. Shampoo, condition and blow-dry; excludes braids/updos. Published time is 1 hour or longer.",
            "price": {
              "kind": "starting_at",
              "amount": 125,
              "amountMax": null,
              "currency": "USD",
              "note": null
            },
            "durationMinutes": null,
            "durationMaxMinutes": null,
            "sourceId": "menu",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Color Consultation",
            "category": "other",
            "description": "Salon guide; rates vary by stylist. Fee is credited to a booked service.",
            "price": {
              "kind": "fixed",
              "amount": 40,
              "amountMax": null,
              "currency": "USD",
              "note": null
            },
            "durationMinutes": 20,
            "durationMaxMinutes": null,
            "sourceId": "menu",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Toner / Gloss",
            "category": "color",
            "description": "Kelly menu. Blow-dry included.",
            "price": {
              "kind": "fixed",
              "amount": 105,
              "amountMax": null,
              "currency": "USD",
              "note": "More product or time can increase the price."
            },
            "durationMinutes": 60,
            "durationMaxMinutes": null,
            "sourceId": "kelly",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Haircut",
            "category": "haircut",
            "description": "Kelly menu. Consultation, wash, cut and blow-dry.",
            "price": {
              "kind": "fixed",
              "amount": 140,
              "amountMax": null,
              "currency": "USD",
              "note": null
            },
            "durationMinutes": 75,
            "durationMaxMinutes": null,
            "sourceId": "kelly",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Haircut",
            "category": "haircut",
            "description": "Kelly menu. Published option: Haircut with Tone / Glaze. Consultation, wash, cut and blow-dry.",
            "price": {
              "kind": "fixed",
              "amount": 205,
              "amountMax": null,
              "currency": "USD",
              "note": null
            },
            "durationMinutes": 90,
            "durationMaxMinutes": null,
            "sourceId": "kelly",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Haircut",
            "category": "haircut",
            "description": "Kelly menu. Published option: Haircut with Conditioning Treatment. Consultation, wash, cut and blow-dry.",
            "price": {
              "kind": "fixed",
              "amount": 165,
              "amountMax": null,
              "currency": "USD",
              "note": null
            },
            "durationMinutes": 75,
            "durationMaxMinutes": null,
            "sourceId": "kelly",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Partial Highlight",
            "category": "color",
            "description": "Kelly menu.",
            "price": {
              "kind": "unknown",
              "amount": null,
              "amountMax": null,
              "currency": "USD",
              "note": "Conflicting public price fields: label 280.00 +; numeric booking base $290. Confirm before relying on either. More product or time can increase the price."
            },
            "durationMinutes": 150,
            "durationMaxMinutes": null,
            "sourceId": "kelly",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Partial Highlight",
            "category": "color",
            "description": "Kelly menu. Published option: Partial Highlight with Haircut.",
            "price": {
              "kind": "fixed",
              "amount": 420,
              "amountMax": null,
              "currency": "USD",
              "note": "More product or time can increase the price."
            },
            "durationMinutes": 180,
            "durationMaxMinutes": null,
            "sourceId": "kelly",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Full Highlight",
            "category": "color",
            "description": "Kelly menu.",
            "price": {
              "kind": "starting_at",
              "amount": 330,
              "amountMax": null,
              "currency": "USD",
              "note": "330.00 + More product or time can increase the price."
            },
            "durationMinutes": 195,
            "durationMaxMinutes": null,
            "sourceId": "kelly",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Full Highlight",
            "category": "color",
            "description": "Kelly menu. Published option: Full Highlight with Haircut.",
            "price": {
              "kind": "fixed",
              "amount": 470,
              "amountMax": null,
              "currency": "USD",
              "note": "470.00 More product or time can increase the price."
            },
            "durationMinutes": 225,
            "durationMaxMinutes": null,
            "sourceId": "kelly",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Partial Balayage / Lived-In Color",
            "category": "color",
            "description": "Kelly menu.",
            "price": {
              "kind": "starting_at",
              "amount": 305,
              "amountMax": null,
              "currency": "USD",
              "note": "305.00 + More product or time can increase the price."
            },
            "durationMinutes": 180,
            "durationMaxMinutes": null,
            "sourceId": "kelly",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Partial Balayage / Lived-In Color",
            "category": "color",
            "description": "Kelly menu. Published option: Partial Balayage / Lived-In Color with Haircut.",
            "price": {
              "kind": "fixed",
              "amount": 445,
              "amountMax": null,
              "currency": "USD",
              "note": "More product or time can increase the price."
            },
            "durationMinutes": 210,
            "durationMaxMinutes": null,
            "sourceId": "kelly",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Full Balayage / Lived-In Color",
            "category": "color",
            "description": "Kelly menu.",
            "price": {
              "kind": "starting_at",
              "amount": 345,
              "amountMax": null,
              "currency": "USD",
              "note": "345.00 + More product or time can increase the price."
            },
            "durationMinutes": 210,
            "durationMaxMinutes": null,
            "sourceId": "kelly",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Full Balayage / Lived-In Color",
            "category": "color",
            "description": "Kelly menu. Published option: Full Balayage / Lived-In Color with Haircut.",
            "price": {
              "kind": "fixed",
              "amount": 485,
              "amountMax": null,
              "currency": "USD",
              "note": "More product or time can increase the price."
            },
            "durationMinutes": 240,
            "durationMaxMinutes": null,
            "sourceId": "kelly",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Money Piece / Face Frame Highlight",
            "category": "color",
            "description": "Kelly menu.",
            "price": {
              "kind": "starting_at",
              "amount": 200,
              "amountMax": null,
              "currency": "USD",
              "note": "200.00 + More product or time can increase the price."
            },
            "durationMinutes": 120,
            "durationMaxMinutes": null,
            "sourceId": "kelly",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Money Piece / Face Frame Highlight",
            "category": "color",
            "description": "Kelly menu. Published option: Money Piece Highlights with Haircut.",
            "price": {
              "kind": "fixed",
              "amount": 340,
              "amountMax": null,
              "currency": "USD",
              "note": "More product or time can increase the price."
            },
            "durationMinutes": 150,
            "durationMaxMinutes": null,
            "sourceId": "kelly",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Root Touch-Up",
            "category": "styling",
            "description": "Kelly menu.",
            "price": {
              "kind": "unknown",
              "amount": null,
              "amountMax": null,
              "currency": "USD",
              "note": "Conflicting public price fields: label 170.00 +; numeric booking base $180. Confirm before relying on either."
            },
            "durationMinutes": 120,
            "durationMaxMinutes": null,
            "sourceId": "kelly",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Root Touch-Up",
            "category": "styling",
            "description": "Kelly menu. Published option: Root Touch-Up with Haircut.",
            "price": {
              "kind": "fixed",
              "amount": 320,
              "amountMax": null,
              "currency": "USD",
              "note": null
            },
            "durationMinutes": 150,
            "durationMaxMinutes": null,
            "sourceId": "kelly",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Bleach & Tone",
            "category": "color",
            "description": "Kelly menu. Prior consultation required for more than six weeks of regrowth.",
            "price": {
              "kind": "starting_at",
              "amount": 320,
              "amountMax": null,
              "currency": "USD",
              "note": "320.00 + More product or time can increase the price."
            },
            "durationMinutes": 210,
            "durationMaxMinutes": null,
            "sourceId": "kelly",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Bleach & Tone",
            "category": "color",
            "description": "Kelly menu. Published option: Bleach & Tone with Haircut. Prior consultation required for more than six weeks of regrowth.",
            "price": {
              "kind": "fixed",
              "amount": 460,
              "amountMax": null,
              "currency": "USD",
              "note": "More product or time can increase the price."
            },
            "durationMinutes": 240,
            "durationMaxMinutes": null,
            "sourceId": "kelly",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Bang Trim (Complimentary)",
            "category": "haircut",
            "description": "Kelly menu. One free between-cut bang trim for current clients; contact to arrange.",
            "price": {
              "kind": "fixed",
              "amount": 0,
              "amountMax": null,
              "currency": "USD",
              "note": null
            },
            "durationMinutes": 15,
            "durationMaxMinutes": null,
            "sourceId": "kelly",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Bang Trim",
            "category": "haircut",
            "description": "Kelly menu. For new clients or adding/changing bangs.",
            "price": {
              "kind": "fixed",
              "amount": 30,
              "amountMax": null,
              "currency": "USD",
              "note": null
            },
            "durationMinutes": 30,
            "durationMaxMinutes": null,
            "sourceId": "kelly",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Consultation (Complimentary)",
            "category": "other",
            "description": "Kelly menu. Free consultation to discuss goals, history and budget.",
            "price": {
              "kind": "fixed",
              "amount": 0,
              "amountMax": null,
              "currency": "USD",
              "note": null
            },
            "durationMinutes": 15,
            "durationMaxMinutes": null,
            "sourceId": "kelly",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Barber Haircut",
            "category": "haircut",
            "description": "Kelly menu. Consultation, wash, scissor cut and styling; no clippers.",
            "price": {
              "kind": "fixed",
              "amount": 100,
              "amountMax": null,
              "currency": "USD",
              "note": null
            },
            "durationMinutes": 60,
            "durationMaxMinutes": null,
            "sourceId": "kelly",
            "priceSourceId": null,
            "durationSourceId": null
          }
        ],
        "addOnsStatus": "published",
        "addOns": [
          {
            "name": "Head Massage",
            "category": "styling",
            "description": "Kelly menu. Ten additional minutes at the shampoo bowl.",
            "price": {
              "kind": "fixed",
              "amount": 10,
              "amountMax": null,
              "currency": "USD",
              "note": null
            },
            "durationMinutes": 10,
            "durationMaxMinutes": null,
            "sourceId": "kelly",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Extra Service Time",
            "category": "styling",
            "description": "Kelly menu. Only select after discussing the longer appointment with Kelly.",
            "price": {
              "kind": "fixed",
              "amount": 15,
              "amountMax": null,
              "currency": "USD",
              "note": null
            },
            "durationMinutes": 15,
            "durationMaxMinutes": null,
            "sourceId": "kelly",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Strengthening / Moisturizing Deep Treatment",
            "category": "treatment",
            "description": "Kelly menu.",
            "price": {
              "kind": "fixed",
              "amount": 25,
              "amountMax": null,
              "currency": "USD",
              "note": null
            },
            "durationMinutes": 10,
            "durationMaxMinutes": null,
            "sourceId": "kelly",
            "priceSourceId": null,
            "durationSourceId": null
          }
        ],
        "stylistsStatus": "published",
        "stylists": [
          {
            "name": "Alx",
            "specialties": [
              "Color",
              "Balayage",
              "Low-maintenance blondes",
              "Grey blending"
            ],
            "bio": null,
            "bookingUrl": "https://principlesalon.square.site/",
            "portfolioUrl": null,
            "sourceId": "team"
          },
          {
            "name": "Heather",
            "specialties": [
              "Low-maintenance color",
              "Textured cuts"
            ],
            "bio": null,
            "bookingUrl": "https://principlesalon.square.site/",
            "portfolioUrl": null,
            "sourceId": "team"
          },
          {
            "name": "Erin",
            "specialties": [
              "Dry cutting",
              "Bobs",
              "Bangs",
              "Low-maintenance cuts",
              "Textured cuts",
              "Razor cuts"
            ],
            "bio": null,
            "bookingUrl": "https://www.principlesalon.com/team",
            "portfolioUrl": null,
            "sourceId": "team"
          },
          {
            "name": "Jewel",
            "specialties": [
              "Bobs",
              "Shags",
              "Pixies",
              "Curls",
              "Balayage",
              "Creative cuts"
            ],
            "bio": null,
            "bookingUrl": "https://www.principlesalon.com/team",
            "portfolioUrl": null,
            "sourceId": "team"
          },
          {
            "name": "Kelly",
            "specialties": [
              "Bobs",
              "Lived-in blondes",
              "Long-hair razor cuts",
              "Highlighting",
              "Grey coverage and blending"
            ],
            "bio": null,
            "bookingUrl": "https://book.squareup.com/appointments/lo8mzrej2smhc3/location/LY31NZB0ZQF48",
            "portfolioUrl": null,
            "sourceId": "team"
          },
          {
            "name": "Marian",
            "specialties": [
              "Razor cutting",
              "Layers",
              "Pixies",
              "Bobs",
              "Textured hair",
              "Balayage"
            ],
            "bio": null,
            "bookingUrl": "https://www.principlesalon.com/team",
            "portfolioUrl": null,
            "sourceId": "team"
          }
        ],
        "policies": {
          "cancellation": {
            "value": "Kelly only: changes within 48 hours incur 50% of the appointment price. This is not established as a salon-wide rule.",
            "sourceId": "kelly"
          },
          "deposit": {
            "value": null,
            "sourceId": null
          },
          "noShow": {
            "value": null,
            "sourceId": null
          },
          "lateArrival": {
            "value": "Kelly only: up to 15 minutes late may reduce services; over 15 minutes may require cancellation and a 50% fee.",
            "sourceId": "kelly"
          },
          "consultation": {
            "value": "Salon guide lists a $40/20-minute color consultation credited to a booked service. Independent stylists may offer different consultation terms.",
            "sourceId": "menu"
          },
          "payment": {
            "value": null,
            "sourceId": null
          },
          "walkIns": {
            "value": "Hours are appointment-based; walk-ins are welcome but the salon recommends calling ahead.",
            "sourceId": "menu"
          }
        },
        "unknowns": [
          "Live appointment availability was not checked.",
          "Final total including any mandatory extras, tax and tip is not established by published base prices.",
          "Salon-wide deposit, cancellation, no-show and payment rules are not established; independently published stylist policies must not be generalized.",
          "deposit terms were not established from the public pages checked.",
          "noShow terms were not established from the public pages checked.",
          "payment terms were not established from the public pages checked.",
          "Alx/Heather current provider menus were not readable through the public pages available in this session. Erin and Jewel direct personal-name URLs are withheld; their menus remain unknown.",
          "Marian menu prices, service durations and consultation details are withheld: the only verified menu source has a personal-name URL. The official team page confirms first-name profile and specialties, but not those menu facts. Its embedded provider shortlink opens a generic provider homepage and is not corroborating menu evidence."
        ],
        "conflicts": [
          "Kelly Partial Highlight: Conflicting public price fields: label 280.00 +; numeric booking base $290. Confirm before relying on either.",
          "Kelly Root Touch-Up: Conflicting public price fields: label 170.00 +; numeric booking base $180. Confirm before relying on either."
        ]
      }
    },
    {
      "slug": "right-style-salon-and-barber-castro-upper-market",
      "ref": "san-francisco/hair-salon/right-style-salon-and-barber-castro-upper-market",
      "name": "Right Style Salon and Barber",
      "neighborhood": "Castro / Upper Market",
      "researched_at": "2026-10-24T09:34:11Z",
      "coverage": {
        "services": 11,
        "services_with_prices": 11,
        "services_with_durations": 11,
        "add_ons": 0,
        "stylists": 4,
        "published_policies": 0,
        "policy_fields": 7,
        "successfully_read_sources": 2
      },
      "unknowns": [
        "Exact final total, including applicable extras, tax and gratuity, is not established by a published base price.",
        "Appointment availability was not checked.",
        "The $40 item is Men`s Haircut, not the published women’s haircut; shampoo and blow-dry are separate named bundles. No additional inclusions should be assumed.",
        "No usable public terms established for: cancellation, deposit, noShow, lateArrival, consultation, payment, walkIns.",
        "No separate priced add-on list was established on the pages checked; this does not establish that there are no extra charges."
      ],
      "conflicts": [
        "Website women’s haircut and women’s shampoo/blow-dry/style each start at $55; booking menu lists each at $60. The website uses starting-price qualifiers more broadly, while booking rows have fixed base-price labels."
      ],
      "url": "https://agentsalonsf.com/salons/right-style-salon-and-barber-castro-upper-market",
      "markdown_url": "https://agentsalonsf.com/salons/right-style-salon-and-barber-castro-upper-market.md",
      "api_url": "https://agentsalonsf.com/api/v1/salons/right-style-salon-and-barber-castro-upper-market",
      "public_research": {
        "salonSlug": "right-style-salon-and-barber-castro-upper-market",
        "researchedAt": "2026-10-24T09:34:11Z",
        "summary": "All eleven visible booking services retained with price and duration. Website starting-price qualifiers and two lower website amounts are recorded as differences.",
        "sources": [
          {
            "id": "website",
            "url": "https://www.rightstylesalonandbarber.com/",
            "kind": "salon_website",
            "checkedAt": "2026-10-24T09:34:11Z",
            "outcome": "read",
            "note": "Public page read for services, team or stated policies."
          },
          {
            "id": "booking",
            "url": "https://book.squareup.com/appointments/lz6ah3vlgq8j15/location/LFJF7JJJMPHZE",
            "kind": "booking_provider",
            "checkedAt": "2026-10-24T09:28:28Z",
            "outcome": "read",
            "note": "Public customer booking HTML services and public staff first names."
          }
        ],
        "menuStatus": "published",
        "menu": [
          {
            "name": "Men`s Haircut",
            "category": "haircut",
            "description": null,
            "price": {
              "kind": "fixed",
              "amount": 40,
              "amountMax": null,
              "currency": "USD",
              "note": "Published base price; final total unverified."
            },
            "durationMinutes": 30,
            "durationMaxMinutes": null,
            "sourceId": "booking",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Men's Haircut and Shampoo",
            "category": "haircut",
            "description": null,
            "price": {
              "kind": "fixed",
              "amount": 50,
              "amountMax": null,
              "currency": "USD",
              "note": "Published base price; final total unverified."
            },
            "durationMinutes": 30,
            "durationMaxMinutes": null,
            "sourceId": "booking",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Men's Long Hair Style Cut, (w/scissors only)",
            "category": "haircut",
            "description": null,
            "price": {
              "kind": "fixed",
              "amount": 45,
              "amountMax": null,
              "currency": "USD",
              "note": "Published base price; final total unverified."
            },
            "durationMinutes": 30,
            "durationMaxMinutes": null,
            "sourceId": "booking",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Men`s Color and Haircut",
            "category": "color",
            "description": null,
            "price": {
              "kind": "fixed",
              "amount": 99,
              "amountMax": null,
              "currency": "USD",
              "note": "Published base price; final total unverified."
            },
            "durationMinutes": 60,
            "durationMaxMinutes": null,
            "sourceId": "booking",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Men's Highlight",
            "category": "color",
            "description": null,
            "price": {
              "kind": "fixed",
              "amount": 130,
              "amountMax": null,
              "currency": "USD",
              "note": "Published base price; final total unverified."
            },
            "durationMinutes": 60,
            "durationMaxMinutes": null,
            "sourceId": "booking",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Children's Haircut",
            "category": "haircut",
            "description": null,
            "price": {
              "kind": "fixed",
              "amount": 40,
              "amountMax": null,
              "currency": "USD",
              "note": "Published base price; final total unverified."
            },
            "durationMinutes": 30,
            "durationMaxMinutes": null,
            "sourceId": "booking",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Women's Haircut",
            "category": "haircut",
            "description": null,
            "price": {
              "kind": "fixed",
              "amount": 60,
              "amountMax": null,
              "currency": "USD",
              "note": "Published base price; final total unverified."
            },
            "durationMinutes": 30,
            "durationMaxMinutes": null,
            "sourceId": "booking",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Women's Haircut, Shampoo and Blow Dry",
            "category": "haircut",
            "description": null,
            "price": {
              "kind": "fixed",
              "amount": 85,
              "amountMax": null,
              "currency": "USD",
              "note": "Published base price; final total unverified."
            },
            "durationMinutes": 60,
            "durationMaxMinutes": null,
            "sourceId": "booking",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Women's Shampoo, Blow Dry & Style",
            "category": "styling",
            "description": null,
            "price": {
              "kind": "fixed",
              "amount": 60,
              "amountMax": null,
              "currency": "USD",
              "note": "Published base price; final total unverified."
            },
            "durationMinutes": 30,
            "durationMaxMinutes": null,
            "sourceId": "booking",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Women's Color",
            "category": "color",
            "description": null,
            "price": {
              "kind": "fixed",
              "amount": 150,
              "amountMax": null,
              "currency": "USD",
              "note": "Published base price; final total unverified."
            },
            "durationMinutes": 90,
            "durationMaxMinutes": null,
            "sourceId": "booking",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Women's Color & Highlight",
            "category": "color",
            "description": null,
            "price": {
              "kind": "fixed",
              "amount": 280,
              "amountMax": null,
              "currency": "USD",
              "note": "Published base price; final total unverified."
            },
            "durationMinutes": 120,
            "durationMaxMinutes": null,
            "sourceId": "booking",
            "priceSourceId": null,
            "durationSourceId": null
          }
        ],
        "addOnsStatus": "unknown",
        "addOns": [],
        "stylistsStatus": "published",
        "stylists": [
          {
            "name": "Hannah",
            "specialties": [],
            "bio": null,
            "bookingUrl": "https://book.squareup.com/appointments/lz6ah3vlgq8j15/location/LFJF7JJJMPHZE",
            "portfolioUrl": null,
            "sourceId": "booking"
          },
          {
            "name": "Jorge",
            "specialties": [],
            "bio": null,
            "bookingUrl": "https://book.squareup.com/appointments/lz6ah3vlgq8j15/location/LFJF7JJJMPHZE",
            "portfolioUrl": null,
            "sourceId": "booking"
          },
          {
            "name": "Nina",
            "specialties": [],
            "bio": null,
            "bookingUrl": "https://book.squareup.com/appointments/lz6ah3vlgq8j15/location/LFJF7JJJMPHZE",
            "portfolioUrl": null,
            "sourceId": "booking"
          },
          {
            "name": "Thao",
            "specialties": [],
            "bio": null,
            "bookingUrl": "https://book.squareup.com/appointments/lz6ah3vlgq8j15/location/LFJF7JJJMPHZE",
            "portfolioUrl": null,
            "sourceId": "booking"
          }
        ],
        "policies": {
          "cancellation": {
            "value": null,
            "sourceId": null
          },
          "deposit": {
            "value": null,
            "sourceId": null
          },
          "noShow": {
            "value": null,
            "sourceId": null
          },
          "lateArrival": {
            "value": null,
            "sourceId": null
          },
          "consultation": {
            "value": null,
            "sourceId": null
          },
          "payment": {
            "value": null,
            "sourceId": null
          },
          "walkIns": {
            "value": null,
            "sourceId": null
          }
        },
        "unknowns": [
          "Exact final total, including applicable extras, tax and gratuity, is not established by a published base price.",
          "Appointment availability was not checked.",
          "The $40 item is Men`s Haircut, not the published women’s haircut; shampoo and blow-dry are separate named bundles. No additional inclusions should be assumed.",
          "No usable public terms established for: cancellation, deposit, noShow, lateArrival, consultation, payment, walkIns.",
          "No separate priced add-on list was established on the pages checked; this does not establish that there are no extra charges."
        ],
        "conflicts": [
          "Website women’s haircut and women’s shampoo/blow-dry/style each start at $55; booking menu lists each at $60. The website uses starting-price qualifiers more broadly, while booking rows have fixed base-price labels."
        ]
      }
    },
    {
      "slug": "sixth-house-noe-valley",
      "ref": "san-francisco/hair-salon/sixth-house-noe-valley",
      "name": "Sixth House",
      "neighborhood": "Noe Valley",
      "researched_at": "2026-10-24T09:33:36Z",
      "coverage": {
        "services": 16,
        "services_with_prices": 14,
        "services_with_durations": 14,
        "add_ons": 0,
        "stylists": 1,
        "published_policies": 3,
        "policy_fields": 7,
        "successfully_read_sources": 3
      },
      "unknowns": [
        "Live appointment availability was not checked.",
        "Final total including any mandatory extras, tax and tip is not established by published base prices.",
        "deposit terms were not established from the public pages checked.",
        "noShow terms were not established from the public pages checked.",
        "payment terms were not established from the public pages checked.",
        "walkIns terms were not established from the public pages checked."
      ],
      "conflicts": [
        "Maintenance Dimensional Color + Haircut: website and booking label say starting at $450, while booking numeric price is $475. The normalized amount is withheld pending confirmation."
      ],
      "url": "https://agentsalonsf.com/salons/sixth-house-noe-valley",
      "markdown_url": "https://agentsalonsf.com/salons/sixth-house-noe-valley.md",
      "api_url": "https://agentsalonsf.com/api/v1/salons/sixth-house-noe-valley",
      "public_research": {
        "salonSlug": "sixth-house-noe-valley",
        "researchedAt": "2026-10-24T09:33:36Z",
        "summary": "Website and booking menus cover cuts, color and combinations. Root-color services exclude new clients; one combined-service price conflicts across public fields.",
        "sources": [
          {
            "id": "menu",
            "url": "https://www.sixthhousehair.com/services",
            "kind": "salon_website",
            "checkedAt": "2026-10-24T09:33:36Z",
            "outcome": "read",
            "note": "Read all haircuts, color, combination prices and appointment FAQs."
          },
          {
            "id": "about",
            "url": "https://www.sixthhousehair.com/about-us",
            "kind": "salon_website",
            "checkedAt": "2026-10-24T09:33:36Z",
            "outcome": "read",
            "note": "Read professional focus on haircuts and dimensional color."
          },
          {
            "id": "booking",
            "url": "https://book.squareup.com/appointments/5f22tcx1plt7vb/location/90JZD79MZRN5A/services",
            "kind": "booking_provider",
            "checkedAt": "2026-10-24T09:33:36Z",
            "outcome": "read",
            "note": "Public HTML customer menu: 14 visible services, durations and cancellation policy."
          }
        ],
        "menuStatus": "published",
        "menu": [
          {
            "name": "Mini Face Frame",
            "category": "color",
            "description": "Hairline/part refresh including gloss.",
            "price": {
              "kind": "starting_at",
              "amount": 240,
              "amountMax": null,
              "currency": "USD",
              "note": "Starting price $240"
            },
            "durationMinutes": 120,
            "durationMaxMinutes": null,
            "sourceId": "booking",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Maintenance Dimensional Color",
            "category": "color",
            "description": "Maintenance of existing color on top and sides.",
            "price": {
              "kind": "starting_at",
              "amount": 360,
              "amountMax": null,
              "currency": "USD",
              "note": "Starting price $360"
            },
            "durationMinutes": 180,
            "durationMaxMinutes": null,
            "sourceId": "booking",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Full-head Dimensional Haircolor",
            "category": "color",
            "description": "Full-head dimensional color with gloss and finish.",
            "price": {
              "kind": "starting_at",
              "amount": 420,
              "amountMax": null,
              "currency": "USD",
              "note": "Starting price $420"
            },
            "durationMinutes": 210,
            "durationMaxMinutes": null,
            "sourceId": "booking",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Major Transformational Color",
            "category": "color",
            "description": "For large color changes, correction or first-time guests.",
            "price": {
              "kind": "starting_at",
              "amount": 550,
              "amountMax": null,
              "currency": "USD",
              "note": "Starting price $550"
            },
            "durationMinutes": 270,
            "durationMaxMinutes": null,
            "sourceId": "booking",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Root Haircolor",
            "category": "color",
            "description": "Existing clients only; single-color starting rate covers one inch of roots.",
            "price": {
              "kind": "starting_at",
              "amount": 230,
              "amountMax": null,
              "currency": "USD",
              "note": "Starting price $230"
            },
            "durationMinutes": 120,
            "durationMaxMinutes": null,
            "sourceId": "booking",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Gloss / Glaze / Toner",
            "category": "color",
            "description": "Tone adjustment between dimensional color sessions.",
            "price": {
              "kind": "starting_at",
              "amount": 160,
              "amountMax": null,
              "currency": "USD",
              "note": "Starting Price $160"
            },
            "durationMinutes": 60,
            "durationMaxMinutes": null,
            "sourceId": "booking",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "45 Minute Haircut",
            "category": "haircut",
            "description": "Short barber cuts or light dusting without layer maintenance; no shampoo, arrive with clean hair.",
            "price": {
              "kind": "fixed",
              "amount": 120,
              "amountMax": null,
              "currency": "USD",
              "note": null
            },
            "durationMinutes": 45,
            "durationMaxMinutes": null,
            "sourceId": "booking",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "1 Hour Haircut",
            "category": "haircut",
            "description": "For average length/density and maintaining an existing shape.",
            "price": {
              "kind": "fixed",
              "amount": 165,
              "amountMax": null,
              "currency": "USD",
              "note": null
            },
            "durationMinutes": 60,
            "durationMaxMinutes": null,
            "sourceId": "booking",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "1 Hour 30 Minute Haircut",
            "category": "haircut",
            "description": "For longer/denser hair or significant shape changes.",
            "price": {
              "kind": "fixed",
              "amount": 225,
              "amountMax": null,
              "currency": "USD",
              "note": null
            },
            "durationMinutes": 90,
            "durationMaxMinutes": null,
            "sourceId": "booking",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Mini Face Frame + Haircut",
            "category": "color",
            "description": null,
            "price": {
              "kind": "starting_at",
              "amount": 355,
              "amountMax": null,
              "currency": "USD",
              "note": "Starting price $355"
            },
            "durationMinutes": 150,
            "durationMaxMinutes": null,
            "sourceId": "booking",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Maintenance Dimensional Color + Haircut",
            "category": "color",
            "description": null,
            "price": {
              "kind": "unknown",
              "amount": null,
              "amountMax": null,
              "currency": "USD",
              "note": "Conflicting public price fields: label Starting price $450; numeric booking base $475. Confirm before relying on either."
            },
            "durationMinutes": 210,
            "durationMaxMinutes": null,
            "sourceId": "booking",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Full-head Dimensional Haircolor + Haircut",
            "category": "color",
            "description": null,
            "price": {
              "kind": "starting_at",
              "amount": 535,
              "amountMax": null,
              "currency": "USD",
              "note": "Starting price $535"
            },
            "durationMinutes": 240,
            "durationMaxMinutes": null,
            "sourceId": "booking",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Root Haircolor + Haircut",
            "category": "color",
            "description": "Existing clients only.",
            "price": {
              "kind": "starting_at",
              "amount": 345,
              "amountMax": null,
              "currency": "USD",
              "note": "Starting price $345"
            },
            "durationMinutes": 180,
            "durationMaxMinutes": null,
            "sourceId": "booking",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Gloss / Glaze / Toner + Haircut",
            "category": "color",
            "description": null,
            "price": {
              "kind": "starting_at",
              "amount": 275,
              "amountMax": null,
              "currency": "USD",
              "note": "Starting price $275"
            },
            "durationMinutes": 90,
            "durationMaxMinutes": null,
            "sourceId": "booking",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Fringe & Neck Trims",
            "category": "haircut",
            "description": "Contact the salon to arrange this maintenance service.",
            "price": {
              "kind": "fixed",
              "amount": 30,
              "amountMax": null,
              "currency": "USD",
              "note": null
            },
            "durationMinutes": null,
            "durationMaxMinutes": null,
            "sourceId": "menu",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Event or Bridal Styling",
            "category": "styling",
            "description": "Updos and shampoo/blowouts may be offered by inquiry; price and timing are not listed.",
            "price": {
              "kind": "unknown",
              "amount": null,
              "amountMax": null,
              "currency": "USD",
              "note": null
            },
            "durationMinutes": null,
            "durationMaxMinutes": null,
            "sourceId": "menu",
            "priceSourceId": null,
            "durationSourceId": null
          }
        ],
        "addOnsStatus": "unknown",
        "addOns": [],
        "stylistsStatus": "published",
        "stylists": [
          {
            "name": "Meghan",
            "specialties": [],
            "bio": null,
            "bookingUrl": "https://book.squareup.com/appointments/5f22tcx1plt7vb/location/90JZD79MZRN5A/services",
            "portfolioUrl": null,
            "sourceId": "booking"
          }
        ],
        "policies": {
          "cancellation": {
            "value": "Cancellations or rescheduling within 24 hours are subject to the full service charge.",
            "sourceId": "menu"
          },
          "deposit": {
            "value": null,
            "sourceId": null
          },
          "noShow": {
            "value": null,
            "sourceId": null
          },
          "lateArrival": {
            "value": "Notify the salon when late. More than 15 minutes late may require rescheduling and a no-show fee; the late-arrival fee amount is not separately specified.",
            "sourceId": "menu"
          },
          "consultation": {
            "value": "Ask the salon for guidance if unsure which service to select.",
            "sourceId": "menu"
          },
          "payment": {
            "value": null,
            "sourceId": null
          },
          "walkIns": {
            "value": null,
            "sourceId": null
          }
        },
        "unknowns": [
          "Live appointment availability was not checked.",
          "Final total including any mandatory extras, tax and tip is not established by published base prices.",
          "deposit terms were not established from the public pages checked.",
          "noShow terms were not established from the public pages checked.",
          "payment terms were not established from the public pages checked.",
          "walkIns terms were not established from the public pages checked."
        ],
        "conflicts": [
          "Maintenance Dimensional Color + Haircut: website and booking label say starting at $450, while booking numeric price is $475. The normalized amount is withheld pending confirmation."
        ]
      }
    },
    {
      "slug": "the-barb-shop-bernal-heights",
      "ref": "san-francisco/hair-salon/the-barb-shop-bernal-heights",
      "name": "The Barb Shop",
      "neighborhood": "Bernal Heights",
      "researched_at": "2026-10-24T09:33:36Z",
      "coverage": {
        "services": 14,
        "services_with_prices": 14,
        "services_with_durations": 14,
        "add_ons": 0,
        "stylists": 3,
        "published_policies": 5,
        "policy_fields": 7,
        "successfully_read_sources": 2
      },
      "unknowns": [
        "Live appointment availability was not checked.",
        "Final total including any mandatory extras, tax and tip is not established by published base prices.",
        "deposit terms were not established from the public pages checked.",
        "walkIns terms were not established from the public pages checked."
      ],
      "conflicts": [
        "The website spells one team name Altas; the current booking page uses Atlas. The booking display name is retained."
      ],
      "url": "https://agentsalonsf.com/salons/the-barb-shop-bernal-heights",
      "markdown_url": "https://agentsalonsf.com/salons/the-barb-shop-bernal-heights.md",
      "api_url": "https://agentsalonsf.com/api/v1/salons/the-barb-shop-bernal-heights",
      "public_research": {
        "salonSlug": "the-barb-shop-bernal-heights",
        "researchedAt": "2026-10-24T09:33:36Z",
        "summary": "Fourteen services from the public booking menu, including adult cuts, color and consultations. Pricing includes gratuity according to the salon; kids and adult policies differ.",
        "sources": [
          {
            "id": "website",
            "url": "https://thebarbshop.com/pages/sanfrancisco",
            "kind": "salon_website",
            "checkedAt": "2026-10-24T09:33:36Z",
            "outcome": "read",
            "note": "Read adult/kids cut prices, gratuity statement and team specialties."
          },
          {
            "id": "booking",
            "url": "https://book.squareup.com/appointments/u3mcb7uimtc94h/location/LEYFFJKTG3KMT/services",
            "kind": "booking_provider",
            "checkedAt": "2026-10-24T09:33:36Z",
            "outcome": "read",
            "note": "Read public HTML menu and seller-written adult/kids booking policy. Initial request returned HTTP 429; later public-page request succeeded."
          }
        ],
        "menuStatus": "published",
        "menu": [
          {
            "name": "The Barb",
            "category": "styling",
            "description": "Above-chin cut using clippers/scissors; includes consultation, wash, blow-dry, styling advice and gratuity.",
            "price": {
              "kind": "fixed",
              "amount": 115,
              "amountMax": null,
              "currency": "USD",
              "note": null
            },
            "durationMinutes": 50,
            "durationMaxMinutes": null,
            "sourceId": "booking",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Vivid Color Consult - First Time Customer",
            "category": "other",
            "description": "Free phone or in-person consultation before first vivid-color appointment.",
            "price": {
              "kind": "fixed",
              "amount": 0,
              "amountMax": null,
              "currency": "USD",
              "note": null
            },
            "durationMinutes": 15,
            "durationMaxMinutes": null,
            "sourceId": "booking",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "The Bob",
            "category": "styling",
            "description": "Chin-to-shoulder scissor/razor cut; includes consultation, wash, blow-dry, styling advice and gratuity.",
            "price": {
              "kind": "fixed",
              "amount": 145,
              "amountMax": null,
              "currency": "USD",
              "note": null
            },
            "durationMinutes": 60,
            "durationMaxMinutes": null,
            "sourceId": "booking",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Color Consult - First Time Customer",
            "category": "other",
            "description": "Free phone or in-person consultation before first color appointment.",
            "price": {
              "kind": "fixed",
              "amount": 0,
              "amountMax": null,
              "currency": "USD",
              "note": "Book a free consult prior to making your first color appointment"
            },
            "durationMinutes": 15,
            "durationMaxMinutes": null,
            "sourceId": "booking",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Gloss + Toner",
            "category": "color",
            "description": "First-time color customers are asked to book a consultation before the service.",
            "price": {
              "kind": "fixed",
              "amount": 175,
              "amountMax": null,
              "currency": "USD",
              "note": null
            },
            "durationMinutes": 90,
            "durationMaxMinutes": null,
            "sourceId": "booking",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "The Go Barb",
            "category": "styling",
            "description": "Long-to-short transformation; includes consultation, wash, blow-dry, styling advice and gratuity.",
            "price": {
              "kind": "fixed",
              "amount": 175,
              "amountMax": null,
              "currency": "USD",
              "note": null
            },
            "durationMinutes": 70,
            "durationMaxMinutes": null,
            "sourceId": "booking",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Root Refresh/Gray Coverage",
            "category": "styling",
            "description": null,
            "price": {
              "kind": "fixed",
              "amount": 225,
              "amountMax": null,
              "currency": "USD",
              "note": null
            },
            "durationMinutes": 120,
            "durationMaxMinutes": null,
            "sourceId": "booking",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Partial Highlight",
            "category": "color",
            "description": "First-time color customers are asked to book a consultation before the service.",
            "price": {
              "kind": "fixed",
              "amount": 295,
              "amountMax": null,
              "currency": "USD",
              "note": null
            },
            "durationMinutes": 150,
            "durationMaxMinutes": null,
            "sourceId": "booking",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Kids Cut",
            "category": "haircut",
            "description": "Under 10, maintenance cuts only; major changes or very dense hair require the standard haircut service. Kids appointments start after noon; gratuity and a kids cone are included.",
            "price": {
              "kind": "fixed",
              "amount": 75,
              "amountMax": null,
              "currency": "USD",
              "note": null
            },
            "durationMinutes": 30,
            "durationMaxMinutes": null,
            "sourceId": "booking",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Full Highlight",
            "category": "color",
            "description": "First-time color customers are asked to book a consultation before the service.",
            "price": {
              "kind": "fixed",
              "amount": 345,
              "amountMax": null,
              "currency": "USD",
              "note": null
            },
            "durationMinutes": 180,
            "durationMaxMinutes": null,
            "sourceId": "booking",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Bleach and Tone - First Visit",
            "category": "color",
            "description": "First-time color customers are asked to book a consultation before the service.",
            "price": {
              "kind": "fixed",
              "amount": 475,
              "amountMax": null,
              "currency": "USD",
              "note": null
            },
            "durationMinutes": 240,
            "durationMaxMinutes": null,
            "sourceId": "booking",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Bleach and Tone - Maintenance",
            "category": "color",
            "description": "First-time color customers are asked to book a consultation before the service.",
            "price": {
              "kind": "fixed",
              "amount": 395,
              "amountMax": null,
              "currency": "USD",
              "note": null
            },
            "durationMinutes": 210,
            "durationMaxMinutes": null,
            "sourceId": "booking",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Vivid Color Mini",
            "category": "color",
            "description": "First-time color customers are asked to book a consultation before the service.",
            "price": {
              "kind": "fixed",
              "amount": 345,
              "amountMax": null,
              "currency": "USD",
              "note": null
            },
            "durationMinutes": 180,
            "durationMaxMinutes": null,
            "sourceId": "booking",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Vivid Color Full",
            "category": "color",
            "description": "First-time color customers are asked to book a consultation before the service.",
            "price": {
              "kind": "fixed",
              "amount": 475,
              "amountMax": null,
              "currency": "USD",
              "note": null
            },
            "durationMinutes": 240,
            "durationMaxMinutes": null,
            "sourceId": "booking",
            "priceSourceId": null,
            "durationSourceId": null
          }
        ],
        "addOnsStatus": "unknown",
        "addOns": [],
        "stylistsStatus": "published",
        "stylists": [
          {
            "name": "Atlas",
            "specialties": [
              "Precision scissor cuts",
              "Razor work",
              "Textured styles"
            ],
            "bio": null,
            "bookingUrl": "https://book.squareup.com/appointments/u3mcb7uimtc94h/location/LEYFFJKTG3KMT/services",
            "portfolioUrl": null,
            "sourceId": "booking"
          },
          {
            "name": "Evan",
            "specialties": [
              "Curls",
              "Color",
              "Scissor cuts",
              "Razor work",
              "Gender-affirming cuts"
            ],
            "bio": null,
            "bookingUrl": "https://book.squareup.com/appointments/u3mcb7uimtc94h/location/LEYFFJKTG3KMT/services",
            "portfolioUrl": null,
            "sourceId": "booking"
          },
          {
            "name": "Ro",
            "specialties": [
              "Fades",
              "Precision scissor cuts",
              "Creative short cuts",
              "Gender-affirming cuts"
            ],
            "bio": null,
            "bookingUrl": "https://book.squareup.com/appointments/u3mcb7uimtc94h/location/LEYFFJKTG3KMT/services",
            "portfolioUrl": null,
            "sourceId": "booking"
          }
        ],
        "policies": {
          "cancellation": {
            "value": "Adults and kids: cancellations/rescheduling with less than 24 hours notice incur 50% of the service fee. Emergencies are considered individually.",
            "sourceId": "booking"
          },
          "deposit": {
            "value": null,
            "sourceId": null
          },
          "noShow": {
            "value": "No-shows incur 50% of the service fee. Kids may also incur 50% if unable to start safely within the required five-minute window.",
            "sourceId": "booking"
          },
          "lateArrival": {
            "value": "Adults arriving 15 minutes late may receive a shorter service or be refused. Children must be ready within five minutes; otherwise the service may be shortened or cancelled with a 50% fee.",
            "sourceId": "booking"
          },
          "consultation": {
            "value": "First-time color and vivid-color customers should book a free 15-minute consultation, by phone or in person, before the color service.",
            "sourceId": "booking"
          },
          "payment": {
            "value": "The salon states that pricing includes gratuity. Tax inclusion is not stated.",
            "sourceId": "website"
          },
          "walkIns": {
            "value": null,
            "sourceId": null
          }
        },
        "unknowns": [
          "Live appointment availability was not checked.",
          "Final total including any mandatory extras, tax and tip is not established by published base prices.",
          "deposit terms were not established from the public pages checked.",
          "walkIns terms were not established from the public pages checked."
        ],
        "conflicts": [
          "The website spells one team name Altas; the current booking page uses Atlas. The booking display name is retained."
        ]
      }
    },
    {
      "slug": "the-cutting-room-haight-ashbury",
      "ref": "san-francisco/hair-salon/the-cutting-room-haight-ashbury",
      "name": "The Cutting Room",
      "neighborhood": "Haight-Ashbury",
      "researched_at": "2026-10-24T09:34:11Z",
      "coverage": {
        "services": 6,
        "services_with_prices": 6,
        "services_with_durations": 6,
        "add_ons": 0,
        "stylists": 3,
        "published_policies": 2,
        "policy_fields": 7,
        "successfully_read_sources": 3
      },
      "unknowns": [
        "Exact final total, including applicable extras, tax and gratuity, is not established by a published base price.",
        "Appointment availability was not checked.",
        "No usable public terms established for: deposit, lateArrival, consultation, payment, walkIns.",
        "No separate priced add-on list was established on the pages checked; this does not establish that there are no extra charges."
      ],
      "conflicts": [
        "Website standard haircut is $65; current booking menu lists the general standard haircut at $75 and a separate August introductory option at $65."
      ],
      "url": "https://agentsalonsf.com/salons/the-cutting-room-haight-ashbury",
      "markdown_url": "https://agentsalonsf.com/salons/the-cutting-room-haight-ashbury.md",
      "api_url": "https://agentsalonsf.com/api/v1/salons/the-cutting-room-haight-ashbury",
      "public_research": {
        "salonSlug": "the-cutting-room-haight-ashbury",
        "researchedAt": "2026-10-24T09:34:11Z",
        "summary": "All six public booking services captured, including an explicit introductory option for August. Website standard-cut price differs from the general booking option.",
        "sources": [
          {
            "id": "website",
            "url": "https://www.thecuttingroomsf.com/",
            "kind": "salon_website",
            "checkedAt": "2026-10-24T09:34:11Z",
            "outcome": "read",
            "note": "Public page read for services, team or stated policies."
          },
          {
            "id": "team",
            "url": "https://www.thecuttingroomsf.com/team",
            "kind": "salon_website",
            "checkedAt": "2026-10-24T09:34:11Z",
            "outcome": "read",
            "note": "Public page read for services, team or stated policies."
          },
          {
            "id": "booking",
            "url": "https://book.squareup.com/appointments/9jh859ap7xtz7x/location/LNG0F3AQEPWF0",
            "kind": "booking_provider",
            "checkedAt": "2026-10-24T09:28:27Z",
            "outcome": "read",
            "note": "Public customer booking HTML service list and displayed cancellation text."
          }
        ],
        "menuStatus": "published",
        "menu": [
          {
            "name": "Bang trim",
            "category": "haircut",
            "description": null,
            "price": {
              "kind": "fixed",
              "amount": 25,
              "amountMax": null,
              "currency": "USD",
              "note": "Published base price; final total unverified."
            },
            "durationMinutes": 30,
            "durationMaxMinutes": null,
            "sourceId": "booking",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "August’s Standard Barber Haircut Age 16+",
            "category": "haircut",
            "description": "Introductory pricing for August; short-to-medium clipper or short barber-scissor work. Age 16+.",
            "price": {
              "kind": "fixed",
              "amount": 65,
              "amountMax": null,
              "currency": "USD",
              "note": "Published base price; final total unverified."
            },
            "durationMinutes": 60,
            "durationMaxMinutes": null,
            "sourceId": "booking",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Standard Barber Haircut Age 16+",
            "category": "haircut",
            "description": "Short-to-medium clipper or short barber-scissor work. Age 16+.",
            "price": {
              "kind": "fixed",
              "amount": 75,
              "amountMax": null,
              "currency": "USD",
              "note": "Published base price; final total unverified."
            },
            "durationMinutes": 60,
            "durationMaxMinutes": null,
            "sourceId": "booking",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Long Length Haircut Age 16+",
            "category": "haircut",
            "description": "Bobs, mullets, shags, layers or all-scissor cuts. Page recommends this option when unsure; the shop can adjust the service. Age 16+.",
            "price": {
              "kind": "fixed",
              "amount": 92,
              "amountMax": null,
              "currency": "USD",
              "note": "Published base price; final total unverified."
            },
            "durationMinutes": 90,
            "durationMaxMinutes": null,
            "sourceId": "booking",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Buzz cut",
            "category": "haircut",
            "description": "One guard; no scissors.",
            "price": {
              "kind": "fixed",
              "amount": 45,
              "amountMax": null,
              "currency": "USD",
              "note": "Published base price; final total unverified."
            },
            "durationMinutes": 30,
            "durationMaxMinutes": null,
            "sourceId": "booking",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Beard trim",
            "category": "beard",
            "description": null,
            "price": {
              "kind": "fixed",
              "amount": 40,
              "amountMax": null,
              "currency": "USD",
              "note": "Published base price; final total unverified."
            },
            "durationMinutes": 30,
            "durationMaxMinutes": null,
            "sourceId": "booking",
            "priceSourceId": null,
            "durationSourceId": null
          }
        ],
        "addOnsStatus": "unknown",
        "addOns": [],
        "stylistsStatus": "published",
        "stylists": [
          {
            "name": "August",
            "specialties": [],
            "bio": null,
            "bookingUrl": "https://book.squareup.com/appointments/9jh859ap7xtz7x/location/LNG0F3AQEPWF0",
            "portfolioUrl": null,
            "sourceId": "booking"
          },
          {
            "name": "Chad",
            "specialties": [
              "Pushback styles",
              "Traditional cuts",
              "Fades",
              "Mullets",
              "Long cuts"
            ],
            "bio": null,
            "bookingUrl": "https://book.squareup.com/appointments/9jh859ap7xtz7x/location/LNG0F3AQEPWF0",
            "portfolioUrl": null,
            "sourceId": "team"
          },
          {
            "name": "Rachel",
            "specialties": [
              "Pushback styles",
              "Mullets",
              "Long cuts",
              "All hair textures"
            ],
            "bio": null,
            "bookingUrl": "https://book.squareup.com/appointments/9jh859ap7xtz7x/location/LNG0F3AQEPWF0",
            "portfolioUrl": null,
            "sourceId": "team"
          }
        ],
        "policies": {
          "cancellation": {
            "value": "Less than 24 hours of notice for cancellation or rescheduling incurs the full scheduled service price, excluding gratuity. The charge is not credited to a future service.",
            "sourceId": "booking"
          },
          "deposit": {
            "value": null,
            "sourceId": null
          },
          "noShow": {
            "value": "A missed appointment incurs the full scheduled service price, excluding gratuity.",
            "sourceId": "booking"
          },
          "lateArrival": {
            "value": null,
            "sourceId": null
          },
          "consultation": {
            "value": null,
            "sourceId": null
          },
          "payment": {
            "value": null,
            "sourceId": null
          },
          "walkIns": {
            "value": null,
            "sourceId": null
          }
        },
        "unknowns": [
          "Exact final total, including applicable extras, tax and gratuity, is not established by a published base price.",
          "Appointment availability was not checked.",
          "No usable public terms established for: deposit, lateArrival, consultation, payment, walkIns.",
          "No separate priced add-on list was established on the pages checked; this does not establish that there are no extra charges."
        ],
        "conflicts": [
          "Website standard haircut is $65; current booking menu lists the general standard haircut at $75 and a separate August introductory option at $65."
        ]
      }
    },
    {
      "slug": "the-salon-san-francisco-financial-district-south-beach",
      "ref": "san-francisco/hair-salon/the-salon-san-francisco-financial-district-south-beach",
      "name": "The Salon San Francisco",
      "neighborhood": "Financial District / South Beach",
      "researched_at": "2026-10-24T09:33:36Z",
      "coverage": {
        "services": 5,
        "services_with_prices": 5,
        "services_with_durations": 5,
        "add_ons": 0,
        "stylists": 2,
        "published_policies": 5,
        "policy_fields": 7,
        "successfully_read_sources": 6
      },
      "unknowns": [
        "Live appointment availability was not checked.",
        "Final total including any mandatory extras, tax and tip is not established by published base prices.",
        "consultation terms were not established from the public pages checked.",
        "walkIns terms were not established from the public pages checked."
      ],
      "conflicts": [
        "The appointments page presents one-week general notice, a 48-hour charge rule and a four-week color-change rule; do not flatten these into one cancellation window.",
        "The $250 hold is described as not applying to services, but the transfer policy allows transfer to future services. Confirm how it is credited.",
        "The unusually spelled catalog Square domain is actually linked by the official appointments page and redirects to www.salonsanfrancisco.com; it was not silently corrected."
      ],
      "url": "https://agentsalonsf.com/salons/the-salon-san-francisco-financial-district-south-beach",
      "markdown_url": "https://agentsalonsf.com/salons/the-salon-san-francisco-financial-district-south-beach.md",
      "api_url": "https://agentsalonsf.com/api/v1/salons/the-salon-san-francisco-financial-district-south-beach",
      "public_research": {
        "salonSlug": "the-salon-san-francisco-financial-district-south-beach",
        "researchedAt": "2026-10-24T09:33:36Z",
        "summary": "Five signature priced services with published time ranges; detailed reservation/cancellation rules contain multiple notice periods that must be confirmed.",
        "sources": [
          {
            "id": "website",
            "url": "https://thesalonsanfrancisco.com/",
            "kind": "salon_website",
            "checkedAt": "2026-10-24T09:33:36Z",
            "outcome": "read",
            "note": "Read public home page."
          },
          {
            "id": "menu",
            "url": "https://thesalonsanfrancisco.com/services",
            "kind": "salon_website",
            "checkedAt": "2026-10-24T09:33:36Z",
            "outcome": "read",
            "note": "Read public services page."
          },
          {
            "id": "salon",
            "url": "https://thesalonsanfrancisco.com/thesalon",
            "kind": "salon_website",
            "checkedAt": "2026-10-24T09:33:36Z",
            "outcome": "read",
            "note": "Read public thesalon page."
          },
          {
            "id": "appointments",
            "url": "https://thesalonsanfrancisco.com/appointments",
            "kind": "salon_website",
            "checkedAt": "2026-10-24T09:33:36Z",
            "outcome": "read",
            "note": "Read public appointments page."
          },
          {
            "id": "raul",
            "url": "https://thesalonsanfrancisco.com/raul",
            "kind": "salon_website",
            "checkedAt": "2026-10-24T09:33:36Z",
            "outcome": "read",
            "note": "Read public raul page."
          },
          {
            "id": "sonia",
            "url": "https://thesalonsanfrancisco.com/sonia",
            "kind": "salon_website",
            "checkedAt": "2026-10-24T09:33:36Z",
            "outcome": "read",
            "note": "Read public sonia page."
          },
          {
            "id": "booking",
            "url": "https://thesalonsanfranicsocapp.square.site/",
            "kind": "booking_provider",
            "checkedAt": "2026-10-24T09:33:36Z",
            "outcome": "unavailable",
            "note": "Redirects to https://www.salonsanfrancisco.com/; public site shell names the same salon but did not expose service menu text."
          },
          {
            "id": "booking-appointments",
            "url": "https://www.salonsanfrancisco.com/s/appointments",
            "kind": "booking_provider",
            "checkedAt": "2026-10-24T09:33:36Z",
            "outcome": "unavailable",
            "note": "Public appointments shell read; no service menu recovered."
          }
        ],
        "menuStatus": "published",
        "menu": [
          {
            "name": "Seamless Blending - FULL",
            "category": "styling",
            "description": "Full-head highlighting package with face frame, balayage/tip-outs, toner/color melt and Olaplex conditioning.",
            "price": {
              "kind": "fixed",
              "amount": 995,
              "amountMax": null,
              "currency": "USD",
              "note": null
            },
            "durationMinutes": 300,
            "durationMaxMinutes": 360,
            "sourceId": "menu",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Seamless Blending - Partial",
            "category": "styling",
            "description": "Face-frame, hairline and crown highlighting.",
            "price": {
              "kind": "range",
              "amount": 495,
              "amountMax": 595,
              "currency": "USD",
              "note": null
            },
            "durationMinutes": 180,
            "durationMaxMinutes": 240,
            "sourceId": "menu",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Seamless Blending - mini",
            "category": "styling",
            "description": "Face-framing brightness; offered alone or between larger blending appointments.",
            "price": {
              "kind": "range",
              "amount": 295,
              "amountMax": 395,
              "currency": "USD",
              "note": null
            },
            "durationMinutes": 120,
            "durationMaxMinutes": 180,
            "sourceId": "menu",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Modern WOMEN'S Haircut- TRIM",
            "category": "haircut",
            "description": "Consultation, shampoo, trim and blow-dry included.",
            "price": {
              "kind": "fixed",
              "amount": 200,
              "amountMax": null,
              "currency": "USD",
              "note": null
            },
            "durationMinutes": 90,
            "durationMaxMinutes": null,
            "sourceId": "menu",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Signature Long Layered Haircut",
            "category": "haircut",
            "description": "Layered haircut for long hair, customized to texture and density.",
            "price": {
              "kind": "fixed",
              "amount": 260,
              "amountMax": null,
              "currency": "USD",
              "note": null
            },
            "durationMinutes": 120,
            "durationMaxMinutes": null,
            "sourceId": "menu",
            "priceSourceId": null,
            "durationSourceId": null
          }
        ],
        "addOnsStatus": "unknown",
        "addOns": [],
        "stylistsStatus": "published",
        "stylists": [
          {
            "name": "Raul",
            "specialties": [
              "Precision cutting",
              "Balayage",
              "Global blonding",
              "Hair extensions"
            ],
            "bio": "Traveling stylist; SF presence requires confirmation.",
            "bookingUrl": "https://thesalonsanfrancisco.com/appointments",
            "portfolioUrl": null,
            "sourceId": "raul"
          },
          {
            "name": "Sonia",
            "specialties": [
              "Seamless Blending color"
            ],
            "bio": "The salon identifies Sonia as the creator of its Seamless Blending method.",
            "bookingUrl": "https://thesalonsanfrancisco.com/appointments",
            "portfolioUrl": null,
            "sourceId": "sonia"
          }
        ],
        "policies": {
          "cancellation": {
            "value": "The page requests one week for general changes, states a full-service charge within 48 hours, and requires four weeks plus written approval for Seamless Blending, smoothing and color changes. Confirm the applicable terms before paying.",
            "sourceId": "appointments"
          },
          "deposit": {
            "value": "The salon requires a nonrefundable $250 reservation hold for Seamless Blending, smoothing, correction and color. It says this does not reduce the same-day/service total; transfer to future services is separately described. Treatment of the hold needs clarification.",
            "sourceId": "menu"
          },
          "noShow": {
            "value": "No-shows are stated to incur 100% of the service price on the card on file.",
            "sourceId": "appointments"
          },
          "lateArrival": {
            "value": "Arriving more than 15 minutes late may require rescheduling.",
            "sourceId": "salon"
          },
          "consultation": {
            "value": null,
            "sourceId": null
          },
          "payment": {
            "value": "Services are final sale; adjustments are offered within two weeks during business hours. Cancellation charges may use the card on file.",
            "sourceId": "appointments"
          },
          "walkIns": {
            "value": null,
            "sourceId": null
          }
        },
        "unknowns": [
          "Live appointment availability was not checked.",
          "Final total including any mandatory extras, tax and tip is not established by published base prices.",
          "consultation terms were not established from the public pages checked.",
          "walkIns terms were not established from the public pages checked."
        ],
        "conflicts": [
          "The appointments page presents one-week general notice, a 48-hour charge rule and a four-week color-change rule; do not flatten these into one cancellation window.",
          "The $250 hold is described as not applying to services, but the transfer policy allows transfer to future services. Confirm how it is credited.",
          "The unusually spelled catalog Square domain is actually linked by the official appointments page and redirects to www.salonsanfrancisco.com; it was not silently corrected."
        ]
      }
    },
    {
      "slug": "tulip-salon-russian-hill",
      "ref": "san-francisco/hair-salon/tulip-salon-russian-hill",
      "name": "Tulip Salon",
      "neighborhood": "Russian Hill",
      "researched_at": "2026-10-24T09:33:36Z",
      "coverage": {
        "services": 33,
        "services_with_prices": 32,
        "services_with_durations": 33,
        "add_ons": 3,
        "stylists": 4,
        "published_policies": 4,
        "policy_fields": 7,
        "successfully_read_sources": 5
      },
      "unknowns": [
        "Live appointment availability was not checked.",
        "Final total including any mandatory extras, tax and tip is not established by published base prices.",
        "Extra color product, extra hot-tool time and final color-correction hours have no universal published total.",
        "deposit terms were not established from the public pages checked.",
        "payment terms were not established from the public pages checked.",
        "walkIns terms were not established from the public pages checked."
      ],
      "conflicts": [
        "General cancellation text asks 24 hours; highlight/balayage consultation text asks 48 hours. Service-specific terms need confirmation."
      ],
      "url": "https://agentsalonsf.com/salons/tulip-salon-russian-hill",
      "markdown_url": "https://agentsalonsf.com/salons/tulip-salon-russian-hill.md",
      "api_url": "https://agentsalonsf.com/api/v1/salons/tulip-salon-russian-hill",
      "public_research": {
        "salonSlug": "tulip-salon-russian-hill",
        "researchedAt": "2026-10-24T09:33:36Z",
        "summary": "Thirty-three public service entries plus explicitly published length/density adjustments. Final prices vary by hair and chosen service; color correction is hourly rather than a fixed total.",
        "sources": [
          {
            "id": "website",
            "url": "https://www.tulipsalonsf.com/",
            "kind": "salon_website",
            "checkedAt": "2026-10-24T09:33:36Z",
            "outcome": "read",
            "note": "Read service links and location; footer still links to a removed Booksy profile."
          },
          {
            "id": "color",
            "url": "https://www.tulipsalonsf.com/home-copy",
            "kind": "salon_website",
            "checkedAt": "2026-10-24T09:33:36Z",
            "outcome": "read",
            "note": "Read the salon treatment/service description; promotional medical-effect claims are not reproduced."
          },
          {
            "id": "smoothing",
            "url": "https://www.tulipsalonsf.com/organic-hair-color-copy-1",
            "kind": "salon_website",
            "checkedAt": "2026-10-24T09:33:36Z",
            "outcome": "read",
            "note": "Read the salon treatment/service description; promotional medical-effect claims are not reproduced."
          },
          {
            "id": "scalp",
            "url": "https://www.tulipsalonsf.com/organic-hair-color-copy-1-1",
            "kind": "salon_website",
            "checkedAt": "2026-10-24T09:33:36Z",
            "outcome": "read",
            "note": "Read the salon treatment/service description; promotional medical-effect claims are not reproduced."
          },
          {
            "id": "booking",
            "url": "https://book.squareup.com/appointments/s0cybm2rgn8xxl/location/LB1Q08THPCQYE/services",
            "kind": "booking_provider",
            "checkedAt": "2026-10-24T09:33:36Z",
            "outcome": "read",
            "note": "Read public HTML customer menu: 33 services, price/duration variants, professional display names and seller-written booking policy; no availability request."
          },
          {
            "id": "old-booksy",
            "url": "https://booksy.com/en-us/692111_tulip-salon_hair-salon_134715_san-francisco",
            "kind": "booking_provider",
            "checkedAt": "2026-10-24T09:33:36Z",
            "outcome": "unavailable",
            "note": "Redirects to generic San Francisco results with showBusinessDeletedModal; no Tulip menu retained."
          }
        ],
        "menuStatus": "published",
        "menu": [
          {
            "name": "Beard Trim",
            "category": "beard",
            "description": "Beard shaping and maintenance.",
            "price": {
              "kind": "fixed",
              "amount": 25,
              "amountMax": null,
              "currency": "USD",
              "note": null
            },
            "durationMinutes": 15,
            "durationMaxMinutes": null,
            "sourceId": "booking",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Free Consultation for Highlight & Balayage",
            "category": "other",
            "description": "New clients are encouraged to consult the intended stylist, bring color history and inspiration, and confirm time and price.",
            "price": {
              "kind": "fixed",
              "amount": 0,
              "amountMax": null,
              "currency": "USD",
              "note": null
            },
            "durationMinutes": 15,
            "durationMaxMinutes": null,
            "sourceId": "booking",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Organic Hair Growth Treatment (Shampoo Included)",
            "category": "treatment",
            "description": "Scalp treatment with shampoo; product efficacy claims are not evaluated.",
            "price": {
              "kind": "fixed",
              "amount": 65,
              "amountMax": null,
              "currency": "USD",
              "note": null
            },
            "durationMinutes": 30,
            "durationMaxMinutes": null,
            "sourceId": "booking",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Blow Out",
            "category": "styling",
            "description": "Wash, condition and round-brush finish; extra time/hot tools can add charges.",
            "price": {
              "kind": "starting_at",
              "amount": 75,
              "amountMax": null,
              "currency": "USD",
              "note": "Starting at $75"
            },
            "durationMinutes": 60,
            "durationMaxMinutes": null,
            "sourceId": "booking",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Long Cut + Dark Oil Deep Conditioning Treatment",
            "category": "haircut",
            "description": "Extra length, density or complexity can require additional time and charges.",
            "price": {
              "kind": "fixed",
              "amount": 165,
              "amountMax": null,
              "currency": "USD",
              "note": null
            },
            "durationMinutes": 90,
            "durationMaxMinutes": null,
            "sourceId": "booking",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Organic Color Only Root Retouch",
            "category": "color",
            "description": "Single-color regrowth coverage without bleach; extra regrowth or density can cost more.",
            "price": {
              "kind": "starting_at",
              "amount": 125,
              "amountMax": null,
              "currency": "USD",
              "note": "Starting at $125"
            },
            "durationMinutes": 90,
            "durationMaxMinutes": null,
            "sourceId": "booking",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Express Smoothing Treatment",
            "category": "treatment",
            "description": null,
            "price": {
              "kind": "fixed",
              "amount": 280,
              "amountMax": null,
              "currency": "USD",
              "note": null
            },
            "durationMinutes": 120,
            "durationMaxMinutes": null,
            "sourceId": "booking",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Neck Trim",
            "category": "haircut",
            "description": null,
            "price": {
              "kind": "fixed",
              "amount": 30,
              "amountMax": null,
              "currency": "USD",
              "note": null
            },
            "durationMinutes": 15,
            "durationMaxMinutes": null,
            "sourceId": "booking",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Organic Color Only Root Retouch + Blowout",
            "category": "color",
            "description": "Regrowth color with blowout; extra regrowth or density can cost more.",
            "price": {
              "kind": "starting_at",
              "amount": 180,
              "amountMax": null,
              "currency": "USD",
              "note": "Starting at $180"
            },
            "durationMinutes": 120,
            "durationMaxMinutes": null,
            "sourceId": "booking",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Organic Smoothing Treatment",
            "category": "treatment",
            "description": null,
            "price": {
              "kind": "starting_at",
              "amount": 380,
              "amountMax": null,
              "currency": "USD",
              "note": "Starting at $380"
            },
            "durationMinutes": 165,
            "durationMaxMinutes": null,
            "sourceId": "booking",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Organic Scalp Detox Treatment",
            "category": "treatment",
            "description": "Scalp treatment; blowout excluded.",
            "price": {
              "kind": "fixed",
              "amount": 95,
              "amountMax": null,
              "currency": "USD",
              "note": null
            },
            "durationMinutes": 75,
            "durationMaxMinutes": null,
            "sourceId": "booking",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Shampoo",
            "category": "styling",
            "description": "Wash, conditioning, light scalp massage and towel dry.",
            "price": {
              "kind": "fixed",
              "amount": 30,
              "amountMax": null,
              "currency": "USD",
              "note": null
            },
            "durationMinutes": 15,
            "durationMaxMinutes": null,
            "sourceId": "booking",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Long Cut + Organic Hair Growth Treatment",
            "category": "haircut",
            "description": null,
            "price": {
              "kind": "fixed",
              "amount": 165,
              "amountMax": null,
              "currency": "USD",
              "note": null
            },
            "durationMinutes": 80,
            "durationMaxMinutes": null,
            "sourceId": "booking",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Free Consultation for Other Services",
            "category": "other",
            "description": "Optional consultation when unsure; routine services can be booked directly if the required service is known.",
            "price": {
              "kind": "fixed",
              "amount": 0,
              "amountMax": null,
              "currency": "USD",
              "note": null
            },
            "durationMinutes": 15,
            "durationMaxMinutes": null,
            "sourceId": "booking",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Bang Trim",
            "category": "haircut",
            "description": null,
            "price": {
              "kind": "fixed",
              "amount": 25,
              "amountMax": null,
              "currency": "USD",
              "note": null
            },
            "durationMinutes": 15,
            "durationMaxMinutes": null,
            "sourceId": "booking",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Organic Single Process Color",
            "category": "color",
            "description": "Roots-to-ends single color. New clients should book a color consultation; extra length/density can add time and cost.",
            "price": {
              "kind": "starting_at",
              "amount": 200,
              "amountMax": null,
              "currency": "USD",
              "note": "Starting at $200"
            },
            "durationMinutes": 120,
            "durationMaxMinutes": null,
            "sourceId": "booking",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Hair Remedy Treatment",
            "category": "treatment",
            "description": null,
            "price": {
              "kind": "fixed",
              "amount": 145,
              "amountMax": null,
              "currency": "USD",
              "note": null
            },
            "durationMinutes": 60,
            "durationMaxMinutes": null,
            "sourceId": "booking",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Long Cut + Organic Color Root Retouch + Highlight (Partial)",
            "category": "color",
            "description": null,
            "price": {
              "kind": "starting_at",
              "amount": 420,
              "amountMax": null,
              "currency": "USD",
              "note": "Starting at $420"
            },
            "durationMinutes": 210,
            "durationMaxMinutes": null,
            "sourceId": "booking",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Buzz Cut",
            "category": "haircut",
            "description": "Whole-head clipper cut using up to three guards; shampoo excluded. Skin fades use Short Cut & Style Bundle.",
            "price": {
              "kind": "fixed",
              "amount": 40,
              "amountMax": null,
              "currency": "USD",
              "note": null
            },
            "durationMinutes": 30,
            "durationMaxMinutes": null,
            "sourceId": "booking",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Organic Single Process Color + Blowout",
            "category": "color",
            "description": "Roots-to-ends single color with blowout; consultation and final quote required for new clients.",
            "price": {
              "kind": "starting_at",
              "amount": 255,
              "amountMax": null,
              "currency": "USD",
              "note": "Starting at $255"
            },
            "durationMinutes": 120,
            "durationMaxMinutes": null,
            "sourceId": "booking",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Dark Oil Deep Conditioning Treatment",
            "category": "treatment",
            "description": null,
            "price": {
              "kind": "fixed",
              "amount": 65,
              "amountMax": null,
              "currency": "USD",
              "note": null
            },
            "durationMinutes": 40,
            "durationMaxMinutes": null,
            "sourceId": "booking",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Long Cut + Organic Color Root Retouch + Balayage (Partial)",
            "category": "color",
            "description": null,
            "price": {
              "kind": "starting_at",
              "amount": 470,
              "amountMax": null,
              "currency": "USD",
              "note": "Starting at $470"
            },
            "durationMinutes": 210,
            "durationMaxMinutes": null,
            "sourceId": "booking",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Short Cut & Style Bundle",
            "category": "haircut",
            "description": "Above-earlobe hair; scissor/clipper cut. Shampoo and blow-dry are included on request.",
            "price": {
              "kind": "fixed",
              "amount": 75,
              "amountMax": null,
              "currency": "USD",
              "note": null
            },
            "durationMinutes": 45,
            "durationMaxMinutes": null,
            "sourceId": "booking",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Highlight / Lowlight (Partial)",
            "category": "color",
            "description": "Includes toner and 2 oz lightener/color. Extra product/foil work may cost more. New clients should consult first.",
            "price": {
              "kind": "starting_at",
              "amount": 205,
              "amountMax": null,
              "currency": "USD",
              "note": "Starting at $205"
            },
            "durationMinutes": 150,
            "durationMaxMinutes": null,
            "sourceId": "booking",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Long Cut + Hair Remedy Treatment Style Bundle",
            "category": "haircut",
            "description": "Long haircut, four-step conditioning treatment and blowout; timing varies with hair characteristics.",
            "price": {
              "kind": "fixed",
              "amount": 255,
              "amountMax": null,
              "currency": "USD",
              "note": null
            },
            "durationMinutes": 90,
            "durationMaxMinutes": null,
            "sourceId": "booking",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Long Cut & Style Bundle",
            "category": "haircut",
            "description": "Below-earlobe hair; shampoo, cut and blow-dry included. Extra length/density adds $20-$60; see adjustments.",
            "price": {
              "kind": "fixed",
              "amount": 110,
              "amountMax": null,
              "currency": "USD",
              "note": null
            },
            "durationMinutes": 60,
            "durationMaxMinutes": null,
            "sourceId": "booking",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Glow & Flow: Scalp Detox & Shine Treatment",
            "category": "treatment",
            "description": null,
            "price": {
              "kind": "fixed",
              "amount": 235,
              "amountMax": null,
              "currency": "USD",
              "note": null
            },
            "durationMinutes": 90,
            "durationMaxMinutes": null,
            "sourceId": "booking",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Highlight / Lowlight (Full)",
            "category": "color",
            "description": "Includes toner and 4 oz lightener/color. Extra product/foil work may cost more. New clients should consult first.",
            "price": {
              "kind": "starting_at",
              "amount": 305,
              "amountMax": null,
              "currency": "USD",
              "note": "Starting at $305"
            },
            "durationMinutes": 180,
            "durationMaxMinutes": null,
            "sourceId": "booking",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Balayage/Foilayage (Partial)",
            "category": "color",
            "description": "Includes toner and 3 oz lightener/color; balayage includes root melt. Extra product/foil work may cost more. New clients should consult first.",
            "price": {
              "kind": "starting_at",
              "amount": 279,
              "amountMax": null,
              "currency": "USD",
              "note": "Starting at $279"
            },
            "durationMinutes": 210,
            "durationMaxMinutes": null,
            "sourceId": "booking",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Balayage/Foilayage (Full)",
            "category": "color",
            "description": "Includes toner and 6 oz lightener/color; balayage includes root melt. Extra product/foil work may cost more. New clients should consult first.",
            "price": {
              "kind": "starting_at",
              "amount": 379,
              "amountMax": null,
              "currency": "USD",
              "note": "Starting at $379"
            },
            "durationMinutes": 210,
            "durationMaxMinutes": null,
            "sourceId": "booking",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Global Lightener Service",
            "category": "color",
            "description": "Full-head lightening; base includes 5 oz product. Extra product/time costs more. New clients should book a consultation.",
            "price": {
              "kind": "starting_at",
              "amount": 300,
              "amountMax": null,
              "currency": "USD",
              "note": "Starting at $300"
            },
            "durationMinutes": 180,
            "durationMaxMinutes": null,
            "sourceId": "booking",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Toner / Glaze (No blowout)",
            "category": "color",
            "description": "Color refinement; blowout is an additional service. Final details and pricing follow consultation.",
            "price": {
              "kind": "starting_at",
              "amount": 90,
              "amountMax": null,
              "currency": "USD",
              "note": "Starting at $90"
            },
            "durationMinutes": 50,
            "durationMaxMinutes": null,
            "sourceId": "booking",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Color Correction",
            "category": "color",
            "description": "Only on stylist recommendation. Published rate is $130 per hour, not a total quote.",
            "price": {
              "kind": "unknown",
              "amount": null,
              "amountMax": null,
              "currency": "USD",
              "note": "Starting at $130/hr Hourly or timed pricing is not a confirmed total; duration below is the published booking block."
            },
            "durationMinutes": 60,
            "durationMaxMinutes": null,
            "sourceId": "booking",
            "priceSourceId": null,
            "durationSourceId": null
          }
        ],
        "addOnsStatus": "published",
        "addOns": [
          {
            "name": "Below chest to mid-back adjustment",
            "category": "haircut",
            "description": "Published adjustment for Long Cut & Style Bundle.",
            "price": {
              "kind": "fixed",
              "amount": 20,
              "amountMax": null,
              "currency": "USD",
              "note": null
            },
            "durationMinutes": null,
            "durationMaxMinutes": null,
            "sourceId": "booking",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Mid-back to waist / long high-density adjustment",
            "category": "haircut",
            "description": "Published adjustment for Long Cut & Style Bundle.",
            "price": {
              "kind": "fixed",
              "amount": 40,
              "amountMax": null,
              "currency": "USD",
              "note": null
            },
            "durationMinutes": null,
            "durationMaxMinutes": null,
            "sourceId": "booking",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Waist-length-or-longer / extra-long very high-density adjustment",
            "category": "haircut",
            "description": "Published adjustment for Long Cut & Style Bundle.",
            "price": {
              "kind": "fixed",
              "amount": 60,
              "amountMax": null,
              "currency": "USD",
              "note": null
            },
            "durationMinutes": null,
            "durationMaxMinutes": null,
            "sourceId": "booking",
            "priceSourceId": null,
            "durationSourceId": null
          }
        ],
        "stylistsStatus": "published",
        "stylists": [
          {
            "name": "Amber",
            "specialties": [
              "Lived-in color",
              "Grey blending",
              "Root touch-ups",
              "Fine-hair cuts"
            ],
            "bio": null,
            "bookingUrl": "https://book.squareup.com/appointments/s0cybm2rgn8xxl/location/LB1Q08THPCQYE/services",
            "portfolioUrl": null,
            "sourceId": "booking"
          },
          {
            "name": "Iryna",
            "specialties": [
              "Highlights",
              "Balayage",
              "Blowouts"
            ],
            "bio": null,
            "bookingUrl": "https://book.squareup.com/appointments/s0cybm2rgn8xxl/location/LB1Q08THPCQYE/services",
            "portfolioUrl": null,
            "sourceId": "booking"
          },
          {
            "name": "Luna",
            "specialties": [
              "Razor cuts",
              "Wolf cuts",
              "Curly cuts",
              "Bang trims",
              "Layers"
            ],
            "bio": null,
            "bookingUrl": "https://book.squareup.com/appointments/s0cybm2rgn8xxl/location/LB1Q08THPCQYE/services",
            "portfolioUrl": null,
            "sourceId": "booking"
          },
          {
            "name": "Yuzi",
            "specialties": [
              "Layers",
              "Short cuts",
              "Color",
              "Blowouts"
            ],
            "bio": null,
            "bookingUrl": "https://book.squareup.com/appointments/s0cybm2rgn8xxl/location/LB1Q08THPCQYE/services",
            "portfolioUrl": null,
            "sourceId": "booking"
          }
        ],
        "policies": {
          "cancellation": {
            "value": "General policy asks 24 hours notice; same-day cancellations may incur the full service price. Highlight/balayage consultation guidance separately asks 48 hours notice for those longer services. Confirm which rule applies.",
            "sourceId": "booking"
          },
          "deposit": {
            "value": null,
            "sourceId": null
          },
          "noShow": {
            "value": "No-shows may be charged the full scheduled service price.",
            "sourceId": "booking"
          },
          "lateArrival": {
            "value": "Arrivals over 15 minutes late may be charged the full scheduled service price.",
            "sourceId": "booking"
          },
          "consultation": {
            "value": "New color clients are directed to a consultation; highlights/balayage clients are encouraged to use the same stylist for consultation and service. Consultation options are free and listed as 15 minutes.",
            "sourceId": "booking"
          },
          "payment": {
            "value": null,
            "sourceId": null
          },
          "walkIns": {
            "value": null,
            "sourceId": null
          }
        },
        "unknowns": [
          "Live appointment availability was not checked.",
          "Final total including any mandatory extras, tax and tip is not established by published base prices.",
          "Extra color product, extra hot-tool time and final color-correction hours have no universal published total.",
          "deposit terms were not established from the public pages checked.",
          "payment terms were not established from the public pages checked.",
          "walkIns terms were not established from the public pages checked."
        ],
        "conflicts": [
          "General cancellation text asks 24 hours; highlight/balayage consultation text asks 48 hours. Service-specific terms need confirmation."
        ]
      }
    },
    {
      "slug": "wicked-financial-district-south-beach",
      "ref": "san-francisco/hair-salon/wicked-financial-district-south-beach",
      "name": "Wicked",
      "neighborhood": "Financial District / South Beach",
      "researched_at": "2026-10-24T09:33:36Z",
      "coverage": {
        "services": 67,
        "services_with_prices": 65,
        "services_with_durations": 48,
        "add_ons": 4,
        "stylists": 4,
        "published_policies": 3,
        "policy_fields": 7,
        "successfully_read_sources": 3
      },
      "unknowns": [
        "Live appointment availability was not checked.",
        "Final total including any mandatory extras, tax and tip is not established by published base prices.",
        "deposit terms were not established from the public pages checked.",
        "noShow terms were not established from the public pages checked.",
        "consultation terms were not established from the public pages checked.",
        "walkIns terms were not established from the public pages checked."
      ],
      "conflicts": [
        "Wicked BLEACH & TONE: $500/180-minute booking option conflicts with description of $150 per hour and up to 6 hours/multiple visits.",
        "Website Haircut Women starts at $95; booking options are $115-$160 by named option. Haircut Men starts at $80 on the website versus $110-$150 in booking. These are separate published sources, not a verified final quote.",
        "Website color blow-dry add-on is $30; public booking COLOR/BLOW DRY options are $45.",
        "Website team lists Bradley, while current booking menu lists Ash, Cary and Sue; service availability by stylist must be confirmed."
      ],
      "url": "https://agentsalonsf.com/salons/wicked-financial-district-south-beach",
      "markdown_url": "https://agentsalonsf.com/salons/wicked-financial-district-south-beach.md",
      "api_url": "https://agentsalonsf.com/api/v1/salons/wicked-financial-district-south-beach",
      "public_research": {
        "salonSlug": "wicked-financial-district-south-beach",
        "researchedAt": "2026-10-24T09:33:36Z",
        "summary": "Website guide and customer booking options differ substantially. All accessible price options are retained with their own source; stylist-specific prices are not flattened into a cheap salon-wide offer.",
        "sources": [
          {
            "id": "menu",
            "url": "https://www.wickedsalon.com/services",
            "kind": "salon_website",
            "checkedAt": "2026-10-24T09:33:36Z",
            "outcome": "read",
            "note": "Read full guide menu, color blow-dry add-on and late/cancellation policy."
          },
          {
            "id": "team",
            "url": "https://www.wickedsalon.com/staff",
            "kind": "salon_website",
            "checkedAt": "2026-10-24T09:33:36Z",
            "outcome": "read",
            "note": "Read public professional names and specialties; personal contacts omitted."
          },
          {
            "id": "booking",
            "url": "https://book.squareup.com/appointments/53sm7xb7tmf1c9/location/L5GDEVH71C8V4",
            "kind": "booking_provider",
            "checkedAt": "2026-10-24T09:33:36Z",
            "outcome": "read",
            "note": "Official staff page links this customer booking route. Public HTML contains 26 services and 51 visible price/duration variants; variant names abbreviated to professional first names."
          },
          {
            "id": "square-site",
            "url": "https://wicked-salon-inc-106731.square.site/",
            "kind": "booking_provider",
            "checkedAt": "2026-10-24T09:33:36Z",
            "outcome": "unavailable",
            "note": "Public Square site and /s/appointments are script-driven shells; direct booking link on official team page yielded the menu."
          }
        ],
        "menuStatus": "published",
        "menu": [
          {
            "name": "Haircut Women",
            "category": "haircut",
            "description": "Website guide price; current booking options may differ.",
            "price": {
              "kind": "starting_at",
              "amount": 95,
              "amountMax": null,
              "currency": "USD",
              "note": null
            },
            "durationMinutes": null,
            "durationMaxMinutes": null,
            "sourceId": "menu",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Haircut Men",
            "category": "haircut",
            "description": "Website guide price; current booking options may differ.",
            "price": {
              "kind": "starting_at",
              "amount": 80,
              "amountMax": null,
              "currency": "USD",
              "note": null
            },
            "durationMinutes": null,
            "durationMaxMinutes": null,
            "sourceId": "menu",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Conditioning Treatment",
            "category": "treatment",
            "description": "Website guide price; current booking options may differ.",
            "price": {
              "kind": "starting_at",
              "amount": 25,
              "amountMax": null,
              "currency": "USD",
              "note": null
            },
            "durationMinutes": null,
            "durationMaxMinutes": null,
            "sourceId": "menu",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Upstyle",
            "category": "styling",
            "description": "Website guide price; current booking options may differ.",
            "price": {
              "kind": "starting_at",
              "amount": 80,
              "amountMax": null,
              "currency": "USD",
              "note": null
            },
            "durationMinutes": null,
            "durationMaxMinutes": null,
            "sourceId": "menu",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Shampoo/Style",
            "category": "styling",
            "description": "Website guide price; current booking options may differ.",
            "price": {
              "kind": "starting_at",
              "amount": 60,
              "amountMax": null,
              "currency": "USD",
              "note": null
            },
            "durationMinutes": null,
            "durationMaxMinutes": null,
            "sourceId": "menu",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Keratin Treatment",
            "category": "treatment",
            "description": "Website guide price; current booking options may differ.",
            "price": {
              "kind": "starting_at",
              "amount": 310,
              "amountMax": null,
              "currency": "USD",
              "note": null
            },
            "durationMinutes": null,
            "durationMaxMinutes": null,
            "sourceId": "menu",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Keratin Express Treatment",
            "category": "treatment",
            "description": "Website guide price; current booking options may differ.",
            "price": {
              "kind": "starting_at",
              "amount": 160,
              "amountMax": null,
              "currency": "USD",
              "note": null
            },
            "durationMinutes": null,
            "durationMaxMinutes": null,
            "sourceId": "menu",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Japanese Treatment",
            "category": "treatment",
            "description": "Website guide price; current booking options may differ.",
            "price": {
              "kind": "starting_at",
              "amount": 330,
              "amountMax": null,
              "currency": "USD",
              "note": null
            },
            "durationMinutes": null,
            "durationMaxMinutes": null,
            "sourceId": "menu",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Single Process/Root Touch Up",
            "category": "styling",
            "description": "Website guide price; current booking options may differ.",
            "price": {
              "kind": "starting_at",
              "amount": 65,
              "amountMax": null,
              "currency": "USD",
              "note": null
            },
            "durationMinutes": null,
            "durationMaxMinutes": null,
            "sourceId": "menu",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Refresh End Color",
            "category": "color",
            "description": "Website guide price; current booking options may differ.",
            "price": {
              "kind": "starting_at",
              "amount": 35,
              "amountMax": null,
              "currency": "USD",
              "note": null
            },
            "durationMinutes": null,
            "durationMaxMinutes": null,
            "sourceId": "menu",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Highlight 1 (partial)",
            "category": "color",
            "description": "Website guide price; current booking options may differ.",
            "price": {
              "kind": "starting_at",
              "amount": 195,
              "amountMax": null,
              "currency": "USD",
              "note": null
            },
            "durationMinutes": null,
            "durationMaxMinutes": null,
            "sourceId": "menu",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Highlight 2 (full)",
            "category": "color",
            "description": "Website guide price; current booking options may differ.",
            "price": {
              "kind": "starting_at",
              "amount": 230,
              "amountMax": null,
              "currency": "USD",
              "note": null
            },
            "durationMinutes": null,
            "durationMaxMinutes": null,
            "sourceId": "menu",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Highlight 1 (partial) w/Root Touch Up",
            "category": "color",
            "description": "Website guide price; current booking options may differ.",
            "price": {
              "kind": "starting_at",
              "amount": 235,
              "amountMax": null,
              "currency": "USD",
              "note": null
            },
            "durationMinutes": null,
            "durationMaxMinutes": null,
            "sourceId": "menu",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Balayage 1 (partial)",
            "category": "color",
            "description": "Website guide price; current booking options may differ.",
            "price": {
              "kind": "starting_at",
              "amount": 110,
              "amountMax": null,
              "currency": "USD",
              "note": null
            },
            "durationMinutes": null,
            "durationMaxMinutes": null,
            "sourceId": "menu",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Balayage 2 (full)",
            "category": "color",
            "description": "Website guide price; current booking options may differ.",
            "price": {
              "kind": "starting_at",
              "amount": 220,
              "amountMax": null,
              "currency": "USD",
              "note": null
            },
            "durationMinutes": null,
            "durationMaxMinutes": null,
            "sourceId": "menu",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Color Glaze",
            "category": "color",
            "description": "Website guide price; current booking options may differ.",
            "price": {
              "kind": "starting_at",
              "amount": 50,
              "amountMax": null,
              "currency": "USD",
              "note": null
            },
            "durationMinutes": null,
            "durationMaxMinutes": null,
            "sourceId": "menu",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Bleach Tone",
            "category": "color",
            "description": "Website guide price; current booking options may differ.",
            "price": {
              "kind": "starting_at",
              "amount": 205,
              "amountMax": null,
              "currency": "USD",
              "note": null
            },
            "durationMinutes": null,
            "durationMaxMinutes": null,
            "sourceId": "menu",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Men's Color Blending",
            "category": "color",
            "description": "Website guide price; current booking options may differ.",
            "price": {
              "kind": "starting_at",
              "amount": 60,
              "amountMax": null,
              "currency": "USD",
              "note": null
            },
            "durationMinutes": null,
            "durationMaxMinutes": null,
            "sourceId": "menu",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "Blowout special - package of 3",
            "category": "styling",
            "description": "Website package advertised with Ashley; current availability and package conditions require confirmation.",
            "price": {
              "kind": "fixed",
              "amount": 150,
              "amountMax": null,
              "currency": "USD",
              "note": null
            },
            "durationMinutes": null,
            "durationMaxMinutes": null,
            "sourceId": "menu",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "WOMEN'S HAIRCUT",
            "category": "haircut",
            "description": "Published option: Ash. Shampoo, haircut, blow-dry and style.",
            "price": {
              "kind": "fixed",
              "amount": 115,
              "amountMax": null,
              "currency": "USD",
              "note": null
            },
            "durationMinutes": 60,
            "durationMaxMinutes": null,
            "sourceId": "booking",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "WOMEN'S HAIRCUT",
            "category": "haircut",
            "description": "Published option: Sue. Shampoo, haircut, blow-dry and style.",
            "price": {
              "kind": "fixed",
              "amount": 160,
              "amountMax": null,
              "currency": "USD",
              "note": null
            },
            "durationMinutes": 60,
            "durationMaxMinutes": null,
            "sourceId": "booking",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "WOMEN'S HAIRCUT",
            "category": "haircut",
            "description": "Published option: Cary. Shampoo, haircut, blow-dry and style.",
            "price": {
              "kind": "fixed",
              "amount": 115,
              "amountMax": null,
              "currency": "USD",
              "note": null
            },
            "durationMinutes": 60,
            "durationMaxMinutes": null,
            "sourceId": "booking",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "MEN'S HAIRCUT",
            "category": "haircut",
            "description": "Published option: Sue. Shampoo, haircut and style.",
            "price": {
              "kind": "fixed",
              "amount": 150,
              "amountMax": null,
              "currency": "USD",
              "note": null
            },
            "durationMinutes": 60,
            "durationMaxMinutes": null,
            "sourceId": "booking",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "MEN'S HAIRCUT",
            "category": "haircut",
            "description": "Published option: Ash. Shampoo, haircut and style.",
            "price": {
              "kind": "fixed",
              "amount": 110,
              "amountMax": null,
              "currency": "USD",
              "note": null
            },
            "durationMinutes": 60,
            "durationMaxMinutes": null,
            "sourceId": "booking",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "MEN'S HAIRCUT",
            "category": "haircut",
            "description": "Published option: Cary. Shampoo, haircut and style.",
            "price": {
              "kind": "fixed",
              "amount": 115,
              "amountMax": null,
              "currency": "USD",
              "note": null
            },
            "durationMinutes": 60,
            "durationMaxMinutes": null,
            "sourceId": "booking",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "DELUXE HAIRCUT",
            "category": "haircut",
            "description": "Detox/clarifying treatment, moisturizing or restructuring treatment and haircut.",
            "price": {
              "kind": "fixed",
              "amount": 165,
              "amountMax": null,
              "currency": "USD",
              "note": null
            },
            "durationMinutes": 90,
            "durationMaxMinutes": null,
            "sourceId": "booking",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "DELUXE HAIRCUT",
            "category": "haircut",
            "description": "Published option: Sue. Detox/clarifying treatment, moisturizing or restructuring treatment and haircut.",
            "price": {
              "kind": "fixed",
              "amount": 195,
              "amountMax": null,
              "currency": "USD",
              "note": null
            },
            "durationMinutes": 90,
            "durationMaxMinutes": null,
            "sourceId": "booking",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "HIGHLIGHT",
            "category": "color",
            "description": "Published option: Sue. Foils or balayage with toner/glaze; excludes blow-dry and haircut.",
            "price": {
              "kind": "fixed",
              "amount": 240,
              "amountMax": null,
              "currency": "USD",
              "note": null
            },
            "durationMinutes": 95,
            "durationMaxMinutes": null,
            "sourceId": "booking",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "DELUXE HIGHIGHTS/HAIRCUT",
            "category": "color",
            "description": "Published option: Sue.",
            "price": {
              "kind": "fixed",
              "amount": 415,
              "amountMax": null,
              "currency": "USD",
              "note": null
            },
            "durationMinutes": 210,
            "durationMaxMinutes": null,
            "sourceId": "booking",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "HIGHLIGHT/TINT",
            "category": "color",
            "description": null,
            "price": {
              "kind": "fixed",
              "amount": 355,
              "amountMax": null,
              "currency": "USD",
              "note": null
            },
            "durationMinutes": 30,
            "durationMaxMinutes": null,
            "sourceId": "booking",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "BLOW -DRY/STYLE w/HOT TOOLS",
            "category": "styling",
            "description": "Published option: Sue. Shampoo, blow-dry and hot-tool finish.",
            "price": {
              "kind": "fixed",
              "amount": 100,
              "amountMax": null,
              "currency": "USD",
              "note": null
            },
            "durationMinutes": 30,
            "durationMaxMinutes": null,
            "sourceId": "booking",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "BLOW -DRY/STYLE w/HOT TOOLS",
            "category": "styling",
            "description": "Published option: Ash. Shampoo, blow-dry and hot-tool finish.",
            "price": {
              "kind": "fixed",
              "amount": 95,
              "amountMax": null,
              "currency": "USD",
              "note": null
            },
            "durationMinutes": 60,
            "durationMaxMinutes": null,
            "sourceId": "booking",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "BLOW -DRY/STYLE w/HOT TOOLS",
            "category": "styling",
            "description": "Published option: Cary. Shampoo, blow-dry and hot-tool finish.",
            "price": {
              "kind": "fixed",
              "amount": 95,
              "amountMax": null,
              "currency": "USD",
              "note": null
            },
            "durationMinutes": 90,
            "durationMaxMinutes": null,
            "sourceId": "booking",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "CAMO/HAIRCUT",
            "category": "color",
            "description": "Published option: Sue.",
            "price": {
              "kind": "fixed",
              "amount": 215,
              "amountMax": null,
              "currency": "USD",
              "note": null
            },
            "durationMinutes": 90,
            "durationMaxMinutes": null,
            "sourceId": "booking",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "CAMO/HAIRCUT",
            "category": "color",
            "description": "Published option: Cary.",
            "price": {
              "kind": "fixed",
              "amount": 170,
              "amountMax": null,
              "currency": "USD",
              "note": null
            },
            "durationMinutes": 90,
            "durationMaxMinutes": null,
            "sourceId": "booking",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "CAMO/HAIRCUT",
            "category": "color",
            "description": "Published option: Ash.",
            "price": {
              "kind": "fixed",
              "amount": 160,
              "amountMax": null,
              "currency": "USD",
              "note": null
            },
            "durationMinutes": 90,
            "durationMaxMinutes": null,
            "sourceId": "booking",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "SCALP  TREATMENT W/BLOWDRY",
            "category": "treatment",
            "description": null,
            "price": {
              "kind": "fixed",
              "amount": 95,
              "amountMax": null,
              "currency": "USD",
              "note": null
            },
            "durationMinutes": 30,
            "durationMaxMinutes": null,
            "sourceId": "booking",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "EVENT STYLE",
            "category": "styling",
            "description": "Published option: Cary.",
            "price": {
              "kind": "unknown",
              "amount": null,
              "amountMax": null,
              "currency": "USD",
              "note": "Published Cary option is $150 per 90 minutes, not a guaranteed total for an event. The published booking block is 90 minutes."
            },
            "durationMinutes": 90,
            "durationMaxMinutes": null,
            "sourceId": "booking",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "EVENT STYLE",
            "category": "styling",
            "description": "Published option: Sue.",
            "price": {
              "kind": "fixed",
              "amount": 250,
              "amountMax": null,
              "currency": "USD",
              "note": null
            },
            "durationMinutes": 90,
            "durationMaxMinutes": null,
            "sourceId": "booking",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "TINT",
            "category": "color",
            "description": "Published option: Sue. Root touch-up.",
            "price": {
              "kind": "fixed",
              "amount": 140,
              "amountMax": null,
              "currency": "USD",
              "note": null
            },
            "durationMinutes": 95,
            "durationMaxMinutes": null,
            "sourceId": "booking",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "TINT",
            "category": "color",
            "description": "Published option: Ash. Root touch-up.",
            "price": {
              "kind": "fixed",
              "amount": 105,
              "amountMax": null,
              "currency": "USD",
              "note": null
            },
            "durationMinutes": 95,
            "durationMaxMinutes": null,
            "sourceId": "booking",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "TINT",
            "category": "color",
            "description": "Published option: Cary. Root touch-up.",
            "price": {
              "kind": "fixed",
              "amount": 110,
              "amountMax": null,
              "currency": "USD",
              "note": null
            },
            "durationMinutes": 30,
            "durationMaxMinutes": null,
            "sourceId": "booking",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "TINT/BLOW-DRY",
            "category": "color",
            "description": "Published option: Sue. Root touch-up and end toner/glaze as needed, with blow-dry; no highlights.",
            "price": {
              "kind": "fixed",
              "amount": 175,
              "amountMax": null,
              "currency": "USD",
              "note": null
            },
            "durationMinutes": 120,
            "durationMaxMinutes": null,
            "sourceId": "booking",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "TINT/BLOW-DRY",
            "category": "color",
            "description": "Published option: Cary. Root touch-up and end toner/glaze as needed, with blow-dry; no highlights.",
            "price": {
              "kind": "fixed",
              "amount": 160,
              "amountMax": null,
              "currency": "USD",
              "note": null
            },
            "durationMinutes": 120,
            "durationMaxMinutes": null,
            "sourceId": "booking",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "TINT/BLOW-DRY",
            "category": "color",
            "description": "Published option: Ash. Root touch-up and end toner/glaze as needed, with blow-dry; no highlights.",
            "price": {
              "kind": "fixed",
              "amount": 155,
              "amountMax": null,
              "currency": "USD",
              "note": null
            },
            "durationMinutes": 120,
            "durationMaxMinutes": null,
            "sourceId": "booking",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "TINT/HAIRCUT",
            "category": "color",
            "description": "Published option: Sue. Root touch-up and end toner/glaze as needed, with haircut; no highlights.",
            "price": {
              "kind": "fixed",
              "amount": 270,
              "amountMax": null,
              "currency": "USD",
              "note": null
            },
            "durationMinutes": 150,
            "durationMaxMinutes": null,
            "sourceId": "booking",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "TINT/HAIRCUT",
            "category": "color",
            "description": "Published option: Cary. Root touch-up and end toner/glaze as needed, with haircut; no highlights.",
            "price": {
              "kind": "fixed",
              "amount": 235,
              "amountMax": null,
              "currency": "USD",
              "note": null
            },
            "durationMinutes": 150,
            "durationMaxMinutes": null,
            "sourceId": "booking",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "TINT/HAIRCUT",
            "category": "color",
            "description": "Published option: Ash. Root touch-up and end toner/glaze as needed, with haircut; no highlights.",
            "price": {
              "kind": "fixed",
              "amount": 225,
              "amountMax": null,
              "currency": "USD",
              "note": null
            },
            "durationMinutes": 150,
            "durationMaxMinutes": null,
            "sourceId": "booking",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "HIGHLIGHT/BLOW-DRY",
            "category": "color",
            "description": "Published option: Sue. Highlights, toner/glaze and blow-dry; no haircut.",
            "price": {
              "kind": "fixed",
              "amount": 285,
              "amountMax": null,
              "currency": "USD",
              "note": null
            },
            "durationMinutes": 150,
            "durationMaxMinutes": null,
            "sourceId": "booking",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "HIGHLIGHT/BLOW-DRY",
            "category": "color",
            "description": "Published option: Cary. Highlights, toner/glaze and blow-dry; no haircut.",
            "price": {
              "kind": "fixed",
              "amount": 220,
              "amountMax": null,
              "currency": "USD",
              "note": null
            },
            "durationMinutes": 150,
            "durationMaxMinutes": null,
            "sourceId": "booking",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "HIGHLIGHT/HAIRCUT",
            "category": "color",
            "description": "Published option: Sue. Highlights, toner/glaze and haircut.",
            "price": {
              "kind": "fixed",
              "amount": 385,
              "amountMax": null,
              "currency": "USD",
              "note": null
            },
            "durationMinutes": 180,
            "durationMaxMinutes": null,
            "sourceId": "booking",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "HIGHLIGHT/HAIRCUT",
            "category": "color",
            "description": "Published option: Cary. Highlights, toner/glaze and haircut.",
            "price": {
              "kind": "fixed",
              "amount": 310,
              "amountMax": null,
              "currency": "USD",
              "note": null
            },
            "durationMinutes": 180,
            "durationMaxMinutes": null,
            "sourceId": "booking",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "HL/TINT/BLOW-DRY",
            "category": "color",
            "description": "Published option: Sue.",
            "price": {
              "kind": "fixed",
              "amount": 390,
              "amountMax": null,
              "currency": "USD",
              "note": null
            },
            "durationMinutes": 150,
            "durationMaxMinutes": null,
            "sourceId": "booking",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "HL/TINT/BLOW-DRY",
            "category": "color",
            "description": "Published option: Cary.",
            "price": {
              "kind": "fixed",
              "amount": 310,
              "amountMax": null,
              "currency": "USD",
              "note": null
            },
            "durationMinutes": 150,
            "durationMaxMinutes": null,
            "sourceId": "booking",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "HL/TINT/HAIRCUT",
            "category": "color",
            "description": "Published option: Sue.",
            "price": {
              "kind": "fixed",
              "amount": 475,
              "amountMax": null,
              "currency": "USD",
              "note": null
            },
            "durationMinutes": 180,
            "durationMaxMinutes": null,
            "sourceId": "booking",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "HL/TINT/HAIRCUT",
            "category": "color",
            "description": "Published option: Cary.",
            "price": {
              "kind": "fixed",
              "amount": 375,
              "amountMax": null,
              "currency": "USD",
              "note": null
            },
            "durationMinutes": 180,
            "durationMaxMinutes": null,
            "sourceId": "booking",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "BALAYAGE",
            "category": "color",
            "description": "Avoid shampooing for 24 hours before this service.",
            "price": {
              "kind": "fixed",
              "amount": 280,
              "amountMax": null,
              "currency": "USD",
              "note": null
            },
            "durationMinutes": 155,
            "durationMaxMinutes": null,
            "sourceId": "booking",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "GLAZE/BLOW DRY",
            "category": "color",
            "description": "Published option: Sue.",
            "price": {
              "kind": "fixed",
              "amount": 165,
              "amountMax": null,
              "currency": "USD",
              "note": null
            },
            "durationMinutes": 60,
            "durationMaxMinutes": null,
            "sourceId": "booking",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "GLAZE/BLOW DRY",
            "category": "color",
            "description": "Published option: Cary.",
            "price": {
              "kind": "fixed",
              "amount": 140,
              "amountMax": null,
              "currency": "USD",
              "note": null
            },
            "durationMinutes": 90,
            "durationMaxMinutes": null,
            "sourceId": "booking",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "GLAZE/TONE/HAIRCUT",
            "category": "color",
            "description": "Published option: Sue.",
            "price": {
              "kind": "fixed",
              "amount": 250,
              "amountMax": null,
              "currency": "USD",
              "note": null
            },
            "durationMinutes": 90,
            "durationMaxMinutes": null,
            "sourceId": "booking",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "GLAZE/TONE/HAIRCUT",
            "category": "color",
            "description": "Published option: Cary.",
            "price": {
              "kind": "fixed",
              "amount": 210,
              "amountMax": null,
              "currency": "USD",
              "note": null
            },
            "durationMinutes": 90,
            "durationMaxMinutes": null,
            "sourceId": "booking",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "BLEACH & TONE",
            "category": "color",
            "description": "Published option: Sue. Description advises no shampoo 48 hours before service; pricing and total duration conflict.",
            "price": {
              "kind": "unknown",
              "amount": null,
              "amountMax": null,
              "currency": "USD",
              "note": "Booking base shows $500 for 180 minutes, but description states $150 per hour and says up to 6 hours/multiple visits. Total and full duration require confirmation."
            },
            "durationMinutes": 180,
            "durationMaxMinutes": null,
            "sourceId": "booking",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "KERATIN EXPRESS",
            "category": "treatment",
            "description": "Published option: Sue.",
            "price": {
              "kind": "fixed",
              "amount": 200,
              "amountMax": null,
              "currency": "USD",
              "note": null
            },
            "durationMinutes": 90,
            "durationMaxMinutes": null,
            "sourceId": "booking",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "KERATIN EXPRESS",
            "category": "treatment",
            "description": "Published option: Ash.",
            "price": {
              "kind": "fixed",
              "amount": 190,
              "amountMax": null,
              "currency": "USD",
              "note": null
            },
            "durationMinutes": 90,
            "durationMaxMinutes": null,
            "sourceId": "booking",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "KERARTIN TREATMENT",
            "category": "treatment",
            "description": "Published option: Sue. Extra-long or thick hair incurs a stated $50 additional charge; arrive 15 minutes early.",
            "price": {
              "kind": "fixed",
              "amount": 475,
              "amountMax": null,
              "currency": "USD",
              "note": null
            },
            "durationMinutes": 210,
            "durationMaxMinutes": null,
            "sourceId": "booking",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "KERARTIN TREATMENT",
            "category": "treatment",
            "description": "Published option: Ash. Extra-long or thick hair incurs a stated $50 additional charge; arrive 15 minutes early.",
            "price": {
              "kind": "fixed",
              "amount": 405,
              "amountMax": null,
              "currency": "USD",
              "note": null
            },
            "durationMinutes": 180,
            "durationMaxMinutes": null,
            "sourceId": "booking",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "JAPANESE STRAIGHEN",
            "category": "styling",
            "description": "Extra-long or thick hair incurs a stated $50 additional charge.",
            "price": {
              "kind": "fixed",
              "amount": 475,
              "amountMax": null,
              "currency": "USD",
              "note": null
            },
            "durationMinutes": 180,
            "durationMaxMinutes": null,
            "sourceId": "booking",
            "priceSourceId": null,
            "durationSourceId": null
          }
        ],
        "addOnsStatus": "published",
        "addOns": [
          {
            "name": "Add blowdry to any color service",
            "category": "styling",
            "description": "Website color-service add-on; booking menu instead lists COLOR/BLOW DRY at $45.",
            "price": {
              "kind": "fixed",
              "amount": 30,
              "amountMax": null,
              "currency": "USD",
              "note": null
            },
            "durationMinutes": null,
            "durationMaxMinutes": null,
            "sourceId": "menu",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "COLOR/BLOW DRY",
            "category": "color",
            "description": "Published option: Cary. Blow-dry add-on to a color service only.",
            "price": {
              "kind": "fixed",
              "amount": 45,
              "amountMax": null,
              "currency": "USD",
              "note": null
            },
            "durationMinutes": 30,
            "durationMaxMinutes": null,
            "sourceId": "booking",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "COLOR/BLOW DRY",
            "category": "color",
            "description": "Published option: Ash. Blow-dry add-on to a color service only.",
            "price": {
              "kind": "fixed",
              "amount": 45,
              "amountMax": null,
              "currency": "USD",
              "note": null
            },
            "durationMinutes": 30,
            "durationMaxMinutes": null,
            "sourceId": "booking",
            "priceSourceId": null,
            "durationSourceId": null
          },
          {
            "name": "KTM ADD ON",
            "category": "styling",
            "description": "Additional keratin charge for extra length or thickness.",
            "price": {
              "kind": "fixed",
              "amount": 50,
              "amountMax": null,
              "currency": "USD",
              "note": null
            },
            "durationMinutes": 30,
            "durationMaxMinutes": null,
            "sourceId": "booking",
            "priceSourceId": null,
            "durationSourceId": null
          }
        ],
        "stylistsStatus": "published",
        "stylists": [
          {
            "name": "Sue",
            "specialties": [
              "Precision cuts",
              "Color",
              "Highlights",
              "Balayage"
            ],
            "bio": null,
            "bookingUrl": "https://book.squareup.com/appointments/53sm7xb7tmf1c9/location/L5GDEVH71C8V4",
            "portfolioUrl": null,
            "sourceId": "team"
          },
          {
            "name": "Bradley",
            "specialties": [
              "Haircuts",
              "Razor techniques"
            ],
            "bio": null,
            "bookingUrl": null,
            "portfolioUrl": null,
            "sourceId": "team"
          },
          {
            "name": "Cary",
            "specialties": [
              "Precision cuts",
              "Grey coverage",
              "Tone correction",
              "Long layers",
              "Highlights",
              "Bridal styling"
            ],
            "bio": null,
            "bookingUrl": "https://book.squareup.com/appointments/53sm7xb7tmf1c9/location/L5GDEVH71C8V4",
            "portfolioUrl": null,
            "sourceId": "team"
          },
          {
            "name": "Ash",
            "specialties": [],
            "bio": null,
            "bookingUrl": "https://book.squareup.com/appointments/53sm7xb7tmf1c9/location/L5GDEVH71C8V4",
            "portfolioUrl": null,
            "sourceId": "booking"
          }
        ],
        "policies": {
          "cancellation": {
            "value": "At least 48 hours notice is required to cancel/reschedule without a charge of 50% of booked services.",
            "sourceId": "menu"
          },
          "deposit": {
            "value": null,
            "sourceId": null
          },
          "noShow": {
            "value": null,
            "sourceId": null
          },
          "lateArrival": {
            "value": "Appointments more than 20 minutes late may need rescheduling.",
            "sourceId": "menu"
          },
          "consultation": {
            "value": null,
            "sourceId": null
          },
          "payment": {
            "value": "Card details may be requested to secure bookings; this does not establish a deposit charge.",
            "sourceId": "menu"
          },
          "walkIns": {
            "value": null,
            "sourceId": null
          }
        },
        "unknowns": [
          "Live appointment availability was not checked.",
          "Final total including any mandatory extras, tax and tip is not established by published base prices.",
          "deposit terms were not established from the public pages checked.",
          "noShow terms were not established from the public pages checked.",
          "consultation terms were not established from the public pages checked.",
          "walkIns terms were not established from the public pages checked."
        ],
        "conflicts": [
          "Wicked BLEACH & TONE: $500/180-minute booking option conflicts with description of $150 per hour and up to 6 hours/multiple visits.",
          "Website Haircut Women starts at $95; booking options are $115-$160 by named option. Haircut Men starts at $80 on the website versus $110-$150 in booking. These are separate published sources, not a verified final quote.",
          "Website color blow-dry add-on is $30; public booking COLOR/BLOW DRY options are $45.",
          "Website team lists Bradley, while current booking menu lists Ash, Cary and Sue; service availability by stylist must be confirmed."
        ]
      }
    }
  ]
}