Craigslist Classifieds Scraper avatar

Craigslist Classifieds Scraper

Pricing

from $0.03 / 1,000 item extracteds

Go to Apify Store
Craigslist Classifieds Scraper

Craigslist Classifieds Scraper

Export public Craigslist listings across cities and categories. Get prices, images, GPS, descriptions, attributes, timestamps, posting IDs, quality signals, and public self-disclosed contacts.

Pricing

from $0.03 / 1,000 item extracteds

Rating

0.0

(0)

Developer

Hanna Nosova

Hanna Nosova

Maintained by Community

Actor stats

0

Bookmarked

5

Total users

3

Monthly active users

12 days ago

Last modified

Share

Scrape public Craigslist listings by city, category, keyword, filters, or search URL.

Use this Actor to export local listing data for resale research, housing scans, pricing checks, classified alerts, and API workflows. It saves one dataset row per public listing and can optionally open listing detail pages for richer fields.

At a glance

  • Best for: Craigslist search exports, local marketplace monitoring, apartment scans, garage-sale tracking, and price research.
  • Inputs: Craigslist search URLs or structured city/category/query filters, price range, image filter, sort order, posted-today filter, item limit, detail mode, and proxy settings.
  • Outputs: Listing URL and IDs, title, price, structured address, timestamps, description, category attributes, full image URLs, map coordinates, quality signals, reply availability, and contact details explicitly published in the public listing body.
  • Access: Public Craigslist pages only. No login, cookies, private seller data, relay-address reveal, or protection bypass.
  • Cost: $0.005 per run plus the item event for each saved Craigslist listing.

Ready-to-run examples

These public example links were verified from the tracked task table for this Actor.

What can it do?

Craigslist Classifieds Scraper turns public Craigslist searches and listing URLs into structured local-listing rows.

  • Export Craigslist search results by city, category, keyword, price range, image filter, sort order, and posted date.
  • Open listing pages when needed to collect public descriptions, attributes, images, timestamps, and map fields.
  • Extract stable structured search data from Craigslist's JSON-LD and merge it with current result links, reducing dependence on CSS layout details.
  • Inspect data quality through parseConfidence, warnings, detailFetched, and detailError fields.
  • Collect self-disclosed public contacts from the listing body while leaving Craigslist relay contacts obfuscated.
  • Monitor local marketplaces for housing, resale, jobs, garage sales, community posts, and other public categories.
  • Build alerts and dashboards by scheduling stable Craigslist searches and deduplicating listing URLs.
  • Use it as a Craigslist listings API for CSV, JSON, Excel, RSS, Dataset API, or AI-agent workflows.

Input example

{
"cityOrSite": "sfbay",
"category": "sss",
"query": "desk",
"maxItems": 10,
"includeDetails": true,
"minPrice": 20,
"maxPrice": 250,
"hasImage": true,
"sort": "date",
"postedWithin": "anytime",
"proxyConfiguration": {
"useApifyProxy": false
}
}

Output example

{
"id": "1234567890",
"opaqueId": "j9QQELK78mxUE2ubupRngt",
"url": "https://sfbay.craigslist.org/sfc/fuo/d/san-francisco-standing-desk/1234567890.html",
"title": "Standing desk",
"price": 120,
"currency": "USD",
"category": "sss",
"cityOrSite": "sfbay",
"neighborhood": "San Francisco",
"location": "San Francisco",
"postedAt": "2026-07-03T09:30:00-0700",
"updatedAt": null,
"description": "Adjustable standing desk in good condition.",
"attributes": {
"condition": "good"
},
"imageUrls": ["https://images.craigslist.org/example.jpg"],
"latitude": 37.7749,
"longitude": -122.4194,
"sellerContactAvailable": true,
"contactEmails": ["seller@example.com"],
"contactPhoneNumbers": [],
"contactObfuscated": false,
"detailFetched": true,
"detailError": null,
"parseConfidence": 1,
"warnings": [],
"scrapedAt": "2026-07-03T10:00:00.000Z"
}

Input configuration

