AppFolio Scraper — US Rentals + Office Phone from Any PM Site
Pricing
from $1.00 / 1,000 results
AppFolio Scraper — US Rentals + Office Phone from Any PM Site
Turn any AppFolio listings URL into live vacancies with the office phone the index hides. Rent, beds, baths, address, lat/lng, photos, apply URL, office name, phone. Paste {tenant}.appfolio.com/listings. HTTP only, no login. JSON, CSV or Excel. You bring the PM URL — not a weekly dump.
Pricing
from $1.00 / 1,000 results
Rating
0.0
(0)
Developer
Muhamed Didovic
Maintained by CommunityActor stats
0
Bookmarked
16
Total users
16
Monthly active users
7 days ago
Last modified
Categories
Share
Turn any AppFolio listings URL into structured vacancies — including the office phone the index page hides. Paste https://{tenant}.appfolio.com/listings (or a detail URL, or a custom domain that redirects there) and get one row per unit: rent, beds, baths, address, lat/lng, photos, apply link, office name, and phone.
Why Use This Scraper?
- URL-in, live scrape. You point it at a manager's own AppFolio site. It is not a weekly snapshot of "all AppFolio."
- Office phone on every detail. The listings index has no phone. The detail sidebar does (
ATLAS PROPERTY GROUP+(415) 216-4945in the smoke test). - Map coordinates. Lat/lng come from the listings page
googleMap.markersJSON, not guessed from the address. - Apply + showing URLs. Ready-to-use links onto that manager's application and showing forms.
- No login, no browser. Cheerio HTTP only. Proxy optional.
Overview
One dataset row per vacancy on the AppFolio site you pasted. Typical use: a lead-gen or inventory job that already has a list of property-manager websites. There is no national "search by city" input — AppFolio does not publish a public directory of tenant hosts. Filter on the manager's site, copy the URL.
Supported Inputs
| Input | What it is | Example |
|---|---|---|
| Listings index | That PM's current vacancies | https://apg.appfolio.com/listings |
| Detail URL | A single unit | https://apg.appfolio.com/listings/detail/e4afc96a-ac2d-499b-80d8-729e87091806 |
| Custom domain | Marketing site that 302s onto AppFolio | https://www.examplepm.com/listings/ |
startUrl | Single-URL convenience field | same as one startUrls item |
Unsupported: AppFolio Property Manager (the logged-in SaaS), tenant portals, and "all AppFolio in California" with no URL. You must have a listings URL.
Seed list: this repo ships seeds/start-urls.json — ~2,760 {tenant}.appfolio.com/listings URLs mined from Common Crawl and live-checked. Paste a subset into startUrls when you want multi-PM coverage without hunting hosts yourself.
Use Cases
| Audience | What they get |
|---|---|
| Rental lead-gen | Office phone + apply URL for the managers whose sites you already know |
| PropTech / aggregators | Live inventory from PM sites that never hit Zillow |
| Market researchers | Asking rents, beds, availability on a named manager |
| Agencies | A CRM-ready dump of one competitor's vacancies |
How It Works

