Package Search Troubleshooting

To be Reviewed

Why packages don't appear in search results — service_level_ids filtering, inactive packages, departure status, date range mismatches, inventory constraints, service search issues, and common error messages.

Version 18 min read | March 4, 2026 Gallery

Overview

This guide is a diagnostic reference for anyone investigating why a package does not appear in search results. The causes range from a simple Active flag being unchecked to subtle interactions between service level assignments, departure statuses, and inventory constraints. Each section covers one category of failure, with symptoms, diagnostic steps, and resolution.

The search pipeline applies filters in sequence. A package that fails any single filter is excluded from results. This means the first step in any investigation is to identify which filter is responsible — and that requires checking them in order.

This guide is intended for delivery consultants, programs managers, and technical staff who configure or debug package search. It complements the Package Search Guide, which covers how to use Package Search as an end user.

Prerequisites

Before using this guide, you should have:

  • Access to the Salesforce org where the package is configured.
  • Familiarity with the package data model — packages, components, services, departures, inventory seasons, and allotment days.
  • Access to search request logs or API configuration if the issue involves request parameters (particularly service_level_ids).

The Search Diagnostic Flowchart

Work through these checks in order. The first “No” answer is likely your root cause.

  1. Is the package Active?

    • No — the package is excluded from all search results. Go to Issue 1.
    • Yes — continue.
  2. Is the Visibility Setting correct for the search context?

    • Set to Restricted with no matching Access Rule for the channel — the package is hidden. Go to Issue 2.
    • Set to Public, or Restricted with a matching Access Rule — continue.
  3. Does the package have Service Level Assignments?

    • Yes, and the search request does not include service_level_ids — the package is excluded. Go to Issue 3.
    • Yes, and service_level_ids is included — continue.
    • No service levels assigned — continue.
  4. Does the departure type match the requested dates?

    • Fixed: Is there a departure with Status = Open and Eligibility = Bookable for the requested dates? If not — go to Issue 4.
    • Seasonal: Do the time periods cover the requested dates? If not — go to Issue 5.
    • Anyday: Do the time periods or inventory date coverage include the requested dates? If not — go to Issue 5.
  5. Do all services in the package have available allotment for the requested dates?

    • No — one or more services are sold out, on stop sale, or missing allotment days. Go to Issue 6.
    • Yes — continue.
  6. Is the search scoped to a specific channel or business unit?

    • Yes, and the package is not assigned to that channel — go to Issue 7.
    • No, or the package is assigned — the package should appear.

If you have worked through all six checks and the package still does not appear, verify that the search request itself is well-formed (valid date format, correct API endpoint, no request-level errors).

Issue 1: Package Not Active

Symptoms

The package does not appear in any search, regardless of dates, channel, or user. It also does not appear in the Package Name lookup field.

Diagnosis

Open the package record in Salesforce and check the Active checkbox.

FieldExpected Value
Activetrue (checked)

If Active is false, the package is completely excluded from search. This is the broadest filter and is applied first.

Package record detail showing the Active checkbox field

Resolution

Set Active = true on the package record. The package will become searchable immediately (subject to passing all other filters).

If the package was intentionally deactivated, confirm with the programs team before reactivating.

Issue 2: Visibility Restriction

For a complete reference on setting up and managing visibility rules, see Visibility Settings & Access Rules.

Symptoms

The package appears in search for some users or channels but not others. Or it does not appear at all, despite being Active.

Diagnosis

Check the Visibility Setting field on the package record.

Visibility SettingBehavior
PublicVisible to all search requests. No further checks needed.
RestrictedOnly visible when the search is from a channel or account that matches an Access Rule.

If the setting is Restricted, check the Access Rules:

  1. Navigate to the package’s related Access Rule records.
  2. Verify that the Access Rule has channel assignments or account assignments that match the context of the failing search.
  3. If the Access Rule exists but has no assignments, the package is effectively hidden from all searches.

Access Rule related list on a package, showing channel and account assignments

Resolution

Either:

  • Set Visibility Setting = Public if the package should be universally searchable.
  • Add the appropriate channel or account assignments to the Access Rule if the package should remain restricted but visible to specific audiences.

The Name Lookup Caveat

The Package Name lookup field in Salesforce does not apply visibility filtering — it only checks Active = true. A package can appear in the Name Lookup but be invisible in search due to visibility restrictions.

This is documented in the Package Search Guide. If users report that they can “see” a package but it doesn’t appear in search, the Name Lookup versus search distinction is the likely explanation.

Issue 3: Missing service_level_ids

