{"id":19995,"date":"2020-05-14T17:04:27","date_gmt":"2020-05-15T00:04:27","guid":{"rendered":"https:\/\/liv.rent\/blog\/?p=19995"},"modified":"2026-08-28T12:47:18","modified_gmt":"2026-08-28T19:47:18","slug":"average-rent-near-transit-in-greater-vancouver","status":"publish","type":"post","link":"https:\/\/liv.rent\/blog\/neighbourhoods\/average-rent-near-transit-in-greater-vancouver\/","title":{"rendered":"Average Rent Near Transit (SkyTrain) in Greater Vancouver"},"content":{"rendered":"\n<ul>\n<li>Unfurnished, one-bedroom average rent near transit is highest at <strong>Waterfront, Burrard &amp; Vancouver City Centre<\/strong> stations<\/li>\n\n\n\n<li>Unfurnished, two-bedroom average rent near transit is highest at <strong>Waterfront, Burrard, Granville, Vancouver City Centre, Olympic Village &amp; Broadway-City Hall<\/strong> stations<\/li>\n\n\n\n<li>The difference between the highest and lowest average rent near transit for unfurnished, 1 bedroom listings is <strong>$819<\/strong> (Expo).<\/li>\n\n\n\n<li>The difference between the highest and lowest average rent near transit for unfurnished, 2 bedroom listings is <strong>$1,342\/month<\/strong>.<\/li>\n<\/ul>\n\n\n\n<p>With Downtown rents consistently and considerably higher than in areas outside the city centre, many are taking a closer look at properties further away but with easy access to transit.<\/p>\n\n\n\n<p>Our assessment compared one and two-bedroom unfurnished rentals along Greater Vancouver&#8217;s transit lines revealing that some of the greatest value for renters is found at the end of long train rides. <\/p>\n\n\n\n<br>\n<h2 style=\"text-align: center;\" id=\"toc\"><strong>Table of Contents<\/strong><\/h2>\n\n\n\n<div style=\"border: 1px solid black; text-align: center; margin: 20px 0%; padding: 20px\">\n\n<p style=\"text-align: center;\"><strong><a href=\"#rental-trends\">Rental Trends along transit lines<\/a><\/strong><\/p>\n\n<p style=\"text-align: center;\"><strong><a href=\"#vancouver-rentals\">Vancouver rentals near transit stops<\/a><\/strong><\/p>\n\n<p style=\"text-align: center;\"><strong><a href=\"#richmond-rentals\">Richmond rentals near transit stops<\/a><\/strong><\/p>\n\n<p style=\"text-align: center;\"><strong><a href=\"#burnaby-rentals\">Burnaby Rentals near transit stops<\/a><\/strong><\/p>\n\n<p style=\"text-align: center;\"><strong><a href=\"#newwest-rentals\">New Westminster near transit stops<\/a><\/strong><\/p>\n\n<p style=\"text-align: center;\"><strong><a href=\"#coquitlam-rentals\">Coquitlam Rentals near transit stops<\/a><\/strong><\/p>\n\n<p style=\"text-align: center;\"><strong><a href=\"#surrey-rentals\">Surrey Rentals near transit stops<\/a><\/strong><\/p>\n\n<\/div>\n\n\n\n<br> \n\n<style> \n.background-renter-cta-perfect-home { \n  text-align: center; \n  color: #303030; \n  font-family: 'Inter', sans-serif; \n  font-size: 24px; \n} \n\n.cta-block-renter-cta-perfect-home p{ \n  font-family: 'Inter', sans-serif; \n  color: #303030;  \n  font-weight: 400; \n  text-align: center;  \n  font-size: 16px; \n} \n\n.cta-block-renter-cta-perfect-home { \n  background-color: #F5F5F5; \n  border-radius: 16px; \n  padding: 30px; \n  text-align: center; \n  margin: 20px 0px; \n} \n\n.button-renter-cta-perfect-home { \n  margin-top: 20px; \n  padding: 12px 16px; \n  background: #1D415E; \n  border: 0px solid white; \n  box-shadow: 0px 6px 8px -2px rgba(29, 66, 94, 0.4), 0px 12px 16px rgba(32, 121, 193, 0.15); \n  border-radius: 6px; \n  cursor: pointer; \n  font-family: 'Inter'; \n  font-style: normal; \n  font-weight: 600; \n  font-size: 14px; \n  line-height: 16px; \n  text-align: center; \n  color: #FFFFFF; \n} \n<\/style> \n<div class=\"background-renter-cta-perfect-home cta-block-renter-cta-perfect-home\"> \n<h3><strong>Rent your perfect home with liv.rent<\/strong><\/h3> \n\n<p>Search houses, rooms, condos and apartments for rent. Chat instantly with verified landlords. Apply to multiple listings. Save your chat history &#038; signed documents all on one platform.<\/p> \n\n<a href=\"https:\/\/liv.rent\/renters\" target=\"_blank\" rel=\"noopener noreferrer\"><button id=\"button-renter-cta-perfect-home\" class=\"button-renter-cta-perfect-home\">Sign Up For Free<\/button><\/a> \n<\/div>\n\n\n\n<br><h2 id=\"rental-trends\">Rental Trends along transit lines<\/h2>\n\n\n\n<p>As seen by the graphs below, rental rates near city centres and colleges and universities like Downtown Vancouver, Metrotown, Lougheed Town Centre, and Langara are notably higher when compared to other stations.<\/p>\n\n\n\n<p>On the Expo transit line which starts at Vancouver&#8217;s waterfront and ends at Surrey King George, the rents drop significantly as you head east out of the downtown core. There is a slight increase in rental rates at Lougheed Town Centre in Burnaby as it boasts many amenities and easy access to the Simon Fraser University campus.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" width=\"1024\" height=\"837\" src=\"https:\/\/liv.rent\/blog\/wp-content\/uploads\/2026\/01\/2025.12.12_Van-Avg-Rental-Prices-Near-Transit-1-2-Bed_Expo-Transit-Line-1024x837.png\" alt=\"\" class=\"wp-image-66302\" srcset=\"https:\/\/liv.rent\/blog\/wp-content\/uploads\/2026\/01\/2025.12.12_Van-Avg-Rental-Prices-Near-Transit-1-2-Bed_Expo-Transit-Line-980x801.png 980w, https:\/\/liv.rent\/blog\/wp-content\/uploads\/2026\/01\/2025.12.12_Van-Avg-Rental-Prices-Near-Transit-1-2-Bed_Expo-Transit-Line-480x392.png 480w\" sizes=\"(min-width: 0px) and (max-width: 480px) 480px, (min-width: 481px) and (max-width: 980px) 980px, (min-width: 981px) 1024px, 100vw\" \/><figcaption class=\"wp-element-caption\">One and Two Bedroom Units near Expo Line<\/figcaption><\/figure>\n\n\n\n<p>Starting in East Vancouver, the Millennium Line runs through Burnaby all the way to Coquitlam. Rental rates along this line are fairly steady with a high near Brentwood Town Centre. <\/p>\n\n\n\n<p>The Brentwood neighbourhood has seen tremendous growth in recent years and features a master-planned, amenity-rich community that offers a variety of housing options for renters. It&#8217;s also only 15 minutes by train to Downtown which makes it excellent for commuters.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" width=\"1024\" height=\"837\" src=\"https:\/\/liv.rent\/blog\/wp-content\/uploads\/2026\/01\/2025.12.12_Van-Avg-Rental-Prices-Near-Transit-1-2-Bed_Millennium-line-1024x837.png\" alt=\"\" class=\"wp-image-66303\" srcset=\"https:\/\/liv.rent\/blog\/wp-content\/uploads\/2026\/01\/2025.12.12_Van-Avg-Rental-Prices-Near-Transit-1-2-Bed_Millennium-line-980x801.png 980w, https:\/\/liv.rent\/blog\/wp-content\/uploads\/2026\/01\/2025.12.12_Van-Avg-Rental-Prices-Near-Transit-1-2-Bed_Millennium-line-480x392.png 480w\" sizes=\"(min-width: 0px) and (max-width: 480px) 480px, (min-width: 481px) and (max-width: 980px) 980px, (min-width: 981px) 1024px, 100vw\" \/><figcaption class=\"wp-element-caption\">One and Two Bedroom Units near Millennium Line<\/figcaption><\/figure>\n\n\n\n<p>The Canada Line, built for the 2010 Vancouver Winter Olympic Games, runs from Downtown Vancouver&#8217;s Waterfront south to Richmond and YVR Airport. Rental rates are highest near the Downtown stops (Waterfront, Vancouver City Centre, Yaletown) and gradually decrease till Marine Drive, then slightly climb and remain consistent into Richmond.<\/p>\n\n\n\n<div style=\"border: 2px solid lightcoral; text-align: center; margin: 30px 0; padding: 20px; color: #BD8D7C;\">\n<p style=\"font-size: 16px;margin: 0;\"><b>&gt;&gt; Recommended Reading:<\/b> <a href=\"https:\/\/liv.rent\/blog\/2019\/09\/best-langara-student-tips-2\/\" target=\"_blank\" rel=\"noopener noreferrer\">Best Off-Campus Housing For Langara College Students<\/a><\/p>\n<\/div>\n\n\n\n<div style=\"border: 2px solid lightcoral; text-align: center; margin: 30px 0; padding: 20px; color: #BD8D7C;\">\n<p style=\"font-size: 16px;margin: 0;\"><b>&gt;&gt; Recommended Reading:<\/b> <a href=\"https:\/\/liv.rent\/blog\/2019\/04\/neighbourhood-guide-marine-and-cambie-hub\/\" target=\"_blank\" rel=\"noopener noreferrer\">Neighbourhood Guide: Marine &amp; Cambie Hub<\/a><\/p>\n<\/div>\n\n\n\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" width=\"1024\" height=\"837\" src=\"https:\/\/liv.rent\/blog\/wp-content\/uploads\/2026\/01\/2025.12.12_Van-Avg-Rental-Prices-Near-Transit-1-2-Bed_Canada-Transit-Line-1024x837.png\" alt=\"\" class=\"wp-image-66304\" srcset=\"https:\/\/liv.rent\/blog\/wp-content\/uploads\/2026\/01\/2025.12.12_Van-Avg-Rental-Prices-Near-Transit-1-2-Bed_Canada-Transit-Line-980x801.png 980w, https:\/\/liv.rent\/blog\/wp-content\/uploads\/2026\/01\/2025.12.12_Van-Avg-Rental-Prices-Near-Transit-1-2-Bed_Canada-Transit-Line-480x392.png 480w\" sizes=\"(min-width: 0px) and (max-width: 480px) 480px, (min-width: 481px) and (max-width: 980px) 980px, (min-width: 981px) 1024px, 100vw\" \/><figcaption class=\"wp-element-caption\">One and Two Bedroom Units near Canada Line<\/figcaption><\/figure>\n\n\n\n<style type=\"text\/css\" style=\"display: none;\">\n  .featured-listings-wrapper {\n    margin: 40px auto;\n    padding: 30px 0;\n    border-top: 1px solid #e1e1e1;\n    border-bottom: 1px solid #e1e1e1;\n    max-width: 1094px;\n  }\n\n  .featured-listings-title {\n    font-family: \"Open Sans\", Arial, sans-serif;\n    font-size: 24px;\n    font-weight: 600;\n    letter-spacing: -0.58px;\n    line-height: 22px;\n    margin: 0 0 25px;\n  }\n\n  #featured-listings-root {\n    display: grid;\n    grid-template-columns: repeat(auto-fill, 245px);\n    grid-template-rows: repeat(1, 1fr);\n    grid-auto-rows: 0;\n    overflow-y: hidden;\n    grid-gap: 0 15px;\n    justify-content: center;\n    align-content: start;\n  }\n\n  .block-listing-card-wrapper {\n    width: 245px;\n    height: 175px;\n    cursor: pointer;\n    position: relative;\n    text-decoration: none;\n    display: flex;\n    align-items: flex-end;\n    overflow: hidden;\n    justify-self: center;\n    text-decoration: none !important;\n  }\n\n  .block-listing-card-body {\n    display: flex;\n    padding: 10px;\n    width: 100%;\n    background: linear-gradient(\n      180deg,\n      rgba(0, 0, 0, 0) 0%,\n      rgba(4, 4, 4, 0.8) 100%\n    );\n  }\n\n  .block-listing-card-detail-column {\n    display: flex;\n    flex: 1.2;\n    flex-direction: column;\n    white-space: nowrap;\n    overflow: hidden;\n    text-overflow: ellipsis;\n  }\n\n  .block-listing-card-pre-price-text {\n    font-family: \"Open Sans\", Arial, sans-serif;\n    text-shadow: rgba(0, 0, 0, 0.8) 0px 0px 3px;\n    font-size: 11px;\n    color: #fff !important;\n    margin: 0;\n  }\n\n  .block-listing-card-price-text {\n    font-family: \"Open Sans\", Arial, sans-serif;\n    text-shadow: rgba(0, 0, 0, 0.8) 0px 0px 3px;\n    font-size: 12px;\n    color: #fff !important;\n    margin: 0;\n    line-height: 18px;\n  }\n\n  .block-listing-card-price-text strong {\n    font-size: 18px;\n    font-weight: 600;\n  }\n\n  .block-listing-card-price-text-mobile {\n    display: none;\n  }\n\n  .block-listing-card-address-text {\n    font-family: \"Open Sans\", Arial, sans-serif;\n    text-shadow: rgba(0, 0, 0, 0.8) 0px 0px 3px;\n    font-size: 12px;\n    color: #fff !important;\n    line-height: 15px;\n    margin: 0;\n    text-overflow: ellipsis;\n    overflow: hidden;\n    white-space: nowrap;\n  }\n\n  .block-listing-card-detail-row {\n    display: none;\n  }\n\n  .block-listing-card-detail-text {\n    font-family: \"Open Sans\", Arial, sans-serif;\n    text-shadow: rgba(0, 0, 0, 0.8) 0px 0px 3px;\n    font-size: 16px;\n    color: #fff !important;\n    line-height: 18px;\n    margin: 0;\n  }\n\n  .block-listing-card-detail-text:last-child {\n    margin-left: 10px;\n    padding-left: 10px;\n    border-left: 1px solid #fff;\n  }\n\n  div.ribbon-wrapper {\n    width: 100px;\n    height: 24px;\n    display: flex;\n    align-items: center;\n    position: absolute;\n    z-index: 10;\n    top: 10px;\n    left: -15px;\n    padding-left: 22px;\n  }\n\n  div.ribbon-wrapper > p {\n    font-family: \"Open Sans\", Arial, sans-serif;\n    font-size: 14px;\n    color: #fff !important;\n    margin: 0;\n  }\n\n  .featured-listings-block-link {\n    display: block;\n    font-size: 14px;\n    color: #3e5b77;\n    text-align: center;\n    margin-top: 10px;\n  }\n\n  @media only screen and (max-width: 991px) {\n    #featured-listings-root {\n      grid-template-columns: 1fr 1fr;\n      grid-template-rows: 1fr 1fr;\n      grid-gap: 15px;\n    }\n\n    .featured-listings-wrapper {\n      padding: 30px 0 25px;\n    }\n\n    .block-listing-card-wrapper {\n      width: 100%;\n      height: 130px;\n      max-width: 350px;\n      background-size: cover;\n    }\n\n    .block-listing-card-body {\n      padding: 4px;\n    }\n\n    .block-listing-card-detail-column {\n      flex: unset;\n    }\n\n    .block-listing-card-detail-row {\n      display: flex;\n      flex: 1;\n    }\n\n    .block-listing-card-pre-price-text {\n      display: none;\n    }\n\n    .block-listing-card-price-text {\n      display: none;\n    }\n\n    .block-listing-card-price-text-mobile {\n      display: block;\n      font-family: \"Open Sans\", Arial, sans-serif;\n      text-shadow: rgba(0, 0, 0, 0.8) 0px 0px 3px;\n      font-size: 12px;\n      color: #fff !important;\n      margin: 0;\n      line-height: 18px;\n    }\n\n    .block-listing-card-detail-text {\n      font-size: 12px;\n      line-height: 18px;\n      margin-left: 5px;\n      padding-left: 5px;\n      border-left: 1px solid #fff;\n    }\n\n    .block-listing-card-detail-text:last-child {\n      margin-left: 5px;\n      padding-left: 5px;\n    }\n\n    .block-listing-card-address-text {\n      display: none;\n    }\n\n    div.ribbon-wrapper {\n      display: none;\n    }\n  }\n\n  @media only screen and (max-width: 364px) {\n    .block-listing-card-detail-text:last-child {\n      display: none;\n    }\n  }\n<\/style>\n\n<script type=\"text\/javascript\">\n  document.addEventListener(\n    \"DOMContentLoaded\",\n    function () {\n      const query = `query list($input: ListSearchInput!) {\n        listSearch {\n          featured(input: $input) {\n            street_name\n            building_type\n            full_street_name\n            city\n            state\n            bathrooms\n            bedrooms\n            gr_min_price\n            gr_unit\n            hide_unit_number\n            cover_photo_aws_s3_key\n            listing_id\n            price\n            price_frequency\n            is_hidden\n            state_machine\n            landlords {\n              identity_verified_state\n            }\n          } \n        } \n      }`;\n      const variables = {\n        input: {\n          featured: 4,\n          page: 1,\n          page_size: 12,\n          housing_type: null,\n          bedroom_count: null,\n          furnished: null,\n          cities: [\"Richmond\", \"Burnaby\", \"Surrey\", \"North Vancouver\"],\n        },\n      };\n      const url = \"https:\/\/nemesis-prod.liv.rent\/graphql\";\n      const options = {\n        method: \"POST\",\n        headers: { \"Content-Type\": \"application\/json\" },\n        body: JSON.stringify({ query, variables }),\n      };\n      const FREQUENCY = {\n        daily: \"Day\",\n        weekly: \"Week\",\n        monthly: \"Month\",\n        one_time: \"Single payment\",\n      };\n      const FREQUENCY_MOBILE = {\n        daily: \"\/d\",\n        weekly: \"\/w\",\n        monthly: \"\/m\",\n        one_time: \"\",\n      };\n      fetch(url, options)\n        .then((res) => res.json())\n        .then((data) => {\n          const featured = data.data.listSearch.featured;\n          \/\/ const root = document.querySelector(\"div.related-post\");\n          \/\/ const root = document.querySelector(\"div.entry-content\");\n          const root = document.querySelector(\"#featured-block-root\");\n          let html = [];\n\n          featured.map((listing) => {\n            const isGroup = listing.gr_unit;\n\n            const ribbon = document.createElement(\"div\");\n            const ribbonText = document.createElement(\"p\");\n            ribbonText.innerHTML = \"Featured\";\n            ribbon.className = \"ribbon-wrapper\";\n            ribbon.style.background =\n              \"url('https:\/\/liv.rent\/blog\/wp-content\/uploads\/2020\/03\/ribbon.png') center no-repeat\";\n            ribbon.appendChild(ribbonText);\n\n            const prePriceText = isGroup\n              ? '<p class=\"block-listing-card-pre-price-text\">Starting at...<\/p>'\n              : \"\";\n            const price = isGroup\n              ? parseFloat(listing.gr_min_price)\n              : parseFloat(listing.price);\n            const priceFrequency = FREQUENCY[listing.price_frequency];\n            const mobilePriceFrequency =\n              FREQUENCY_MOBILE[listing.price_frequency];\n            const priceText =\n              '<p class=\"block-listing-card-price-text\"><strong>$' +\n              price +\n              \"<\/strong> \/ \" +\n              priceFrequency +\n              \"<\/p>\";\n            const mobilePriceText =\n              '<p class=\"block-listing-card-price-text-mobile\">$' +\n              price +\n              mobilePriceFrequency +\n              \"<\/p>\";\n            const address = listing.hide_unit_number\n              ? listing.street_name\n              : listing.full_street_name;\n            const addressText =\n              '<p class=\"block-listing-card-address-text\">' +\n              address +\n              \", \" +\n              listing.city +\n              \"<\/p>\";\n            const bedroomText =\n              '<p class=\"block-listing-card-detail-text\">' +\n              (listing.bedrooms > 0\n                ? parseFloat(listing.bedrooms) + \" Bed\"\n                : \"Studio\") +\n              \"<\/p>\";\n            const bathroomText =\n              '<p class=\"block-listing-card-detail-text\">' +\n              parseFloat(listing.bathrooms) +\n              \" Bath\" +\n              \"<\/p>\";\n\n            const cardBody =\n              '<div class=\"block-listing-card-body\"><div class=\"block-listing-card-detail-column\">' +\n              prePriceText +\n              priceText +\n              mobilePriceText +\n              addressText +\n              '<\/div><div class=\"block-listing-card-detail-row\">' +\n              bedroomText +\n              bathroomText +\n              \"<\/div><\/div><\/div>\";\n\n            const cardWrapper = document.createElement(\"a\");\n            cardWrapper.className = \"block-listing-card-wrapper\";\n            cardWrapper.setAttribute(\n              \"id\",\n              \"blog-featured-card-\" + listing.listing_id\n            );\n            cardWrapper.innerHTML = cardBody;\n            cardWrapper.setAttribute(\n              \"href\",\n              \"https:\/\/liv.rent\/rental-listings\/\" + listing.listing_id\n            );\n            const baseImageUrl = \"https:\/\/cdn.liv.rent\/350x262\/\";\n            const imageUrl = listing.cover_photo_aws_s3_key;\n            cardWrapper.style.background =\n              \"url(\" +\n              baseImageUrl +\n              imageUrl +\n              \") center center \/ cover no-repeat\";\n            cardWrapper.appendChild(ribbon);\n\n            return html.push(cardWrapper);\n          });\n\n          const listingsRoot = document.createElement(\"div\");\n          listingsRoot.setAttribute(\"id\", \"featured-listings-root\");\n          html.forEach((card) => {\n            listingsRoot.appendChild(card);\n          });\n\n          const titleText = document.createElement(\"h2\");\n          titleText.className = \"featured-listings-title\";\n          titleText.innerHTML = \"Featured Listings for Rent\";\n\n          const linkText = document.createElement(\"a\");\n          linkText.className = \"featured-listings-block-link\";\n          linkText.innerHTML = \"View all listings on liv.rent\";\n          linkText.setAttribute(\"href\", \"https:\/\/liv.rent\/rental-listings\/map\");\n\n          const innerWrapper = document.createElement(\"div\");\n          innerWrapper.className = \"featured-listings-grid-wrapper\";\n          innerWrapper.appendChild(listingsRoot);\n\n          const outterWrapper = document.createElement(\"div\");\n          outterWrapper.className = \"featured-listings-wrapper\";\n          outterWrapper.appendChild(titleText);\n          outterWrapper.appendChild(listingsRoot);\n          outterWrapper.appendChild(linkText);\n\n          \/\/ Insert Into\n          root.appendChild(outterWrapper);\n\n          \/\/ Insert Before\n          \/\/ root.parentNode.insertBefore(outterWrapper, root);\n\n          \/\/ Insert After\n          \/\/ root.parentNode.insertBefore(outterWrapper, root.nextSibling);\n        })\n        .catch(function (err) {\n          console.warn(\"Something went wrong.\", err);\n        });\n    },\n    false\n  );\n<\/script>\n\n<!-- Root div if not using existing or dynamic element as root -->\n<div id=\"featured-block-root\"><\/div>\n\n\n\n<!--\n  Reusable Buildings Block - By Building URLs\n  ---------------------------------------------------\n  This block takes full liv.rent building URLs, pulls the numeric id\n  out of each one for the GraphQL query, and links the card straight\n  back to the URL you pasted, so the pretty slug is always the one you\n  supplied.\n\n  To change which buildings appear, edit BUILDING_URLS in the script\n  below. Everything else (title, footer link, wording) is in the CONFIG\n  object next to it. Anything from 1 to 10 buildings renders; the grid\n  reflows on its own.\n\n  Note: the building record itself is what drives the card, so a building\n  with nothing currently for rent still renders (it just shows no price).\n  Only an id that does not exist at all is skipped, with a console warning.\n-->\n\n<style type=\"text\/css\">\n  .liv-buildings.liv-buildings,\n  .liv-buildings.liv-buildings * {\n    box-sizing: border-box !important;\n    margin: 0 !important;\n    padding: 0 !important;\n    font-family: Inter, Helvetica, Arial, sans-serif !important;\n    font-style: normal !important;\n    line-height: 1.4 !important;\n    letter-spacing: normal !important;\n    word-spacing: normal !important;\n    text-transform: none !important;\n    text-indent: 0 !important;\n    text-align: left !important;\n    text-shadow: none !important;\n    float: none !important;\n    list-style: none !important;\n  }\n\n  \/* ---------- Block ---------- *\/\n  .liv-buildings.liv-buildings {\n    display: block !important;\n    max-width: 1094px;\n    margin: 40px auto !important;\n    padding: 32px 0 !important;\n    border-top: 1px solid #eaecf1;\n    border-bottom: 1px solid #eaecf1;\n    background: none;\n    font-size: 13px !important;\n    color: #0e131b !important;\n    -webkit-font-smoothing: antialiased;\n    container-type: inline-size;\n    container-name: livbuildings;\n  }\n\n  .liv-buildings .liv-buildings__title {\n    display: block !important;\n    font-size: 24px !important;\n    font-weight: 700 !important;\n    line-height: 1.2 !important;\n    letter-spacing: -0.4px !important;\n    color: #0e131b !important;\n    margin: 0 0 20px !important;\n    padding: 0 !important;\n  }\n\n  \/* ---------- Grid ---------- *\/\n  .liv-buildings .liv-buildings__grid {\n    display: grid !important;\n    grid-template-columns: repeat(2, minmax(0, 1fr));\n    gap: 14px;\n    align-items: stretch;\n    margin: 0 !important;\n    padding: 0 !important;\n  }\n\n  @media only screen and (min-width: 900px) {\n    .liv-buildings .liv-buildings__grid {\n      grid-template-columns: repeat(4, minmax(0, 1fr));\n      gap: 16px;\n    }\n  }\n\n  @container livbuildings (max-width: 699px) {\n    .liv-buildings .liv-buildings__grid {\n      grid-template-columns: repeat(2, minmax(0, 1fr));\n      gap: 14px;\n    }\n  }\n\n  @container livbuildings (min-width: 700px) {\n    .liv-buildings .liv-buildings__grid {\n      grid-template-columns: repeat(4, minmax(0, 1fr));\n      gap: 16px;\n    }\n  }\n\n  \/* Small counts should not stretch a card across the whole column. *\/\n  .liv-buildings .liv-buildings__grid--n1 {\n    grid-template-columns: minmax(0, 1fr);\n    max-width: 320px;\n  }\n\n  .liv-buildings .liv-buildings__grid--n2 {\n    grid-template-columns: repeat(2, minmax(0, 1fr));\n    max-width: 660px;\n  }\n\n  @container livbuildings (min-width: 700px) {\n    .liv-buildings .liv-buildings__grid--n3 {\n      grid-template-columns: repeat(3, minmax(0, 1fr));\n      max-width: 820px;\n    }\n  }\n\n  \/* 5 or 9 buildings across 4 columns strands a single card on its own\n     row. Three columns divides both evenly (3+2, 3+3+3). Declared after\n     the base grid so it wins on source order in both engines. *\/\n  @media only screen and (min-width: 900px) {\n    .liv-buildings .liv-buildings__grid--three {\n      grid-template-columns: repeat(3, minmax(0, 1fr));\n    }\n  }\n\n  @container livbuildings (min-width: 700px) {\n    .liv-buildings .liv-buildings__grid--three {\n      grid-template-columns: repeat(3, minmax(0, 1fr));\n    }\n  }\n\n  \/* ---------- Card ----------\n     Qualified with the tag so it also outranks theme rules aimed at\n     `.entry-content a`, which is where link colour usually comes from. *\/\n  .liv-buildings a.liv-buildings__card {\n    display: flex !important;\n    flex-direction: column;\n    background: #ffffff !important;\n    border: 1px solid #d2d7df !important;\n    border-radius: 8px !important;\n    box-shadow: 0 0 16px 0 rgba(69, 79, 91, 0.12) !important;\n    overflow: hidden;\n    margin: 0 !important;\n    padding: 0 !important;\n    text-decoration: none !important;\n    color: #0e131b !important;\n    cursor: pointer;\n  }\n\n  .liv-buildings a.liv-buildings__card:hover,\n  .liv-buildings a.liv-buildings__card:focus,\n  .liv-buildings a.liv-buildings__card:visited {\n    text-decoration: none !important;\n    color: #0e131b !important;\n  }\n\n  .liv-buildings .liv-buildings__media {\n    display: block !important;\n    position: relative;\n    width: 100%;\n    aspect-ratio: 16 \/ 10;\n    background: #f3f5f7;\n    overflow: hidden;\n    margin: 0 !important;\n    padding: 0 !important;\n  }\n\n  @supports not (aspect-ratio: 16 \/ 10) {\n    .liv-buildings .liv-buildings__media {\n      height: 140px;\n    }\n  }\n\n  .liv-buildings img.liv-buildings__img {\n    display: block !important;\n    width: 100% !important;\n    height: 100% !important;\n    max-width: 100% !important;\n    object-fit: cover;\n    margin: 0 !important;\n    padding: 0 !important;\n    border: 0 !important;\n    border-radius: 0 !important;\n    box-shadow: none !important;\n  }\n\n  .liv-buildings .liv-buildings__badge {\n    display: inline-block !important;\n    position: absolute;\n    top: 8px;\n    left: 8px;\n    max-width: calc(100% - 16px);\n    background: #0e131b !important;\n    color: #ffffff !important;\n    font-size: 10px !important;\n    font-weight: 500 !important;\n    line-height: 16px !important;\n    margin: 0 !important;\n    padding: 1px 6px !important;\n    border: 0 !important;\n    border-radius: 2px !important;\n    white-space: nowrap;\n    overflow: hidden;\n    text-overflow: ellipsis;\n    pointer-events: none;\n  }\n\n  .liv-buildings .liv-buildings__body {\n    display: flex !important;\n    flex-direction: column;\n    flex: 1;\n    gap: 5px;\n    margin: 0 !important;\n    padding: 10px !important;\n  }\n\n  .liv-buildings .liv-buildings__price-row {\n    display: flex !important;\n    align-items: baseline;\n    flex-wrap: nowrap;\n    gap: 4px;\n    min-width: 0;\n    margin: 0 !important;\n    padding: 0 !important;\n  }\n\n  .liv-buildings .liv-buildings__price {\n    font-size: 15px !important;\n    font-weight: 700 !important;\n    line-height: 1.3 !important;\n    color: #0e131b !important;\n    margin: 0 !important;\n    padding: 0 !important;\n    white-space: nowrap;\n    overflow: hidden;\n    text-overflow: ellipsis;\n  }\n\n  .liv-buildings .liv-buildings__period {\n    font-size: 11px !important;\n    font-weight: 400 !important;\n    line-height: 1.3 !important;\n    color: #0e131b !important;\n    margin: 0 !important;\n    padding: 0 !important;\n    white-space: nowrap;\n  }\n\n  .liv-buildings .liv-buildings__details {\n    display: block !important;\n    font-size: 12px !important;\n    font-weight: 500 !important;\n    line-height: 1.4 !important;\n    color: #5a6881 !important;\n    margin: 0 !important;\n    padding: 0 !important;\n    overflow: hidden;\n    text-overflow: ellipsis;\n    white-space: nowrap;\n  }\n\n  .liv-buildings .liv-buildings__divider {\n    display: block !important;\n    height: 1px;\n    width: 100%;\n    background: #d2d7df !important;\n    border: 0 !important;\n    margin: 3px 0 !important;\n    padding: 0 !important;\n  }\n\n  \/* Building names run long, so give them two lines rather than\n     truncating \"Lakeview Pointe Kelowna Apartments\" to nothing. *\/\n  .liv-buildings .liv-buildings__name {\n    display: -webkit-box !important;\n    -webkit-line-clamp: 2;\n    -webkit-box-orient: vertical;\n    overflow: hidden;\n    font-size: 12px !important;\n    font-weight: 600 !important;\n    line-height: 1.35 !important;\n    color: #0e131b !important;\n    margin: 0 !important;\n    padding: 0 !important;\n  }\n\n  \/* Two lines rather than one ellipsized line: on a 2-up phone layout a\n     single line drops the city, which is the half that matters when the\n     block spans more than one of them. *\/\n  .liv-buildings .liv-buildings__region {\n    display: -webkit-box !important;\n    -webkit-line-clamp: 2;\n    -webkit-box-orient: vertical;\n    overflow: hidden;\n    font-size: 11px !important;\n    font-weight: 400 !important;\n    line-height: 1.35 !important;\n    color: #5a6881 !important;\n    margin: 0 !important;\n    padding: 0 !important;\n  }\n\n  \/* `margin: auto 0 0` rather than `margin-top: auto` - the reset zeroes\n     the shorthand, so a longhand top margin would be overwritten and the\n     buttons would stop aligning along the bottom of a row. *\/\n  .liv-buildings .liv-buildings__cta {\n    display: flex !important;\n    align-items: center;\n    justify-content: center;\n    height: 32px;\n    margin: auto 0 0 !important;\n    padding: 0 8px !important;\n    background: #051a49 !important;\n    color: #ffffff !important;\n    font-size: 11px !important;\n    font-weight: 500 !important;\n    line-height: 1 !important;\n    text-align: center !important;\n    border: 0 !important;\n    border-radius: 6px !important;\n    white-space: nowrap;\n    overflow: hidden;\n    text-overflow: ellipsis;\n    transition: background 0.15s ease;\n  }\n\n  .liv-buildings a.liv-buildings__card:hover .liv-buildings__cta {\n    background: #0d3880 !important;\n  }\n\n  \/* One step up once the block itself has room. Scoped to the block, not\n     the card, so there is only a single set of overrides to reason about. *\/\n  @container livbuildings (min-width: 700px) {\n    .liv-buildings .liv-buildings__body {\n      gap: 7px;\n      padding: 12px !important;\n    }\n\n    .liv-buildings .liv-buildings__badge {\n      top: 12px;\n      left: 12px;\n      max-width: calc(100% - 24px);\n      font-size: 11px !important;\n      line-height: 18px !important;\n      padding: 1px 8px !important;\n    }\n\n    .liv-buildings .liv-buildings__price {\n      font-size: 17px !important;\n    }\n\n    .liv-buildings .liv-buildings__period {\n      font-size: 13px !important;\n    }\n\n    .liv-buildings .liv-buildings__details,\n    .liv-buildings .liv-buildings__name {\n      font-size: 13px !important;\n    }\n\n    .liv-buildings .liv-buildings__region {\n      font-size: 12px !important;\n    }\n\n    .liv-buildings .liv-buildings__cta {\n      height: 38px;\n      font-size: 13px !important;\n    }\n  }\n\n  .liv-buildings a.liv-buildings__footer-link {\n    display: block !important;\n    font-size: 14px !important;\n    font-weight: 500 !important;\n    line-height: 1.4 !important;\n    color: #051a49 !important;\n    text-align: center !important;\n    margin: 18px 0 0 !important;\n    padding: 0 !important;\n    background: none !important;\n    text-decoration: none !important;\n  }\n\n  .liv-buildings a.liv-buildings__footer-link:visited,\n  .liv-buildings a.liv-buildings__footer-link:focus,\n  .liv-buildings a.liv-buildings__footer-link:hover {\n    color: #051a49 !important;\n  }\n\n  .liv-buildings a.liv-buildings__footer-link:hover {\n    text-decoration: underline !important;\n  }\n\n  \/* The placeholder the block renders INTO is ordinary post content, so\n     the theme styles it too - a stray `padding` there silently re-centres\n     the whole block, and a `margin-bottom` adds phantom space under it.\n     findMount() tags the div it creates as a fallback with the same class\n     so this rule reaches that one as well. *\/\n  .liv-buildings-root.liv-buildings-root,\n  #liv-buildings-root {\n    display: block !important;\n    margin: 0 !important;\n    padding: 0 !important;\n    border: 0 !important;\n    background: none !important;\n    font-size: inherit !important;\n    line-height: normal !important;\n    text-align: left !important;\n    text-indent: 0 !important;\n  }\n<\/style>\n\n<script type=\"text\/javascript\">\n  \/* ==================================================================\n   * DO NOT PUT AN AMPERSAND CHARACTER ANYWHERE IN THIS SCRIPT.\n   *\n   * WordPress runs post content through wptexturize(), which rewrites a\n   * bare ampersand into a numeric HTML entity. Inside a script tag that\n   * is a syntax error, so the whole block dies on parse: the markup is\n   * still visible in the DOM, but nothing runs and no request is made.\n   * It rewrites only SOME of them, which makes it look intermittent.\n   *\n   * That is why this file uses nested ifs, ternaries, early returns and\n   * the get() helper instead of the logical-and operator. Keeping the\n   * character out entirely means `grep` is a reliable check.\n   * ================================================================== *\/\n  (function () {\n    \/\/ Captured while this script runs, so each copy of the block can find\n    \/\/ its OWN placeholder. `document.currentScript` is null inside the\n    \/\/ deferred callback, so it has to be read here at the top level.\n    var SELF = document.currentScript;\n\n    \/* ----------------------------------------------------------------\n     * CONFIG - edit these\n     * ---------------------------------------------------------------- *\/\n    var CONFIG = {\n      \/\/ Buildings to show, in the order they should appear. Paste the\n      \/\/ full liv.rent URL: the id is read out of it for the query and\n      \/\/ the URL itself becomes the card link, slug and all.\n      \/\/ Works with 1 building, works with 10.\n      BUILDING_URLS: [\n        \"https:\/\/liv.rent\/building\/55691\/lakeview-pointe-kelowna-apartments-apartment-building-3623-elliot-road-west-kelowna-bc\",\n        \"https:\/\/liv.rent\/building\/53981\/parque-on-park-apartment-building-20449-park-ave-langley-bc\",\n        \"https:\/\/liv.rent\/building\/8227\/the-pendrell-apartment-building-1770-pendrell-st-vancouver-bc\",\n        \"https:\/\/liv.rent\/building\/55792\/nells-place-apartment-building-4502-rupert-street-vancouver-bc\",\n        \"https:\/\/liv.rent\/building\/55771\/hub-place-apartment-building-1649-e-broadway-vancouver-bc\",\n      ],\n      TITLE: \"Now renting in B.C.\",\n      FOOTER_LINK_TEXT: \"See all CAPREIT rental listings\",\n      FOOTER_LINK_URL: \"https:\/\/liv.rent\/company\/capreit\",\n      ROOT_SELECTOR: \".liv-buildings-root, #liv-buildings-root\",\n      IMAGES_URL: \"https:\/\/cdn.liv.rent\",\n      GRAPHQL_URL: \"https:\/\/nemesis-prod.liv.rent\/graphql\",\n      \/\/ Safety rail so a runaway paste cannot fire a 40-alias query.\n      MAX_BUILDINGS: 10,\n    };\n\n    \/* ----------------------------------------------------------------\n     * Query - one request, two aliased fields per building.\n     *\n     *   building(...)       the building record: name, address, photos.\n     *                       Renders even with nothing available.\n     *   buildingDetail(...) the units currently live in that building.\n     *                       The server pins state_machine=published and\n     *                       is_hidden=false, so this is only ever what a\n     *                       renter could actually apply to right now.\n     *\n     * Ids are digits pulled out of the URL by regex, so they are safe to\n     * inline as Int literals.\n     * ---------------------------------------------------------------- *\/\n    var BUILDING_FIELDS = [\n      \"id\",\n      \"name\",\n      \"building_type\",\n      \"full_street_name\",\n      \"city\",\n      \"state\",\n      \"building_files { aws_s3_key tag position }\",\n    ];\n\n    var LISTING_FIELDS = [\n      \"listing_id\",\n      \"price\",\n      \"price_frequency\",\n      \"bedrooms\",\n      \"gr_unit\",\n      \"gr_count\",\n      \"gr_min_price\",\n      \"unit_type_scope_txt_id\",\n      \"cover_photo_aws_s3_key\",\n    ];\n\n    function buildQuery(ids) {\n      var lines = [\"query blogBuildings {\"];\n      ids.forEach(function (id, index) {\n        lines.push(\n          \"  b\" + index + \": building(input: { building_id: \" + id + \" }) {\",\n        );\n        lines.push(\"    \" + BUILDING_FIELDS.join(\"\\n    \"));\n        lines.push(\"  }\");\n        lines.push(\n          \"  d\" +\n            index +\n            \": buildingDetail(input: { building_id: \" +\n            id +\n            \" }) {\",\n        );\n        lines.push(\"    \" + LISTING_FIELDS.join(\"\\n    \"));\n        lines.push(\"  }\");\n      });\n      lines.push(\"}\");\n      return lines.join(\"\\n\");\n    }\n\n    \/* ----------------------------------------------------------------\n     * Lookups mirrored from the liv.rent app so wording matches\n     * ---------------------------------------------------------------- *\/\n    var PERIOD = {\n      monthly: \"\/Month\",\n      weekly: \"\/Week\",\n      daily: \"\/Day\",\n      yearly: \"\/Year\",\n      one_time: \"\/One-time\",\n    };\n\n    \/\/ Widest first: the src, then the retry ladder attachFallback() walks.\n    var SIZES = [\n      [480, 300],\n      [320, 200],\n    ];\n\n    var TYPE_LABEL = {\n      condo: \"Apartment Building\",\n      highrise: \"Apartment Building\",\n      lowrise: \"Apartment Building\",\n      house: \"House\",\n      townhouse: \"Townhouse\",\n    };\n\n    \/* ----------------------------------------------------------------\n     * Helpers\n     * ---------------------------------------------------------------- *\/\n    function el(tag, className) {\n      var node = document.createElement(tag);\n      if (className) node.className = className;\n      return node;\n    }\n\n    \/\/ Walks a path of keys, stopping at the first missing link.\n    function get(obj, path) {\n      var node = obj;\n      for (var i = 0; i < path.length; i++) {\n        if (!node) return null;\n        node = node[path[i]];\n      }\n      return node;\n    }\n\n    function money(value) {\n      var n = Number(value);\n      if (!isFinite(n)) return null;\n      if (n <= 0) return null;\n      return \"$\" + Math.round(n).toLocaleString(\"en-US\");\n    }\n\n    \/\/ gr_unit marks a \"group\" listing: one record standing in for several\n    \/\/ identical units, priced from gr_min_price.\n    function isGroup(listing) {\n      if (listing.gr_unit === true) return true;\n      return listing.gr_unit === \"1\";\n    }\n\n    \/\/ https:\/\/liv.rent\/building\/55691\/lakeview-pointe... -> '55691'\n    function idFromUrl(url) {\n      var match = String(url || \"\").match(\/\\\/building\\\/(\\d+)\/);\n      if (!match) return null;\n      return match[1];\n    }\n\n    \/\/ Mirrors getImageUrl() in the app, including the character escapes -\n    \/\/ an unescaped bracket or quote in a filename breaks the CDN path.\n    function imageUrl(key, width, height) {\n      if (!key) return null;\n      var match = String(key).match(\/static_file.+$\/);\n      if (!match) return null;\n      var path = match[0]\n        .replace(\/^\\\/\/, \"\")\n        .replace(\/ \/g, \"%20\")\n        .replace(\/\\(\/g, \"%28\")\n        .replace(\/\\)\/g, \"%29\")\n        .replace(\/'\/g, \"%27\")\n        .replace(\/\"\/g, \"%22\");\n      return (\n        CONFIG.IMAGES_URL +\n        \"\/\" +\n        width +\n        \"x\" +\n        height +\n        \"\/filters:quality(80)\/\" +\n        path\n      );\n    }\n\n    \/\/ Some older building photos are narrower than the largest thumbnail\n    \/\/ the card asks for, and the CDN answers an upscale with a 500 rather\n    \/\/ than serving the original. Step down through the smaller sizes, then\n    \/\/ give up and leave the neutral panel instead of a broken-image icon.\n    \/\/ srcset has to go with the first retry or the browser just reselects\n    \/\/ the candidate that already failed.\n    function attachFallback(img, key) {\n      var step = 0;\n      img.onerror = function () {\n        if (step >= SIZES.length) {\n          img.onerror = null;\n          if (img.parentNode) img.parentNode.removeChild(img);\n          return;\n        }\n        var size = SIZES[step];\n        step += 1;\n        img.removeAttribute(\"srcset\");\n        img.removeAttribute(\"sizes\");\n        img.setAttribute(\"src\", imageUrl(key, size[0], size[1]));\n      };\n    }\n\n    \/\/ Building photos prefer the tagged cover. Some buildings only carry\n    \/\/ untagged `building_image` rows with a null position, so the sort is\n    \/\/ a tiebreak rather than the primary rule.\n    function coverKey(building, listings) {\n      var files = building.building_files;\n      if (Array.isArray(files)) {\n        if (files.length) {\n          var cover = files.filter(function (file) {\n            return file.tag === \"cover_photo\";\n          })[0];\n          if (cover) return cover.aws_s3_key;\n\n          var ordered = files.slice().sort(function (a, b) {\n            return position(a) - position(b);\n          });\n          if (ordered[0]) return ordered[0].aws_s3_key;\n        }\n      }\n\n      \/\/ No building photo on file: borrow the first live unit's cover so\n      \/\/ the card is never a grey box.\n      var withPhoto = listings.filter(function (listing) {\n        return Boolean(listing.cover_photo_aws_s3_key);\n      })[0];\n      if (withPhoto) return withPhoto.cover_photo_aws_s3_key;\n      return null;\n    }\n\n    function position(file) {\n      var n = Number(file.position);\n      if (!isFinite(n)) return 9999;\n      return n;\n    }\n\n    function bedLabel(n) {\n      if (!n) return \"Studio\";\n      return n + \" Bed\";\n    }\n\n    \/* Rolls the live units up into the three things the card shows:\n     * how many are available, the cheapest asking price, and the spread\n     * of bedroom counts. *\/\n    function summarise(listings) {\n      var units = 0;\n      var price = null;\n      var frequency = \"\";\n      var minBeds = null;\n      var maxBeds = null;\n      var hasRoom = false;\n\n      listings.forEach(function (listing) {\n        var group = isGroup(listing);\n\n        var count = Number(listing.gr_count);\n        if (group) {\n          units += isFinite(count) ? Math.max(count, 1) : 1;\n        } else {\n          units += 1;\n        }\n\n        var amount = Number(group ? listing.gr_min_price : listing.price);\n        if (isFinite(amount)) {\n          if (amount > 0) {\n            if (price === null) {\n              price = amount;\n              frequency = listing.price_frequency;\n            } else if (amount < price) {\n              price = amount;\n              frequency = listing.price_frequency;\n            }\n          }\n        }\n\n        \/\/ A room in a shared unit has no meaningful bedroom count.\n        var scope = String(listing.unit_type_scope_txt_id || \"\").toUpperCase();\n        if (scope === \"SINGLE\") {\n          hasRoom = true;\n          return;\n        }\n\n        var beds = Number(listing.bedrooms);\n        if (isFinite(beds)) {\n          if (minBeds === null) minBeds = beds;\n          else if (beds < minBeds) minBeds = beds;\n          if (maxBeds === null) maxBeds = beds;\n          else if (beds > maxBeds) maxBeds = beds;\n        }\n      });\n\n      return {\n        units: units,\n        price: money(price),\n        period: PERIOD[frequency] || \"\",\n        beds: bedText(minBeds, maxBeds, hasRoom),\n      };\n    }\n\n    function bedText(min, max, hasRoom) {\n      if (min === null) return hasRoom ? \"Room\" : \"\";\n      if (min === max) {\n        var single = bedLabel(min);\n        return hasRoom ? single + \" \u00b7 Room\" : single;\n      }\n      var low = !min ? \"Studio\" : String(min);\n      var range = low + \" - \" + max + \" Bed\";\n      return hasRoom ? range + \" \u00b7 Room\" : range;\n    }\n\n    function unitsText(units) {\n      if (!units) return \"\";\n      if (units === 1) return \"1 Unit Available\";\n      return units + \" Units Available\";\n    }\n\n    function typeLabel(building) {\n      var type = String(building.building_type || \"\").toLowerCase();\n      return TYPE_LABEL[type] || \"Building\";\n    }\n\n    \/* ----------------------------------------------------------------\n     * Rendering\n     * ---------------------------------------------------------------- *\/\n    function buildCard(entry) {\n      var building = entry.building;\n      var listings = entry.listings;\n      var summary = summarise(listings);\n\n      var name = building.name || building.full_street_name;\n      var region = [building.full_street_name, building.city, building.state]\n        .filter(Boolean)\n        .join(\", \");\n\n      var card = el(\"a\", \"liv-buildings__card\");\n      \/\/ The pasted URL is the link, so the slug always matches the one\n      \/\/ that was checked by hand.\n      card.setAttribute(\"href\", entry.url);\n      card.setAttribute(\"id\", \"liv-blog-building-\" + building.id);\n      \/\/ Same as the footer link: new tab so the reader keeps their place,\n      \/\/ noopener for safety, and no noreferrer so the visit still\n      \/\/ attributes back to the blog.\n      card.setAttribute(\"target\", \"_blank\");\n      card.setAttribute(\"rel\", \"noopener\");\n\n      \/* Media *\/\n      var media = el(\"div\", \"liv-buildings__media\");\n      var key = coverKey(building, listings);\n      var src = imageUrl(key, 640, 400);\n\n      if (src) {\n        var img = el(\"img\", \"liv-buildings__img\");\n        img.setAttribute(\"src\", src);\n        img.setAttribute(\n          \"srcset\",\n          [\n            imageUrl(key, 320, 200) + \" 320w\",\n            imageUrl(key, 480, 300) + \" 480w\",\n            imageUrl(key, 640, 400) + \" 640w\",\n          ].join(\", \"),\n        );\n        \/\/ Layout is driven by the blog column, not the viewport, and the\n        \/\/ column count varies with how many buildings are configured, so\n        \/\/ one static hint cannot be exact. It errs to the widest case (3\n        \/\/ across) - better a slightly heavy image than a soft one.\n        img.setAttribute(\"sizes\", \"(min-width: 900px) 360px, 50vw\");\n        img.setAttribute(\"loading\", \"lazy\");\n        img.setAttribute(\"decoding\", \"async\");\n        img.setAttribute(\"alt\", [name, region].filter(Boolean).join(\", \"));\n        attachFallback(img, key);\n        media.appendChild(img);\n      }\n\n      var badgeText = unitsText(summary.units);\n      if (badgeText) {\n        var badge = el(\"span\", \"liv-buildings__badge\");\n        badge.textContent = badgeText;\n        media.appendChild(badge);\n      }\n\n      card.appendChild(media);\n\n      \/* Body *\/\n      var body = el(\"div\", \"liv-buildings__body\");\n\n      var priceRow = el(\"div\", \"liv-buildings__price-row\");\n      var priceNode = el(\"span\", \"liv-buildings__price\");\n      if (summary.price) {\n        priceNode.textContent = \"From \" + summary.price;\n        priceRow.appendChild(priceNode);\n        if (summary.period) {\n          var periodNode = el(\"span\", \"liv-buildings__period\");\n          periodNode.textContent = summary.period;\n          priceRow.appendChild(periodNode);\n        }\n      } else {\n        \/\/ Nothing live in the building today. The building page is still\n        \/\/ worth a visit, so the card stays and only the price softens.\n        priceNode.textContent = \"Contact for availability\";\n        priceRow.appendChild(priceNode);\n      }\n      body.appendChild(priceRow);\n\n      var details = el(\"p\", \"liv-buildings__details\");\n      details.textContent = summary.beds || typeLabel(building);\n      body.appendChild(details);\n\n      body.appendChild(el(\"div\", \"liv-buildings__divider\"));\n\n      var nameNode = el(\"p\", \"liv-buildings__name\");\n      nameNode.textContent = name;\n      body.appendChild(nameNode);\n\n      var regionNode = el(\"p\", \"liv-buildings__region\");\n      regionNode.textContent = region;\n      body.appendChild(regionNode);\n\n      var cta = el(\"span\", \"liv-buildings__cta\");\n      cta.textContent = \"View Building\";\n      body.appendChild(cta);\n\n      card.appendChild(body);\n      return card;\n    }\n\n    function render(entries, root) {\n      var wrapper = el(\"div\", \"liv-buildings\");\n\n      var title = el(\"h2\", \"liv-buildings__title\");\n      title.textContent = CONFIG.TITLE;\n      wrapper.appendChild(title);\n\n      var grid = el(\"div\", \"liv-buildings__grid\");\n      if (entries.length < 4) {\n        grid.className += \" liv-buildings__grid--n\" + entries.length;\n      } else if (entries.length % 4 === 1) {\n        \/\/ 5 and 9 would otherwise leave one card alone on the last row.\n        grid.className += \" liv-buildings__grid--three\";\n      }\n      entries.forEach(function (entry) {\n        grid.appendChild(buildCard(entry));\n      });\n      wrapper.appendChild(grid);\n\n      var footer = el(\"a\", \"liv-buildings__footer-link\");\n      footer.textContent = CONFIG.FOOTER_LINK_TEXT;\n      footer.setAttribute(\"href\", CONFIG.FOOTER_LINK_URL);\n      \/\/ Opens in a new tab so the reader keeps their place in the post.\n      \/\/ noopener only - the referrer is left intact so the visit still\n      \/\/ attributes back to the blog.\n      footer.setAttribute(\"target\", \"_blank\");\n      footer.setAttribute(\"rel\", \"noopener\");\n      wrapper.appendChild(footer);\n\n      root.appendChild(wrapper);\n    }\n\n    \/* ----------------------------------------------------------------\n     * Fetch + boot\n     * ---------------------------------------------------------------- *\/\n    \/\/ Two copies of this block on one page must not both render into the\n    \/\/ first placeholder, so prefer the one that follows this script and\n    \/\/ claim it before the fetch starts.\n    var CLAIMED = \"data-liv-mounted\";\n\n    function isFreePlaceholder(node) {\n      if (!node.matches) return false;\n      if (!node.matches(CONFIG.ROOT_SELECTOR)) return false;\n      return !node.hasAttribute(CLAIMED);\n    }\n\n    function findMount() {\n      var host = SELF ? SELF.parentNode : null;\n\n      if (host) {\n        var sibling = SELF.nextElementSibling;\n        while (sibling) {\n          if (isFreePlaceholder(sibling)) return sibling;\n          sibling = sibling.nextElementSibling;\n        }\n      }\n\n      var candidates = document.querySelectorAll(CONFIG.ROOT_SELECTOR);\n      for (var i = 0; i < candidates.length; i++) {\n        if (!candidates[i].hasAttribute(CLAIMED)) return candidates[i];\n      }\n\n      \/\/ No placeholder reached us - render where the script itself sits.\n      \/\/ Tagged with the placeholder class so the theme-neutralising rule\n      \/\/ in the stylesheet covers this div too.\n      if (host) {\n        var mount = document.createElement(\"div\");\n        mount.className = \"liv-buildings-root\";\n        host.insertBefore(mount, SELF.nextSibling);\n        return mount;\n      }\n\n      return null;\n    }\n\n    function parseUrls() {\n      var seen = {};\n      var parsed = [];\n\n      CONFIG.BUILDING_URLS.forEach(function (url) {\n        var id = idFromUrl(url);\n        if (!id) {\n          console.warn(\"[liv.rent buildings] Not a building URL: \" + url);\n          return;\n        }\n        if (seen[id]) return;\n        seen[id] = true;\n        parsed.push({ id: id, url: url });\n      });\n\n      if (parsed.length > CONFIG.MAX_BUILDINGS) {\n        console.warn(\n          \"[liv.rent buildings] Showing the first \" +\n            CONFIG.MAX_BUILDINGS +\n            \" of \" +\n            parsed.length +\n            \" buildings.\",\n        );\n        return parsed.slice(0, CONFIG.MAX_BUILDINGS);\n      }\n\n      return parsed;\n    }\n\n    function load() {\n      var targets = parseUrls();\n      if (!targets.length) {\n        console.warn(\"[liv.rent buildings] No usable building URLs.\");\n        return;\n      }\n\n      var root = findMount();\n      if (!root) {\n        console.warn(\n          \"[liv.rent buildings] No place to render - expected a <div \" +\n            'class=\"liv-buildings-root\"> after the script.',\n        );\n        return;\n      }\n      root.setAttribute(CLAIMED, \"1\");\n\n      var ids = targets.map(function (target) {\n        return target.id;\n      });\n\n      fetch(CONFIG.GRAPHQL_URL, {\n        method: \"POST\",\n        headers: { \"Content-Type\": \"application\/json\" },\n        body: JSON.stringify({ query: buildQuery(ids) }),\n      })\n        .then(function (res) {\n          return res.json();\n        })\n        .then(function (payload) {\n          if (payload.errors) {\n            if (payload.errors.length) {\n              throw new Error(payload.errors[0].message);\n            }\n          }\n\n          var missing = [];\n\n          \/\/ Aliases come back keyed by index, so the configured order is\n          \/\/ preserved for free - no client-side reordering needed.\n          var entries = targets\n            .map(function (target, index) {\n              var building = get(payload, [\"data\", \"b\" + index]);\n              if (!building) {\n                missing.push(target.id);\n                return null;\n              }\n              return {\n                id: target.id,\n                url: target.url,\n                building: building,\n                listings: get(payload, [\"data\", \"d\" + index]) || [],\n              };\n            })\n            .filter(Boolean);\n\n          if (missing.length) {\n            console.warn(\n              \"[liv.rent buildings] No building record for: \" +\n                missing.join(\", \"),\n            );\n          }\n\n          \/\/ Leave the post untouched rather than showing an empty frame.\n          if (!entries.length) return;\n\n          render(entries, root);\n        })\n        .catch(function (err) {\n          console.warn(\"[liv.rent buildings] Failed to load buildings.\", err);\n        });\n    }\n\n    \/\/ The block can be parsed after DOMContentLoaded has already fired.\n    if (document.readyState === \"loading\") {\n      document.addEventListener(\"DOMContentLoaded\", load, false);\n    } else {\n      load();\n    }\n  })();\n<\/script>\n\n<!-- Where the block renders. Keep this after the script. -->\n<div class=\"liv-buildings-root\"><\/div>\n\n<style id=\"liv-buildings-subtitle-css\">\n.liv-buildings .liv-buildings__subtitle{display:block !important;font-size:14px !important;font-weight:500 !important;line-height:1.4 !important;color:#5b6472 !important;margin:-14px 0 20px !important;padding:0 !important;letter-spacing:0 !important;}\n<\/style>\n<script>\n(function(){\n  var TEXT = \"Featured buildings from CAPREIT\";\n  function place(){\n    var done = 0;\n    document.querySelectorAll('.liv-buildings').forEach(function(root){\n      var t = root.querySelector('.liv-buildings__title');\n      if(!t) return;\n      if(root.querySelector('.liv-buildings__subtitle')) { done++; return; }\n      var s = document.createElement('div');\n      s.className = 'liv-buildings__subtitle';\n      s.textContent = TEXT;\n      t.insertAdjacentElement('afterend', s);\n      done++;\n    });\n    return done;\n  }\n  if(document.readyState==='loading') document.addEventListener('DOMContentLoaded', place); else place();\n  var n=0, iv=setInterval(function(){ place(); if(++n>40) clearInterval(iv); }, 250);\n})();\n<\/script>\n\n\n<script id=\"capreit-cta-tracking\">\n(function(){\n  var PROV = \"bc\", PROVU = \"BC\";\n  function tag(){\n    document.querySelectorAll(\".liv-buildings\").forEach(function(root){\n      var cards = root.querySelectorAll(\"a.liv-buildings__card\");\n      Array.prototype.forEach.call(cards, function(a, i){\n        var pos = i + 1;\n        if(!a.getAttribute(\"data-building-id\")){\n          var m = (a.id || \"\").match(\/liv-blog-building-(\\d+)\/);\n          if(m) a.setAttribute(\"data-building-id\", m[1]);\n        }\n        if(!a.getAttribute(\"data-building-name\")){\n          var n = a.querySelector(\".liv-buildings__name\");\n          if(n) a.setAttribute(\"data-building-name\", n.textContent.trim());\n        }\n        a.setAttribute(\"data-province\", PROVU);\n        a.setAttribute(\"data-position\", String(pos));\n        a.setAttribute(\"data-cta-type\", \"building\");\n        a.id = \"blog-cta-capreit-\" + PROV + \"-building-\" + pos;\n      });\n      var f = root.querySelector(\"a.liv-buildings__footer-link\");\n      if(f){\n        f.id = \"blog-cta-capreit-\" + PROV + \"-footer-all-listings\";\n        f.setAttribute(\"data-province\", PROVU);\n        f.setAttribute(\"data-cta-type\", \"footer-all-listings\");\n      }\n    });\n  }\n  if(document.readyState === \"loading\") document.addEventListener(\"DOMContentLoaded\", tag); else tag();\n  var c = 0, iv = setInterval(function(){ tag(); if(++c > 40) clearInterval(iv); }, 250);\n  if(!window.__capreitCtaBound){\n    window.__capreitCtaBound = true;\n    \/\/ bubble phase, so anything that cancels the navigation has already run\n    document.addEventListener(\"click\", function(e){\n      if (e.defaultPrevented) return;                 \/\/ navigation was cancelled\n      if (typeof e.button === \"number\" && e.button !== 0) return;  \/\/ primary button only\n      var a = e.target && e.target.closest ? e.target.closest(\"a[id^='blog-cta-capreit-']\") : null;\n      if (!a) return;\n      var href = a.getAttribute(\"href\") || \"\";\n      if (!href) return;\n      if (href.charAt(0) === \"#\") return;\n      if (href.toLowerCase().indexOf(\"javascript:\") === 0) return;\n      window.dataLayer = window.dataLayer || [];\n      window.dataLayer.push({\n        event: \"capreit_blog_cta_click\",\n        cta_id: a.id,\n        cta_type: a.getAttribute(\"data-cta-type\") || \"\",\n        building_id: a.getAttribute(\"data-building-id\") || \"\",\n        building_name: a.getAttribute(\"data-building-name\") || \"\",\n        province: a.getAttribute(\"data-province\") || \"\",\n        position: a.getAttribute(\"data-position\") ? Number(a.getAttribute(\"data-position\")) : null,\n        link_url: a.href || \"\"\n      });\n    }, false);\n  }\n})();\n<\/script>\n\n\n\n<br><h2 id=\"vancouver-rentals\">Vancouver Rentals near Transit Stops<\/h2>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" width=\"731\" height=\"593\" src=\"https:\/\/liv.rent\/blog\/wp-content\/uploads\/2026\/01\/2025.12.12_Van-Avg-Rental-Prices-Near-Transit-1-2-Bed.jpg\" alt=\"\" class=\"wp-image-66299\" srcset=\"https:\/\/liv.rent\/blog\/wp-content\/uploads\/2026\/01\/2025.12.12_Van-Avg-Rental-Prices-Near-Transit-1-2-Bed.jpg 731w, https:\/\/liv.rent\/blog\/wp-content\/uploads\/2026\/01\/2025.12.12_Van-Avg-Rental-Prices-Near-Transit-1-2-Bed-480x389.jpg 480w\" sizes=\"(min-width: 0px) and (max-width: 480px) 480px, (min-width: 481px) 731px, 100vw\" \/><\/figure>\n\n\n\n<p>The most expensive stations for unfurnished, 1 bedroom listings to live nearby, not surprisingly, are in Downtown Vancouver. <\/p>\n\n\n\n<ul>\n<li>The average difference between the most expensive stations (Downtown Vancouver &#8211; <strong>$2,482\/month<\/strong>) and the least expensive (Scott Road, Surrey &#8211; <strong>$1,300\/month<\/strong>) is <strong>$1,182<strong>\/month<\/strong>.<\/strong><\/li>\n\n\n\n<li><a href=\"https:\/\/liv.rent\/rental-listings\/city\/vancouver\" target=\"_blank\" rel=\"noreferrer noopener\">Rentals near the Vancouver City Centre, Waterfront, Burrard and Granville<\/a> stops have an average 1 bedroom rent price of<strong> $2,482<strong>\/month<\/strong>.  <\/strong>The units in all 5 of these stops would be of comparable size and quality.  <\/li>\n\n\n\n<li>Neighbouring Yaletown is only slightly cheaper at <strong>$2,364<strong>\/month<\/strong>. <\/strong><\/li>\n\n\n\n<li>The lowest rents in Vancouver can be found to the east by the Renfrew stop where a 1 bedroom costs<strong> $2,079\/month<\/strong> and Joyce-Collingwood <strong>$2,069\/month<\/strong>. Considering Renfrew is only 15 minutes on a train to the downtown core, this neighbourhood offers renters good value.<\/li>\n<\/ul>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" width=\"731\" height=\"593\" src=\"https:\/\/liv.rent\/blog\/wp-content\/uploads\/2026\/01\/2-bed.jpg\" alt=\"\" class=\"wp-image-66300\" srcset=\"https:\/\/liv.rent\/blog\/wp-content\/uploads\/2026\/01\/2-bed.jpg 731w, https:\/\/liv.rent\/blog\/wp-content\/uploads\/2026\/01\/2-bed-480x389.jpg 480w\" sizes=\"(min-width: 0px) and (max-width: 480px) 480px, (min-width: 481px) 731px, 100vw\" \/><\/figure>\n\n\n\n<p>The most expensive stations for unfurnished, 2 bedroom listings to live nearby are in Downtown Vancouver as well. <\/p>\n\n\n\n<ul>\n<li>The gap between the most expensive and least expensive stops is even wider at <strong>$1,295\/month<\/strong> (comparing Downtown Vancouver&#8217;s <strong>$3,395\/month<\/strong> and Gateway&#8217;s <strong>$2,100\/month<\/strong>)<\/li>\n\n\n\n<li>Stadium-Chinatown, Main Street-Science World, and Broadway-City Hall are stops just outside downtown that offer options below <strong>$3000<strong>\/month<\/strong> <\/strong>while being just minutes away from the downtown core.  <\/li>\n\n\n\n<li>Stations near Downtown Vancouver hover at<strong> $3,395<strong>\/month<\/strong>. <\/strong><\/li>\n<\/ul>\n\n\n\n<p><strong><em>For a closer look at Vancouver&#8217;s latest rental rates, be sure to check out our monthly <\/em><\/strong><a rel=\"noreferrer noopener\" aria-label=\" (opens in a new tab)\" href=\"https:\/\/liv.rent\/blog\/category\/rent-reports\/vancouver\/\" target=\"_blank\"><strong><em>Rent Reports<\/em><\/strong><\/a><\/p>\n\n\n\n\n\n<br><h2 id=\"Richmond-rentals\">Richmond Rentals near Transit Stops<\/h2>\n\n\n\n<p>Heading south on the Canada transit line, renters see some relief as South Vancouver becomes Richmond. <\/p>\n\n\n\n<ul>\n<li>Bridgeport Station in Richmond is just across the river from Vancouver and boasts an average rate of <strong>$2,813\/month<\/strong> &#8211; almost <strong>$582<\/strong> less than Downtown Vancouver.<\/li>\n\n\n\n<li>Richmond Brighouse is at the end of the line, but conveniently near Richmond Centre and other amenities, has the cheapest average rent in Richmond at <strong>$2,778<strong>\/month<\/strong>. <\/strong>It is 25 minutes away by train from Downtown.<\/li>\n<\/ul>\n\n\n\n<p><strong><em><a href=\"https:\/\/liv.rent\/rental-listings\/city\/richmond\" target=\"_blank\" rel=\"noreferrer noopener\" aria-label=\"Click here (opens in a new tab)\">Click here<\/a> to browse listings in Richmond on liv.rent. <\/em><\/strong><\/p>\n\n\n\n\n\n<br><h2 id=\"burnaby-rentals\">Burnaby Rentals near Transit Stops<\/h2>\n\n\n\n<p>Neighbouring Vancouver to the east, Burnaby is well serviced by Expo and Millennium transit lines making it an attractive, affordable area for renters.<\/p>\n\n\n\n<ul>\n<li>The lowest <a href=\"https:\/\/liv.rent\/rental-listings\/city\/burnaby\" target=\"_blank\" rel=\"noreferrer noopener\">Burnaby rents<\/a> can be found near SFU at the Production Way-University stop where the average, 1 bedroom costs <strong>$2,082<strong>\/month<\/strong>.<\/strong><\/li>\n\n\n\n<li>Brentwood Town Centre, closer to Vancouver, holds the same average.<\/li>\n<\/ul>\n\n\n\n<p><a rel=\"noreferrer noopener\" aria-label=\"Click here (opens in a new tab)\" href=\"https:\/\/liv.rent\/rental-listings\/city\/burnaby\" target=\"_blank\"><strong><em>Click here<\/em><\/strong><\/a><strong><em> to browse listings in Burnaby on liv.rent. <\/em><\/strong><\/p>\n\n\n\n<div style=\"border: 2px solid lightcoral; text-align: center; margin: 30px 0; padding: 20px; color: #BD8D7C;\">\n<p style=\"font-size: 16px;margin: 0;\"><b>&gt;&gt; Recommended Reading:<\/b> <a href=\"https:\/\/liv.rent\/blog\/rental-laws\/british-columbia-bc-tenancy-act\/https:\/\/liv.rent\/blog\/rental-laws\/british-columbia-bc-tenancy-act\/ https:\/\/liv.rent\/blog\/rental-laws\/british-columbia-bc-tenancy-act\/\" target=\"_blank\" rel=\"noopener noreferrer\">BC Tenancy Act<\/a><\/p>\n<\/div>\n\n\n\n<br><h2 id=\"newwest-rentals\">New Westminster Rentals near transit stops<\/h2>\n\n\n\n<p>Historic New Westminster is a unique area offering easy access to the Expo line, river views and many historical buildings.<\/p>\n\n\n\n<ul>\n<li>New Westminster 1 bedroom rents are highest near the Columbia and New Westminster stops at <strong>$2,132<strong>\/month<\/strong>.<\/strong><\/li>\n\n\n\n<li>Closer to the Royal Columbian Hospital, near the Sapperton stops, the average rent averages the same.<\/li>\n<\/ul>\n\n\n\n<p><em><strong><a rel=\"noreferrer noopener\" aria-label=\"Click here (opens in a new tab)\" href=\"https:\/\/liv.rent\/rental-listings\/city\/new-westminster\" target=\"_blank\">Click here<\/a> to browse listings in New Westminster on liv.rent<\/strong><\/em>. <\/p>\n\n\n\n<div style=\"border: 2px solid lightcoral; text-align: center; margin: 30px 0; padding: 20px; color: #BD8D7C;\">\n<p style=\"font-size: 16px;margin: 0;\"><b>&gt;&gt; Recommended Reading:<\/b> <a href=\"https:\/\/liv.rent\/blog\/2020\/02\/brewery-district-new-westminster\/\" target=\"_blank\" rel=\"noopener noreferrer\">Brewery District &#8211; New Westminster<\/a><\/p>\n<\/div>\n\n\n\n<br><h2 id=\"coquitlam-rentals\">Coquitlam Rentals near transit stops<\/h3>\n\n\n\n<p>The suburb of Coquitlam is northeast of Vancouver and is part of the Tri-cities region which also includes Port Coquitlam and Port Moody. The Millennium transit line extension services these suburbs.<\/p>\n\n\n\n<ul>\n<li>Rentals from Inlet Centre onwards average a 1 bedroom rental rate of <strong>$2,106<strong>\/month<\/strong>.<\/strong><\/li>\n\n\n\n<li>Rentals near the Burquitlam stop, located before Coquitlam proper, have an average cost of <strong>$2,094<strong>\/month<\/strong>.<\/strong><\/li>\n<\/ul>\n\n\n\n<p>For liv.rent&#8217;s Coquitlam 1 bedroom, unfurnished rentals, click <a href=\"https:\/\/liv.rent\/rental-listings\/map?cities=Coquitlam&amp;page=1\" target=\"_blank\" rel=\"noreferrer noopener\" aria-label=\" (opens in a new tab)\">here<\/a>.<\/p>\n\n\n\n\n\n<br><h2 id=\"surrey-rentals\">Surrey Rentals near transit stops<\/h2>\n\n\n\n<p>Surrey is Canada&#8217;s fastest-growing city and covers a vast swath of land but thankfully, many of the 1 bedroom rentals are clustered around transit stations and are the most affordable in the Lower Mainland.<\/p>\n\n\n\n<ul>\n<li>The lowest rents are found at the Scott Road stop &#8211; <strong>$1,663<\/strong>\/month.<\/li>\n\n\n\n<li>Prices are slightly higher near the King George stop which, curiously, is further away at <strong>$1,682\/month. <\/strong><\/li>\n\n\n\n<li>Surrey Central stop is located next to <a href=\"\/\/liv.rent\/blog\/neighbourhoods\/best-housing-off-campus-for-sfu-students\/\" target=\"_blank\" rel=\"noreferrer noopener\">SFU&#8217;s Surrey Campus<\/a> and has affordable housing options for students but slightly more expensive at <strong>$1,700\/month.<\/strong><\/li>\n<\/ul>\n\n\n\n<p><strong><em><a rel=\"noreferrer noopener\" aria-label=\"Click here (opens in a new tab)\" href=\"https:\/\/liv.rent\/rental-listings\/city\/surrey?page=1\" target=\"_blank\">Click here<\/a> to browse listings in Surrey on liv.rent.<\/em><\/strong> <\/p>\n\n\n\n<hr class=\"wp-block-separator has-css-opacity\"\/>\n\n\n\n<br> \n\n<style> \n\n.button-rethink-way-you-rent { \n  background-color: #3E5B77; \n  border: 5px #26425C; \n  color: white; \n  padding: 10px 30px; \n  text-align: center; \n  text-decoration: none; \n  display: inline-block; \n  font-size: 15px; \n  margin: 5px 0px 20px 0px; \n  cursor: pointer; \n} \n<\/style> \n\n<img decoding=\"async\" class=\"alignleft wp-image-23097\" src=\"https:\/\/liv.rent\/blog\/wp-content\/uploads\/2020\/08\/Digital-Contracts-Cropped-2.gif\" alt=\"Find apartments &amp; houses for rent with the liv.rent app\" width=\"196\" height=\"370\" style=\"float:left;\"> \n\n<h3 style=\"color: #3E5B77;\">Rethink The Way You Rent<\/h3> \n\n<p>Not on <strong><a href=\"https:\/\/liv.rent\/\" target=\"_blank\" rel=\"noopener noreferrer\">liv.rent<\/a><\/strong> yet? Experience the ease of digital applications &#038; contracts, verified tenants &#038; landlords, virtual tours and more \u2013 all on one platform. <strong><a href=\"https:\/\/liv.rent\/pricing\" target=\"_blank\" rel=\"noopener noreferrer\">Sign up for free<\/a><\/strong> or <strong><a href=\"https:\/\/liv.rent\/download\" target=\"_blank\" rel=\"noopener noreferrer\"> download the app<\/a><\/strong>.<\/p> \n\n<a href=\"https:\/\/liv.rent\/\" target=\"_blank\" rel=\"noopener noreferrer\"><button id=\"button-rethink-way-you-rent\" class=\"button-rethink-way-you-rent\">Learn More<\/button><\/a> \n\n<p style=\"color: #3E5B77\"><strong><a href=\"https:\/\/315027fd.sibforms.com\/serve\/MUIEALxBmw-zX8J7nIDbE8Y0GsbO2XD2wyS5o8IJ7wVaedytZTfE-Ysnf2unVSDuBMQ_DiIreTYMftk3u84zjN-NZ459-r4fafSVJmvHqufcCZsHOdl9YPdQlyNO_8e-aEyO3JswcwrjPcNt9Ll22P85SQ6zAIiqlLhL9S2Es9edJgfjg0307yN6DptRbjGnHobRqNlUNRLczWrl\" target=\"_blank\" rel=\"noopener noreferrer\">Subscribe<\/a><\/strong> to receive the latest tenant &#038; landlord tips and get notified about changes in the Canadian rental market.\n<\/p> \n\n<p style=\"color: #3E5B77\"><strong>>> Stay up-to-date on the average rent in Vancouver, Toronto and Montreal: <\/strong> <a href=\"https:\/\/liv.rent\/blog\/rent-reports\/\" target=\"_blank\" rel=\"noopener noreferrer\">Rent Reports<\/a>.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>With Downtown rents consistently and considerably higher than in areas outside the city centre, many are taking a closer look at properties further away but with easy access to transit. Our assessment compared one and two-bedroom unfurnished rentals along Greater Vancouver&#8217;s transit lines revealing that some of the greatest value for renters is found at [&hellip;]<\/p>\n","protected":false},"author":3,"featured_media":66306,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_et_pb_use_builder":"","_et_pb_old_content":"","_et_gb_content_width":"","inline_featured_image":false},"categories":[552,546,135,522],"tags":[591,349],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v20.9 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Average Rent Near Transit (SkyTrain) in Greater Vancouver | liv.rent blog<\/title>\n<meta name=\"description\" content=\"Find average rent of 1-Bed &amp; 2-Bed apartments near major SkyTrain stations in Vancouver, Richmond, Burnaby, Surrey, Coquitlam &amp; others.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/liv.rent\/blog\/neighbourhoods\/average-rent-near-transit-in-greater-vancouver\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Average Rent Near Transit (SkyTrain) in Greater Vancouver | liv.rent blog\" \/>\n<meta property=\"og:description\" content=\"Find average rent of 1-Bed &amp; 2-Bed apartments near major SkyTrain stations in Vancouver, Richmond, Burnaby, Surrey, Coquitlam &amp; others.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/liv.rent\/blog\/neighbourhoods\/average-rent-near-transit-in-greater-vancouver\/\" \/>\n<meta property=\"og:site_name\" content=\"liv.rent blog\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/liv.rent\/\" \/>\n<meta property=\"article:published_time\" content=\"2020-05-15T00:04:27+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-08-28T19:47:18+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/liv.rent\/blog\/wp-content\/uploads\/2020\/05\/2025.12.12_Van-Avg-Rental-Prices-Near-Transit-1-2-Bed.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"731\" \/>\n\t<meta property=\"og:image:height\" content=\"593\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Kristina Ikavalko\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@liv_rent\" \/>\n<meta name=\"twitter:site\" content=\"@liv_rent\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Kristina Ikavalko\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"6 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/liv.rent\/blog\/neighbourhoods\/average-rent-near-transit-in-greater-vancouver\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/liv.rent\/blog\/neighbourhoods\/average-rent-near-transit-in-greater-vancouver\/\"},\"author\":{\"name\":\"Kristina Ikavalko\",\"@id\":\"https:\/\/liv.rent\/blog\/#\/schema\/person\/d848b746dd0bf9661e52be319d6921ae\"},\"headline\":\"Average Rent Near Transit (SkyTrain) in Greater Vancouver\",\"datePublished\":\"2020-05-15T00:04:27+00:00\",\"dateModified\":\"2026-08-28T19:47:18+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/liv.rent\/blog\/neighbourhoods\/average-rent-near-transit-in-greater-vancouver\/\"},\"wordCount\":1053,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/liv.rent\/blog\/#organization\"},\"keywords\":[\"Renter Tips\",\"Vancouver\"],\"articleSection\":[\"BC\",\"Find\",\"Neighbourhoods\",\"Renters\"],\"inLanguage\":\"en-CA\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/liv.rent\/blog\/neighbourhoods\/average-rent-near-transit-in-greater-vancouver\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/liv.rent\/blog\/neighbourhoods\/average-rent-near-transit-in-greater-vancouver\/\",\"url\":\"https:\/\/liv.rent\/blog\/neighbourhoods\/average-rent-near-transit-in-greater-vancouver\/\",\"name\":\"Average Rent Near Transit (SkyTrain) in Greater Vancouver | liv.rent blog\",\"isPartOf\":{\"@id\":\"https:\/\/liv.rent\/blog\/#website\"},\"datePublished\":\"2020-05-15T00:04:27+00:00\",\"dateModified\":\"2026-08-28T19:47:18+00:00\",\"description\":\"Find average rent of 1-Bed & 2-Bed apartments near major SkyTrain stations in Vancouver, Richmond, Burnaby, Surrey, Coquitlam & others.\",\"breadcrumb\":{\"@id\":\"https:\/\/liv.rent\/blog\/neighbourhoods\/average-rent-near-transit-in-greater-vancouver\/#breadcrumb\"},\"inLanguage\":\"en-CA\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/liv.rent\/blog\/neighbourhoods\/average-rent-near-transit-in-greater-vancouver\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/liv.rent\/blog\/neighbourhoods\/average-rent-near-transit-in-greater-vancouver\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/liv.rent\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Average Rent Near Transit (SkyTrain) in Greater Vancouver\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/liv.rent\/blog\/#website\",\"url\":\"https:\/\/liv.rent\/blog\/\",\"name\":\"Liv Rent\",\"description\":\"Rental Made Easy\",\"publisher\":{\"@id\":\"https:\/\/liv.rent\/blog\/#organization\"},\"alternateName\":\"liv.rent\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/liv.rent\/blog\/?s={search_term_string}\"},\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"en-CA\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/liv.rent\/blog\/#organization\",\"name\":\"Liv Rent\",\"alternateName\":\"liv.rent\",\"url\":\"https:\/\/liv.rent\/blog\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-CA\",\"@id\":\"https:\/\/liv.rent\/blog\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/liv.rent\/blog\/wp-content\/uploads\/2020\/03\/liv-rent-logo-1.png\",\"contentUrl\":\"https:\/\/liv.rent\/blog\/wp-content\/uploads\/2020\/03\/liv-rent-logo-1.png\",\"width\":1000,\"height\":457,\"caption\":\"Liv Rent\"},\"image\":{\"@id\":\"https:\/\/liv.rent\/blog\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/liv.rent\/\",\"https:\/\/twitter.com\/liv_rent\",\"https:\/\/www.instagram.com\/liv.rent\/\",\"https:\/\/www.youtube.com\/channel\/UCyx0INp1qqQ2Xhw-rMiqQiA\",\"https:\/\/www.pinterest.ca\/livrent\/\",\"https:\/\/www.tiktok.com\/@liv.rent\",\"https:\/\/www.linkedin.com\/company\/livrent\/\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/liv.rent\/blog\/#\/schema\/person\/d848b746dd0bf9661e52be319d6921ae\",\"name\":\"Kristina Ikavalko\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-CA\",\"@id\":\"https:\/\/liv.rent\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/0a5bbf3fd596506205981f6d985d6969?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/0a5bbf3fd596506205981f6d985d6969?s=96&d=mm&r=g\",\"caption\":\"Kristina Ikavalko\"},\"description\":\"Creative Content Creator for liv.rent, based in Vancouver.\",\"url\":\"https:\/\/liv.rent\/blog\/author\/kristina\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Average Rent Near Transit (SkyTrain) in Greater Vancouver | liv.rent blog","description":"Find average rent of 1-Bed & 2-Bed apartments near major SkyTrain stations in Vancouver, Richmond, Burnaby, Surrey, Coquitlam & others.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/liv.rent\/blog\/neighbourhoods\/average-rent-near-transit-in-greater-vancouver\/","og_locale":"en_US","og_type":"article","og_title":"Average Rent Near Transit (SkyTrain) in Greater Vancouver | liv.rent blog","og_description":"Find average rent of 1-Bed & 2-Bed apartments near major SkyTrain stations in Vancouver, Richmond, Burnaby, Surrey, Coquitlam & others.","og_url":"https:\/\/liv.rent\/blog\/neighbourhoods\/average-rent-near-transit-in-greater-vancouver\/","og_site_name":"liv.rent blog","article_publisher":"https:\/\/www.facebook.com\/liv.rent\/","article_published_time":"2020-05-15T00:04:27+00:00","article_modified_time":"2026-08-28T19:47:18+00:00","og_image":[{"width":731,"height":593,"url":"https:\/\/liv.rent\/blog\/wp-content\/uploads\/2020\/05\/2025.12.12_Van-Avg-Rental-Prices-Near-Transit-1-2-Bed.jpg","type":"image\/jpeg"}],"author":"Kristina Ikavalko","twitter_card":"summary_large_image","twitter_creator":"@liv_rent","twitter_site":"@liv_rent","twitter_misc":{"Written by":"Kristina Ikavalko","Est. reading time":"6 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/liv.rent\/blog\/neighbourhoods\/average-rent-near-transit-in-greater-vancouver\/#article","isPartOf":{"@id":"https:\/\/liv.rent\/blog\/neighbourhoods\/average-rent-near-transit-in-greater-vancouver\/"},"author":{"name":"Kristina Ikavalko","@id":"https:\/\/liv.rent\/blog\/#\/schema\/person\/d848b746dd0bf9661e52be319d6921ae"},"headline":"Average Rent Near Transit (SkyTrain) in Greater Vancouver","datePublished":"2020-05-15T00:04:27+00:00","dateModified":"2026-08-28T19:47:18+00:00","mainEntityOfPage":{"@id":"https:\/\/liv.rent\/blog\/neighbourhoods\/average-rent-near-transit-in-greater-vancouver\/"},"wordCount":1053,"commentCount":0,"publisher":{"@id":"https:\/\/liv.rent\/blog\/#organization"},"keywords":["Renter Tips","Vancouver"],"articleSection":["BC","Find","Neighbourhoods","Renters"],"inLanguage":"en-CA","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/liv.rent\/blog\/neighbourhoods\/average-rent-near-transit-in-greater-vancouver\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/liv.rent\/blog\/neighbourhoods\/average-rent-near-transit-in-greater-vancouver\/","url":"https:\/\/liv.rent\/blog\/neighbourhoods\/average-rent-near-transit-in-greater-vancouver\/","name":"Average Rent Near Transit (SkyTrain) in Greater Vancouver | liv.rent blog","isPartOf":{"@id":"https:\/\/liv.rent\/blog\/#website"},"datePublished":"2020-05-15T00:04:27+00:00","dateModified":"2026-08-28T19:47:18+00:00","description":"Find average rent of 1-Bed & 2-Bed apartments near major SkyTrain stations in Vancouver, Richmond, Burnaby, Surrey, Coquitlam & others.","breadcrumb":{"@id":"https:\/\/liv.rent\/blog\/neighbourhoods\/average-rent-near-transit-in-greater-vancouver\/#breadcrumb"},"inLanguage":"en-CA","potentialAction":[{"@type":"ReadAction","target":["https:\/\/liv.rent\/blog\/neighbourhoods\/average-rent-near-transit-in-greater-vancouver\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/liv.rent\/blog\/neighbourhoods\/average-rent-near-transit-in-greater-vancouver\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/liv.rent\/blog\/"},{"@type":"ListItem","position":2,"name":"Average Rent Near Transit (SkyTrain) in Greater Vancouver"}]},{"@type":"WebSite","@id":"https:\/\/liv.rent\/blog\/#website","url":"https:\/\/liv.rent\/blog\/","name":"Liv Rent","description":"Rental Made Easy","publisher":{"@id":"https:\/\/liv.rent\/blog\/#organization"},"alternateName":"liv.rent","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/liv.rent\/blog\/?s={search_term_string}"},"query-input":"required name=search_term_string"}],"inLanguage":"en-CA"},{"@type":"Organization","@id":"https:\/\/liv.rent\/blog\/#organization","name":"Liv Rent","alternateName":"liv.rent","url":"https:\/\/liv.rent\/blog\/","logo":{"@type":"ImageObject","inLanguage":"en-CA","@id":"https:\/\/liv.rent\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/liv.rent\/blog\/wp-content\/uploads\/2020\/03\/liv-rent-logo-1.png","contentUrl":"https:\/\/liv.rent\/blog\/wp-content\/uploads\/2020\/03\/liv-rent-logo-1.png","width":1000,"height":457,"caption":"Liv Rent"},"image":{"@id":"https:\/\/liv.rent\/blog\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/liv.rent\/","https:\/\/twitter.com\/liv_rent","https:\/\/www.instagram.com\/liv.rent\/","https:\/\/www.youtube.com\/channel\/UCyx0INp1qqQ2Xhw-rMiqQiA","https:\/\/www.pinterest.ca\/livrent\/","https:\/\/www.tiktok.com\/@liv.rent","https:\/\/www.linkedin.com\/company\/livrent\/"]},{"@type":"Person","@id":"https:\/\/liv.rent\/blog\/#\/schema\/person\/d848b746dd0bf9661e52be319d6921ae","name":"Kristina Ikavalko","image":{"@type":"ImageObject","inLanguage":"en-CA","@id":"https:\/\/liv.rent\/blog\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/0a5bbf3fd596506205981f6d985d6969?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/0a5bbf3fd596506205981f6d985d6969?s=96&d=mm&r=g","caption":"Kristina Ikavalko"},"description":"Creative Content Creator for liv.rent, based in Vancouver.","url":"https:\/\/liv.rent\/blog\/author\/kristina\/"}]}},"_links":{"self":[{"href":"https:\/\/liv.rent\/blog\/wp-json\/wp\/v2\/posts\/19995"}],"collection":[{"href":"https:\/\/liv.rent\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/liv.rent\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/liv.rent\/blog\/wp-json\/wp\/v2\/users\/3"}],"replies":[{"embeddable":true,"href":"https:\/\/liv.rent\/blog\/wp-json\/wp\/v2\/comments?post=19995"}],"version-history":[{"count":6,"href":"https:\/\/liv.rent\/blog\/wp-json\/wp\/v2\/posts\/19995\/revisions"}],"predecessor-version":[{"id":69154,"href":"https:\/\/liv.rent\/blog\/wp-json\/wp\/v2\/posts\/19995\/revisions\/69154"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/liv.rent\/blog\/wp-json\/wp\/v2\/media\/66306"}],"wp:attachment":[{"href":"https:\/\/liv.rent\/blog\/wp-json\/wp\/v2\/media?parent=19995"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/liv.rent\/blog\/wp-json\/wp\/v2\/categories?post=19995"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/liv.rent\/blog\/wp-json\/wp\/v2\/tags?post=19995"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}