SettingJSON keyWhat it does
Craigslist search URLsstartUrlsOne or more public Craigslist search/category URLs.
City/site subdomaincityOrSiteCraigslist city subdomain such as sfbay, newyork, losangeles, chicago, seattle, or austin.
Category codecategoryCraigslist category code such as sss, apa, jjj, gms, or ccc.
Search queryqueryKeyword used when building a structured search URL.
Maximum listingsmaxItemsCaps saved listings. The Actor enforces a maximum of 10,000.
Open listing detail pagesincludeDetailsVisits each listing page for description, attributes, images, timestamps, and map data when public.
Detail-page concurrencymaxConcurrencyCaps simultaneous detail requests from 1 to 15; default is 5.
Safe run deadlinerunTimeSecsStops starting requests before the platform timeout; default is 240 seconds.
Minimum priceminPriceAdds Craigslist min_price for categories that support prices.
Maximum pricemaxPriceAdds Craigslist max_price for categories that support prices.
Listings with images onlyhasImageAdds the Craigslist image filter.
Sort ordersortUses date, rel, priceasc, or pricedsc for structured searches.
Posted withinpostedWithinUses all visible posts or today's posts only.
Proxy configurationproxyConfigurationOptional Apify Proxy or custom proxy settings.

Output fields

FieldTypeDescription
idstring or nullNumeric posting ID found on the detail page.
opaqueIdstring or nullOpaque ID from current Craigslist search-result URLs.
urlstringPublic Craigslist listing URL.
titlestring or nullListing title.
pricenumber or nullNumeric price when shown.
currencystring or nullDetected currency, usually USD.
categorystring or nullCraigslist category code.
cityOrSitestring or nullCraigslist city subdomain.
neighborhoodstring or nullNeighborhood or locality text when visible.
locationstring or nullSearch-card or detail-page location text.
postedAtstring or nullPosted timestamp from the detail page.
updatedAtstring or nullUpdated timestamp from the detail page.
descriptionstring or nullListing body text when detail mode succeeds.
attributesobjectCategory-specific public attributes from the listing page.
imageUrlsarrayPublic image URLs found on the listing.
latitude, longitudenumber or nullPublic map coordinates when exposed.
sellerContactAvailablebooleanWhether a public reply button was detected. This is not a private contact field.
contactEmails, contactPhoneNumbersarraysContact details explicitly written in the public listing body.
contactObfuscatedbooleanA reply control exists but no direct public contact is present in the body.
detailFetched, detailErrorboolean, string or nullPer-listing enrichment status and bounded error diagnostics.
parseConfidence, warningsnumber, arrayMachine-readable data-quality score and extraction warnings.
scrapedAtstringISO timestamp when the row was saved.

Pricing

This Actor uses pay-per-event pricing: one start charge per run and one atomic item charge for each dataset row saved. The exact configured prices are:

EventApify tierWhat is chargedPrice
startAll tiersOne-time fee per run$0.005
itemFreeOne saved Craigslist listing$0.000035655
itemBronzeOne saved Craigslist listing$0.000031004
itemSilverOne saved Craigslist listing$0.000024183
itemGoldOne saved Craigslist listing$0.000018603
itemPlatinumOne saved Craigslist listing$0.000012402
itemDiamondOne saved Craigslist listing$0.0000086812

Apify may also charge platform usage for compute, storage, proxies, or data transfer outside this Actor pricing. Check the Actor run and the Apify Pricing tab for the exact cost shown to your account.

Common workflows

  • Local price research: Track prices for furniture, bikes, cars, tools, or rentals in a city.
  • Housing scans: Search apartment category apa with price limits and detail pages enabled.
  • Daily alerts: Schedule a small posted-today run for categories such as garage sales or free items.
  • API export: Feed public listing rows into spreadsheets, dashboards, internal alerts, or AI agents.

Tips

  • Use direct search URLs for exact searches: Paste a Craigslist URL into startUrls when you already tuned filters in a browser.
  • Use structured inputs for repeatability: cityOrSite, category, and query are easier to schedule and modify.
  • Open details only when needed: includeDetails adds richer fields but makes runs slower.
  • Keep limits small for alerting: Use maxItems: 10 to 50 for recurring monitoring.

