Home Communities For Sale Our Work Our Story Sell Land FAQ Contact
Available Now

Properties
For Sale.

Every available O'Grady home in one place — from gated waterfront communities to standalone new construction. Updated as properties come to market.

Available Now
7
Coming Soon
1
Starting From
$439,000
8 Properties
15985 Waters Edge Drive — Peninsula Shores
Available Now
$2,950,000
Peninsula Shores · Old Mission Peninsula
15985 Waters Edge Drive
Traverse City, MI 49686

Ranch with walkout lower level — set on .60 acres with shared East Grand Traverse Bay frontage. Gated community on Old Mission Peninsula.

4
Beds
3.5
Baths
4,077
Sq Ft
.60
Acres
15652 Waters Edge Drive — Peninsula Shores
Coming to Market
$3,295,000
Peninsula Shores · Old Mission Peninsula
15652 Waters Edge Drive
Traverse City, MI 49686
4
Beds
4.5
Baths
4,754
Sq Ft
.66
Acres
The Farmstead — Victoria Farms
Available Now
From $995,000
Victoria Farms · East Bay Township
The Farmstead
Three Mile Road, Traverse City MI

Ranch with walkout lower level — ~3,337 sq ft, 4 or 5 bed, 3.5 bath, covered back patio. Model home available to tour on site.

4–5
Beds
3.5
Baths
~3,337
Sq Ft
The Ridgeline — Victoria Farms
Available Now
From $995,000
Victoria Farms · East Bay Township
The Ridgeline
Three Mile Road, Traverse City MI

Distinct exterior character with fully finished walkout lower level — ~3,254 sq ft, 4 or 5 bed, 3.5 bath, covered back patio.

4–5
Beds
3.5
Baths
~3,254
Sq Ft
Hamilton Place Unit A — Traverse City
End Unit
$449,000
Hamilton Place · City of Traverse City
Unit A — 307-A Hamilton St
Traverse City, MI 49686
2
Beds
2
Baths
STR
Ready
Hamilton Place Unit B — Traverse City
Middle Unit
$439,000
Hamilton Place · City of Traverse City
Unit B — 307-B Hamilton St
Traverse City, MI 49686
2
Beds
2
Baths
STR
Ready
Hamilton Place Unit C — Traverse City
End Unit
$449,000
Hamilton Place · City of Traverse City
Unit C — 307-C Hamilton St
Traverse City, MI 49686
2
Beds
2
Baths
STR
Ready
Stay in the Loop

Be the First to Know
When a Home Hits the Market.

New O'Grady homes move quickly. Leave your email and we'll reach out the moment a new property becomes available — before it's publicly listed.

No spam. Just new listings, directly from us.