This is the single most common cause of packages disappearing from search results. If a package was previously appearing in search and stops appearing after service levels are added, this is almost certainly the cause.

Symptoms

  • A package has service level assignments and does not appear in search results.
  • The same package appeared in search before service levels were configured.
  • The package passes all other checks (Active, Public, valid dates, inventory available).

Diagnosis

Step 1: Confirm the package has service levels.

Open the package record and check the Service Level Assignments related list. If there are one or more assignments, the package requires service_level_ids in every search request.

Step 2: Check the search request.

Examine the API request being sent by the front-end, booking engine, or integration layer. Look for the service_level_ids parameter.

{
  "package_id": "a]0XXXXXXXXXXXXXXX",
  "start_date": "2026-06-01",
  "end_date": "2026-06-08",
  "service_level_ids": ["a0AXXXXXXXXXXXXXXX"]
}

If service_level_ids is missing from the request, the Search API will exclude the package entirely. The API cannot resolve pricing without knowing which tier to use.

Step 3: Verify the service level IDs are correct.

If service_level_ids is present but the package still does not appear, confirm that the IDs in the request match the actual Service Level Assignment records on the package. Mismatched IDs are treated the same as missing IDs.

Service Level Assignments related list on a package record, showing the assignment IDs

Resolution

Option A: Include service_level_ids in the search request.

Update the front-end, QUEST configuration, or API integration to pass service_level_ids with every search request. The IDs should correspond to the service level records that apply to the target package. In most implementations, the front-end fetches available service levels and includes them as a filter.

Option B: Remove service levels if they are not needed.

If service levels were added in error or are no longer required, delete the Service Level Assignment records from the package. The package will then appear in search without the service_level_ids parameter.

For full details on service level configuration and the search integration, see the Service Level Configuration guide.

Issue 4: Departure Status (Fixed Packages)

Symptoms

A fixed-departure package does not appear for specific travel dates, or it appears for some dates but not others.

Diagnosis

For fixed-departure packages, each departure is a discrete bookable instance. Search only returns departures that meet both status conditions:

FieldRequired ValueWhat It Means
StatusOpenThe departure is available for sale (not Sold Out, Cancelled, or Draft)
EligibilityBookableThe departure accepts firm bookings (not Waitlist or Inactive)

Check the departure record for the dates in question:

  1. Navigate to the package’s Departures related list.
  2. Find the departure matching the requested travel dates.
  3. Verify both Status and Eligibility fields.
StatusEligibilityAppears in Search?
OpenBookableYes
OpenWaitlistDepends on configuration — some implementations exclude waitlist departures
OpenInactiveNo
Sold OutAnyNo
CancelledAnyNo
DraftAnyNo

Departure record showing Status = Open and Eligibility = Bookable fields

Resolution

  • Set the departure to Status = Open and Eligibility = Bookable if it should be available.
  • If the departure was sold out legitimately, no action is needed — the search correctly excludes it.
  • If no departure exists for the requested dates, create one. See the Fixed Departure Management guide for the full workflow.

Issue 5: Date Range Mismatch

Symptoms

The package does not appear for the requested dates but may appear for other dates. All other checks (Active, Visibility, service levels) pass.

Diagnosis

The diagnostic steps depend on the departure type.

Seasonal Packages:

Seasonal packages use time periods to define when they are bookable. Check:

  1. Does a time period exist that covers the requested start date?
  2. Does the time period’s day-of-week configuration allow the requested start day? (Some seasonal packages restrict start days to specific weekdays.)
  3. Is the time period’s status active?

Anyday Packages:

Anyday packages rely on time periods and inventory date coverage to define when they are bookable. Check:

  1. Do the time periods or inventory seasons covering the requested dates include those dates?
  2. Are there any blackout dates or exclusion rules that overlap with the request?

Fixed Packages:

Fixed packages require an exact departure match. If no departure record exists for the requested date, the package will not appear. This is covered in Issue 4.

Time period configuration showing date range and day-of-week settings on a seasonal package

Resolution

Departure TypeAction
SeasonalAdd or extend time periods to cover the requested dates. Verify day-of-week rules. See Seasonal Package Setup.
AnydayExtend the time periods or inventory seasons to cover the requested dates. Remove conflicting blackout dates. See Anyday Package Setup.
FixedCreate a new departure for the requested dates. See Fixed Departure Management.

Issue 6: Inventory Constraints

Symptoms

The package appears intermittently — available for some dates but not others, or it appeared previously and has since disappeared for specific dates. All package-level checks pass.

Diagnosis

Package availability is the intersection of all service availabilities across every component. If any single service in the package has zero available units for the requested dates, the entire package is excluded.