Limits and caveats

  • Public pages only: The Actor does not log in and does not bypass private contact protections.
  • Reply button is not contact data: sellerContactAvailable only reports whether a public reply control was detected.
  • Some categories have sparse fields: Price, map, timestamps, image, and attribute fields depend on the listing and category.
  • Craigslist can block or throttle traffic: Use modest limits and proxy settings when needed.
  • Deleted listings: A direct URL that returns HTTP 404 or 410 fails clearly; it is never silently emitted as a current listing.
  • Run diagnostics: RUN_SUMMARY distinguishes successful, partial, valid-empty, and failed outcomes and records bounded source/detail errors.

API usage

Run through the Apify API with the same JSON keys as the input schema.

cURL

curl -X POST "https://api.apify.com/v2/acts/fetch_cat~craigslist-classifieds-scraper/runs?token=$APIFY_TOKEN" \
-H "Content-Type: application/json" \
-d '{"cityOrSite":"sfbay","category":"sss","query":"desk","maxItems":10,"includeDetails":true}'

JavaScript / Node.js

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('fetch_cat/craigslist-classifieds-scraper').call({
cityOrSite: 'sfbay',
category: 'sss',
query: 'desk',
maxItems: 10,
includeDetails: true,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);

Python

import os
from apify_client import ApifyClient
client = ApifyClient(os.environ["APIFY_TOKEN"])
run = client.actor("fetch_cat/craigslist-classifieds-scraper").call(run_input={
"cityOrSite": "sfbay",
"category": "sss",
"query": "desk",
"maxItems": 10,
"includeDetails": True,
})
items = client.dataset(run["defaultDatasetId"]).list_items().items
print(items)

MCP and AI agents

For AI agents, use the official Apify MCP server. A focused single-Actor server URL is:

https://mcp.apify.com?tools=fetch_cat/craigslist-classifieds-scraper

Claude CLI:

$claude mcp add apify-craigslist --transport http "https://mcp.apify.com?tools=fetch_cat/craigslist-classifieds-scraper"

JSON configuration for MCP clients:

{
"mcpServers": {
"apify-craigslist": {
"url": "https://mcp.apify.com?tools=fetch_cat/craigslist-classifieds-scraper"
}
}
}

Example prompts:

  • "Run Craigslist Classifieds Scraper for SF Bay desk listings under 250 dollars, then return title, price, neighborhood, and URL."
  • "Find today's Seattle garage sales with images and save the results to a dataset."

FAQ

Can I use any Craigslist city? Use the public Craigslist city subdomain, such as sfbay, austin, seattle, or newyork.

Does the Actor open every listing page? Only when includeDetails is enabled. Search-only mode is faster but returns fewer detail fields.

Can I export to CSV, Excel, JSON, or API? Yes. Apify datasets can be downloaded as CSV, Excel, JSON, JSONL, XML, RSS, or accessed through the API.

Can it scrape seller emails or phone numbers? Only when the poster explicitly wrote them in the public listing body. The Actor does not reveal private Craigslist relay addresses or bypass reply protections.

Why did I get fewer listings than requested? Craigslist may return fewer public results for the search, remove old posts, throttle a request, or hide detail fields.

Support

Open an issue on the Actor page if a public Craigslist page stops working or an expected field is missing. Include the run ID or run URL, input JSON, expected output, actual output returned by the dataset, and a reproducible public URL when safe to share. Do not include private contact data or API tokens.

Privacy and data handling

This Actor runs with Apify limited permissions and only processes data needed for the documented run. It uses search/listing inputs and public product, marketplace, or listing records to produce the output dataset and sends requests to public Craigslist Classifieds pages/endpoints; results are stored in Apify run storage for your account. FetchCat does not use your inputs or outputs for advertising, does not use them for model training, and does not retain them outside the Apify run except for transient support debugging when you explicitly share run details. You are responsible for using the Actor lawfully, respecting the target site's terms, and avoiding unnecessary personal or sensitive data in inputs.