# Craigslist Scraper: Full Details & Contacts (`arjun_code/craigslist-scraper`) Actor

Scrape US and Canadian Craigslist listings with full descriptions, photos and public contacts. Search items, housing, jobs, gigs and services across cities. Keep website filters, export JSON/CSV and skip previously delivered ads. Details included by default.

- **URL**: https://apify.com/arjun_code/craigslist-scraper.md
- **Developed by:** [Arjun Data](https://apify.com/arjun_code) (community)
- **Categories:** E-commerce, Automation, Lead generation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.80 / 1,000 listing delivereds

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 data with full details included

Turn US and Canadian Craigslist searches into listing data for **resale research, local market analysis, job feeds and AI apps**. Collect full descriptions, photo URLs, prices, locations and publicly displayed contacts across **for sale, housing, jobs, gigs and services**.

Paste a filtered search URL or choose cities, a category and keywords. **Full details are enabled by default and included in the per-ad price.** No proxy configuration is needed.

- **Compare markets:** collect several cities or categories in one run and retain each ad's source search.
- **Keep useful details:** export descriptions, photos and category attributes, including housing and job fields.
- **Collect new arrivals:** skip previously delivered posting IDs when running a saved search again.
- **Automate your workflow:** use JSON/CSV exports, scheduled Tasks, the API or an AI client connected through MCP.

### 🚀 How to scrape Craigslist

1. Try the prefilled example: up to 20 Sony electronics ads in New York.
2. Adjust the cities, category and keyword, or paste your Craigslist search URLs. Keep **Include full details and public contacts** enabled.
3. Select **Start**, then open **Complete listings (JSON)** or **Listings (CSV)**. Check **Messages and next steps** for any collection notices.

To compare Sony electronics priced $20–$1,000 in New York and the San Francisco Bay Area:

```json
{
  "cities": ["newyork", "sfbay"],
  "category": "ela",
  "searchTerm": "sony",
  "sort": "priceasc",
  "minPrice": 20,
  "maxPrice": 1000,
  "hasImage": true,
  "maxItems": 20,
  "maxItemsPerSearch": 10,
  "includeDetails": true
}
```

### 💵 How much does it cost?

Pay a **startup fee plus each unique ad delivered**. Descriptions, available photo URLs, attributes and publicly displayed contacts are included. There is no detail surcharge or separate platform-usage charge for this Actor.

| Apify discount tier | Price per 1,000 ads |
|---|---:|
| FREE | $1.20 |
| BRONZE | $1.00 |
| SILVER | $0.90 |
| GOLD, PLATINUM, DIAMOND | $0.80 |

**Startup is $0.0005 at the default 512 MB memory**, at every tier. Up to 1 GB incurs one startup event; 2 GB incurs two, costing $0.001. At the FREE-tier rate and default memory, **20 ads cost $0.0245**, and **1,000 ads cost $1.2005**. FREE is a tier name; runs consume your available Apify credits.

Notices, failed ads and IDs skipped by `newOnly` incur no listing charge. Startup still applies when a started run delivers no ads. Search-only records have the same per-ad price. Ads delivered again in a later run are charged again unless history skips them.

Set a run spending limit of at least **$0.01**. This is a budget setting, **not a minimum charge**: you pay for actual events, not the entire budget. The Pricing tab shows your applicable rate.

### Supported categories and search filters

This version covers **US and Canadian Craigslist regions** in five sections:

| Section | Main code | Examples |
|---|---|---|
| For sale | `sss` | `ela` electronics, `fua` furniture, `cta` cars, `mca` motorcycles, `zip` free items |
| Housing | `hhh` | `apa` apartments, `roo` rooms, `sub` sublets, `rea` real estate |
| Jobs | `jjj` | `trp` transportation, `sof` software |
| Gigs | `ggg` | `lbg` labor, `dmg` domestic |
| Services | `bbb` | `hss` household, `sks` skilled trades |

Choose US cities such as `newyork` and `sfbay`, or Canadian cities such as `toronto`, `vancouver` and `montreal`. All 55 Canadian sites in the current Craigslist directory are selectable. Subareas also work: `newyork/brk` selects Brooklyn and `toronto/tor` selects the city of Toronto. Community, events, resumes and countries outside the US and Canada are outside this version.

**Canadian data stays local:** prices use CAD, vehicle odometers use kilometers, and original French or English titles and descriptions are preserved without translation. Standard category and attribute labels are requested in English. US and Canadian phone numbers both use +1. Each ad includes `country` and `currency`, including cross-border nearby results.

For a Canadian market comparison, use `"cities": ["toronto", "vancouver", "montreal"]` with your category and keyword. Price bounds use each search region's local currency; there is no currency conversion.

#### Keep filters from the website

Apply filters on Craigslist and paste the resulting URL into **Craigslist search or listing URLs**. You can mix categories and name each search:

```json
{
  "startUrls": [
    {
      "url": "https://chicago.craigslist.org/search/jjj?query=driver&employment_type=1&sort=date",
      "userData": {"label": "Chicago full-time driving jobs"}
    },
    {
      "url": "https://losangeles.craigslist.org/search/hss?query=cleaning&sort=date",
      "userData": {"label": "Los Angeles cleaning services"}
    }
  ],
  "maxItems": 20,
  "maxItemsPerSearch": 10,
  "includeDetails": true
}
```

**URLs replace the guided city, category, keyword, sorting and filter fields.** Limits, detail settings, posting age, nearby suggestions and history still apply. Regional searches, `/search/area/`, `/search/city/` and individual ad links are accepted. Individual ad links always receive details. For API calls, each URL must be an object containing `url`, as above.

#### Input guide

| Inputs | How to use them |
|---|---|
| `searchTerm` / `searchTerms` | One keyword query, or several independent queries across each city. Use one field, not both. |
| `sort` | Newest, oldest, nearest, price ascending/descending, relevance or upcoming, where the category supports it. Jobs, gigs and services do not support price sorting. |
| `maxItems` / `maxItemsPerSearch` | Total unique ads; default 50, starter example 20. The optional per-search cap limits each city/query or URL. |
| `includeDetails` | Default true. Includes full text, available photo URLs, attributes and public contacts. |
| `minPrice`, `maxPrice` | Whole-number price bounds in each region's currency (USD or CAD), with no currency conversion. Housing retains its original rental period. |
| `hasImage`, `postedToday`, `searchTitlesOnly` | Require photos, use the website's posted-today filter, or match keywords only in titles. |
| `sellerType`, `conditions` | Owner/dealer and item-condition choices, where supported. |
| `freeOnly`, `deliveryAvailable`, `cryptocurrencyOk` | Native free-price, delivery and cryptocurrency-acceptance filters, where supported. |
| `postalCode`, `radiusMiles`, `radiusKm` | Optional US ZIP or Canadian postal code. Choose one radius unit; the Actor converts it for each search region. Nearest-first sorting requires a radius; without a postal code, each city's center is used. |
| `showDuplicates` | Choose how Craigslist groups repeat ads. Omit to follow the website default. |
| `postedWithinDays`, `includeNearby` | A rolling posting-age window, or nearby US/Canadian suggestions. Radius searches already cover their requested circle. |
| `filters` | Advanced category-specific URL parameters. For example, `{"rent_period":[3],"pets_cat":1}` selects monthly, cat-friendly rentals. |

Paste a filtered URL when you are unsure of parameter codes. Do not set the same condition in both a named input and `filters`. Decimal bathroom bounds require checking listing details, even if `includeDetails` is off. Invalid options produce an explanatory notice. Native URL/filter distances and odometers use miles in US regions and kilometers in Canadian regions. Pasted URL radii are kept as entered. Craigslist can round the converted radius; the collection summary shows the applied radius.

### 📦 What data do you get?

Open **Complete listings (JSON)** for all ad fields, **Listings (CSV)** for spreadsheet columns, and **Collection summary by input** for counts and applied filters. **Messages and next steps** explains empty, partial or limited results.

| Data | Fields |
|---|---|
| Identity and source | `postId`, `url`, `title`, `section`, `category`, `categoryName`, `matchedSearches` |
| Price and location | `price`, `priceRaw`, `currency`, `country`, `region`, `subarea`, `location`, `neighborhood`, `address`, `latitude`, `longitude`, `distanceMiles`, `distanceKm` |
| Text, photos and contacts | `description`, `imageUrls`, `attributes`, `phoneNumbers`, `emails`, `contactStatus`, `contactSources` |
| Items and vehicles | `sellerType`, `isFree`, `condition`, `year`, `makeModel`, `mileage`, `mileageUnit`, `monthlyPayment` |
| Housing | `rentPeriod`, `bedrooms`, `bathrooms`, `area`, `areaUnit`, `areaRaw`, `propertyType`, `availableFrom`, `upcomingDate`, `openHouseDates` |
| Jobs and gigs | `compensation`, `jobTitle`, `employmentType`, `companyName` |
| Dates and history | `postedAt`, `updatedAt`, `scrapedAt`, `repostOf`, `listingUuid`, `detailStatus`, `isNew`, `firstSeenAt` |

Category-specific fields appear where relevant. Missing values remain `null` or empty arrays. `attributes` preserves original source attributes. Jobs retain compensation as text; Free-category ads have `isFree: true` and `price: 0`.

#### Complete real output example

This electronics record came from the two-city Sony example above, with the current country and distance fields shown. It has three photos and no publicly extracted contact match. Housing and job records contain their own category fields.

```json
{
  "recordType": "listing",
  "postId": "7967835342",
  "listingUuid": "7MAp1G35G4QJ1LLHB6BxkM",
  "url": "https://www.craigslist.org/view/d/san-jose-sony-speaker/7MAp1G35G4QJ1LLHB6BxkM",
  "title": "Sony Speaker",
  "section": "for_sale",
  "category": "ele",
  "categoryName": "electronics - by owner",
  "price": 20,
  "priceRaw": "$20",
  "currency": "USD",
  "country": "US",
  "sellerType": "owner",
  "region": "sfbay",
  "subarea": "sby",
  "location": "south bay",
  "neighborhood": "san jose north",
  "address": null,
  "latitude": 37.4031,
  "longitude": -121.8585,
  "distanceMiles": null,
  "distanceKm": null,
  "description": "Sony Speaker\nGood Condition\n$20\ncall or text",
  "imageUrls": [
    "https://images.craigslist.org/00404_7fNGZXwtZ01_0CI0t2_1200x900.jpg",
    "https://images.craigslist.org/00D0D_afOwTZ4cRNw_0CI0t2_1200x900.jpg",
    "https://images.craigslist.org/00b0b_8D5odmuYAo2_0CI0t2_1200x900.jpg"
  ],
  "attributes": {
    "condition": "good"
  },
  "postedAt": "2026-10-11T18:42:55+00:00",
  "updatedAt": "2026-10-11T18:37:55+00:00",
  "scrapedAt": "2026-11-04T06:58:00.384756+00:00",
  "repostOf": "7922304132",
  "detailStatus": "collected",
  "firstSeenAt": null,
  "isNew": null,
  "matchedSearches": [
    {
      "inputPosition": 2,
      "inputLabel": "sfbay / ela / sony",
      "inputUrl": "https://www.craigslist.org/search/area/sfbay?cat=ela&query=sony&sort=priceasc&min_price=20&max_price=1000&hasPic=1",
      "searchRegion": "sfbay"
    }
  ],
  "phoneNumbers": [],
  "emails": [],
  "contactSources": [],
  "contactStatus": "not_found",
  "isFree": false,
  "year": null,
  "makeModel": null,
  "mileage": null,
  "mileageUnit": null,
  "monthlyPayment": null,
  "condition": "good"
}
```

The default dataset includes `recordType: "listing"` ads and `recordType: "notice"` explanations. Notices do not count toward `maxItems`. Ad-only exports are **LISTINGS.json** and **LISTINGS.csv**; notices are in **NOTICES.json**, and the summary is **RUN_SUMMARY**.

JSON retains every field. CSV selects 53 columns, omitting `recordType`, `listingUuid`, `contactSources`, `upcomingDate` and `openHouseDates`. Nested values are JSON strings in CSV.

### Repeat collection and scheduled Tasks

Enable `newOnly` to skip posting IDs previously delivered to the same history. Optionally set `watchName`, save an Apify Task and add a schedule. Reuse the same search configuration and run sequentially; use different watch names for independent workflows.

The first run can include older ads. Changes to a previously delivered ID, including price changes, are skipped. Reposts with a new ID count as new ads. This feature does not track price changes or identify the same item across different posts.

### Frequently asked questions

#### Are full details and contacts included?

Yes. `includeDetails` defaults to true, with no additional detail fee. Contacts are extracted from publicly visible text and links. Hidden Reply contacts and captcha-protected information are not retrieved. `contactStatus` is `found`, `not_found` or `not_requested`; a missing match does not mean the seller has no contact information.

#### Why are there fewer results than on Craigslist?

`maxItems` is a ceiling. Deleted ads, filters, duplicate grouping, spending limits and the source's accessible search window can reduce the total. Read **Messages and next steps** and the input summary before changing your search. The same posting ID is delivered once per run, with its matching inputs retained in `matchedSearches`.

#### How are multiple searches and photos handled?

Each search keeps its requested sort order; the combined output is not globally sorted. Full details include the image URLs supplied by the source, while search-only records can contain fewer images. Images are linked, not downloaded, and links can expire.

### 🤖 AI Agents & LLM Apps

Connect an AI client through the [Apify MCP server](https://docs.apify.com/mcp), select `arjun_code/craigslist-scraper`, and use the input JSON above. Example instruction: “Compare up to 20 Sony electronics ads from New York and San Francisco, priced $20–$1,000. Include details, cite the source links and explain any collection notices.”

For direct API calls, send the same input JSON to:

```text
POST https://api.apify.com/v2/acts/arjun_code~craigslist-scraper/runs?maxTotalChargeUsd=0.05
Authorization: Bearer YOUR_APIFY_TOKEN
Content-Type: application/json
```

Wait for the returned run ID to finish. Fetch `LISTINGS.json` and `RUN_SUMMARY` from its `defaultKeyValueStoreId`, or use its `defaultDatasetId` and retain only `recordType: "listing"` rows. Keep `postId`, source URLs and `matchedSearches` when presenting results. Read notices before interpreting an empty result. See the [Apify run API](https://docs.apify.com/api/v2/actors-runs-post).

### More Craigslist tools

| Actor | Best fit |
|---|---|
| **This general scraper** | Mixed categories, multiple cities and filtered Craigslist URLs |
| [Craigslist Cars Scraper](https://apify.com/arjun_code/craigslist-cars-scraper) | Vehicle research with dedicated car-search filters |
| [Craigslist Rentals Scraper](https://apify.com/arjun_code/craigslist-rentals-scraper) | Rental research with dedicated housing-search filters |

For help, open this Actor's **Issues** tab with your run link and affected search URL. This Actor is independent of Craigslist and is not endorsed by Craigslist.

# Actor input Schema

## `startUrls` (type: `array`):

Paste filtered US or Canadian Craigslist searches or individual ad links. Each search keeps its own filters and sort order, replacing the city, category, keyword and filter fields below. Collection limits, details, maximum posting age, nearby suggestions and history still apply. For API calls, use objects containing url; optional userData.label names each search in the output.

## `searchTerm` (type: `string`):

Search ad titles and descriptions, e.g. sony or office chair. Leave empty to search the category without a keyword. Quotes, minus terms and | follow Craigslist's search syntax. Use this OR the advanced searchTerms field. Ignored when URLs are supplied.

## `cities` (type: `array`):

Choose US or Canadian regions, such as newyork, toronto, vancouver or montreal. Mix countries in one run; each ad keeps its country and local currency. City/subarea also works, e.g. newyork/brk or toronto/tor. Ignored when URLs are supplied.

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

Choose a main category or a more focused subcategory, such as electronics or apartments. To collect several categories in one run, supply separate search URLs above. Ignored when URLs are supplied.

## `sort` (type: `string`):

Each search keeps its own ordering; merged searches are sampled in turns. Category must support the selected order. Distance needs an explicit radius; provide a ZIP or the selected city's center is used. URL inputs keep their own order.

## `maxItems` (type: `integer`):

Total unique ads delivered across all cities and searches. Start with 20 to review the output. Notices do not count toward this limit. Fewer ads may be available after filters, deduplication or source search limits; your Apify spending limit can also reduce the total.

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

Enabled by default and included in the per-ad price. Get the full description, all available photo URLs, original attributes and publicly displayed phones/emails. Turn off for search-only records at the same per-ad price. Individual ad links always get details. Hidden Reply contacts are not retrieved.

## `minPrice` (type: `integer`):

Optional whole-number amount in each search region's local currency: USD in the US, CAD in Canada. A mixed-country run applies the same numeric limit in each local currency; no exchange-rate conversion. Only applies where the category supports prices.

## `maxPrice` (type: `integer`):

Optional; no maximum by default. Enter a whole-number amount in the region's local currency (USD or CAD). No exchange-rate conversion. Use separate search URLs for different limits in different countries.

## `hasImage` (type: `boolean`):

Use Craigslist's native has-image filter.

## `postedToday` (type: `boolean`):

Use Craigslist's native posted-today filter. Use postedWithinDays for a rolling age window.

## `searchTitlesOnly` (type: `boolean`):

Apply keywords to titles through Craigslist's native search.

## `sellerType` (type: `string`):

For categories with owner/dealer choices. Does not infer an advertiser's identity.

## `conditions` (type: `array`):

Any selected condition, in categories that support it. Leave empty for all.

## `freeOnly` (type: `boolean`):

Use Craigslist’s free-price search for For sale. Ads in the Free category are returned with isFree=true and price=0 even when the source omits its price. Conflicts with a positive minimum price.

## `showDuplicates` (type: `boolean`):

Optional. Follow the website default when omitted. True shows separate repeat ads; false combines source-identified duplicate groups. Posting-ID deduplication and newOnly are separate.

## `deliveryAvailable` (type: `boolean`):

Use the native delivery filter where supported.

## `cryptocurrencyOk` (type: `boolean`):

Use the native cryptocurrency filter where supported.

## `postalCode` (type: `string`):

Optional US ZIP (10001) or Canadian postal code (M5V 2T6). Spaces and lowercase are accepted for Canadian codes. Use a code from the selected country. For different locations in one run, paste separate search URLs instead.

## `radiusMiles` (type: `number`):

Optional radius in miles. Uses the ZIP/postal code when supplied, otherwise each city's center. Converted to kilometers for Canadian searches. Set either miles or kilometers; nearest-first guided sorting requires one of them. Craigslist may round the applied radius.

## `radiusKm` (type: `number`):

Optional radius in kilometers, convenient for Canada. Converted to miles for US searches. Set either this field or Search radius (miles). No radius is added by default. Pasted URLs keep their own native radius. Craigslist may round the applied radius.

## `searchTerms` (type: `array`):

One independent query per entry. Searches every selected city with each query. Use this OR searchTerm. Ignored for URL input.

## `filters` (type: `object`):

For category-specific filters that are not shown above. The easiest option is to paste your filtered Craigslist search URL instead. For this field, use actual URL parameter names and values, e.g. {"min_bedrooms":2,"pets_cat":1}. Do not repeat a condition already set above. Invalid or unsupported options produce a notice. Ignored when URLs are supplied. Native distance and odometer values follow the source region: miles in the US, kilometers in Canada.

## `postedWithinDays` (type: `number`):

Optional rolling window, applied to the source's posting timestamp. Works with URL and guided inputs. Renewed posts can have refreshed source timestamps.

## `maxItemsPerSearch` (type: `integer`):

No additional limit by default. Applies to each city/query or input URL; maxItems remains the total cap.

## `includeNearby` (type: `boolean`):

Include supplemental US or Canadian results Craigslist appends from nearby regions, including across the border. Each ad keeps its own country and currency. Radius searches already cover their requested circle across region boundaries.

## `newOnly` (type: `boolean`):

Useful for scheduled collection. Skip posting IDs already delivered to this history. The first run may include older ads. Edits or price changes to the same ID are skipped, so this does not track price changes. Startup still applies when no new ads are found.

## `watchName` (type: `string`):

Optional name when newOnly is enabled. Histories also depend on searches and relevant collection filters. Reuse the same configuration and run sequentially.

## Actor input object example

```json
{
  "cities": [
    "newyork"
  ],
  "category": "sss",
  "sort": "date",
  "maxItems": 50,
  "includeDetails": true,
  "hasImage": false,
  "postedToday": false,
  "searchTitlesOnly": false,
  "sellerType": "all",
  "freeOnly": false,
  "deliveryAvailable": false,
  "cryptocurrencyOk": false,
  "includeNearby": false,
  "newOnly": false
}
```

# Actor output Schema

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

Ads plus explanations of empty, partial or limited results. Filter recordType=listing for ad-only dataset consumption.

## `messages` (type: `string`):

Explanations and suggested next steps for input errors, empty results or unavailable ads. Empty means there are no collection notices.

## `listingsJson` (type: `string`):

Full ad-only records with available descriptions, photo URLs, public contacts, category attributes and source searches. JSON retains every field.

## `listingsCsv` (type: `string`):

Selected flat columns; arrays and objects are JSON strings. No notice rows. JSON retains all fields.

## `runSummary` (type: `string`):

Requested and applied filters, counts, limits, failures and collection history.

# 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 = {};

// Run the Actor and wait for it to finish
const run = await client.actor("arjun_code/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 = {}

# Run the Actor and wait for it to finish
run = client.actor("arjun_code/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 '{}' |
apify call arjun_code/craigslist-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,arjun_code/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/E4sicymToboRycq6L/builds/zeSEnHn5hTWOWAw1o/openapi.json