- Paste one or more
{tenant}.appfolio.com/listingsURLs. - The actor reads every vacancy card and the map-marker JSON (rent, beds, address, photo, lat/lng).
- With
scrapeDetailson (default), it opens each detail page for office name, phone, full description, apply/showing URLs, and extra photos. - It stops at
maxItems. One row per vacancy.
Input Configuration
| Field | Type | Default | What it does |
|---|---|---|---|
startUrls | string list | sample SF listings URL | AppFolio listings or detail URLs |
startUrl | string | empty | Same, for a single URL |
maxItems | integer | 100 | Cap on saved listings (free accounts hard-capped at 100) |
scrapeDetails | boolean | true | Visit detail pages for phone / office name |
proxy | proxy object | off | Optional. Direct fetch worked in recon. |
Example — one manager, 25 listings
{"startUrls": ["https://apg.appfolio.com/listings"],"maxItems": 25}
Example — index only, no phones (faster)
{"startUrls": ["https://aaaprop.appfolio.com/listings"],"maxItems": 100,"scrapeDetails": false}
Output Overview
Each row is one vacancy. Index fields (rent, beds, address, coordinates, photo) are always present when the card parsed. Phone and office name require scrapeDetails: true.
Output Samples
Listings URL https://apg.appfolio.com/listings (detail follow-up):
{"platform": "appfolio","id": "e4afc96a-ac2d-499b-80d8-729e87091806","listingId": 428,"tenant": "apg","url": "https://apg.appfolio.com/listings/detail/e4afc96a-ac2d-499b-80d8-729e87091806","title": "Newer Studios with Outdoor Amenities!","address": "345 6th St, Unit 805, San Francisco, CA 94103","city": "San Francisco","state": "CA","zip": "94103","latitude": 37.778165,"longitude": -122.404677,"rent": 2700,"rentFormatted": "$2,700/mo","currency": "USD","beds": 0,"baths": 1,"sqft": 350,"available": "NOW","officeName": "ATLAS PROPERTY GROUP","phone": "(415) 216-4945","applyUrl": "https://apg.appfolio.com/listings/rental_applications/new?listable_uid=e4afc96a-ac2d-499b-80d8-729e87091806&source=Website"}
Studio units report beds: 0.
Key Output Fields
| Group | Fields |
|---|---|
| Identity | platform, id (UUID), listingId, tenant, url |
| Listing | title, description, rent, rentFormatted, currency, beds, baths, sqft, available |
| Location | address, street, city, state, zip, latitude, longitude |
| Media | image, images[] |
| Contact | officeName, phone, applyUrl, showingUrl, contactUrl |
| Extra | amenities[], utilities, petPolicy, scrapedAt |
AppFolio listing sites do not publish a public email on the vacancy pages we scrape. Phone is on the detail sidebar. Email is a gap vs Buildium's XML feed.
FAQ
Can I scrape all AppFolio listings in a city without URLs? Not via AppFolio search — there is none. Use seeds/start-urls.json (~2.7k live-checked tenant listings URLs from Common Crawl) and filter yourself, or ask for a custom geo-filtered seed. CRT.sh does not enumerate tenants (wildcard cert).
Is this the same as housingfeed/appfolio-scraper? No. That actor reads a pre-built database and filters by state/city. This actor live-scrapes the URL you give it, including phone.
Why is email empty? It is not on the public listings/detail HTML. Do not expect it.
Do I need a proxy? Recon loaded three tenants with a plain GET. Turn proxy on if you hit blocks.
Support
Open an issue on the actor page. For custom work: see Additional Services below.
Additional Services
Need a geo-filtered cut of the seed list, a combined AppFolio+Buildium run, or a private feed? Get in touch via the actor issues tab or memo23's profile. The raw seed files also live in this repo under seeds/.
Explore More Scrapers
- Buildium Scraper — same URL-in idea, public XML with email + phone
- Apartments.com Scraper
- Zumper Scraper
- Zillow Scraper
- More at apify.com/memo23
🤖 For AI Agents & LLM Apps
Compact reference for agents calling this actor via the Apify MCP server or the Apify API (memo23/appfolio-scraper).
Purpose: Live-scrape rental vacancies from an AppFolio property-manager listings URL, including office phone from the detail page.
Minimal input:
{"startUrls": ["https://apg.appfolio.com/listings"],"maxItems": 25}
Output fields: platform, id, listingId, tenant, url, title, description, address, street, city, state, zip, latitude, longitude, rent, rentFormatted, currency, beds, baths, sqft, available, amenities, utilities, petPolicy, image, images, applyUrl, showingUrl, contactUrl, officeName, phone, scrapedAt.
Behaviors an agent should know:
- Always set
maxItems. Default 100; free Apify accounts are capped at 100. - Requires a real
{tenant}.appfolio.com/listings(or detail) URL. No city-wide search. scrapeDetailsdefault true adds phone + office name; false is index-only.beds: 0means studio.- No public email on these pages.
- Proxy off by default.
⚠️ Disclaimer
This Actor is an independent tool and is not affiliated with, endorsed by, or sponsored by AppFolio, Inc. or any of its subsidiaries. All trademarks mentioned are the property of their respective owners.
The scraper accesses only publicly available rental-listing pages on *.appfolio.com — no authenticated Property Manager endpoints, tenant records, or content behind a login. Users are responsible for ensuring their use complies with AppFolio's Terms of Service, applicable data-protection law (GDPR, CCPA, etc.), and any contractual obligations of their own organization.
SEO Keywords
appfolio scraper, appfolio listings api, scrape appfolio, appfolio rental listings, property manager listings scraper, appfolio.com/listings, US rental scraper, apartment vacancy scraper, appfolio office phone, property management inventory, appfolio lead generation, small landlord listings, off-market rentals scraper, appfolio data extraction, US multifamily listings