For each component in the package:

  1. Identify the service assigned to the component.
  2. Open the service’s Inventory Season that covers the requested dates.
  3. Check the Allotment Days for those dates.

Look for any of these conditions:

ConditionEffect
Available = 0Service is sold out for that date
Status = Stop SaleService is manually blocked for that date
Status = On RequestService may or may not be available — depends on configuration
No allotment day recordInventory season does not cover the date
No inventory seasonService has no inventory configured for the date range

A single allotment day with zero availability on one service can block the entire package for that date. Always check all services in the chain, not just the one you expect to be the bottleneck.

Allotment day list view showing dates with varying availability, including a Stop Sale flag

Resolution

ConditionAction
Sold outIncrease total allotment if supplier has additional capacity
Stop saleRemove the stop sale flag if the block is no longer needed
On requestChange to Available status if firm availability is confirmed
Missing allotment daysRegenerate allotment days for the inventory season
Missing inventory seasonCreate a new inventory season covering the required dates

For detailed inventory management procedures, see the Inventory Operations Guide.

Issue 7: Channel and Business Unit Filtering

Symptoms

The package appears when searching from one channel but not from another. Or it appears in a general search but not when the search is scoped to a specific business unit (an org-level filter).

Diagnosis

Some implementations scope search results by channel or business unit. This is separate from the Visibility Setting / Access Rule mechanism — it is an additional layer of filtering applied at the search request level. Business Unit is an org-level concept, not a field on the Package object.

Check:

  1. Package-Channel Assignments — is the package assigned to the channel from which the search is being performed?
  2. Search scope — if the search is scoped to a specific business unit, the filter is applied at the org/search level. Verify the search request’s context matches the intended scope.
  3. API request parameters — examine the search request for channel_id or business_unit_id filters.

Package record showing channel assignments in the related list

Resolution

  • Assign the package to additional channels if it should be visible across multiple sales channels.
  • Verify that the search request’s channel parameters match the package’s channel assignments. For business unit scoping, the filter is applied at the org/search level — ensure the search context matches the intended scope.
  • If channel filtering is not needed, ensure the search request does not include restrictive channel parameters.

Quick Reference: Search Checklist

Use this checklist when investigating a missing package. Work through each item in order — the first failure is your root cause.

#CheckWhere to LookPass Condition
1Package is activePackage record — Active fieldActive = true
2Visibility allows accessPackage record — Visibility Setting + Access RulesPublic, or Restricted with matching assignments
3Service level IDs includedSearch API request payloadservice_level_ids present if package has service level assignments
4Departure is open (Fixed only)Departure record — Status and EligibilityStatus = Open, Eligibility = Bookable
5Dates fall within valid rangeTime periods (Seasonal), time period or inventory coverage (Anyday), or departure dates (Fixed)Requested dates are within configured ranges
6Inventory is availableAllotment days for each service in every componentAvailable > 0, no Stop Sale, allotment days exist
7Channel/BU assignment matchesPackage-Channel assignments, search request parametersPackage assigned to the searched channel

Common Issue Combinations

When multiple factors overlap, diagnosis gets harder. These combinations appear frequently.

SymptomsLikely CauseWhere to Start
Package disappeared after adding service levelsMissing service_level_ids in search requestIssue 3
Package visible in Name Lookup but not in searchVisibility = Restricted with no matching Access RuleIssue 2
Package appears for some dates but not others (Fixed)Some departures are Sold Out or not yet OpenIssue 4
Package appears for some dates but not others (Seasonal/Anyday)Inventory constraint on one service for specific datesIssue 6
Package appears in one channel but not anotherMissing channel assignment or restrictive API parameterIssue 7
Package was visible yesterday, invisible todayAllotment sold out overnight, or departure status changedCheck Issue 4 then Issue 6
New package never appeared in searchMultiple: check Active, Visibility, service levels, dates, and inventory in orderStart at the flowchart

Service Search Troubleshooting

The issues above cover package-level search visibility. This section covers problems that arise when working with individual services — searching for services to add to a component, resolving service pricing in the Package Builder, and diagnosing “unpriced” states.

Issue 8: Service Not Appearing as a Component Option

Symptoms

When adding or editing a component in the Package Builder, a service that should be available does not appear in the service search results (the component option picker).

Diagnosis

The service search within a component filters candidates based on several criteria. Check these in order:

