AppFolio's own listing page is close to fixed. Buttons, type, spacing, the shape of the card: you get what the platform ships. So does everyone else on it, which is why AppFolio sites tend to look alike. Framing that page in an iframe keeps it current. But what sits inside the frame is credited to AppFolio's domain, not yours. We built this AppFolio WordPress plugin for that gap, and it is now available to license.
- Before
<iframe src="…appfolio.com/listings">AppFolio's listing page in a frame: its fonts, its layout, and credit to AppFolio's domain rather than yours.
- AppFolio Listings Pro
server-side fetch + parseA same-host request reads your public AppFolio listings on the server: rent, beds, baths, photos, availability and links.
- After
<div class="apflp-card">Your cards, filters and map on your own domain, with a page for each unit.
What it does
It sits between your WordPress site and AppFolio. The plugin requests your public AppFolio listings on the server. It reads the listing data out of them: rent, beds, baths, photos, availability and the apply links. Then it draws the result as your site's own markup.
Where it came from
The AppFolio sites we build. The platform's listing page would not take the brand, so we wrote the plugin.
What the build did, and what the plugin does
A site build makes the property pages. The plugin's part is how the listings on them are drawn, so they look like your brand and not like the platform.
The same family as our other tools
The Kihan Indexer, Kihan Schema, the Kihan SEO plugin and the internal linker. Each one exists because a client job needed it.
What changes on the page
Before, a renter reads your listings inside AppFolio's frame, in AppFolio's fonts and layout. After, the same listings are part of your page, in your brand. Each unit links to a page on your own domain.
Nothing changes in AppFolio. Units, rents, availability and photos keep coming from where they already come from. Nobody changes their workflow. When a unit leases, the listing leaves your site on the plugin's next fetch.
<iframe src="…appfolio.com/listings">AppFolio's own page, framed: default fonts and layout, and the content counts toward AppFolio's domain rather than yours.
/appfolio-listing/{id}/Drawn by your site in your fonts, colors and button labels, and every unit links to a page of its own on your domain.

What you control
Six areas, all set from the plugin's own settings screens in WordPress. Code only comes into it if you want it to: a card template written in HTML, or a box of custom CSS.
No iframe
Your listings, drawn by your own site
What it does. Fetches your public AppFolio listings on the server, reads them with a DOM parser, and hands your page ordinary HTML where the frame used to be.
How it works. Any address it fetches has to sit on the same host as the AppFolio address you entered. The grid loads just after the page opens, so a slow answer from AppFolio does not hold the rest of the page up.
// AppFolio's embed <iframe src="https://yourcompany.appfolio.com/listings"></iframe> // with AppFolio Listings Pro <div class="apflp-root"> <div class="apflp-card">…</div> <div class="apflp-card">…</div> </div>A page per unit
Every unit gets a page on your domain
What it does. Builds a page at
/appfolio-listing/{id}/for each unit, with a photo gallery, an overview, rental terms, pet policy, amenities, and Apply Now and Contact Us buttons, taken from the listing's own AppFolio page.How it works. The page is rendered on the server from cached listing data, so its content is in the HTML when it arrives, and it can be linked, shared and indexed.
Filters and sorting
Filters built from what is actually listed
What it does. Search, minimum and maximum rent, beds, baths, and pets where the listings carry it. Each one is switched on or off in the settings.
How it works. The options come from the values in your live listings, so nobody is offered a choice nothing matches. Sort by AppFolio’s own order, newest, rent either way, beds or baths, with pagination or everything on one page.
Map
A map renters can browse
What it does. The View with Map button opens a Google map beside the listings. Units at one address share a pin that shows how many there are, and hovering a card or a pin highlights the other.
How it works. It runs on your own Google Maps key, with the Maps JavaScript API and the Geocoding API. Map height and maximum zoom are settings.
Unit 204Unit 12Templates and brand colors
Three card templates, or your own
What it does. Choose one of three built-in card templates, or write your own in HTML with placeholders such as
{{rent}},{{beds}}and{{apply_link}}.How it works. A custom template goes through a wp_kses allowlist before it is saved. Primary and secondary colors carry to buttons, links and active states, the View Details, Apply Now and Schedule Tour buttons can be renamed or switched off, and a custom CSS box handles the rest.
SettingsBrand ColorsPrimary ColorSecondary ColorCard TemplateTemplate 1Template 2Template 3{{rent}}{{beds}}CustomProperty Groups
A shortcode for each building or region
What it does. Save a filtered AppFolio listings address as a named group, one for each building, community or region.
How it works. Each group gets its own key, placed with
[app_group_listings key="..."]as a grid, or withstyle="slider"as a slider.Group Shortcode Downtown buildings [app_group_listings key="downtown-buildings"]North region [app_group_listings key="north-region"]Townhomes [app_group_listings key="townhomes"]
Where it runs
It runs on Pacific Crest Real Estate and Olympic Multi-Family Management, and on the community websites of both. It started on the first of those: a rebuild that took a five page AppFolio based site to more than 250 pages. Every managed property got a page of its own, with its live availability listing, amenities, features and photos. The CTAs and lead capture forms were rebuilt along the way.
KEO Management in Dayton and Red Roof Rentals in Tacoma run AppFolio as well. For KEO, the AppFolio work was listing marketing optimization. We also advised on working the platform through its v1 API and its reporting. That's a different problem from how listings look, so it did not need the plugin.

