Subscribe for notification

Airbnbs

Virtual RealTour • Nigeria Hotels & Airbnb Directory

šŸØ Virtual RealTour

Nigeria's Trusted Stay Directory

šŸ‡³šŸ‡¬ Discover Stays Across Nigeria

Walkthrough Hotel, Airbnbs, across the Nation. BOOK SAFE!!! BOOK SMART!!!

šŸŒ All Nigeria šŸ›ļø Abuja šŸŒ† Lagos šŸÆ Benin šŸ° Kaduna šŸ•Œ Kano 🌳 Ibadan āš“ Port Harcourt
šŸ  All Types šŸØ Hotels Only šŸ” Airbnb / Apartments

Virtual Walkthroughs Available

Explore properties virtually before booking

5% Discount on All Bookings

Automatic savings when you book through Virtual RealTour

Verified Hosts Only

All properties are verified with virtual walkthrough certification

Key Places & Landmarks

šŸØ All Properties Across Nigeria
91+ properties

Ā© 2026 Virtual RealTour • Nigeria's most comprehensive hotel & Airbnb directory • Contact properties directly for current rates and images

Abuja • Lagos • Benin • Kaduna • Kano • Ibadan • Port Harcourt

`).join(''); } function getFilteredProperties() { let filtered = [...allProperties]; if (currentState !== "all") filtered = filtered.filter(p => p.state === currentState); if (currentType !== "all") filtered = filtered.filter(p => p.type === currentType); if (currentPrice !== "all") filtered = filtered.filter(p => p.priceLevel === currentPrice); if (searchQuery) { const q = searchQuery.toLowerCase(); filtered = filtered.filter(p => p.name.toLowerCase().includes(q) || p.location.toLowerCase().includes(q) || p.area.toLowerCase().includes(q) || p.state.toLowerCase().includes(q)); } return filtered; } function renderListings() { const grid = document.getElementById("listingsGrid"); const filtered = getFilteredProperties(); const stateLabel = currentState === "all" ? "All Nigeria" : currentState.toUpperCase(); const typeLabel = currentType === "all" ? "All Types" : currentType === "hotel" ? "Hotels" : "Airbnbs"; document.getElementById("listTitle").innerHTML = `šŸØ ${stateLabel} • ${typeLabel}`; document.getElementById("resultCount").textContent = `${filtered.length} propert${filtered.length === 1 ? 'y' : 'ies'}`; if (!filtered.length) { grid.innerHTML = `

No properties found

Try adjusting your filters or search

`; return; } grid.innerHTML = filtered.map(p => { const badgeClass = p.type === 'hotel' ? 'badge-hotel' : 'badge-airbnb'; const badgeText = p.type === 'hotel' ? 'šŸØ HOTEL' : 'šŸ” AIRBNB'; const safeName = escapeHTML(p.name); const safeLocation = escapeHTML(p.location); const safeState = escapeHTML(p.state.toUpperCase()); const safePrice = escapeHTML(p.price); return `
${badgeText}
${p.rating ? `
⭐ ${p.rating}
` : ''}

${safeName}

${safeLocation}, ${safeState} • ${p.area}

${p.desc}

${p.features.slice(0,4).map(f => `${f}`).join('')}

Near: ${p.nearby}

${safePrice} /night
`; }).join(''); // Attach event listeners AFTER rendering document.querySelectorAll('.btn-book').forEach(btn => { btn.addEventListener('click', function() { const name = this.getAttribute('data-name'); const location = this.getAttribute('data-location'); const state = this.getAttribute('data-state'); const price = this.getAttribute('data-price'); alert(`šŸ“ž Contact: ${name}\nšŸ“ ${location}, ${state}\nšŸ’° ${price}`); }); }); document.querySelectorAll('.btn-walk').forEach(btn => { btn.addEventListener('click', function() { const name = this.getAttribute('data-name'); alert(`šŸ” Walkthrough coming soon for ${name}`); }); }); } function updateAll() { renderNearby(currentState); renderListings(); } function updateStateCounts() { const counts = {}; allProperties.forEach(p => { counts[p.state] = (counts[p.state] || 0) + 1; }); document.querySelectorAll("#statePills .state-pill").forEach(pill => { const state = pill.dataset.state; const countSpan = pill.querySelector(".count"); if (countSpan) { if (state === "all") { countSpan.textContent = `${allProperties.length}+`; } else { countSpan.textContent = counts[state] || 0; } } }); } document.addEventListener("DOMContentLoaded", () => { updateStateCounts(); document.querySelectorAll("#statePills .state-pill").forEach(pill => { pill.addEventListener("click", function() { document.querySelectorAll("#statePills .state-pill").forEach(p => p.classList.remove("active")); this.classList.add("active"); currentState = this.dataset.state; updateAll(); }); }); document.querySelectorAll("#catPills .cat-pill").forEach(pill => { pill.addEventListener("click", function() { document.querySelectorAll("#catPills .cat-pill").forEach(p => p.classList.remove("active")); this.classList.add("active"); currentType = this.dataset.cat; updateAll(); }); }); document.getElementById("priceFilter").addEventListener("change", function(e) { currentPrice = e.target.value; updateAll(); }); document.getElementById("searchBtn").addEventListener("click", () => { searchQuery = document.getElementById("searchInput").value.trim(); updateAll(); }); document.getElementById("searchInput").addEventListener("keypress", (e) => { if (e.key === "Enter") { searchQuery = e.target.value.trim(); updateAll(); } }); updateAll(); }); })();