How a Custom WordPress Development Agency Brought Live Trip Availability to a Colorado Tour Operator

A Denver advertising agency that serves outdoor and tourism brands needed a custom WordPress development agency it could trust with an awkward problem: a tour operator wanted real-time trip availability on its WordPress site, pulled from a third-party reservation system that only offered an iframe widget. Softvole built the integration under the agency’s name.

+52%

more booking-start clicks

-57%

faster mobile LCP on trip pages

-41%

fewer availability phone calls

38

trip pages showing live dates

In this case study
Project overview

The Custom WordPress Development Agency Work Behind Live Availability

What the agency needed from a custom WordPress development agency

The tour operator’s old setup forced visitors through a reservation iframe that loaded slowly, ignored the site’s design, and could not be indexed. Visitors who wanted to know if a date was open had to click into the widget, wait, and often phone the office instead.

Our team built a custom plugin that pulls availability from the reservation provider’s API every 10 minutes, stores it in WordPress, and renders it natively on each trip page. Booking still happens in the provider’s secure checkout. Only the browsing experience moved into WordPress.

Project detail Information
Agency Tourism and outdoor ad agency, 22 staff, Denver
End-client Rafting, hiking, and ski touring operator
Scope Reservation API integration, trip templates, caching
Timeline 6 weeks, April to May 2026
Stack WordPress, custom plugin, REST API, WP-Cron, Redis object cache
Engagement Custom development, fixed fee

Executive summary

  • Problem: an iframe booking widget hid availability, slowed pages, and drove phone calls.
  • Solution: a custom WordPress plugin syncing live trip dates and seats from the reservation API.
  • Engagement: booking-start clicks rose from 1,212 to 1,842 in matched 56-day windows.
  • Speed: mobile LCP on trip pages dropped from 5.1 to 2.2 seconds in lab tests.
  • Operations: availability phone calls fell 41%, freeing roughly 9 staff hours a week.

Short answer: A custom WordPress development agency builds functionality that themes and off-the-shelf plugins cannot handle, such as API integrations, custom data models, and bespoke admin tools. Softvole built a booking availability plugin for a Denver agency’s client that lifted booking starts 52% in matched windows.

The challenge

An Iframe Was Costing Bookings

Adventure trips sell on urgency. A visitor reading about a Gore Canyon rafting day wants to know immediately whether next Saturday has seats. On the old site, that answer lived inside an embedded widget that took four to six seconds to appear on mobile and looked nothing like the rest of the page.

The agency had tried two off-the-shelf booking plugins. Neither supported the operator’s reservation system, and one conflicted with the site’s caching layer.

Data the site could not see

Because availability lived in an iframe, search engines and the site itself had no idea which trips had open dates. The agency could not build ‘trips this weekend’ pages or filters.

Rate limits on the provider API

The reservation provider allowed 600 API requests per hour. Querying it on every page view would have hit the cap within minutes on a busy Saturday.

Peak season deadline

Rafting season opens in late May. The integration had to be live and stable before the operator’s busiest six weeks.

Reading the Reservation API Before Writing Code

We asked for sandbox credentials and the reservation provider’s API documentation before quoting. Two days of testing against the sandbox answered the questions that decide whether an integration is easy or painful.

Item Details How to use it
Rate limit 600 requests per hour Scheduled sync, never live calls on page view
“Changed since” filter Available on availability endpoint Incremental syncs use only a few requests
Deep linking into checkout Supported with trip and date parameters Visitors skip two steps in the provider flow
Webhooks Only for completed bookings Not useful for availability; stay with polling
Price data Includes seasonal and group pricing Show “from” price plus per-date price

 

The rate limit arithmetic is the reason the build stayed simple: 38 trips with incremental syncs every 10 minutes uses roughly 230 requests per hour, under 40% of the allowance. Our guide to API integration in WordPress walks through the same calculation.

The approach

A Native Availability Layer for WordPress

