Craigslist FSBO & Rentals Scraper + Monitor avatar

Craigslist FSBO & Rentals Scraper + Monitor

Pricing

from $0.25 / 1,000 property card scrapeds

Go to Apify Store
Craigslist FSBO & Rentals Scraper + Monitor

Craigslist FSBO & Rentals Scraper + Monitor

Collect owner-filtered sales and rentals with full details, new-listing and price/title monitoring, possible repost hints and deeper price-range searches. California defaults; other regions supported. Platform usage included.

Pricing

from $0.25 / 1,000 property card scrapeds

Rating

0.0

(0)

Developer

Khadin Akbar

Khadin Akbar

Maintained by Community

Actor stats

0

Bookmarked

1

Total users

0

Monthly active users

4 days ago

Last modified

Share

Craigslist FSBO & Rentals Scraper

Collect owner-filtered real estate sales and apartments/housing rentals into one structured dataset. An empty input searches six California markets: SF Bay Area, Los Angeles, San Diego, Sacramento, Orange County and Inland Empire. Replace the region list to search other Craigslist markets.

This is a private candidate with local parser, input, routing and billing tests. The development verification report records exact-build live test status. Human terms and data-use review is required before Store-ready handoff.

Use listingMode: "both" to compare sale inventory and rentals in the selected regions, "fsbo" for owner-filtered real estate sales, or "rentals" for apartments and housing for rent. FSBO means that Craigslist's owner filter was applied and retained. It is not independent verification of ownership or a guarantee that a listing is accurate.

A property researcher can select Sacramento, cap output at 20, and export the dataset as CSV. The listingType column separates sale and rental rows. Open the source URL to verify availability and property details before acting on a listing.

Rooms, sublets, vacation rentals, housing-wanted posts and commercial searches are outside this Actor's scope. Public HTML is scanned through bounded price-range continuation. Monitoring compares repeated runs; it does not create schedules, send alerts, discover contacts or promise complete statewide inventory.

Input examples

California defaults:

{ "listingMode": "both", "maxResults": 25, "includeDetails": false }

Separate sale and rental budgets in Sacramento:

{
"sites": ["sacramento"],
"listingMode": "both",
"minSalePrice": 100000,
"maxSalePrice": 600000,
"minRent": 1000,
"maxRent": 3000,
"maxResults": 20,
"includeDetails": true
}

Another region:

{ "sites": ["newyork"], "listingMode": "rentals", "maxResults": 10 }

startUrls overrides generated searches. Only Craigslist rea and apa search URLs and housing listing URLs are accepted. A direct sale search without purveyor=owner is labeled sale, not fsbo. A direct listing with no category context is labeled unknown.

Housing analysis included

pricePerSqft divides a positive published asking amount by positive published area. dataQualityFlags exposes missing price/area and explicit rental wording in owner-filtered sale posts. Labels retain source classification; these flags do not verify ownership or fraud.

PRICE_SNAPSHOT reports observed counts, minimum, maximum and median asking amounts separately for each region, listing type and currency. It describes the delivered sample only. Zero/unknown prices and possible rental posts in sale categories are excluded from the summary.

Output fields

FieldMeaning
listingId, url, titleSource listing identity and title
listingTypefsbo, rental, sale, or unknown
ownerFilterAppliedOwner-only source search retained its filter
priceText, priceNumeric, currencyPublished price and parsed amount
site, category, neighborhoodCraigslist source region and category
bedrooms, bathrooms, sqftHousing fields when published
postedAt, scrapedAt, sourceSource date, retrieval time and provenance
description, images, address, geoOptional detail enrichment when published
detailEnrichedWhether the full listing detail was obtained

Missing source fields are omitted; zero prices are retained. Coordinates can be approximate. The illustrative shape below is synthetic, not a live acceptance sample:

{
"listingId": "ExampleToken",
"title": "Example owner-listed house",
"url": "https://www.craigslist.org/view/d/example/ExampleToken",
"site": "sacramento",
"category": "rea",
"listingType": "fsbo",
"ownerFilterApplied": true,
"priceNumeric": 450000,
"currency": "USD",
"detailEnriched": false,
"source": "craigslist.org",
"scrapedAt": "2026-10-14T12:00:00.000Z"
}

OUTPUT contains the outcome, persisted count, named charge counts and warnings. RUN_SUMMARY adds region/category coverage, request counts, skipped searches, deadlines and failure diagnostics. DELIVERY_STATE stores bounded reconciliation metadata; a resumed run with an unresolved write or changed input/build stops rather than replaying an ambiguous charge.

Pay per event and platform usage

Events: $0.0032 startup per memory GB (minimum one); $0.00025 per delivered card or detailed listing (one event per row); $0.00015 per search request attempted, including continuation, empty searches and unsuccessful responses. Platform compute, transfer and storage usage are included in these event fees. Unchanged monitoring listings are not charged as results; startup and attempted-search fees still apply.

For 25 cards or detailed listings, result events total $0.00625. Add startup and attempted-search fees; platform usage is included. maxResults limits result events, not total run cost. Use Apify's run charge ceiling as well. One serialized batched writer respects the remaining named-event allowance, persists pending intent before writes and checks the accepted named event counts afterward.

Coverage and best results