CheckWhat to VerifyWhere to Look
Service is activeThe service record’s Active field must be checkedService record — Active field
Record type matchesThe service’s record type must match the component’s expected record type (e.g., Accommodation, Transfer, Activity)Component record type configuration vs. Service record type
Price category existsThe service must have at least one active Price CategoryService record — Price Categories related list
Supplier match (single-supplier packages)If the package is configured for a single supplier, the service must belong to that supplierService record — Supplier lookup vs. Package supplier assignment

Service search results in the component option picker, filtered by record type and supplier

Resolution

ConditionAction
Service is inactiveSet Active = true on the service record
Record type mismatchVerify the component expects the service’s record type. If the component is configured for Accommodation, a Transfer-type service will not appear
No price categoryCreate a Price Category on the service with the correct pricing structure
Supplier mismatchAssign the service to the correct supplier, or reconfigure the package’s supplier constraint

Issue 9: Service Pricing Not Resolving in Builder

Symptoms

A service is selected as a component option, but the Package Builder shows no price or a zero price for the service. The package may still appear in search, but the pricing breakdown is incomplete or incorrect.

Diagnosis

Pricing resolution requires multiple conditions to align. Check:

CheckWhat to VerifyWhere to Look
Price season coverageA price season must exist that covers the travel datesService — Price Seasons related list
Cost entered on price categoryThe price category must have a cost value (buy price) enteredPrice Category record — cost fields
Currency matchThe price category currency must match the itinerary’s sell currency or have a valid conversion ratePrice Category currency vs. Itinerary/Channel currency
Allocation type alignmentThe service’s allocation type (per person, per unit, per night, etc.) must match the expected pricing model for the componentService record — Allocation Type field

Price category detail showing cost fields, currency, and price season coverage

Resolution

ConditionAction
No price season for datesCreate or extend a price season to cover the requested travel dates
No cost on price categoryEnter the buy price on the price category record
Currency mismatchAdd the correct currency to the price category, or configure a conversion rate on the channel’s brand
Allocation type mismatchVerify the allocation type on the service matches how the component expects to price it (per person vs. per unit vs. per night)

Issue 10: Service Showing as Unpriced

Symptoms

A component option displays an “Unpriced” label in the Package Builder or pricing summary. The service is selected and appears in the component, but is excluded from the price total.

Diagnosis

The “Unpriced” state has three common causes:

CheckWhat to VerifyWhere to Look
Unpriced flag on component optionThe component option record may have the Unpriced checkbox checked, which explicitly excludes it from pricingComponent Option record — Unpriced field
No cost on price categoryEven if a price category exists, if no cost value has been entered, the service resolves as unpricedPrice Category record — cost fields
Price season gapA price season exists but does not cover all the travel dates. Partial coverage can result in the service being treated as unpriced for the uncovered portionService — Price Seasons date ranges vs. itinerary dates

Component option record showing the Unpriced checkbox and its effect on the pricing summary

Resolution

ConditionAction
Unpriced flag checked intentionallyNo action needed — the service is correctly excluded from pricing (e.g., complimentary services)
Unpriced flag checked in errorUncheck the Unpriced field on the component option record
No cost on price categoryEnter the buy price on the relevant price category
Price season gapExtend the existing price season or create an additional one to cover the full date range

Issue 11: Service Missing from Pre/Post Stay Tabs Despite Valid Pricing

Symptoms

A service works correctly in standalone bookings — it can be added to an itinerary and priced without issues — but it does not appear in the Pre Stay or Post Stay tabs in package search results. All other configuration looks correct: allocation behaviour is set, inventory is available, and pricing exists.

Diagnosis

The package search results builder (PackageSearchResultsBuilder) sorts price categories by their Sort Order field when constructing the pre/post stay tab options. If the Sort Order field is null on any price category, that category is filtered out during the sorting and grouping logic. Because standalone booking uses a different code path that does not depend on Sort Order, the service works fine outside of package search.

This issue is most common when price categories were created via data import rather than through the Salesforce UI. The UI enforces Sort Order as a mandatory field, but bulk imports and data loads can skip it — and the import will succeed without error.

CheckWhat to VerifyWhere to Look
Sort Order populatedEvery price category on the service has a non-null Sort Order valueService record — Price Categories related list — Sort Order field
Service works in standaloneThe service can be added to an itinerary and priced outside of package searchCreate a test itinerary and add the service manually
Other pre/post config is correctAllocation Behaviour is PreNight/PostNight, Selection Type is Optional, inventory covers extension datesComponent record and service inventory seasons

Resolution

