
TikTok Shop Scraper
scrape.ly/store/shelfbright/tiktok-shop-scraperE-commerceSocial media
1 monthly user

Scrape Craigslist ads for jobs, housing, for sale, services and gigs by search URL, city and category: title, price, location, dates, images, attributes and full description.
Turn Craigslist searches into clean data. Paste a search URL, or pick cities and categories, and get every matching ad as a row: title, price, location, posting date, images, attributes and the full description. No login, no API key, and ads for jobs, housing, for sale, services and gigs all come back in the same shape.
Searches are read through the same JSON feed the Craigslist website uses, so runs are fast and cheap. In our tests 1,000 ads with full descriptions took about 30 seconds and 10,000 about two minutes.
newyork and sfbay and choose categories.| Field | What it does |
|---|---|
urls | Search page URLs or single post links (https://www.craigslist.org/view/...). |
cities | Craigslist site names (newyork, sfbay, london). Combined with every category. |
categories | Category codes: sss for sale, apa apartments, jjj jobs, ggg gigs, bbb services and more. |
searchQuery | Keywords for every search that has no query of its own. |
maxItems | Total ads to save. Default 20. 0 means no limit. |
maxAge | Skip ads that were not posted or refreshed within this many days. |
minPrice / maxPrice | Price range. If min is higher than max they are swapped. |
sortBy | date (newest), dateoldest, rel, priceasc, pricedsc. |
sellerType | all, owner or dealer. |
onlyWithImages, titleOnly | Skip ads without photos; match keywords in titles only. |
scrapeDetails | Open every ad for the full text and attributes. Turn off for a fast list. |
maxItemsPerSearch | Cap for each search. |
maxConcurrency | Parallel ad page loads. Default 10. |
proxyConfiguration | Datacenter proxy by default. |
{
"urls": [{ "url": "https://sfbay.craigslist.org/search/apa?max_price=3000" }],
"cities": ["newyork", "chicago"],
"categories": ["apa", "jjj"],
"searchQuery": "studio",
"maxItems": 100,
"maxAge": 7,
"sortBy": "date"
}
Each ad is one dataset row. Fields that do not apply to an ad (for example bedrooms on a bicycle) are left out.
| Field | Description |
|---|---|
id, url, title | Post ID, link and title. |
datetime | When the ad was last updated or reposted. |
postedAt | When the ad was first published (full ad pages only). |
location, area, subarea | Neighborhood text, Craigslist site and sub-area. |
category, categoryCode | Category name and code. |
price, priceValue, currency | Price text, number and currency. |
latitude, longitude, mapAccuracy, address | Map position and address parts when the poster shows them. |
post | Full ad text. |
pics | Image URLs. |
attributes, properties | Attributes as displayed, and by name. |
phoneNumbers, notices | Phone numbers found in the text, and notices on the ad. |
bedrooms, bathrooms, space, availableFrom, rentPeriod, amenities | Housing. |
compensation, employmentType, jobTitle, companyName | Jobs and gigs. |
condition, model, manufacturer | For sale. |
searchUrl | The search that found the ad. |
{
"id": "7900000001",
"url": "https://www.craigslist.org/view/d/sunny-studio-near-the-park/AbCdEfGhIjKlMnOpQrStUv",
"title": "Sunny studio near the park",
"datetime": "2026-10-12T10:00:00-0400",
"postedAt": "2026-10-01T09:15:00-0400",
"location": "Riverside",
"area": "sampletown",
"subarea": "dwn",
"category": "apartments / housing for rent",
"categoryCode": "apa",
"price": "$1,500",
"priceValue": 1500,
"currency": "USD",
"latitude": 10.5,
"longitude": 20.25,
"mapAccuracy": 22,
"post": "Bright studio with a large window. Pets considered.",
"pics": ["https://images.craigslist.org/00a0a_example_600x450.jpg"],
"attributes": ["1BR / 1Ba", "600ft2", "available oct 18", "rent period: monthly"],
"bedrooms": "1",
"bathrooms": "1",
"space": "600ft2",
"availableFrom": "2026-10-18",
"rentPeriod": "monthly",
"amenities": [],
"phoneNumbers": [],
"notices": [],
"searchUrl": "https://sampletown.craigslist.org/search/apa"
}
You pay $0.004 per ad saved, which is $4 per 1,000 ads, plus the platform usage of the run (compute and datacenter proxy traffic). In our tests the usage was about $0.01 per 1,000 ads, so 1,000 ads cost about $4.01 and a 100 ad job about $0.40. Ads that were removed before their page loaded are not saved and not charged. Turning off full ad pages does not change the price per ad. Set a maximum total charge on the run and it stops cleanly before going over.
Is it legal to scrape Craigslist? The actor reads publicly visible ads without logging in. You are responsible for following Craigslist's terms and the laws that apply to your use of the data, especially for personal data such as phone numbers.
Do I need a login or my own proxy? No. A datacenter proxy is built in and enabled by default. Switch to residential in the proxy settings if Craigslist starts refusing requests.
How many ads can I get? Craigslist lists at most 10,000 ads per search. If more match, the run says so in its status message. Split the search by city, category, price range or keywords to reach the rest.
What if a field is empty? Craigslist ads are free text. Fields only appear when the ad shows them, so bedrooms are only on housing ads and pay only on jobs and gigs.
Can I schedule it or call it from the API? Yes. Use schedules for daily alerts, and the API or any integration to start runs and read the dataset.
What changed from other Craigslist scrapers? The input keeps urls and maxAge. Output keeps the same field names; the misspelled attirbutes list is now attributes, and coordinates and map accuracy are numbers.
.html no longer open on Craigslist. Use the www.craigslist.org/view/... link or a search URL.Every field below can be set in the run form, passed through the API, or saved as a task. Unset fields fall back to the defaults shown.
urlsarrayOptionalCraigslist URLs
Search pages (for example https://newyork.craigslist.org/search/apa?max_price=3000) or single post links (https://www.craigslist.org/view/...). Search filters in the URL are kept.
citiesarrayOptionalCities
Craigslist site names, one per entry, such as newyork, sfbay or london. Combined with every category below.
categoriesarrayOptionalCategories
Categories to search in each city. Leave empty to search all of For sale. Any three-letter Craigslist category code also works in the URL fields.
searchQuerystringOptionalSearch keywords
Keywords added to every search that does not set its own query, for example road bike.
maxItemsintegerOptionaldefault 20Maximum results
Stop after this many ads across all inputs. 0 means no limit. Craigslist shows at most 10,000 ads per search.
Applied to every search. Settings in a search URL take precedence.
maxAgeintegerOptionalMaximum age in days
Skip ads that were not posted or refreshed within this many days. Leave empty for all ads.
minPriceintegerOptionalMinimum price
Lowest price in the local currency.
maxPriceintegerOptionalMaximum price
Highest price in the local currency.
sortByenumOptionaldefault "date"Sort order
Order of the results. Newest first stops early once ads are older than the maximum age.
sellerTypeenumOptionaldefault "all"Seller
For sale and housing searches: show ads from owners or dealers only.
onlyWithImagesbooleanOptionaldefault falseOnly ads with images
Skip ads without photos.
titleOnlybooleanOptionaldefault falseSearch titles only
Match the keywords against titles instead of the full text.
Speed and volume settings.
scrapeDetailsbooleanOptionaldefault trueScrape full ad pages
Open every ad to get the full description, attributes, posting date, address and phone numbers. Turn off for a fast list of titles, prices and images.
maxItemsPerSearchintegerOptionaldefault 0Maximum results per search
Cap for each search URL or city and category pair. 0 means no cap.
maxConcurrencyintegerOptionaldefault 10Concurrent requests
How many ad pages load at the same time.
proxyConfigurationobjectOptionaldefault {"useScrapelyProxy":true,"scrapelyProxyGroups":["DATACENTER…Proxy configuration
Datacenter addresses are the default. Switch to residential if Craigslist starts refusing requests.
Every run writes its results to a dataset. Preview it in the dashboard, then export it or read it through the API.
| Field | Type | Description |
|---|---|---|
| id | string | Craigslist post ID |
| url | string | Link to the ad |
| title | string | Ad title |
| datetime | string | When the ad was last updated or reposted |
| postedAt | string | When the ad was first published (full ad pages only) |
| location | string | Neighborhood or town given by the poster |
| area | string | Craigslist site the ad belongs to |
| subarea | string | Sub-area code, when the site has them |
| category | string | Category name |
| categoryCode | string | Craigslist category code |
| label | string | Always post |
| price | string | Price as shown on the ad |
| priceValue | number | Price as a number |
| currency | string | Currency code |
| latitude | number | Latitude of the map pin |
| longitude | number | Longitude of the map pin |
| mapAccuracy | integer | Craigslist map accuracy value (lower is more precise) |
| address | object | Street, city, region, postal code and country when shown |
| post | string | Full ad text |
| notices | array | Notices shown on the ad |
| pics | array | Image URLs |
| attributes | array | Attributes as shown on the ad |
| properties | object | Attributes by name |
| phoneNumbers | array | Phone numbers found in the ad text |
| bedrooms | string | Bedrooms (housing) |
| bathrooms | string | Bathrooms (housing) |
| space | string | Floor area (housing) |
| availableFrom | string | Move-in date (housing) |
| rentPeriod | string | Rent period (housing) |
| amenities | array | Amenities (housing) |
| compensation | string | Pay (jobs and gigs) |
| employmentType | string | Employment type (jobs) |
| jobTitle | string | Job title (jobs) |
| companyName | string | Employer (jobs) |
| condition | string | Item condition (for sale) |
| model | string | Model (for sale) |
| manufacturer | string | Make or manufacturer (for sale) |
| education | string | Education (resumes) |
| searchUrl | string | The search URL or city and category that produced the ad |
You pay for the events the actor reports, such as each result or page it produces. Platform usage is included in the event prices.
| Event | Charged when | Price |
|---|---|---|
| Ad | One Craigslist ad with title, price, location, dates, images, attributes and full description. | $0.004 |
Run this actor from your own code. Swap in your API token and the examples work as-is.
import { ScrapelyClient } from 'scrapely-client'
const client = new ScrapelyClient({ token: process.env.SCRAPELY_TOKEN })
// Start the actor and wait for the run to finish.
const run = await client.actor('shelfbright/craigslist-scraper').call({
"urls": [
{
"url": "https://newyork.craigslist.org/search/apa"
}
],
"maxItems": 20,
"sortBy": "date",
"sellerType": "all",
"scrapeDetails": true,
"maxConcurrency": 10,
"proxyConfiguration": {
"useScrapelyProxy": true,
"scrapelyProxyGroups": [
"DATACENTER"
]
}
})
// Read the dataset the run produced.
const { items } = await client.dataset(run.defaultDatasetId).listItems()
console.log(items)Tokens live in your account settings. Keep them server-side: a token carries the full permissions of your account.
Connect the Scrape.ly MCP server once and your agent can run this actor as a tool. Pick your tool:
Fetch scrape.ly/agents.md and run shelfbright/craigslist-scraperPaste into Claude Code, Codex, Cursor or any AI agent. It signs you in once in the browser.
{
"mcpServers": {
"scrapely": {
"url": "https://api.scrape.ly/mcp?tools=actors,runs,storage,docs&actors=shelfbright/craigslist-scraper"
}
}
}No key in the file: your client opens the browser to sign you in the first time it connects.
Inputs the developer prepared for common jobs. Open one to see its input, then copy it to your account to run it as-is or adjust it.
Ads from a search URL with full details.
Bicycle ads priced 100 to 2,000 USD.
Housing ads from a Craigslist search URL.
Scrape.ly gives you the infrastructure, the tooling, and the team to extract, process, and operationalize web data at any scale. Setup takes minutes. The advantage lasts forever.