The result cap is divided across selected region/type searches. With default input there are twelve searches and twenty-five result slots. Unused slots are not moved between searches. A small cap may skip later regions; the summary records this. Choose one or two regions for deeper coverage.

Each price-range query exposes roughly 350–360 public cards; further narrower ranges can broaden coverage. A result quota, truncated source page, upstream failure, or time budget can produce PARTIAL; it is not a full inventory scan. VALID_EMPTY requires an explicit empty-source marker with empty listing metadata. A challenge, failed request, missing owner filter or unrecognized markup is not counted as empty success.

The default uses direct HTTPS at 256 MB with a bounded 96 MB JavaScript heap, at most two simultaneous detail fetches and an eight-second request timeout. Platform usage is included; paid proxy routes are unavailable. After two required request failures, the circuit breaker stops additional network work. Response bodies are bounded to 1 MiB. No access challenges are solved or unreviewed redirects followed.

API and AI-agent usage

After the private build is available, an account with access can start a bounded run:

curl --request POST \
--url 'https://api.apify.com/v2/acts/khadinakbar~craigslist-fsbo-rentals-scraper/runs?maxTotalChargeUsd=0.25' \
--header "Authorization: Bearer $APIFY_TOKEN" \
--header 'Content-Type: application/json' \
--data '{"sites":["sacramento"],"listingMode":"both","maxResults":10}'

Read the returned run ID, wait for its terminal status, then retrieve its default dataset and the OUTPUT and RUN_SUMMARY key-value records. A successful process status alone does not prove useful or complete output.

Agent prompt: “Search Sacramento Craigslist FSBO and rentals, up to ten listings. Keep sale and rental prices separate, return source URLs, and report whether the run was complete, partial, or empty. Do not infer ownership or unpublished property fields.” Hosted MCP execution has not been independently verified for this candidate.

Failure recovery

INVALID_INPUT identifies a setting the caller can correct. CONFIG_ERROR means the connection or stored reconciliation state needs attention. UPSTREAM_FAILED means no usable listing was retrieved. PARTIAL preserves useful rows with incomplete coverage. Inspect the summary before retrying; do not repeatedly retry challenges or unresolved writes.

Builder's note and data-use boundary

This focused Actor reuses the housing parser from a fresh pull of the general Craigslist housing Actor. The main engineering changes are balanced FSBO/rental quotas, retained-owner-filter checks, separate price filters, direct-first extraction, cap-aware dispatch, source-quality analysis and observed price summaries. Its general-purpose sibling is Craigslist Real Estate & Housing Scraper, which supports additional housing categories.

Craigslist's Terms of Use restrict automated collection without a separate license. Obtain appropriate written authorization before live collection. The production workflow requires human review of collection authority and data use before Store-ready handoff. This candidate does not harvest reply-form contacts, contact sellers, or publish listings. Retain exported data only as permitted by your authorization and delete it when that purpose ends. This Actor is not affiliated with Craigslist.

Development status dated October 14, 2026: private technical validation is recorded separately from human data-use review and Store release approval. Prior sibling runs do not validate this build.

Monitoring and deeper coverage

Use monitorMode: "new" to return new listings only, or monitorMode: "changes" to include new listings and asking-price/title changes. Set a stable watchName and keep query filters unchanged. The first run establishes the baseline. Later runs attach changeTypes, previousPrice, previousTitle and priceChangePercent. Matching titles/region/type/neighborhood under a new listing ID produce a possible repost hint, not a verified repost verdict. Example:

{
"sites": ["sfbay"],
"listingMode": "rentals",
"maxResults": 100,
"monitorMode": "changes",
"watchName": "bay-rentals",
"maxSearchPages": 8
}

Run the same input again to check changes. You can attach it to your own Apify task schedule; this Actor does not create schedules or send messages. State is isolated by authenticated account, Actor, watch name and actual query scope. A server-managed queue lock rejects overlapping runs of the same watch. History expires after 60 days and retains at most 10,000 observations. Partial scans preserve older unseen entries; no disappearance or removal claims are made. Uncertain commits fail closed. Use a fresh run after interruption; resurrection/resume of an existing delivery is deliberately rejected.

maxResults supports up to 5,000 delivered records, maxSearchPages up to 30 search attempts and maxListingsScanned up to 10,000 observations. Each search window has roughly 350–360 static cards. Crowded windows are split into narrower price ranges with a shared boundary deduplicated by listing ID, preserving filters and removing duplicate listing IDs. This can reach older results beyond one public window. Identical-price groups, missing prices, source changes, time and page limits can still truncate coverage. It does not promise a complete Craigslist inventory or rely on ignored page offsets. RUN_SUMMARY reports search pages, price partitions, scanned/unchanged counts and incomplete coverage.

Usage-included price examples

At the configured prices: 25 listings across the default twelve California searches cost at most $0.01125 in event fees when all twelve searches are attempted; 1,000 listings with twelve search requests cost $0.255. Both cards and full details use the same result fee. A one-listing single-search run costs $0.00360, and a one-search no-change monitor costs $0.00335. These are event-fee examples, not a guarantee of all future margins. Tiny and no-change runs can cost more than competitors without startup fees. Details are returned only when successfully fetched; any useful card fallback is labeled without pretending detail enrichment succeeded.