# Craigslist Scraper - Listings, Prices & Images (`logiover/craigslist-scraper`) Actor

Scrape Craigslist listings without an API or login. Export Craigslist data to CSV/JSON with prices, images & coordinates. Unofficial API alternative.

- **URL**: https://apify.com/logiover/craigslist-scraper.md
- **Developed by:** [Logiover](https://apify.com/logiover) (community)
- **Categories:** E-commerce, Business, Marketing
- **Features:** Limited permissions
- **Stats:** 66 total users, 4 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.99 / 1,000 results

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## Craigslist Scraper — Listings, Prices, Images & GPS (No API)

![Apify Actor](https://img.shields.io/badge/Apify-Actor-00A67E?logo=apify\&logoColor=white) ![No API key](https://img.shields.io/badge/No%20API%20key-required-2ea44f) ![Pay per result](https://img.shields.io/badge/Pricing-Pay%20per%20result-1C7ED6) ![Marketplace](https://img.shields.io/badge/Category-Marketplace%20%26%20Classifieds-8B5CF6) ![Export](https://img.shields.io/badge/Export-JSON%20%7C%20CSV%20%7C%20Excel-F59E0B)

Scrape listings from **Craigslist**, the largest classifieds marketplace in the US — **for-sale, cars & trucks, apartments & housing, jobs, services and gigs** — from any city subdomain. Paste any Craigslist **search-results URL** (or build one from a city + category) and pull **title, numeric & formatted price, neighborhood, GPS coordinates, the full image gallery, post date and a direct listing link** in clean structured JSON. **Fast, no headless browser, no API key, no login, no cookies.**

> ### 🏆 Why this Craigslist scraper?
>
> **15+ fields per listing** · **thousands of listings per run** · direct HTTP (no browser) · US residential-proxy ready · export to JSON / CSV / Excel. The unofficial **Craigslist API alternative** for price research, reselling, market analysis and lead generation — with **zero account or ban risk**.

***

### ✨ What this Actor does / Key features

- 🗂️ **Any city & any category** — for-sale (all), cars & trucks, apartments/housing, jobs, services, gigs, electronics, furniture and more, from any Craigslist city subdomain.
- 🔗 **URL or builder input** — paste ready-made search URLs, or build a search from a `city`, `category`, `query`, `minPrice`, `maxPrice` and `filters`.
- 📦 **Deep pagination** — walks the entire result set, not just the first page — **hundreds to thousands of listings** per search.
- 💲 **Price & location** — both the formatted price string and a parsed numeric `priceValue`, plus neighborhood and approximate GPS coordinates.
- 🖼️ **Full image galleries** — every listing photo as a ready-to-use image URL, plus an image count.
- 🗓️ **Post dates** — exact ISO 8601 timestamp for each listing, ideal for freshness and trend analysis.
- 📝 **Optional deep details** — toggle `includeDetails` to also pull the full description, key-value attributes, precise detail-page coordinates and full-size images.
- 🧹 **De-duplicated output** — results stream to your dataset clean and export-ready.
- 🛡️ **Login-free & safe** — reads only public data over US residential proxies; **no Craigslist account, cookie or API key is ever used or risked**.
- ⚡ **Fast & low-cost** — no headless browser, so it stays cheap even on huge multi-city searches.

### 🚀 Quick start (3 steps)

1. **Configure** — paste one or more Craigslist search URLs (open Craigslist, pick a city + category, apply filters, copy the URL) or fill in the `builder`. Set `maxResults`.
2. **Run** — click **Start**. The Actor resolves each search and paginates the results into your dataset.
3. **Get your data** — open the **Output** tab and export to **JSON, CSV, Excel or HTML**, or pull it via the Apify API.

### 📥 Input

Provide at least one `searchUrls` entry **or** a `builder` object. Everything else is optional.

#### Example — electronics + cars across two cities

```json
{
  "searchUrls": [
    "https://newyork.craigslist.org/search/sss?query=iphone",
    "https://losangeles.craigslist.org/search/cta?query=toyota&max_price=15000"
  ],
  "maxResults": 2000,
  "includeDetails": false
}
```

#### Example — apartments with the builder (no URL needed)

```json
{
  "builder": { "city": "chicago", "category": "apa", "query": "loft", "maxPrice": 2500 },
  "maxResults": 500
}
```

#### Example — deep details for full descriptions & attributes

```json
{
  "searchUrls": ["https://seattle.craigslist.org/search/ele?query=macbook"],
  "maxResults": 300,
  "includeDetails": true,
  "proxyConfiguration": { "useApifyProxy": true, "apifyProxyGroups": ["RESIDENTIAL"], "apifyProxyCountry": "US" }
}
```

| Field | Type | Description |
|-------|------|-------------|
| `searchUrls` | array | Craigslist search-results URLs. Pick a city + category on Craigslist, apply filters, copy the URL. Provide this **or** `builder`. |
| `builder` | object | Build a search without a URL: `{ city, category, query, minPrice, maxPrice, filters }`. `city` is the subdomain (e.g. `newyork`), `category` is the code (e.g. `sss`, `cta`, `apa`). |
| `maxResults` | integer | Max listings to collect across all searches. `0` = unlimited (paginates as deep as Craigslist allows). Default `1000`. |
| `includeDetails` | boolean | Also open each listing's detail page for the full description, attributes, precise coordinates and full-size images. Much slower — leave off for fast bulk scraping. Default `false`. |
| `proxyConfiguration` | object | Proxy settings. Craigslist blocks datacenter IPs, so US residential proxies are **required** — leave the pre-configured default (Apify Proxy · RESIDENTIAL · US). |

> **Common category codes:** `sss` for-sale (all) · `cta` cars & trucks · `apa` apartments/housing · `jjj` jobs · `bbb` services · `ggg` gigs · `mob` cell phones · `ele` electronics · `fua` furniture.
>
> **Finding a search URL:** open craigslist.org, choose your city subdomain and a category, apply any price/keyword filters, then copy the whole `.../search/...` URL from the address bar into `searchUrls`.

### 📤 Output

One row per listing, exportable to JSON, CSV, Excel or HTML. Here is a trimmed sample record:

```json
{
  "id": "35724329",
  "title": "iPhone 17 pro Max (Never used) 512gb Unlocked",
  "price": "$1,360",
  "priceValue": 1360,
  "category": "sss",
  "location": "bronx",
  "latitude": 40.8737,
  "longitude": -73.8712,
  "postedDate": "2026-07-04T11:51:55.000Z",
  "slug": "bronx-iphone-17-pro-max-never-used",
  "images": [
    "https://images.craigslist.org/00M0M_4RlzwaQw03v_0t20CI_600x450.jpg",
    "https://images.craigslist.org/00H0H_kF1asOcIYBa_0t20CI_600x450.jpg"
  ],
  "imageCount": 8,
  "url": "https://newyork.craigslist.org/brx/mob/d/bronx-iphone-17-pro-max-never-used/7938688572.html",
  "source": "newyork.craigslist.org",
  "scrapedAt": "2026-07-06T13:14:45.288Z"
}
```

With `includeDetails: true`, each record also gains `description`, `attributes`, `detailLatitude`, `detailLongitude` and `fullImages`.

<details>
<summary><b>📋 Full field reference (click to expand)</b></summary>

| Field | Description |
|-------|-------------|
| `id` | Craigslist listing identifier |
| `title` | Listing title |
| `price` | Formatted price string as shown on Craigslist (e.g. `$1,360`) |
| `priceValue` | Parsed numeric price value |
| `category` | Category code the listing was found under (`sss`, `cta`, `apa`, …) |
| `location` | Neighborhood / sub-area label |
| `latitude` / `longitude` | Approximate GPS coordinates from the search result |
| `postedDate` | When the listing was posted (ISO 8601) |
| `slug` | URL slug of the listing |
| `images` / `imageCount` | Photo gallery URLs and count |
| `url` | Direct link to the Craigslist listing |
| `source` | Source city subdomain (e.g. `newyork.craigslist.org`) |
| `scrapedAt` | Scrape timestamp (ISO 8601) |
| `description` | Full listing description text — *`includeDetails` only* |
| `attributes` | Key-value attributes from the detail page — *`includeDetails` only* |
| `detailLatitude` / `detailLongitude` | Precise coordinates from the detail page — *`includeDetails` only* |
| `fullImages` | Full-size image URLs from the detail page — *`includeDetails` only* |

</details>

### 💡 Use cases

- **Reselling & flipping** — track prices and spot underpriced deals across cities and categories.
- **Price & market research** — analyze supply, pricing and demand for any product using `priceValue` and `postedDate`.
- **Real-estate analysis** — pull `apa` housing listings at scale with neighborhoods and coordinates.
- **Auto analysis** — scrape `cta` cars & trucks with price and location to benchmark vehicle values.
- **Lead generation** — find sellers, service providers and gigs in your target city and category.
- **Data science** — build labelled marketplace datasets for pricing, demand and trend models.
- **Multi-city coverage** — pass several search URLs (different cities or categories) and raise `maxResults` to assemble a market-wide dataset in one run.

### 👥 Who uses it

Resellers & flippers · price and market researchers · real-estate & auto analysts · lead-gen agencies · data scientists building marketplace datasets · deal hunters tracking supply and pricing across US cities.

### 💰 Pricing

This Actor runs on a simple **pay-per-result** model — you pay for the listings you extract, with no separate platform fees to calculate. Try it on the **free tier** first, then scale up. See the **Pricing** tab on this page for the current rate.

### ❓ Frequently Asked Questions

**Is it legal to scrape Craigslist?**
The Actor collects only publicly available Craigslist listing data. You are responsible for using the data in compliance with Craigslist's Terms of Use, applicable laws and any bulk-access limits.

**Does Craigslist have a public API?**
Craigslist has no public API for scraping listings. This Actor reads public search results directly over US residential proxies, giving you structured listing data with **no developer key, no login and no cookies**.

**Is this a Craigslist API alternative?**
Yes. Because Craigslist offers no public listings API, this Actor works as an unofficial **Craigslist API alternative** — it reads public search results and returns clean structured data with no developer key.

**Do I need an API key or a login?**
No. There is no Craigslist account, cookie or API key required — only an Apify account. No Craigslist account is ever used or put at risk.

**Can I scrape Craigslist without an API or login?**
Yes. The scraper reads only public listings over US residential proxies, so there is no account or ban risk and nothing to authenticate.

#### Which cities and categories can I scrape?

Any Craigslist city subdomain and any category — for-sale, cars & trucks, apartments, jobs, services, gigs and more. Paste the search URL from your browser, or use the `builder` with a city + category code.

#### How many Craigslist listings can I scrape per search?

Hundreds to thousands — the Actor paginates the results. Control depth with `maxResults`, and split a market across several search URLs for maximum coverage.

#### Why are US residential proxies required?

Craigslist blocks datacenter IPs. The Actor defaults to Apify Proxy's US RESIDENTIAL group, which works reliably — just leave the default in place.

#### Can I get full descriptions and attributes?

Yes — turn on `includeDetails` to open each listing page and capture the full description, attributes, precise coordinates and full-size images. It's slower, so leave it off for fast bulk scraping.

#### How do I export Craigslist data to CSV or JSON?

Run the Actor, then download your dataset as **CSV, JSON, Excel or HTML** from the Apify console, or pull it live via the Apify API and webhooks — no manual copy-paste.

#### How much data can I get?

You can scrape thousands of listings per run. Depth is bounded by how far Craigslist paginates a given search, so split a market across several city/category search URLs and raise `maxResults` to reach maximum coverage.

### 🔗 More marketplace & classifieds scrapers by logiover

Building a cross-platform marketplace dataset? Pair Craigslist with the rest of the classifieds & ecommerce suite:

| Platform | Actor |
|---|---|
| 🇫🇷 Leboncoin | [Leboncoin Scraper](https://apify.com/logiover/leboncoin-scraper) |
| 🇳🇱 Marktplaats | [Marktplaats Scraper](https://apify.com/logiover/marktplaats-nl-scraper) |
| 🇷🇺 Avito | [Avito Scraper](https://apify.com/logiover/avito-ru-scraper) |
| 🇸🇪 Blocket | [Blocket Scraper](https://apify.com/logiover/blocket-se-scraper) |
| 🇩🇰 DBA | [DBA.dk Scraper](https://apify.com/logiover/dba-dk-scraper) |
| 🇳🇴 Finn.no | [Finn.no Scraper](https://apify.com/logiover/finn-no-scraper) |
| 🇯🇵 Mercari | [Mercari Japan Scraper](https://apify.com/logiover/mercari-japan-scraper) |
| 🏠 Airbnb | [Airbnb Scraper](https://apify.com/logiover/airbnb-scraper) |
| 🏢 Crexi | [Crexi CRE Scraper](https://apify.com/logiover/crexi-scraper) |
| ⭐ Trustpilot | [Trustpilot Reviews Scraper](https://apify.com/logiover/trustpilot-reviews-scraper) |

👉 Browse all **[logiover scrapers on Apify Store](https://apify.com/logiover)** — 180+ actors across real estate, jobs, crypto, social media & B2B data.

### ⏰ Scheduling & integration

Schedule this Actor on Apify to track Craigslist prices and inventory daily or weekly. Export results to JSON, CSV or Excel, sync to Google Sheets, or push to your database, BI tools and webhooks through the Apify API. Connect it to **Make, n8n or Zapier** to build automated marketplace-monitoring pipelines.

### 🤖 AI Agents, MCP & RAG Integration

**Craigslist Scraper** works natively as an on-demand data tool for AI assistants and autonomous workflows.

Connect this Actor directly to **Apify AI**, **Claude Desktop**, **Cursor**, **VS Code**, **Windsurf**, **LangChain**, or **LlamaIndex** via the official **Apify MCP Server** — no custom wrapper code needed:

```json
{
  "mcpServers": {
    "apify": {
      "type": "http",
      "url": "https://mcp.apify.com?tools=logiover/craigslist-scraper"
    }
  }
}
```

- **Schema-typed inputs & outputs:** Clean JSON records with explicit `.actor/input_schema.json` and `.actor/output_schema.json` definitions so LLM agents infer parameters and parse fields accurately without HTML noise.
- **Bounded & predictable runs:** Built-in volume caps and pay-per-result budget guards prevent runaway agent tool loops.
- **RAG & automation ready:** Stream run datasets straight into vector stores, n8n, Make, Zapier, or webhook pipelines.

### 💬 Support, Issues & Reviews

- **Bug reports & target-site changes:** Hit an unexpected empty result or selector change? [Open a ticket in the Issues tab](https://apify.com/logiover/craigslist-scraper/issues) with your **Run ID** or sample input — we actively monitor issues and ship fixes fast.
- **Feature & field requests:** Need an additional data attribute or filter? [Request it in the Issues tab](https://apify.com/logiover/craigslist-scraper/issues).
- **Enjoying this Actor?** If it saved you engineering time, please consider leaving an honest [review on Apify Store](https://apify.com/logiover/craigslist-scraper/reviews) or bookmarking [logiover/craigslist-scraper](https://apify.com/logiover/craigslist-scraper) — organic developer feedback helps others discover reliable tools and keeps maintenance prioritized.

### ⚖️ Legal

This Actor extracts only publicly available data and is intended for legitimate research, analytics and lead-generation use. You are responsible for complying with Craigslist's Terms of Use, applicable laws and any bulk-access limits.

***

This Actor is an independent tool. It is not affiliated with, endorsed by, or sponsored by Craigslist; Craigslist and all other trademarks mentioned here are the property of their respective owners.

### 📝 Changelog

#### 2026-11-11

- Added reliable terminal run status telemetry and structured Apify AI / MCP Server (`mcp.apify.com`) tool configuration.
- Added direct Issues & Reviews support links and refreshed live maintenance verification.

#### 2026-11-01

- Monthly health check (2026-11-01): a live run on the current build completed successfully and returned data. Input options, output fields and pricing are unchanged.
- README refreshed: 1 link to retired Actors removed; independence disclaimer added.

#### 2026-10-15

- Every request now has a hard time limit, so a proxy connection that stalls can no longer hold up the run or push it past its timeout.
- A run that reaches its maximum cost per run now stops cleanly with its results saved and a status message, instead of ending as aborted.
- A proxy group your account cannot use no longer stops the run at start-up; it falls back to the default Apify Proxy.
- Runs with a short timeout (API and AI-agent calls) now finish inside it with what they collected, instead of being cut off.
- Memory is managed within the run's own limit, which removes a rare out-of-memory crash on large pages.
- The default used when the field is left out for `maxResults` is now 5,714 (was 1,000).

#### 2026-09-23

- Fleet-wide quality audit. Verified end to end against live data and re-checked the input schema, the output columns and the run configuration.
- Output verified on a live run: 16 columns returned, 85.8% of cells populated.
- Run reliability reviewed: 99.6% of public runs succeeded in the last 30 days.
- Input schema, output schema and pricing configuration reviewed.
- Noted that 1 column(s) came back empty in this sample (`url`); these are under review.

#### 2026-09-01

- Fleet-wide health check. Verified against this Actor's real run history: 30-day success rate, output row counts, per-field fill rates, and peak memory against the configured memory limit.
- Reviewed for the failure patterns that have cost this fleet runs — unguarded proxy setup, retry loops that can outlast the run's own time budget, and full-page HTML parsing that can exhaust a small container.
- No change to input, output fields or scraping logic.

#### 2026-08-11

- Maintenance release: refreshed the build and dependencies.
- Re-verified live execution, non-empty structured output and dataset field/type integrity.
- Reviewed reliability (retries, pagination) and output quality as part of a full-fleet QA pass.

#### 2026-08-01

- Completed the August 2026 full health check: verified empty/programmatic default, Console UI default, and two source-informed alternative inputs on Apify.
- Confirmed successful live execution, non-empty structured output, dataset-field/type integrity, and logical sample quality within the 5-minute quality window.
- Expanded the dataset contract to 22 nullable list/deep-detail fields, including raw positional attributes, every optional `includeDetails` field, and detail error provenance.
- Verified the detail parser against current Craigslist HTML and added a bounded deep-detail variation and dataset view.

#### 2026-08-01 — Health-check remediation

- Verified the optional `includeDetails` path against a current public listing and declared its description, attribute, precise-coordinate and full-image fields in the dataset contract.
- Added a dedicated details view and a source-informed health-check input so deep fields are tested instead of only list cards.
- The final four-input matrix verdict will be appended after post-build cloud revalidation.

#### 2026-07-06

- ✨ README overhaul: keyword-rich intro, ready-to-run example scenarios, full field reference, marketplace & classifieds cross-links, and clearer quick-start.

#### 2026-07-01

- Maintenance pass: re-verified end-to-end on live data and confirmed successful runs within the 5-minute quality window on the default input.
- Sharpened Store metadata (SEO title & description) and expanded the FAQ with high-intent, long-tail questions for easier discovery in Google and Apify Store search.
- Added ready-to-run example tasks that cover common real-world use cases.

#### 2026-06-15

- Reliability pass: re-verified end-to-end on live data with real-world inputs. Routine maintenance build.

#### 2026-06-07

- Docs: added coverage for Craigslist unofficial API / API alternative use, exporting Craigslist data to CSV/JSON, and scraping Craigslist without an API or login.

#### 2026-06-05

- 🛡️ Reliability fix: results are no longer dropped by strict output validation — runs now complete cleanly even at high volume (thousands of results).
- ⚡ Stability & performance hardening; fresh rebuild.

#### 2026-06-04

- Verified live & refreshed build — reliability/maintenance pass.

***

\*Maintained: last verified 2026-11-11 — checked end-to-end against live run history (reliability, output fields and types, and time/memory budgets).

# Changelog

This Actor's version history is a separate document: https://apify.com/logiover/craigslist-scraper/changelog.md

# Actor input Schema

## `city` (type: `string`):

Pick a Craigslist city/region to scrape. Used together with Category (and optional Search keyword) when you don't paste full search URLs below. Leave the default to browse a busy city.

## `category` (type: `string`):

Craigslist category to browse when you don't paste full search URLs below. Leave the default ('All for sale') to pull recent for-sale listings.

## `query` (type: `string`):

Optional keyword to search within the selected City + Category (e.g. 'iphone', 'toyota', 'macbook'). Leave empty to pull ALL recent listings in the category.

## `searchUrls` (type: `array`):

Optional. Paste one or more full Craigslist search-results URLs to override the City/Category picker above. Open Craigslist, pick a city + category, apply any filters, then copy the URL. Examples: https://newyork.craigslist.org/search/sss?query=iphone — https://losangeles.craigslist.org/search/cta?query=toyota

## `builder` (type: `object`):

Optional. Build a search programmatically. Provide city subdomain (e.g. 'newyork'), category code (e.g. 'sss'), optional query, minPrice, maxPrice and a filters object. Overridden by searchUrls if both are set.

## `maxResults` (type: `integer`):

Maximum number of listings to collect across all searches. 0 = unlimited (paginates as deep as Craigslist allows).

## `includeDetails` (type: `boolean`):

Open each listing's detail page to also collect the full description, attributes and full-size images. Much slower — leave off for fast bulk scraping.

## `proxyConfiguration` (type: `object`):

Craigslist blocks datacenter IPs — US residential proxies are required. Leave the default (Apify Proxy · RESIDENTIAL · US).

## Actor input object example

```json
{
  "city": "newyork",
  "category": "sss",
  "query": "",
  "searchUrls": [
    "https://losangeles.craigslist.org/search/cta?query=toyota"
  ],
  "maxResults": 285,
  "includeDetails": false,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "US"
  }
}
```

# Actor output Schema

## `results` (type: `string`):

All records extracted by this run. Open the Dataset tab to browse, filter, and export as CSV, JSON, or Excel.

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "maxResults": 285,
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ],
        "apifyProxyCountry": "US"
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("logiover/craigslist-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "maxResults": 285,
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
        "apifyProxyCountry": "US",
    },
}

# Run the Actor and wait for it to finish
run = client.actor("logiover/craigslist-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "maxResults": 285,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "US"
  }
}' |
apify call logiover/craigslist-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,logiover/craigslist-scraper"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/qDHaODk7QKdzlPTsS/builds/XmGyJmpdgL5WRBiZ6/openapi.json
