🌍 Golden Config intermediate 2-3 hours

Global Location Hierarchy

Complete geographic database with 7,400+ locations: continents, countries, regions, cities, and airports. Production-ready foundation for tour operator itinerary building and supplier mapping.

Published: January 13, 2026 Updated: January 13, 2026 manifest.json
Objects: Location

Deploy to Salesforce

Guided wizard • ~2-3 hours

Deploy Now

Overview

This golden config deploys a complete global location database with 7,419 records covering every country and major destination worldwide. It provides the geographic foundation that tour operators need for:

Use CaseHow Locations Enable It
Itinerary BuildingLink day-by-day items to specific cities and regions
Supplier ManagementMap hotels, activities, and transfers to their locations
Package SearchFilter and discover packages by destination
Flight IntegrationMatch airports via IATA codes for GDS connections
ReportingAnalyze bookings and revenue by geography

What Gets Deployed

Record TypeCountDescription
Continent8All continents plus “Unknown” for unmapped countries
Country212Every country and territory worldwide
Region67US states, Canadian provinces, and other subdivisions
City3,682Cities across all countries
TransportHub3,450Airports with IATA codes
Total7,419Complete production-ready dataset

:::caution[Large Dataset - Use Data Loader] The manifest file is ~3 MB with 7,400+ records. For deployment, use Salesforce Data Loader or the Composite API rather than single-record inserts. :::


Geographic Coverage

By Continent

ContinentCountriesRegionsCitiesAirports
Europe50+121,200+1,100+
North America25+55800+700+
Asia45+—700+600+
Africa54—400+350+
South America13—300+250+
Oceania20+—200+200+
Antarctica1———

US & Canada Detail

The United States and Canada have full state/province-level regions:

  • US States: All 50 states + DC, Puerto Rico, Virgin Islands (55 regions)
  • Canadian Provinces: All 13 provinces and territories
  • Cities: Major and minor cities linked to their state/province

Hierarchy Structure

Locations form a self-referential tree using the Location__c lookup field:

graph TD
    subgraph depth [Variable Depth Hierarchy]
        C[Continent]
        CO[Country]
        R[Region]
        CI[City]
        T[TransportHub]
        
        C -->|"Location__c"| CO
        CO -->|"Location__c"| R
        CO -.->|"Direct link"| CI
        R -->|"Location__c"| CI
        CI -->|"Location__c"| T
    end

Path Examples

Full 5-level path (US cities):

North America → United States → California → Los Angeles → LAX Airport

4-level path (countries without regions):

Europe → France → Paris → CDG Airport

3-level path (cities without airports):

Africa → Morocco → Marrakech

Key Fields

FieldAPI NameUsed For
NameNameDisplay name
ParentKaptioTravel__Location__cSelf-referential lookup to parent location
External CodeKaptioTravel__ExternalCode__cUnique identifier for upsert operations
IATA CodeKaptioTravel__IATACode__c3-letter airport code (TransportHubs only)
Location TypeKaptioTravel__LocationType__cAirport, Train Station, or Bus Station

External Code Pattern

All records have unique external codes following this convention:

LOC-{TYPE}-{NAME}[-{PARENT}]
TypeExample Code
ContinentLOC-CONTINENT-EUROPE
CountryLOC-COUNTRY-FRANCE
RegionLOC-REGION-CALIFORNIA
CityLOC-CITY-PARIS-FRANCE
AirportLOC-AIRPORT-CDG

Airports & IATA Codes

The dataset includes 3,450 transport hubs with IATA codes for flight system integration.

Major Hub Examples

RegionCodeAirportCity
AmericasLAXLos Angeles InternationalLos Angeles
JFKJohn F. Kennedy InternationalNew York
ORDO’Hare InternationalChicago
YYZToronto PearsonToronto
GRUSão Paulo–GuarulhosSão Paulo
EuropeLHRLondon HeathrowLondon
CDGParis Charles de GaulleParis
FRAFrankfurtFrankfurt
AMSAmsterdam SchipholAmsterdam
Asia-PacificNRTNarita InternationalTokyo
SINSingapore ChangiSingapore
HKGHong Kong InternationalHong Kong
SYDSydney Kingsford SmithSydney

IATA Integration Query

