The rental listing platform AppFolio never built — running inside WordPress.
A WordPress plugin syncing AppFolio listings with AI content, multi-agent showing bookings, a full REST API, and an Ad Manager, all built from scratch.
AppFolio is the back office. But property managers still need a website that actually works for renters.
AppFolio is great at what it does — applications, payments, maintenance requests, owner reporting. What it doesn't give you is a branded, SEO-friendly, fully featured rental listing experience that lives on your own domain, ranks in Google, and lets potential renters interact with your inventory the way a 2025 website should.
Six capability clusters. One plugin.
Every module built to work independently and as a system — modular architecture, no monolithic file, each responsibility in its own class.
AppFolio sync engine
Pulls live listing data from AppFolio on a cron schedule and keeps your WordPress inventory in sync — automatically.
Listing index scraper
Fetches the AppFolio /listings index, extracts all detail URLs, and queues each one for full parsing — respecting rate limits and a configurable max-items ceiling.
Detail page parser
Extracts address, rent, beds, baths, sqft, deposit, available date, pet policy, utilities, amenities, appliances, parking, laundry, fees, photos, and the full property description — from real DOM, not a feed.
WordPress CPT upsert
Each listing becomes a native WordPress custom post type (lb_listing) — indexable by search engines, manageable in the WP admin, and available to any plugin or theme that can query posts.
Featured image sync
Downloads and attaches the primary listing photo to the WordPress media library, so listings have real featured images rather than external references that break when AppFolio changes a URL.
YouTube video tour detection
Auto-detects YouTube tour videos embedded in the AppFolio gallery and extracts the video ID, URL, and timestamp. Per-listing admin override lets managers set a different video — manual always wins over scraped.
Status lifecycle
Tracks listing state across available, coming_soon, pending, rented, and off_market — with visibility controls (public / unlisted) per listing. State changes trigger notifications and Ad Manager alerts automatically.
Frontend display system
A full shortcode library and Elementor-compatible output that renders listings anywhere on any WordPress page or theme.
[lb_listings]
Full listing grid with live AJAX filtering — search, min/max rent, beds, baths, pets, side of town. Handles 100+ listings without a page reload. Degrades gracefully with no-JS fallback.
[lb_gallery]
Responsive photo carousel for each listing's full image set — lightbox-ready, keyboard navigable, mobile-swipe compatible.
[lb_map]
Embedded map for each listing address — configurable provider, no API key needed for the default embed mode.
10 data shortcodes
[lb_summary], [lb_description], [lb_rental_terms], [lb_pet_policy], [lb_amenities], [lb_utilities], [lb_appliances], [lb_open_houses], [lb_video], [lb_cta] — every data field independently addressable.
Hero sliders
Carousel and hero-banner shortcodes pull featured listings with optional "side of town" filtering via a ZIP-code reverse-lookup helper — so a page can show only West Toledo rentals automatically.
Auto-SEO injection
Per-listing title tags, meta descriptions, and OpenGraph data are written automatically from AI-generated or scraped content — every listing page is search-engine-ready with zero manual entry.
AI content engine
Generates SEO-optimized headings, descriptions, and meta descriptions for every listing using OpenAI, Google Gemini, or Grok — automatically, on a 5-minute cron.
Multi-provider support
OpenAI, Google Gemini, and Grok (xAI) are all supported behind a single interface. Switching providers is a settings change — no code change needed.
Hash-based change detection
Builds a hash of the source fields that feed the AI prompt. If the listing data hasn't changed since last generation, AI is skipped — no wasted API calls on stale listings.
Failure parking
After 3 consecutive generation failures, a listing is parked — it won't consume cron ticks or API quota until an admin resets it manually. One bad listing can't exhaust the entire budget.
Manual "Run AI Now" button
A dashboard button triggers a bounded catch-up batch (up to 15 listings or 20 seconds) using the same generator the cron uses — so a newly configured site can backfill immediately.
Key persistence safeguard
Blank API key fields on save preserve the stored key rather than erasing it. Accidental key loss is structurally impossible — you must type a new value to change a key.
Generated fields
AI produces a clean page heading, a full property description written in natural language, and an SEO meta description — each stored in separate meta fields and independently addressable.
Showing booking engine
A complete showing-management system built into WordPress — scheduling, conflict detection, multi-agent availability, email workflows, and shareable calendars.
Multi-agent availability
Multiple showing agents each get their own 7-day availability grid. Available times are combined as a union — a slot is offered if any agent covers it. Different people can show on different days with no overlap conflicts.
Conflict detection
Booked slots are blocked from the visitor calendar in real time. Conflict detection works correctly across non-UTC timezones — a bug that broke every other implementation has been fixed at the cache schema level.
Counter-proposal flow
If a requested slot doesn't work, the property manager can propose an alternative time directly from the admin — the visitor receives a new confirmation request rather than a flat decline.
Full email workflow
Templated, configurable emails cover every event: request received, confirmed, declined, counter-proposal, reminders (configurable intervals), cancellation, and property-removed notices. Em-dash renders correctly in all mail clients.
Shareable ICS calendar
Every confirmed showing generates an ICS file the visitor can add to Google Calendar, Apple Calendar, or Outlook — from a link in the confirmation email, no account required.
Open house manager
Separate open house scheduling, RSVP flow, and daily digest email to the property manager — parsed directly from AppFolio listing data when available, manually manageable per-listing otherwise.
Public REST API
A clean, versioned REST API at /wp-json/lb/v1/ — designed for AJAX-powered filtering on large inventories and external integrations.
Listing collection endpoint
GET /lb/v1/listings with full filter support: search (address AND title), min/max rent, beds, baths, pets, availability state, side of town. Search actually searches addresses — the core WP search bug is patched.
Dynamic filters endpoint
GET /lb/v1/listings/filters returns the available filter options from the live inventory — so dropdowns always reflect what's actually in stock, not hardcoded values.
Single listing endpoint
GET /lb/v1/listings/{id} returns the full data payload for a single listing — everything the plugin stores, in one clean JSON response. Ready for property inspection tools, mobile apps, or partner integrations.
Showing slots REST API
Separate showing endpoints handle available slot queries and booking submissions — the same AJAX engine the frontend uses, exposed as proper REST routes for any consumer.
Sharing widget
Generates shareable links and email-share flows per listing with a real IP-based rate limiter (correctly resolves the real client IP behind Cloudflare and nginx reverse proxies).
Export / import
Full plugin settings and listing data can be exported to a manifest.json and re-imported — with server-side validation that rejects PHP serialized payloads in imported meta. Safe for complete site migrations.
Ad Manager companion plugin
A separate plugin (ListingBridges Ad Manager) that connects listing inventory to ad campaigns — with automatic off-market alerting and structured export.
Curated ad selection
Property managers select and order specific listings for promotion — assigning stable ad numbers that persist through data sync cycles, so campaign creative and targeting stay paired to the right property.
Off-market monitoring
A cron job monitors every listing in the active ad pool. When a listing goes off-market in AppFolio (and syncs to WP), the Ad Manager automatically flags it and sends an alert — before ad spend is wasted on a property that can't be rented.
Structured export
Export the current ad selection as a structured data file — ready for ad platform import or the marketing team's workflow, without manual data entry or spreadsheet maintenance.
ZIP-based targeting
Side-of-town classification by ZIP code powers "area targeting" for ad campaigns — ads for West Toledo rentals only get served to West Toledo geographic targets, automatically.
Test email delivery
Built-in test email trigger confirms the full notification pipeline is working before a real off-market event happens — not after the campaign has already spent a week promoting a rented unit.
DB sync on load
Every admin page load syncs the Ad Manager's listing table with the current ListingBridges inventory — keeps the ad pool accurate with zero manual reconciliation.
From AppFolio to a ranked, bookable, AI-described listing page — automatically.
Listings that blank out of AppFolio get described by AI — automatically.
AppFolio doesn't write your listing copy. It sends a title and a data dump. ListingBridges turns that into a full, unique, SEO-optimized property description — on every sync, without a human in the loop.
A complete showing system that replaces the phone tag.
From the moment a renter clicks "Schedule a Showing" to the confirmed calendar invite in their inbox — fully automated, conflict-free, and manageable from the WordPress admin.
Multi-agent availability
Each agent gets their own 7-day schedule. The system offers a slot if any agent is free — automatically unified, deduplicated, and sorted.
Travel buffer + one-per-day rules
Configurable buffer between showings, and optional one-showing-per-visitor-per-day enforcement — no double-booking by the same person.
Timezone-correct conflicts
Conflict detection works correctly in every timezone — a v1.7.2 fix that patched a UTC comparison bug that broke every other property plugin outside UTC.
ICS calendar export
Every confirmation generates a standard .ics file. One click adds the showing to Google Calendar, Apple Calendar, or Outlook — no account needed.
Open house manager
Separate from showings — parsed from AppFolio data automatically, with a per-property admin override, RSVP flow, and a daily digest email to the manager.
A clean API layer for everything built on top.
The same data that powers the frontend is available over a versioned REST API — ready for AJAX filtering, mobile apps, property tools, or partner integrations.
Endpoints at /wp-json/lb/v1/
Built for VeriProper integration. A property management platform's application pipeline connects to ListingBridges over this API — real-time property availability feeds directly into the property inspection and tenant management workflow.
Stop running ads for listings that just got rented.
A companion plugin that connects live inventory state to your ad campaigns — automatically.
ListingBridges Ad Manager
companion plugin · v0.2.1Curated ad pool
Select specific listings for promotion and assign them stable ad numbers. The numbers persist through every AppFolio sync — so your campaign creative stays paired to the right property even as inventory changes around it.
Off-market alerting
A cron job watches every listing in the active ad pool. The moment a listing goes off-market in AppFolio and syncs into WordPress, the Ad Manager flags it and sends an alert — before ad spend continues on a property that can't be rented.
ZIP-based area targeting
Side-of-town classification by ZIP code powers geographic ad targeting. Ads for North Toledo properties can be automatically filtered to only appear in the ad set targeting that part of the city.
Structured export
Export the current ad selection as structured data — ready for ad platform import, spreadsheet review, or the creative team's workflow. No manual data entry, no copy-pasting from AppFolio.
Any property manager on AppFolio who needs a real website.
Residential property management
The primary use case. Any company managing a portfolio of rental homes or apartments on AppFolio can sync their entire inventory to a branded WordPress site — with bookable showings, AI content, and ad tooling — in one install.
Regional rental housing companies
Built for the 50–500 unit operator who is too large for manual updates and too specialized for a generic listing site. ListingBridges gives them enterprise-grade listing management at plugin cost.
Mixed-use & commercial managers
The data model handles commercial and mixed-use listings as naturally as residential — the same sync engine, shortcodes, and showing system work for any property type AppFolio manages.
Companies building companion apps
The REST API is purpose-built for external tooling. If you're building a property inspection app, a tenant portal, or a mobile companion — ListingBridges is the data layer you plug into, not a CMS you fight against.
Agencies building for PM clients
ListingBridges is white-label friendly. Agencies managing AppFolio clients on WordPress can deploy this as a standard part of their stack — each client gets a fully managed, branded listing experience without custom development per site.
AppFolio alternatives in transition
The sync engine isn't AppFolio-exclusive at the architecture level. The scraper, CPT system, AI layer, and showing engine are all platform-agnostic. Other property management platforms are an adapter away.
What's inside the plugin.
Managing rentals on AppFolio and need a website that actually works?
Built for property owners and management companies who've outgrown off-the-shelf AppFolio plugins. Let's talk about your inventory and what it would take to get it running.