Trip Planner: Developer’s Log #2 – Crawlers, Scrapers and APIs (Oh My!)

Now that we’ve established what the trip planning app is and what it should do, the natural next question is: where does all the data come from? We’ll look under the hood in this post, and I’ll walk through a few of the technical details that power the app. Every activity you see in the trip planner — from hikes and local events to scenic drives and places to grab a bite — is gathered from publicly available information. While a lot of the restaurants, trails, events, etc. the user interacts with is carefully curated, we use a combination of crawlers, scrapers, and APIs as a starting point to gather and organize the initial data.

Tool #1: Crawlers

This calendar from visitsouthernutah.com contains events we can easily add to the app.

Crawlers are automated tools that browse the web and collect information, much like what Google does when it indexes web pages. In our case, we use crawlers to discover new content — everything from hiking trail descriptions and park alerts to local event pages. We’re not crawling the web for new pages since this runs the risk of introducing unreliable data, so these bots explore a list of known and trusted websites, gathering new content that we can then filter and format for our app.

For example, city tourism boards and regional visitor sites frequently post updated schedules, calendar events, and activities — perfect fodder for our crawlers. Crawlers help us scan this content automatically, and find new pages and look for new links, and so on.

Tool #2: Scrapers

CitySpark contains a wealth of other local events around southern Utah. It’s almost certain that CitySpark itself uses scrapers, too. We index some of this data, similar to how Google may do so, albeit much simpler and more focused on what may interest visitors to the area.

Scrapers help turn the raw content we’ve found from the crawlers into usable formats. Scraping is especially useful when sites don’t offer APIs but display rich data right on the page — think restaurant web sites and menus or community calendars. For example, to gather events in Kanab, the app uses a scraper that finds all CitySpark events such as festivals, concerts, and other occurrences in southern Utah and pulls anything that might be interesting for visitors to Kanab and the surrounding national parks. Our scraper extracts relevant pieces like event names, addresses, dates, hours, descriptions, and more, and cleans them up for use in our system.

Another good example of data we scrape is from the National Park Service web site. While some of their data is API-accessible, other details (like seasonal trail closures or current conditions) live in static HTML pages. We use scrapers to routinely collect and format this information to keep our listings accurate and up-to-date.

Tool #3: APIs

APIs, or Application Programming Interfaces, are the preferred way to gather data. When available, they’re structured, efficient, and often updated in real-time. Here’s a sampling of the APIs we’re using, and this is by no means a comprehensive list:

An example of data from the National Weather Service API. This particular data is a weather forecast for Kanab, presented in a structured format that our app can easily read.
  • Google Cloud Vision API for extracting text from images, and identifying image content.
  • Google Maps API for calculating travel distances. A variety of maps are available for the trails, which I’ll share more information about in a later post.
  • Google Places API for cataloging businesses and locations in the area, including open hours and web sites.
  • National Park Service APIs for park alerts, trail information, and visitor center locations.
  • National Weather Service APIs for forecasting weather and adjusting itineraries as necessary.
  • TripAdvisor APIs for gathering reviews of different locations.
  • USGS datasets, which include comprehensive GIS data for national park trails (like Zion and the Grand Canyon).
  • Utah’s Open Data portal, which provides datasets on trails, camp sites, state park visitor counts, water levels, flood warning zones, fish stocking, and more.

Overall, these APIs offer a rich source of structured data that we can query, cache, and cross-reference with other data sources to build a more complete picture of the area.

The Tech Stack: What Powers the Planner

Here’s a quick rundown of our architecture:

This is a snippet of data from a trail record in Meilisearch, which the app uses as an internal search engine. You can query this data as well, albeit with a simpler, more intuitive interface.
  • Frontend: Built in Vue.js, our user interface (UI) is designed to be fast, clean, and responsive — whether you’re browsing on your phone in a tent or planning from your desktop at home. DaisyUI provides many of the UI components across the site.
  • Backend: Laravel powers our API and handles user authentication, trip planning logic, and integrations with external data sources.
  • Database: MySQL stores most of our structured content.
  • Search: For full-text search and recommendations, Meilisearch is a lightweight yet robust search engine that integrates nicely with Laravel, and gives us lightning-fast results with typo-tolerance and relevancy scoring. This was chosen over other options like Elasticsearch for its simplicity and ease of integration.
  • Cache & Processes Monitoring: Redis is used for caching frequently requested data, as well as queuing and monitoring background jobs like data syncing or content processing.
  • AI Integration: We’ve trained a custom AI model using a vast dataset of local information — trails, restaurants, event schedules, points of interest, and more. This model in many ways is the heart of the Kanab trip planner, fully integrated across the app, powering intelligent recommendations and our in-app assistant. In an upcoming post, I’ll break down how the assistant uses this model to answer your questions in real-time and help build an itinerary tailored to your interests and physical activity preferences.