SELECT Name, KaptioTravel__IATACode__c, KaptioTravel__Location__r.Name as City
FROM KaptioTravel__Location__c
WHERE RecordType.DeveloperName = 'TransportHub'
AND KaptioTravel__IATACode__c IN ('LAX', 'JFK', 'LHR', 'CDG')

Deployment

Order of Operations

Records must be created in hierarchical order so parent lookups resolve:

StepRecord TypeCountParent Lookup
1Continents8None
2Countries212→ Continent
3Regions67→ Country
4Cities3,682→ Region or Country
5TransportHubs3,450→ City
  1. Export to CSV - Convert manifest JSON to CSV files per record type
  2. Use Data Loader - Import in order: Continents → Countries → Regions → Cities → Hubs
  3. Map Record Types - Select correct record type during each import
  4. External ID Upsert - Use ExternalCode__c as external ID for upsert

Prerequisites

  • âś… Kaptio package version ≥ 2.400
  • âś… All 5 Location record types active
  • âś… Create permission on Location__c
  • âś… Data Loader installed (for bulk import)

Verification Queries

Record Counts by Type

SELECT RecordType.DeveloperName, COUNT(Id) cnt
FROM KaptioTravel__Location__c
WHERE KaptioTravel__ExternalCode__c LIKE 'LOC-%'
GROUP BY RecordType.DeveloperName
ORDER BY RecordType.DeveloperName

Expected results:

DeveloperNamecnt
City3,682
Continent8
Country212
Region67
TransportHub3,450
-- Check cities have valid parents
SELECT Name, KaptioTravel__Location__r.Name as Parent, 
       KaptioTravel__Location__r.RecordType.DeveloperName as ParentType
FROM KaptioTravel__Location__c
WHERE RecordType.DeveloperName = 'City'
AND KaptioTravel__ExternalCode__c LIKE 'LOC-%'
LIMIT 20

Find Orphaned Records

-- Cities without parents (should be 0)
SELECT COUNT(Id) 
FROM KaptioTravel__Location__c
WHERE RecordType.DeveloperName = 'City'
AND KaptioTravel__Location__c = null
AND KaptioTravel__ExternalCode__c LIKE 'LOC-%'

Common Use Cases

Find All Cities in a Country

SELECT Name, KaptioTravel__Location__r.Name as Region
FROM KaptioTravel__Location__c
WHERE RecordType.DeveloperName = 'City'
AND (KaptioTravel__Location__r.Name = 'Italy' 
     OR KaptioTravel__Location__r.KaptioTravel__Location__r.Name = 'Italy')
ORDER BY Name

Find Airports Near a City

SELECT Name, KaptioTravel__IATACode__c
FROM KaptioTravel__Location__c
WHERE RecordType.DeveloperName = 'TransportHub'
AND KaptioTravel__Location__r.Name = 'Los Angeles'

Build Full Location Path

SELECT 
  Name as City,
  KaptioTravel__Location__r.Name as RegionOrCountry,
  KaptioTravel__Location__r.KaptioTravel__Location__r.Name as Country,
  KaptioTravel__Location__r.KaptioTravel__Location__r.KaptioTravel__Location__r.Name as Continent
FROM KaptioTravel__Location__c
WHERE RecordType.DeveloperName = 'City'
AND Name LIKE 'San Francisco%'

Technical Notes

Self-Referential Pattern

The Location__c object references itself via the Location__c lookup field. This enables:

  • Unlimited depth - Could extend beyond 5 levels if needed
  • Flexible structures - Some branches deeper than others
  • Single object - All location types in one object with record types

Why Record Types?

Record types provide:

  • Different page layouts per level
  • Validation rules specific to each type
  • List views filtered by hierarchy level
  • Reports grouped by location type

Handling Unmapped Countries

Countries that couldn’t be automatically mapped to a continent are linked to the “Unknown” continent. After deployment, review these and reassign:

SELECT Name FROM KaptioTravel__Location__c
WHERE RecordType.DeveloperName = 'Country'
AND KaptioTravel__Location__r.Name = 'Unknown'

ConfigWhat It Adds
Cruise Operator FoundationBrands, channels, currencies, tax rules
B2B Trade Partner SetupAgencies, consortia, commission agreements

Changelog

VersionDateChanges
2.0.02026-01-13Complete extraction: 7,419 records from production source
1.0.02026-01-13Initial release with curated 261-record subset