How it goes onto a site
Install and activate
Upload the plugin in WordPress and activate it like any other.
Enter your license key
Paste the key we issue into the plugin's License Key screen and validate it. Until it validates, the settings do not save and no listings load.
Connect AppFolio
Enter your AppFolio base address, the one your public listings page lives on. No API credentials are involved.
Choose a template and colors
Pick one of the three card templates or write your own. Set the primary and secondary colors. Then set how many columns show on desktop, tablet and phone.
Place the shortcode
[app_all_listings]on any page, or[app_group_listings key="..."]for a Property Group. Addstyle="slider"for a slider instead of a grid.Add the map if you want it
Enter a Google Maps key with the Maps JavaScript API and the Geocoding API switched on. The "View with Map" button above the listings then opens the map.
Built the way WordPress expects
The parts that keep a site safe and quick are in the code, not left to the person installing it.
Same-host fetching
The plugin checks any listings address it is asked to fetch against the host of the AppFolio address you entered. If it points anywhere else, the fetch is refused.
Nonces and capability checks
The listing requests carry a WordPress nonce. Every settings screen needs an administrator's
manage_optionscapability.Sanitized templates
A custom card template is filtered through a
wp_ksesallowlist before it is saved.Parsed, not pattern matched
Listing data is read from the structure of the page with PHP's DOMDocument and DOMXPath, not with regular expressions.
A cache with a stale copy
Fetched listings are cached for a number of minutes you set. While one fetch runs, other visitors get the last good copy instead of starting another. If AppFolio does not answer, that copy is served instead of an error.
A capped crawl
A large portfolio is read page by page, up to fifteen pages of listings per fetch. So one long list cannot run away with a page load.
What it needs is short, and none of it is an AppFolio API credential.
A WordPress site, with the listings placed by shortcode.
AppFolio listings that are public, reached by their base address.
A license key from us.
For the map only, your own Google Maps key with the Maps JavaScript and Geocoding APIs.
The plugin itself, currently version
2.4.0, written by Kihan Marketing.
What it doesn't do
Three things, stated plainly, so nobody licenses the wrong tool.
It doesn't replace AppFolio or change your data
AppFolio stays the system of record. The plugin reads what AppFolio already publishes and writes nothing back.
It isn't the chat leasing tool
That's a separate tool we built on the AppFolio API. It pulls neighborhoods, pricing, cities and areas, and shows real active listings with full detail. It belongs on the AppFolio property management websites page, not here.
It doesn't decide rankings
A page per unit makes each listing something that can be linked, shared and indexed. Whether it ranks depends on the rest of the site as well. Sometimes that means rebuilding the site around the listings.
If this is the problem you have
You'll usually know already. Someone has looked at your site, then at three other AppFolio sites, and noticed the buttons are identical. Or the listings page works, but it doesn't look like the brand the rest of the site paid to build.
There's a second reason to care. A property management company gets judged by three groups: vendors, owners and residents. The listing display is written for renters. But an owner deciding who should run their building is looking at the same page.
If you run AppFolio on WordPress, you can ask about a license for your own site. Would you rather know first what your AppFolio setup can and cannot change? That's part of a marketing audit. Or start from the broader case for property management marketing and work down.
Questions about AppFolio Listings Pro
The short answers, taken from what the plugin's own code actually does.
Does it need an AppFolio API key?
No AppFolio API key. It reads your public listings page, so the connection is one base address. The map needs your own Google Maps key. The plugin runs on the license key we issue.
Will it work with our theme or page builder?
It is placed with a shortcode, so it goes wherever WordPress accepts one. Its markup takes your theme's fonts, and its colors come from the plugin's settings.
Do we need to write code?
No. Templates, colors, columns, filters, sorting and the button labels are all settings. Code is there if you want it: a card template in HTML, or custom CSS.
Will it help our listings in search?
It gives every unit a page on your own domain, served as ordinary HTML. So each one can be linked, shared and indexed. It does not decide rankings; those depend on the rest of the site too.
What happens when a unit leases?
AppFolio stays the source. The plugin caches listings for the number of minutes you set, so the change shows on its next fetch. If AppFolio is briefly unreachable, the last good copy stays up.
What is AppFolio used for?
AppFolio is property management software, and it is the system of record for a management company. Unit records, rents, availability dates, photos and applications all live in AppFolio, and the leasing team works in it every day. AppFolio Listings Pro reads the public listings from AppFolio and shows them as part of your own WordPress site.
How does AppFolio work with a WordPress site?
AppFolio publishes your open units on a public listings page at your AppFolio address. A WordPress site can link to that page, frame it, or read it with a plugin. The AppFolio website editor gives little control over how those listings look. AppFolio Listings Pro reads the page on the server and draws each unit as your own markup.
Where does AppFolio advertise our listings?
AppFolio shows your open units on its public listings page, and the feed you send out reaches listing portals. Those portals then rank on your units in Google, often above your own site. AppFolio Listings Pro gives every unit a page on your own domain, so your site has something of its own to rank.
Can we use it on our own site?
Yes. AppFolio Listings Pro is available to license. Ask about a license and tell us about the site it would run on.
Google reviews
What clients say
Nicholas Riley
Google review
Kiran and his team are simply fantastic! I've worked with 16 different third party marketing teams and they are by far the best. They are incredibly smart, responsive and an overall pleasure to work with. Since working with them over the last 2 months my ask of them constantly changes and their ability to quickly adapt and figure out new ways to quickly add value is incredibly impressive. I can't recommend Kiran and his team enough and will continue to work with them for the foreseeable future!
Reika
Google review
Kihan Marketing is a fantastic team to work with, friendly, professional, and highly responsive. They are highly responsive and quick to take action, ensuring projects move forward efficiently. Despite working in a fast-paced environment, they remain professional, organized, and attentive to detail. Their dedication really show in the quality of their work, and they consistently deliver results while maintaining clear communication. Highly recommended!
IDR Office
Island Dreams Realty
Kihan Marketing Organization is friendly, professional, and very responsive. Kiran and his team move quickly, communicate clearly, and deliver high-quality work in both website development and social media marketing. They stay organized, pay attention to detail, and make the whole process smooth and efficient. Highly recommended for anyone looking to grow your online presence!
Watcharaponne Chaiyadee
Samui Elegance Real Estate
I highly recommend Kihan Marketing. Kiran is an incredibly talented, skilled, and thoughtful web designer. What impressed us most was that he didn't simply build a website, he took the time to truly understand our business, our vision, and the local Koh Samui real estate market. Throughout the process, Kiran provided valuable advice and creative ideas that helped shape the brand and support the growth of our business. His attention to detail and understanding of what makes a business unique resulted in a website that feels truly personal to our brand. He created the beautiful website for Samui Elegance Real Estate. It represents the elegance, professionalism, and identity of our business beautifully. Thank you, Kiran and Kihan Marketing, for bringing our vision to life. Highly recommended!
Listya
Google review
Working together felt very collaborative and aligned. Communication flowed easily, tasks were well-organized, and we shared the same attention to detail throughout the process. It genuinely felt like working as one team.
San Innovation
Google review
Kihan Marketing Organization has been great to work with. The team is professional, responsive, and focused on delivering real results. I'm very satisfied with their service and would highly recommend them.
vittoria garrafa
Google review
Very fast and professional. I love working with Kihan Marketing. Definitely recommended
Wei Landgraf
Google review
I can't recommend Kihan Marketing highly enough. Kiran and his team truly went above and beyond in helping me with both my social media and my website, and the results speak for themselves.
Shelley Stroeve
Google review
I recently worked with Kihan Marketing to design my new website, and I couldn't be more thrilled with the experience. From start to finish, they were incredibly responsive, communicative, and attentive to every detail.