This high-level overview should give you a sense of how the trip planning app pulls together a diverse range of data into a single, easy-to-use interface. In future posts, we’ll go deeper into some of these APIs and how we structure the data we gather, as well as how we use AI to organize it. I’ll also discuss how we’re leveraging the web app into a mobile app for both Android and iOS, and even providing offline functionality.

Trip Planner: Developer’s Log #1

Hello everyone! I want to share a new product we’re creating at Tranquility Trails, a trip planner for visitors to Kanab and the surrounding national parks. Kanab serves as the perfect gateway to some of the most awe-inspiring national parks in the United States, and the idea behind the app is to help travelers organize their itineraries efficiently while ensuring they don’t miss out on the best experiences the area has to offer.

When planning a trip to such a large and diverse area, it can be overwhelming to decide where to go, what to see, and how to structure your days. Kanab is a perfect hub for a trip to not just Zion, but also Bryce and Grand Canyon National Parks, as well as so many other lesser-known destinations. There are adventures and must-see landmarks all around Kanab, and we wanted to create a tool that would streamline the process, allowing users to customize their trip based on their interests, time constraints, physical abilities, and adventurousness.

The trip planner can create and organize an itinerary specially geared for your own brand of adventure.

This app was designed with 5 principles in mind:

  1. Adventure Built Around You. This app is for outdoor lovers — whether you’re here to hike, bike, canyoneer, or just take in the views. Most activities focus on Zion and Kanab, but if you’re feeling more adventurous, you can explore areas like Bryce, Lake Powell, and the North Rim. It all starts with a short questionnaire, so your experience is tailored to your interests from the beginning.
  2. Local Love. Local businesses are the heart of Kanab’s community, and it’s a priority to include them in the planned activities. Whether it’s highlighting a family-run café, a guided hiking tour, or a local festival, our system is designed to feature these authentic experiences. By featuring small businesses in our recommendations, we aim to help users connect with the character of the area while supporting the people who make it special.
  3. Your Pace, Your Style. Everyone explores differently. Some want easy, scenic trails; others crave a physical challenge. Some are traveling with kids; some are solo adventurers. Some visitors are here to find peace and quiet, others want to be where the action is. The app recommends experiences that match your style — whether that’s a remote overlook or a popular guided tour.
  4. Smart Suggestions. Whether you’re coming with a must-see in mind — like hiking the Narrows or visiting Best Friends Animal Sanctuary — or just looking for inspiration, the app helps you build a smart, flexible itinerary. It fills in the rest of your days with hand-picked restaurants, hidden trails, and local gems. You’ll get up-to-date trail conditions, weather alerts, and even packing suggestions to make sure you’re prepared. Plus, it helps you make the most of your time by factoring in activity duration and travel time between stops, so you can focus on enjoying the adventure, not figuring out logistics.
  5. Built for the Road. The app gives recommendations, but you’re always in control — add anything you want to your itinerary, skip what you don’t. Since most users are on the move, it’s built mobile-first with a responsive design, offline maps, restaurant menus, and battery-friendly features to keep up with you all day, even in remote areas.

We’ve trained a custom AI model with detailed information on trails, restaurants, events, maps, and other locations throughout the area. This model is a core component and integrated throughout the app, and is under continuous refinement to improve its performance and accuracy. I’ll share more information about this in an upcoming post, and how our integrated AI assistant leverages this model to deliver personalized recommendations and respond to user questions about the area. I’ll also discuss more about the technology used, and how we accumulate the data, including the maps, weather, trails, restaurants, events, places, and more.

What’s Next?

We’re aiming for a Summer 2025 release. What would you like to see in the app? Make sure to leave your comments, as we welcome any and all feedback! This will give us valuable insights into what features visitors to the area find most useful. Ultimately, the goal is for this trip planner to be the ultimate interactive guide for visitors to Kanab and the surrounding national parks — helping them create unforgettable trips while making the planning process as smooth as possible.