Skip to content

Verticals

The platform is organized around verticals. Each vertical is a self-contained slice of the framework: its own crawlers, its own SQLite tables, its own MCP tools.

Vertical 1: DMCs (Spike Complete)

What: Destination Management Companies — the on-the-ground operators who arrange luxury travel experiences.

Sources (spike):

  • Inside.travel (~192 DMCs)
  • Traveller Made (~39 DMCs)
  • DMC.travel (parsing issues, needs work)

Crawl results (spike):

  • 231 DMCs indexed
  • 95% email coverage
  • 80% phone coverage
  • 150+ destinations, 13 service categories, 52 specialties

MCP tools (spike):

  • search_dmc — full-text + filtered search
  • get_dmc_details — full record by ID
  • list_destinations — all indexed destinations
  • find_dmc_by_destination — DMCs in a destination
  • catalog_stats — database statistics

What's left (post-spike):

  • DMC Finder crawler (10,000+ DMCs, 120+ countries)
  • Traveller Made enrichment
  • Virtuoso advisor network (20,000+ luxury advisors)
  • Cross-source deduplication
  • Email validation (MX record check)
  • Phone normalization (E.164)
  • Confidence scoring
  • JS-rendered contact pages
  • PDF brochure parsing
  • Cookie consent handling
  • Department-specific email extraction
  • Docker containerization
  • Incremental crawl
  • Rate limit per source
  • Error alerting

DMC LOE: ~50–70 hours

Vertical 2: Dining (Planned)

What: Restaurants and dining experiences in luxury destinations.

Sources: Resy, OpenTable, Yelp, Tock.

Why: Core need for any luxury trip — high-end dining is part of the experience. Complements DMC data (a DMC might recommend a restaurant; we want to know it independently).

LOE: ~40–56 hours

Vertical 3: Experiences (Planned)

What: Bookable experiences and activities (tours, private guides, excursions, classes).

Sources: Viator, GetYourGuide, Klook.

Why: Experiences are a major spend category and a key differentiator for luxury. Partner APIs available — likely the cleanest data acquisition path.

LOE: ~68–98 hours

Vertical 4: Transportation (Planned)

What: Ground transportation — black car services, private drivers, car rentals, helicopter transfers.

Sources: Uber, Lyft, Blacklane, car rental APIs.

Why: Luxury travel often requires premium transport. OAuth required for some sources. Highest complexity of any vertical.

LOE: ~76–100 hours

Vertical 5: Hotels (Planned)

What: Luxury hotel inventory and property data.

Sources: Booking.com, Expedia, Virtuoso.

Why: Hotels are table stakes for travel. Well-documented APIs. Virtuoso integration gives us luxury-specific inventory.

LOE: ~40–60 hours

Vertical 6: Flights (Planned)

What: Flight options, schedules, and pricing.

Sources: Amadeus, Skyscanner, Google Flights.

Why: Flight data is a foundational input. GDS-dependent — partner relationships required. Less critical for our concierge use case (we focus on-ground, not in-air).

LOE: ~30–50 hours

Vertical 7: Spa & Wellness (Planned)

What: Spa and wellness facilities and services.

Sources: Mindbody, SpaFinder.

Why: Growing luxury segment. Lower data complexity. Easy vertical to add.

LOE: ~16–24 hours

Vertical 8: Event Tickets (Planned)

What: Concerts, theater, sporting events, special events.

Sources: Ticketmaster, Eventbrite.

Why: Last-mile enrichment for trips. Good API availability.

LOE: ~16–24 hours

Platform Core (Planned)

Shared infrastructure that supports all verticals:

  • Unified data models across verticals
  • Cross-vertical search (find DMC + hotel + restaurant in one destination)
  • Booking engine (reservation creation, not just search)
  • Payment processing (Stripe)
  • User authentication (JWT)
  • Notification system (email/SMS/webhooks)
  • Caching layer (Redis)
  • Docker + CI/CD + monitoring

LOE: ~40–60 hours

Total

ComponentHours
DMCs (spike complete, post-spike work)50–70
Dining40–56
Experiences68–98
Transportation76–100
Hotels40–60
Flights30–50
Spa & Wellness16–24
Event Tickets16–24
Platform Core40–60
Total376–542 (~460 hrs, ~13 weeks)

Adding a New Vertical

The pattern is consistent:

  1. Create crawlers/<vertical>/ with one crawler per source
  2. Add tables to storage/sqlite_store.py (one set per vertical)
  3. Add Pydantic models in models.py
  4. Add tools to mcp_server/server.py
  5. Add the vertical to config/sources.yaml
  6. Add a CLI subcommand in crawler.py

The shared components (BaseCrawler, extractors/contact.py, extractors/website.py, JSONStore) are reused as-is.

Marchay Platform Documentation