# Changelog of Craigslist Scraper 🇺🇸 (deal hunting, leads, all-in price) (`tagadanar/craigslist-scraper`) Actor

- **URL**: https://apify.com/tagadanar/craigslist-scraper/changelog.md
- **Full Actor documentation**: https://apify.com/tagadanar/craigslist-scraper.md

## Changelog

### 2026-09-08

- **The clock guard was already here, and was never switched on.** `fetchSearch`
  was written to clamp every retry attempt against a deadline, and the run
  already refused to call a clock-ended ladder a Craigslist block — but nothing
  ever passed it a deadline, so it defaulted to "no limit" and the whole
  apparatus was dead code. It is now wired to the real run timeout.
- Contact-detail lookups are the droppable half (one extra fetch per posting,
  against one fetch per page of postings), so when the run gets short they stop
  and the listings keep coming.
- A run that hits its time limit now says so, including when it ran out before
  a page's first attempt — that case used to report a clean "ok".

### 2026-09-08

- **Fixed: prices outside the US were labelled USD.** Craigslist runs about 700
  city sections and plenty of them are not in the United States. A `paris` search
  came back priced `£495` and a `tokyo` one `¥100,000`, and every row was stamped
  `currency: "USD"` — so a ¥100,000 bike shipped looking like a $100,000 one. The
  price number itself was always right; only the label was wrong, and the symbol
  was already being captured in `priceText`. The currency is now read from it,
  and a price with no symbol at all is reported as unknown rather than assumed.

### 2026-08-29

- **New: condition filter.** `condition` takes Craigslist's own six values (new,
  like new, excellent, good, fair, salvage) and is sent as its own search
  filter, so you page through only the postings you asked for. A pasted search
  URL that already carries a condition keeps it.
- **More reliable on a flaky connection.** A page that comes back with a
  temporary server error or a block is now retried across the full ladder with a
  real backoff, instead of the request library quietly spending its own retry
  budget up front. Every attempt is logged, so a run that stops says how far it
  actually got.
- **The run now says what happened, in its own words.** Instead of ending
  silently, a run finishes with a status message built from what it counted:
  how many postings were delivered, how many were outside your date window (and
  therefore never charged), and whether Craigslist blocked it. A run that could
  not read a single results page no longer implies your search had no matches,
  because it does not know that.

### 2026-07-13

- README: added the missing Pricing section, disclosing per-event prices and the $0.001 actor-start fee.

### 2026-07-12

- Invalid input no longer fails the run. The run now finishes cleanly with a clear explanation in its status message, so a typo or an empty list is easy to spot and fix.
- List inputs now accept datasets piped straight from another scraper: entries
  that are objects are read through their usual key names (url/link,
  query/keyword/title, name/company and similar) instead of being rejected.

### 0.1 (2026-07-11)

First release.

- Search Craigslist across for sale, cars, free stuff, housing, apartments, jobs, gigs, services and community.
- Search several cities in one run, with keyword, price band, has-photo, owner or dealer, ZIP radius and sort filters.
- Posted-since window (today through last month) to watch a search for new postings on a schedule.
- Optional contact details: opens each post for its full description, attributes, and any phone or email the seller included.
- Flat JSON output with price, location, posting date, photos, bedrooms and square feet on housing, and a direct link to every post.
- Accepts pasted craigslist.org search URLs, filters included.