Our principle was simple: WordPress should display availability, the reservation system should own it. That kept payments, waivers, and inventory locked inside the provider while making the browsing experience fast.

  1. Scheduled sync instead of live calls

    A server cron job (not WP-Cron alone, which depends on traffic) pulls availability for all 38 trips every 10 minutes and writes it to a custom table. Total API usage sits around 230 requests per hour, well under the cap.

    • REST API
    • Server cron
    • Custom tables
  2. Native trip date calendar

    Each trip page renders a lightweight calendar with seats remaining and price per date. Clicking a date opens the provider checkout pre-filled with trip and date, so visitors skip two steps.

    • Vanilla JS
    • Deep links
  3. New landing pages from live data

    Because availability now lives in WordPress, we built auto-updating pages such as ‘Trips with seats this weekend’ and ‘Family-friendly trips in June’ that the agency now uses in paid campaigns.

    • Dynamic landing pages
    • Query filters
  4. Fail-safe behavior

    If the API is unreachable, pages show the last successful sync with a timestamp and a ‘confirm availability’ prompt. The site never shows a blank calendar.

    • Error handling
    • Redis object cache
  5. Admin tools the operator can use

    A settings screen lets office staff hide a trip, add a sold-out banner, or force a resync without calling a developer.

    • Admin UI
    • Capabilities

How the Integration Is Built

The plugin has four parts, deliberately kept separate so each can be tested and replaced independently.

  1. Sync service: a server cron job calls the API, compares the “updated” timestamp, and writes changes to a custom table. WordPress’s own WP-Cron depends on site traffic, so it is used only as a fallback.
  2. Data layer: one row per trip per date, with seats, price, and the time of the last successful sync.
  3. Display blocks: a calendar block for trip pages and a query block for dynamic landing pages such as “trips with seats this weekend.”
  4. Admin tools: sync status, manual resync, sold-out banners, and a hide-trip switch for office staff.

Payments, waivers, and inventory stay in the provider. That boundary keeps the client’s PCI scope unchanged and means WordPress never holds customer payment data.

What Did Not Go to Plan

Time zones broke the calendar for one day

The API returned dates in UTC. Late-afternoon trips in Mountain Time appeared on the following day in the first staging build. We caught it during QA by checking every trip that started after 5 p.m., converted dates using the site’s timezone setting, and added an automated test for it.

The provider changed a field name mid-project

In week four, the provider renamed a price field in a minor API release. Because the field mapping lived in one configuration file, the fix took 20 minutes. We now subscribe to the provider’s changelog as part of the client’s care plan.

Who Did What

Role Responsibility
Agency account director Client contact, scope approval, campaign planning
Operator’s office manager Trip data checks, admin tool testing
Softvole lead developer Sync service, data layer, admin tools
Softvole front-end developer Calendar block, landing page blocks
Softvole QA Timezone, failure mode, and load testing

The office manager’s testing mattered more than expected. She spotted two trips with unusual pricing rules that sandbox data never showed.

Results

Faster Trip Pages and More Booking Starts

We compared the 56 days of peak season after launch in 2026 with the same 56 calendar days in 2025, because tour demand is strongly seasonal. A plain before and after comparison would have been misleading.

Trip pages, peak season 2025 vs peak season 2026
Metric Before After Change
Booking-start clicks (56 days) 1,212 1,842 +52%
Trip page sessions (56 days) 31,450 33,980 +8%
Median mobile LCP on trip pages, lab (seconds) 5.1s 2.2s -57%
Availability phone calls logged by office 388 229 -41%
Booking-start rate 3.9% 5.4% +1.5 pts
Booking-start clicks (56 days)
Before: 1,212
After: 1,842
Trip page sessions (56 days)
Before: 31,450
After: 33,980
Median mobile LCP on trip pages, lab (seconds)
Before: 5.1s
After: 2.2s
Availability phone calls logged by office
Before: 388
After: 229
Booking-start rate
Before: 3.9%
After: 5.4%
BeforeAfter