ConditionAction
Sort Order is blank on price categoriesPopulate the Sort Order field on all price categories for the affected service. Any positive integer value will work — the field controls display ordering in the results
Multiple services affected (bulk import)Run a bulk update across all price categories with null Sort Order. Query: SELECT Id, Name, KaptioTravel__SortOrder__c FROM KaptioTravel__PriceCategory__c WHERE KaptioTravel__SortOrder__c = null

After populating Sort Order, the service will appear in Pre/Post Stay tabs on the next search. No package reactivation or cache clear is needed.

For the full pre/post stay configuration walkthrough, see the Pre/Post Stay Configuration guide.


Error Message Troubleshooting

When Salesforce displays an error toast or modal in the Package Builder, Booking Wizard, or related UIs, the message originates from an AuraHandledException in the Apex controller layer. This table maps common error messages to their root cause and resolution.

Error MessageWhere It AppearsRoot CauseSolution
”Itinerary not found”Booking Overview, PaymentsThe itinerary ID passed to the controller does not match any record. Usually caused by a stale browser tab or a deleted/merged itinerary.Refresh the page. If the itinerary was merged or cancelled, navigate to the correct record.
”No conversion rate found for the selected currency”Payments — currency conversionThe itinerary’s channel brand does not have a conversion rate configured for the requested currency pair.Add the missing currency conversion rate to the Brand record’s currency configuration. Verify both the source and target currencies are present.
”Itinerary has open amendment”Booking Overview, Itinerary actions, PNR ImportAn amendment is already in progress on this booking. The system prevents concurrent modifications.Complete or discard the existing amendment before making further changes. Check the itinerary’s Open Amendment field.
”Itinerary is invoiced or itinerary year is closed”Booking Overview, Itinerary actionsThe booking has been invoiced or its accounting year has been closed, preventing further edits.If the invoice is correct, no action is needed. If changes are required, the finance team must re-open the accounting period or reverse the invoice first.
”Cannot make changes when amendment operation in progress”Booking Overview, Itinerary actionsA recalculation or amendment merge is currently processing. The itinerary is locked until completion.Wait for the amendment operation to complete. Check the Recalculation Status field on the itinerary. If stuck, contact support to investigate the background job.
”Cannot make changes to the snapshot booking”Booking Overview, Itinerary actions, PNR ImportThe record is a snapshot (point-in-time copy) of the original booking, which is read-only by design.Navigate to the original booking record to make changes. Snapshots are reference copies and cannot be edited.
”Cannot make changes to the merged/rejected booking”Booking Overview, Itinerary actionsThe itinerary has been merged into another booking or was rejected during amendment, making it read-only.Navigate to the surviving booking (the merge target) to make changes.
”Service record type assignment is missing”Price Category setupThe service’s record type does not have a Price Category Type configuration. The system cannot determine the default pricing structure.Create a Price Category Type record that maps to the service’s record type. This is typically configured during initial org setup.
”Price Lines Per Passenger is not enabled for this Itinerary”AdjustmentsThe Adjustments UI requires the “Price Lines Per Passenger” feature to be enabled on the itinerary, but it is not present in the Enabled Features field.Enable “Price Lines Per Passenger” in the itinerary’s Enabled Features configuration. This is controlled by the package or channel settings.
”There was an error fetching the allotment days. Please refresh the page and try again.”Inventory TableThe inventory query returned no matching contract records for the selected service and date range. This can happen if inventory seasons were deleted or the service-contract link is broken.Refresh the page. If the error persists, verify that the service has valid inventory seasons with contract assignments for the date range in question.
”Bookable From cannot be greater than Bookable To”Price Category SettingsThe Bookable From date on a price category or add-on is set after the Bookable To date, creating an invalid date range.Correct the date range so that Bookable From is earlier than or equal to Bookable To.
”Failed to initialize modification”Booking WizardThe system could not start the itinerary modification operation. The underlying cause varies — check the full error message for details.Review the full error message appended after the prefix. Common causes include locked records, missing permissions, or validation rule failures.
ObjectRole in Search
PackageTop-level searchable entity. Holds Active flag, Visibility Setting, departure type.
Access RuleControls visibility for Restricted packages. Links to channels and accounts.
Service LevelDefines a pricing tier.
Service Level AssignmentLinks a service level to a package. Triggers the service_level_ids requirement.
Departure(Fixed packages) Individual bookable instance with Status and Eligibility.
Time Period(Seasonal packages) Date range and day-of-week rules for valid search dates.
ComponentLinks a package to one or more services. Each component must be available.
ServiceSupplier service with inventory. Assigned to a component.
Inventory SeasonDate-ranged allocation for a service. Contains allotment days.
Allotment DaySingle-date record with availability count and status flags.

See Also

Back to Gallery