Or Reach Out Directly
Sales Partner
LiveTraverseCity.com
// ── Popup ────────────────────────────────────── function openPopup(address, price) { document.getElementById('popup-address').textContent = address; document.getElementById('popup-price').textContent = price; document.getElementById('popup-property-field').value = address; document.getElementById('popup-price-field').value = price; document.getElementById('popup-overlay').classList.add('open'); document.body.style.overflow = 'hidden'; } function closePopup() { document.getElementById('popup-overlay').classList.remove('open'); document.body.style.overflow = ''; } // Close on background click document.getElementById('popup-overlay').addEventListener('click', function(e) { if (e.target === this) closePopup(); }); // Close on Escape key document.addEventListener('keydown', e => { if (e.key === 'Escape') closePopup(); }); // Handle form submit — Netlify handles the actual sending document.getElementById('popup-form').addEventListener('submit', function(e) { e.preventDefault(); const form = this; fetch('/', { method: 'POST', headers: { 'Content-Type': 'application/x-www-form-urlencoded' }, body: new URLSearchParams(new FormData(form)).toString() }) .then(() => { form.style.display = 'none'; document.getElementById('popup-success').classList.add('show'); }) .catch(() => { // Fallback — show success anyway (Netlify may still catch it) form.style.display = 'none'; document.getElementById('popup-success').classList.add('show'); }); }); const toggle = document.getElementById('mob-toggle'); const menu = document.getElementById('mob-menu'); const spans = toggle.querySelectorAll('span'); toggle.addEventListener('click', () => { const open = menu.classList.toggle('open'); document.body.style.overflow = open ? 'hidden' : ''; spans[0].style.transform = open ? 'rotate(45deg) translateY(7.5px)' : 'none'; spans[1].style.opacity = open ? '0' : '1'; spans[2].style.transform = open ? 'rotate(-45deg) translateY(-7.5px)' : 'none'; spans.forEach(s => s.style.background = open ? '#1a1a1a' : ''); }); menu.querySelectorAll('a').forEach(a => a.addEventListener('click', () => { menu.classList.remove('open'); document.body.style.overflow = ''; spans[0].style.transform = spans[2].style.transform = 'none'; spans[1].style.opacity = '1'; spans.forEach(s => s.style.background = ''); })); // Filter tabs const filterTabs = document.querySelectorAll('.filter-tab'); const cards = document.querySelectorAll('.prop-card'); const filterCount = document.getElementById('filter-count'); const emptyState = document.getElementById('empty-state'); filterTabs.forEach(tab => { tab.addEventListener('click', () => { filterTabs.forEach(t => t.classList.remove('active')); tab.classList.add('active'); const filter = tab.dataset.filter; let visible = 0; cards.forEach(card => { const status = card.dataset.status; const show = filter === 'all' || status === filter; card.style.display = show ? '' : 'none'; if (show) visible++; }); filterCount.textContent = visible + (visible === 1 ? ' Property' : ' Properties'); emptyState.style.display = visible === 0 ? 'block' : 'none'; }); }); // Set correct count on initial page load const initialVisible = Array.from(cards).filter(c => c.dataset.status !== 'sold').length; filterCount.textContent = initialVisible + (initialVisible === 1 ? ' Property' : ' Properties'); // Email notify (placeholder — wire to your form backend) function handleNotify() { const email = document.getElementById('notify-email').value; if (!email || !email.includes('@')) return; document.querySelector('.notify-form').innerHTML = '
You\'re on the list. We\'ll be in touch.
'; } // Scroll animations const obs = new IntersectionObserver(entries => { entries.forEach(e => { if (e.isIntersecting) { e.target.classList.add('in'); obs.unobserve(e.target); } }); }, { threshold: 0.08 }); document.querySelectorAll('.fade-up').forEach(el => obs.observe(el)); // ── POPUP ──────────────────────────────────────── function openPopup(address, price) { document.getElementById('popup-address').textContent = address; document.getElementById('popup-price').textContent = price; document.getElementById('popup-property-field').value = address + ' — ' + price; document.getElementById('popup-form').style.display = 'block'; document.getElementById('popup-success').classList.remove('show'); document.getElementById('popup-overlay').classList.add('open'); document.body.style.overflow = 'hidden'; } function closePopup() { document.getElementById('popup-overlay').classList.remove('open'); document.body.style.overflow = ''; } document.getElementById('popup-overlay').addEventListener('click', function(e) { if (e.target === this) closePopup(); }); document.addEventListener('keydown', e => { if (e.key === 'Escape') closePopup(); }); document.getElementById('popup-form').addEventListener('submit', function(e) { e.preventDefault(); const form = this; const data = new FormData(form); fetch('/', { method: 'POST', headers: {'Content-Type': 'application/x-www-form-urlencoded'}, body: new URLSearchParams(data).toString() }) .then(() => { form.style.display = 'none'; document.getElementById('popup-success').classList.add('show'); }) .catch(() => { // Fallback — show success anyway for demo form.style.display = 'none'; document.getElementById('popup-success').classList.add('show'); }); });