How we measured these results

Business figures: Booking starts are clicks that open the provider checkout, tracked as a GA4 event. Phone calls come from the office call log, tagged ‘availability’ by staff. Rate equals booking starts divided by trip page sessions.
Speed: LCP is the median of three Lighthouse mobile lab runs across five representative trip pages. Lab figures, not field data.
Attribution: 2026 snowpack produced stronger river flows than 2025, which may have lifted rafting demand. Trip page sessions rose 8%, so most of the booking gain came from the higher booking-start rate, not traffic alone.
The practical win for the agency: The agency added a recurring paid search campaign built on the new live-availability landing pages, which it now manages on a monthly retainer.

Handoff and What Happened Next

The agency received the full plugin source in Git, a README covering credentials, sync schedule, logs, and rate-limit usage, and an admin guide for the operator’s office team. Because availability now lives as real data on the site, the agency built paid search campaigns on dynamic landing pages, something the iframe made impossible. We added Event structured data to scheduled departures so search engines can read dates directly.

Integration monitoring now runs inside Softvole website care: a monthly review of sync logs catches slow failures before customers notice. For a comparable sync project, see the Dallas ATS job board plugin, and for portal-style builds read our client portal guide.

What We Would Do Differently

We would test with real production data, read-only, earlier in the project. The sandbox did not include multi-day trips with split pricing, which we only met in week four. We would also write the timezone test on day one; date handling is a known risk in every booking integration, and a test costs minutes. And we would set up changelog alerts for the provider’s API before the build starts, not after the first breaking change.

Services, Guides, and References

Softvole services used: White Label WordPress Development, Website Care and Optimization.

Related guides: API integration in WordPress, fixing slow pages, client portals.

External references:

Want to see how a project like this is priced? Review our published starting prices or book a call to talk it through.

Agency takeaway

What Agencies Should Know About Custom Integrations

Sync, do not query

When a third-party API has rate limits, sync on a schedule and cache locally. Your page speed and your API quota will both thank you.

Keep money in the right system

Display data in WordPress, process payments in the provider. It reduces PCI scope and keeps liability where it belongs.

Data unlocks campaigns

Once availability lives in WordPress, your marketing team can build pages and ads around it. That turns a dev project into ongoing agency revenue.

Frequently asked questions

What does a custom WordPress development agency do?

It builds WordPress functionality beyond themes and stock plugins, including custom plugins, API integrations, custom post types, and admin tools. Softvole does this work white label for agencies.

Yes. The reliable approach is a scheduled sync that stores availability in WordPress and renders it natively, while bookings and payments stay in the provider’s checkout.

This integration took six weeks from discovery to launch. Smaller integrations with a well-documented API often take two to four weeks.

The agency or its client does. Softvole hands over the full source in Git with documentation, and there are no licensing locks or Softvole branding in the code.

  Proof before promises  

Related Case Studies

Case Study

How a Raleigh Marketing Firm Became a WaaS Agency for Home Service Contractors

A Raleigh marketing firm wanted to stop selling one-off contractor websites at thin margins and become

Result

A Profitable Subscription Business

We compared the agency’s last six custom contractor builds in 2025 with the first five months of the subscription platform (April to August 2026).

Contractor website production, custom builds vs WaaS platform
Metric Before After Change
Build hours per site 34 9 -74%
Days from signup to launch 31 8 -74%
Sites launched per month 2 9 +350%
Care hours per site per month 1.6 0.4 -75%
Monthly cancellation rate 3.5% 1.4% -2.1 pts
Build hours per site
Before: 34
After: 9
Days from signup to launch
Before: 31
After: 8
Sites launched per month
Before: 2
After: 9
Care hours per site per month
Before: 1.6
After: 0.4
Monthly cancellation rate
Before: 3.5%
After: 1.4%
BeforeAfter

