Century 21 Scraper [$1.90/1K💰] | Listings, MLS, Agent Leads
Pricing
from $1.90 / 1,000 results
Century 21 Scraper [$1.90/1K💰] | Listings, MLS, Agent Leads
Scrape Century 21 listings with price, beds, baths, sqft, MLS number and photos, plus listing-agent phone and email. Search any US city, state or ZIP with price and size filters. No API licence needed - built for real estate leads and market research.
Pricing
from $1.90 / 1,000 results
Rating
0.0
(0)
Developer
Ahmed Jasarevic
Maintained by CommunityActor stats
0
Bookmarked
3
Total users
2
Monthly active users
12 days ago
Last modified
Categories
Share
Century 21 Scraper — US Property Listings, MLS Numbers and Listing-Agent Leads
Extract Century 21 real-estate listings and listing-agent contact data from century21.com for market analysis, agent lead generation and property monitoring. Search by city, state or ZIP with price, bed, bath and sqft filters.
Two modes: fast mode returns one compact row per listing straight from the search page with no extra requests, or contact mode visits each property page to add the listing agent's phone, email, office, description, MLS number and photos.
Century 21 has no public developer API. Its listings are only reachable through the site's own front-end, which is exactly what this Actor reads — as clean JSON or HTML, without a browser.
Main use cases
- Real-estate agent lead generation — listing agent name, phone, email and brokerage, with MLS number and property context attached
- Comparable-sales and pricing research — price, beds, baths, sqft, lot size, year built and status per listing
- Neighborhood and ZIP-level market tracking — run the same search on a schedule and diff price and inventory
- Property aggregator and portal builds — photo URLs and listing URLs straight into your own catalog
- Investor prospecting — filter by price band, bedroom count or sqft to build a shortlist before outreach
- Brokerage footprint analysis — group by
agentOfficeto map which offices cover which markets
Input
| Field | Type | Required | Default | Notes |
|---|---|---|---|---|
startUrls | array | no | [] | Direct century21.com/homes/list or /homes/detail URLs. Leave empty and use city / state / zip below instead. Takes priority over the location fields. |
city | string | no | "" | e.g. "Austin". Combined with state to build a search URL. |
state | string | no | "" | Two-letter code, e.g. "TX". Required for city and ZIP searches. |
zip | string | no | "" | If set, the ZIP is used instead of city/state. |
maxListings | integer | no | 200 | Hard cap on dataset rows (capped at 1000). |
includeDetails | boolean | no | false | OFF (default) — fast mode: one compact row per listing from the search page, no extra requests. ON — contact mode: visits each property page and stores rows with agent phone/email, description, MLS number, photos and year built. Contact-mode rows are billed as a separate pay-per-event once the Actor is monetized. |
minPrice / maxPrice | integer | no | unset | Listing price range in USD. |
minBeds / maxBeds | number | no | unset | Bedroom range. |
minBaths / maxBaths | number | no | unset | Bathroom range. |
minSqft / maxSqft | number | no | unset | Living-area range in square feet. |
proxy | object | no | useApifyProxy: false | Cheerio mode works without a proxy. Enable only if you hit rate-limiting. |
Examples
{ "city": "Austin", "state": "TX", "maxListings": 200 }
{ "zip": "33101", "minPrice": 400000, "maxPrice": 900000, "minBeds": 3 }
Fast inventory sweep (cheapest run):
{ "city": "Miami", "state": "FL", "includeDetails": false, "maxListings": 500 }
Agent lead list with contact details:
{"city": "Los Angeles","state": "CA","includeDetails": true,"maxListings": 100}
Direct URLs (bypasses city/state/ZIP):
{"startUrls": [{ "url": "https://www.century21.com/homes/list/city/ca/los-angeles" }]}
Output
One flat JSON dataset, with an overview view (main listing columns) and a details view (everything, including agent contact).
| Field | Type | Description |
|---|---|---|
url | string | Link to the property page on century21.com |
listingId | string | Century 21 listing identifier, extracted from the URL |
title | string | Property page title (street + city) |
price | number | Listing price in USD |
address | string | Full street address |
street | string | Street line only |
city, state, zip | string | Location, state as a two-letter code |
bedrooms, bathrooms, sqft | number | Core spec fields |
lotSize | string | e.g. "3.84 acres" or "5,250 sqft" |
yearBuilt | number | Construction year |
propertyType | string | e.g. Single Family Residence, Condo |
status | string | Active, Pending, Sold, Coming Soon … |
description | string | Agent's public remarks |
mlsNumber | string | MLS identifier |
photoCount | number | Number of photo URLs |
photos | array | Photo URLs |
agentId | string | Listing agent identifier |
agentName | string | Listing agent's name |
agentPhone | string | Listing agent's phone |
agentEmail | string | Listing agent's email |
agentOffice | string | Brokerage / office |
placeName | string | Resolved place name of the search term |
placeType | string | city / county / postalCode / neighborhood |
source | string | How the row was produced: www.century21.com (ssr), (html) or (api) |
scrapedAt | string | ISO timestamp |
includeDetails: false gives you the core listing columns only. agentPhone, agentEmail, description, mlsNumber, photos and yearBuilt are populated in contact mode.
Example output
Fast-mode listing row:
{"url": "https://www.century21.com/homes/detail/ca/los-angeles/1234-main-st/lid-P00800000HByraIABytsiE9GvyG2XEOFgKJpMlnv","listingId": "P00800000HByraIABytsiE9GvyG2XEOFgKJpMlnv","title": "1234 Main St, Los Angeles, CA 90019","price": 1349998,"address": "1234 Main Street, Los Angeles, CA 90019","street": "1234 Main Street","city": "Los Angeles","state": "CA","zip": "90019","bedrooms": 3,"bathrooms": 2,"sqft": 2816,"propertyType": "Single Family Residence","status": "Active","photoCount": 24,"agentName": "John Doe","placeName": "Los Angeles","placeType": "city","source": "www.century21.com (ssr)","scrapedAt": "2026-09-29T10:00:00.000Z"}
Contact-mode listing row (adds the agent and detail fields):
{"url": "https://www.century21.com/homes/detail/ca/los-angeles/1234-main-st/lid-P00800000HByraIABytsiE9GvyG2XEOFgKJpMlnv","listingId": "P00800000HByraIABytsiE9GvyG2XEOFgKJpMlnv","price": 1349998,"address": "1234 Main Street, Los Angeles, CA 90019","city": "Los Angeles","state": "CA","zip": "90019","bedrooms": 3,"bathrooms": 2,"sqft": 2816,"lotSize": "5,250 sqft","yearBuilt": 2024,"propertyType": "Single Family Residence","status": "Active","description": "Beautifully updated home with brand new kitchen, quartz counters and a landscaped rear yard.","mlsNumber": "7086493","photoCount": 24,"photos": ["https://c21assets.century21.com/xxlarge/7086493-1.jpg","https://c21assets.century21.com/xxlarge/7086493-2.jpg"],"agentId": "C0123456","agentName": "John Doe","agentPhone": "(310) 555-0134","agentEmail": "john.doe@century21.com","agentOffice": "CENTURY 21 Preferred","source": "www.century21.com (api)","scrapedAt": "2026-09-29T10:01:12.000Z"}
Build a listing monitor and agent lead list on a schedule
Every Apify Actor is callable over HTTP, so the standard setup is a recurring run against the same search:
- Daily — same
ziporcity+state; diffpriceandstatusto catch price drops, new listings and status changes - Weekly — contact mode on a smaller
maxListingsto keep an agent lead list warm with fresh phone and email - Monthly — new ZIP codes to grow a market-coverage dataset
- Wire it into your CRM — Apify webhooks, Zapier, Make, Google Sheets and 100+ integrations fire on run completion; results export as JSON, CSV, Excel, XML, HTML or RSS
Pick one memory profile per mode: 256 MB is enough for both, since neither uses a browser.
Related Actors
- Century 21 Real Estate Scraper (
crawlerbros/century21-real-estate-scraper) — same source with county/neighborhood search, property-ID lookup and full-detail enrichment - MLS API (
apify/api) — aggregates Zillow, Realtor, Zumper, Apartments.com and Rightmove into one normalized multi-source real-estate feed - Homes.com Scraper (
ahmed_jasarevic/homes-scraper) — agent leads and price monitoring on a competing US portal - Real Estate Search Property Details Scraper (
ahmed_jasarevic/real-estate-search-property-details-scraper) — multi-source property detail pulls when you need more than one portal - Rightmove Scraper (
ahmed_jasarevic/rightmove-scraper) — UK listings and sold prices, for transatlantic comparison
FAQ
Is there an official Century 21 API?
No. Century 21 does not publish a public developer API for listing data. Its listings come from MLS feeds, and the clean official route — the RESO Web API / IDX — requires a licensed broker of record to sign a display agreement and typically $50–$500 per MLS per month. You cannot buy your way in with a credit card. This Actor reads the same public listing surface directly, with no licence in the chain.
What are the alternatives to this Actor?
- RESO Web API / IDX providers — the clean, licence-compliant route, but weeks of paperwork and a broker of record in the loop.
- Zillow Group's MLS Listings platform — invite-only, partner-by-partner, and normalised to the RESO dictionary.
- Aggregator portals (Zillow, Realtor, Rightmove APIs) — a different schema per source, so you rebuild normalisation yourself.
- Browser-based scrapers — unnecessary here, because this Actor's mode reads the site's own front-end payload directly.
Why is the Agent contact data behind includeDetails?
Because it costs extra requests. Fast mode reads the search result page, which already carries price, beds, baths, sqft, status and agent name — one request for the whole page of results. Agent phone, email, brokerage, description, MLS number and the full photo set only exist on the individual property page, so contact mode makes one extra request per listing. That is the trade-off: includeDetails: false for cheap inventory sweeps, true for lead lists.
How do I search by location?
Three ways. city + state (state is required for a city search), zip on its own, or startUrls with a raw century21.com/homes/list/... URL, which bypasses location building entirely. The resolved location comes back on every row as placeName and placeType, so you always know what was actually searched.
What do I get if I pass a direct listing URL?
startUrls accepts /homes/detail URLs as well as search URLs. Pass detail URLs and you get those specific properties (with agent contact, since there's no search page to shortcut from); pass a search URL and you get that search's result set.
Does it work without a proxy?
Yes. Cheerio mode reads the site's own front-end payload and works from a normal datacenter IP. proxy defaults to useApifyProxy: false — enable it only if you hit rate-limiting at high volume.
How much does it cost?
Listing rows are billed at $0.0019–$0.002 per row, so roughly $1.90–$2.00 per 1,000 listings. Agent contact details are a separate pay-per-event (Contact detail, $0.00085–$0.0009 each) charged only in contact mode. No browser is used, so compute cost is a fraction of a Playwright-based actor.
For AI Agents & LLM Apps
Callable via the Apify MCP server and the Apify API. Returns US real-estate listings from century21.com, one flat row per property, with listing-agent contact fields when contact mode is on.
Minimal valid input — fastest possible run, one row per listing from the search page:
{ "city": "Austin", "state": "TX" }
Agent lead list — one extra request per listing, adds phone, email and office:
{ "city": "Los Angeles", "state": "CA", "includeDetails": true, "maxListings": 100 }
ZIP-targeted inventory filter:
{ "zip": "33101", "minPrice": 400000, "maxPrice": 900000, "minBeds": 3 }
Explicit URLs — bypasses location building entirely:
{ "startUrls": [{ "url": "https://www.century21.com/homes/list/city/ca/los-angeles" }] }
Output fields — url, listingId, title, price, address, street, city, state, zip, bedrooms, bathrooms, sqft, lotSize, yearBuilt, propertyType, status, description, mlsNumber, photoCount, photos, agentId, agentName, agentPhone, agentEmail, agentOffice, placeName, placeType, source, scrapedAt.
Behaviors an agent should know
stateis required whenever you usecityorzip.cityalone will not build a usable search URL.zipoverridescityandstate. If both are supplied, the ZIP wins.startUrlsoverrides all location fields. When set,city/state/zipare ignored.includeDetailsdefaults tofalse. Leaving it off is the cheap path — one request per results page. Turning it on makes one extra request per listing and bills aContact detailevent per row.- Fast mode does not populate
agentPhone,agentEmail,description,mlsNumber,photosoryearBuilt. Do not assume those fields exist unlessincludeDetailsistrue. maxListingsis hard-capped at 1000. Setting it higher does nothing.price,bedrooms,bathrooms,sqftandyearBuiltcan arrive as numbers, strings or booleans depending on which front-end surface produced the row (seesource). Coerce before arithmetic.photosis an array of URLs, not an image payload — no image bytes are downloaded, so this stays cheap.
Billing model — pay per event: one result event per listing row ($0.0019–$0.002) and, in contact mode only, one Contact detail event per row with agent contact data ($0.00085–$0.0009).
Legal & Compliance Disclaimer
This Actor is an independent third-party tool. It is not affiliated with, endorsed by, sponsored by, or connected to Century 21, Realogy Holdings, or any CENTURY 21 brokerage.
It reads only publicly accessible listing and property pages on www.century21.com. It does not log in, does not bypass authentication, does not solve CAPTCHAs, does not use proxies by default, and does not access MLS systems or any licensed feed.
Output includes listing agent names, phone numbers, email addresses and brokerage names. Those are personal data. Many US jurisdictions treat a real-estate agent's publicly listed business contact details as business information, but that is not true everywhere and CAN-SPAM, TCPA and state-level do-not-call and email-consent rules still apply to any outreach you send. Verify your own legal basis — and note that some MLS display agreements restrict how long listing data may be retained or redistributed, including data collected from public pages.
This Actor is a data-collection tool; it does not provide legal advice and makes no claim that any particular use is permitted.
SEO Keywords
century 21 scraper, century21 api, real estate listing data, us property listings, mls listing data, real estate api alternative, real estate lead generation, real estate agent leads, listing agent contact data, property price monitoring, zip code property data, real estate market research, house for sale data, real estate comparable sales, realtor lead list, property aggregator data, real estate dataset, home sales data by city, rental and sale listings, real estate scraping, proptech data source, brokerage footprint analysis, investor property leads, real estate comps data