How we measured these results

Business figures: Build and care hours come from the agency’s and Softvole’s time tracking. The earlier cancellation rate is for the agency’s old hosting plans, which is the closest comparable recurring product.
Speed: Starter designs score a median mobile LCP of 1.6 seconds in lab tests, but speed was not compared before and after.
Attribution: Five months is early for churn data, and spring and summer are busy seasons for contractors. We will revisit churn after a full year.
The practical win for the agency: Subscription revenue now covers the agency’s fixed costs each month, which changes how it hires and how it prices other services.

Case Study

A Squarespace to WordPress Migration for a Brooklyn Architecture Firm’s Growing Portfolio

A Brooklyn design studio had built an architecture firm’s original Squarespace site in 2021. Four years

Result

More Inquiries and Faster Publishing

We compared the 56 days before launch with the 56 days after launch. We also confirmed that late fall is not a seasonal peak for the firm’s inquiries.

Architecture firm site, before and after migration
Metric Before After Change
Project inquiries (56 days) 46 68 +48%
Average portfolio pages viewed per session 2.3 4.1 +78%
Minutes to publish a new project 120 25 -79%
Median mobile LCP on project pages, lab (seconds) 6.2s 2.1s -66%
Projects published in the period 2 7 +250%
Project inquiries (56 days)
46
68
Average portfolio pages viewed per session
2.3
4.1
Minutes to publish a new project
120
25
Median mobile LCP on project pages, lab (seconds)
6.2s
2.1s
Projects published in the period
2
7
Before
After

How we measured these results

Business figures: Inquiries are contact form submissions, excluding vendor solicitations and job applications. Pages per session counts portfolio and project pages only.
Speed: LCP is the median of three Lighthouse mobile lab runs on four project pages. Lab figures only.
Attribution: Five backlogged projects were published right after launch, which added fresh content and likely contributed to engagement. The firm also won a regional design award during the after window.
The practical win for the agency: The studio now offers the same migration and portfolio system to two other architecture clients, delivered through Softvole.
Case Study

Why a Seattle Content Agency Chose to Hire Dedicated WordPress Developer Capacity From Softvole

A Seattle content marketing agency serving B2B SaaS companies had 140 open WordPress tickets across nine

Result

Backlog Cleared, Publishing Back on Schedule

We compared Q4 2025, before the engagement, with Q2 2026, the second full quarter with the dedicated developer.

Agency WordPress operations, Q4 2025 vs Q2 2026
Metric Before After Change
Open WordPress tickets (end of period) 140 12 -91%
Median ticket turnaround (business days) 4.8 1.0 -79%
Tickets closed per quarter 96 241 +151%
Missed content publish dates per quarter 17 2 -88%
Pages built by writers without a ticket 0 63 +63
Open WordPress tickets (end of period)
Before: 140
After: 12
Median ticket turnaround (business days)
Before: 4.8
After: 1.0
Tickets closed per quarter
Before: 96
After: 241
Missed content publish dates per quarter
Before: 17
After: 2
Pages built by writers without a ticket
Before: 0
After: 63
BeforeAfter

How we measured these results

Business figures: Ticket data comes from the agency’s Jira board. Missed publish dates were counted from the editorial calendar where a piece moved because of a technical blocker.
Speed: Page speed was not a goal of this engagement, though six of nine sites improved after theme cleanup.
Attribution: Some of the backlog reduction came from closing tickets that were no longer relevant during the audit (21 tickets). We report closed tickets separately to show real throughput.
The practical win for the agency: The agency added a technical SEO offer for its SaaS clients, delivered by the same dedicated developer, without adding headcount.

  A Repeatable Workflow  

Need reliable WordPress capacity behind your agency?

Bring a client brief, an approved Figma file, or a project your internal team cannot take on right now. We will scope the work, identify dependencies, and tell you what it would take to deliver it under your brand.