Craigslist Email Scraper
Pricing
from $2.49 / 1,000 results
Craigslist Email Scraper
Craigslist Email Scraper SD - Craigslist Email Scraper is a lead generation tool that extracts leads with public contact emails, account names and profile URLs from Craigslist results by keyword, location and email domain - Craigslist email extractor.
Pricing
from $2.49 / 1,000 results
Rating
0.0
(0)
Developer
Leads Scraper
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
4 days ago
Last modified
Categories
Share
Craigslist Email Scraper
The Craigslist Email Scraper collects publicly indexed contact emails connected to craigslist.org, the classified network that still carries an enormous volume of local services, gigs and for-sale listings.
It builds Google queries with the site:craigslist.org operator, fetches them through the Apify GOOGLE_SERP proxy, and extracts emails from the result blocks.
No login, no browser, no Craigslist API — only what Google has already published in its index.
Start with the honest part. Craigslist posts are anonymised and expire quickly, and its subdomains are cities rather than accounts, so rows identify a city board rather than a person. Craigslist deliberately relays contact through masked addresses, and old posts fall out of the index. Both facts cap what any SERP-based tool can recover here.
The measured evidence reflects that. In a live test run, roughly 10 parsed results produced 3 unique emails, 2 rows with a usable label and 2 resolvable profile URLs — and those URLs were city boards such as https://sfbay.craigslist.org/, not seller profiles.
This is also the odd one out in its Actor family. The other 34 are travel and hospitality tools; the Craigslist Email Scraper is broad local classified prospecting — tradespeople, service businesses, gig posters and for-sale traders — rather than a restaurant tool.
What one run of the Craigslist Email Scraper produces
Each dataset row is one unique email plus whatever context Google printed around it. You get the raw title, a label where one exists, a cleaned snippet, the exact query used and a truncation flag. The Craigslist Email Scraper pushes rows to the Apify dataset as they are found, so you can export CSV, JSON or Excel mid-run.
Exporting and integrating the Craigslist Email Scraper dataset
Because rows are written incrementally, an aborted or migrated run still leaves whatever it found behind. Export from the Apify console, pull the dataset over the API, or schedule the Craigslist Email Scraper weekly and push results straight into your CRM.
How the Craigslist Email Scraper works: SERP parsing, not an API
The Craigslist Email Scraper runs the same six steps on every query it builds.
- It reads your input: keywords, location, email domains and limits.
- It builds Google queries with the
site:operator, for examplesite:craigslist.org services "@gmail.com" "call or text" "Austin". - It fetches result pages through the Apify GOOGLE_SERP proxy using async
aiohttprequests. - It parses each result block structurally — locating the
<h3>and the smallest surrounding block — rather than by CSS class name. - It extracts emails with a domain-filtered regex and normalises obfuscated forms.
- It deduplicates globally and pushes each lead to the dataset immediately.
There is no browser, no JavaScript rendering, no authentication and no cookies. The Craigslist Email Scraper never signs into Craigslist and never requests pages from Craigslist's own servers. Everything it returns was already public in Google's search index at the time of the run.
What the Craigslist Email Scraper is actually good for
Craigslist is not a directory of businesses; it is a stream of posts. That changes what a lead from it means, and it is worth being explicit about the categories that work.
| Category | Who you find | Typical buyer |
|---|---|---|
| Services | Contractors, movers, cleaners, tutors, photographers | Agencies, insurers, tool and supply vendors |
| Gigs | Freelancers, event crews, temporary labour | Recruiters, staffing platforms |
| For sale by dealer | Small resellers, equipment traders, dealers | Wholesalers, marketplaces, B2B distributors |
| Community and events | Organisers, venues, class providers | Event suppliers, local sponsors |
| Housing (commercial) | Landlords, property managers, sublet brokers | Proptech, maintenance and insurance vendors |
The obfuscation-handling in the email extractor matters unusually much on this platform.
Classified posters routinely write name (at) gmail (dot) com or name @ gmail.com to dodge naive scrapers, and those forms are normalised before matching.
City-level prospecting with location
location is the single most valuable input in the Craigslist Email Scraper, because Craigslist is organised city by city and so is almost every use case for its data.
It appends a quoted phrase to every query, so you can build one dataset per market instead of one national dump.
Useful values are the metros with the largest boards: San Francisco, New York, Los Angeles, Chicago, Seattle, Austin, Denver, Boston, Atlanta, Portland.
Neighbourhood and county phrases work too when a metro board is too broad for a field team.
Because profileUrl resolves to a city subdomain rather than a person, location is often the only geographic signal you can trust.
Set it deliberately on every run, and tag the resulting dataset with it.
Keyword and modifier suggestions
The shipped defaults are for sale and services, with email, contact, call or text, inquiries and owner as modifiers.
Those modifiers are already tuned to classified-ad phrasing — call or text in particular matches how posters write contact lines.
| Keyword | Why it works on Craigslist |
|---|---|
handyman | High-volume services category with direct contact details |
landscaping | Seasonal trades that post repeatedly |
moving | Small operators who publish an email for quotes |
catering | Independent food businesses advertising locally |
photographer | Freelancers who list a working inbox |
commercial equipment | Dealers and liquidators in for-sale categories |
wholesale | Traders and resellers moving stock |
event staffing | Gig posters hiring crews |
Pair a trade noun with an intent modifier — handyman "call or text", wholesale inquiries — rather than searching a bare noun.
Craigslist Email Scraper features
Everything listed below is implemented in the Craigslist Email Scraper today.
| Feature | What it means in practice |
|---|---|
| Query expansion | Base, quoted, intitle: and one variant per modifier; base queries run first |
| Global deduplication | An email found by several queries is stored exactly once |
| Email normalisation | Understands name [at] domain [dot] com, name (at) domain, name @ domain, domain .com, zero-width characters and the full-width @ — heavily used in classified posts |
| Junk filter | Rejects placeholders such as email@, yourname@, test@, xxx@ and single-character locals |
| Boundary-correct matching | @gmail.com will not match inside @gmail.company or @gmail.com.br |
| Soft-wrap repair | Drops a hit that is only the tail of another email in the same block |
| Structural parsing | Independent of Google's obfuscated CSS class names |
| Whole-page fallback | A markup change degrades to "emails without account details" rather than "no emails" |
| Block detection | CAPTCHA, "unusual traffic" and consent pages are detected and retried, not counted as empty |
| Retries | Up to 3 attempts per page with exponential backoff and a fresh proxy session per request |
| Failed-query requeue | Blocked or failed queries are re-queued once at the end of the run |
| Concurrency | An asyncio worker pool with a shared stop signal on maxEmails |
| Resumable state | Key-value store state keyed by an input hash; saves on PERSIST_STATE, MIGRATING and ABORTING |
| Run summary | Logs pages fetched, blocked pages, retries and emails per page |
Craigslist Email Scraper input fields
These are the exact input fields the Craigslist Email Scraper accepts, with the defaults it ships with.
| Field | Type | Default | Meaning |
|---|---|---|---|
keywords | array (required) | ["for sale","services"] | Search terms describing the posts you want |
location | string | "" | Optional location phrase added to every query |
customDomains | array | ["@gmail.com","@yahoo.com"] | Only emails on these domains are kept; @ optional |
maxEmails | integer 1-10000 | 20 | Stop after this many unique emails |
countryCode | string | "" | Two-letter country for the search proxy — US covers most boards |
expandQueries | boolean | true | Search each keyword x domain in several phrasings |
queryModifiers | array | ["email","contact","call or text","inquiries","owner"] | Extra words combined with each keyword when expansion is on |
maxPagesPerQuery | integer 1-50 | 30 | Page cap per query |
maxConcurrency | integer 1-20 | 5 | Parallel queries |
Example Craigslist Email Scraper input
{"keywords": ["handyman", "moving", "commercial equipment"],"location": "Austin","customDomains": ["@gmail.com", "@yahoo.com", "@hotmail.com", "@aol.com"],"maxEmails": 150,"countryCode": "US","expandQueries": true,"queryModifiers": ["email", "contact", "call or text", "inquiries", "owner"],"maxPagesPerQuery": 30,"maxConcurrency": 5}
Widening customDomains is unusually productive here, because classified posters use whatever personal mailbox they already have.
@aol.com, @hotmail.com, @icloud.com and @outlook.com are all worth testing alongside the defaults.
Craigslist Email Scraper output fields
Every dataset item the Craigslist Email Scraper writes carries all fourteen of these fields.
| Field | Meaning |
|---|---|
network | Platform name |
keyword | The keyword that produced the lead |
query | The exact Google query used |
title | Raw result title |
accountName | Account label Google prints |
fullName | Display name parsed from a profile-style title; empty for post captions |
username | URL-safe handle when the platform exposes one; otherwise null |
profileUrl | Canonical account URL when a handle is known; otherwise empty |
url | Direct platform link when exposed, else the profile URL |
description | Bio or snippet text, cleaned of labels and engagement counters |
email | Lower-cased email address |
emailDomain | The matched domain |
possiblyTruncated | true when Google's snippet ellipsis touched the email |
foundAt | ISO 8601 UTC timestamp |
Example Craigslist Email Scraper output
[{"network": "Craigslist","keyword": "handyman","query": "site:craigslist.org handyman \"@gmail.com\" \"call or text\" \"Austin\"","title": "Handyman & Remodel - licensed, 15 yrs - austin","accountName": "craigslist","fullName": "Handyman & Remodel - licensed, 15 yrs","username": "austin","profileUrl": "https://austin.craigslist.org/","url": "https://austin.craigslist.org/","description": "Carpentry, drywall, tile. Free estimates - email or call or text: atx.handyman.jobs@gmail.com","email": "atx.handyman.jobs@gmail.com","emailDomain": "@gmail.com","possiblyTruncated": false,"foundAt": "2026-08-31T16:11:20Z"},{"network": "Craigslist","keyword": "commercial equipment","query": "site:craigslist.org commercial equipment \"@aol.com\" inquiries \"Austin\"","title": "Restaurant equipment liquidation - fryers, coolers","accountName": "","fullName": "","username": null,"profileUrl": "","url": "","description": "Clearing a full kitchen. Serious inquiries only: txequipment.sales@aol.com","email": "txequipment.sales@aol.com","emailDomain": "@aol.com","possiblyTruncated": true,"foundAt": "2026-08-31T16:13:47Z"}]
Read the first row's profileUrl carefully. https://austin.craigslist.org/ is the Austin city board, not a seller account.
Craigslist's subdomains are cities rather than accounts, so username — when populated at all — is a city code such as austin, sfbay or newyork.
The second row is the more common shape: an expired or unresolvable post with username: null and an empty profileUrl.
Everything you can act on is in email, title and description.
What a measured Craigslist Email Scraper run looked like
Per roughly 10 parsed results in a live test: 2 rows with a usable label, 2 resolvable profile URLs and 3 unique emails. Low across the board, and the profile URLs point at city boards rather than people.
Plan around the address and the snippet.
The description field is the most informative column in a Craigslist dataset, because it carries the trade, the offer and often the poster's own contact phrasing.
Local lead generation use cases for the Craigslist Email Scraper
Here is where the Craigslist Email Scraper fits into real local B2B prospecting and market research.
| Use case | How to configure it |
|---|---|
| Local trades and services prospecting | keywords: ["handyman","landscaping","moving"], one metro per run |
| Recruiting and staffing sourcing | keywords: ["event staffing","gigs"] with an inquiries modifier |
| Wholesale and liquidation sourcing | keywords: ["commercial equipment","wholesale"] |
| Small-business software sales | Services categories, where owner-operators post their own inbox |
| Insurance and finance for tradespeople | keywords: ["contractor","handyman"] per city |
| Local agency client acquisition | One metro per run; pitch web, ads or booking-system work |
| Marketplace supply acquisition | Recruit dealers and resellers off for sale by dealer categories |
| Event and venue supplier prospecting | keywords: ["catering","photographer"] per market |
| Local market research | Compare row counts per trade keyword across cities |
| CRM enrichment | Match on email; do not rely on profileUrl for identity |
Practical Craigslist Email Scraper recipes
Single-metro trades run. Three trade keywords, four mail domains, one city in location, maxEmails: 150.
This is the configuration most likely to return usable local leads.
Obfuscation sweep. Keep expandQueries on and rely on the normaliser.
Classified posters write at and dot in words far more often than other platforms, and those variants are handled before matching.
Domain widening. Add @aol.com, @hotmail.com, @icloud.com and @outlook.com.
On a platform full of personal mailboxes, domain breadth beats keyword depth.
Run it often, not deep. Posts expire, so a weekly job over the same city surfaces new material that a single deep run never will.
Google caps a single query at roughly 300 results anyway, so frequency beats maxPagesPerQuery.
Different family, different job. If you actually want restaurants, use the OpenTable Email Scraper or Zomato Email Scraper instead — the Craigslist Email Scraper is a general local-classifieds tool, not a hospitality one.
Responsible use, GDPR and CAN-SPAM
Craigslist addresses are unusually likely to belong to private individuals rather than registered businesses, so treat this dataset more carefully than a business directory. An email that identifies a natural person is personal data even when it was published publicly, and public availability is not consent to send.
Commercial email into the United States falls under CAN-SPAM; EU or UK recipients bring the GDPR into scope. Craigslist's own terms also restrict automated collection and unsolicited contact — read them and make your own assessment before running outreach.
Practical steps that keep a Craigslist Email Scraper workflow defensible:
- Prefer posts that clearly advertise a business over posts from private individuals.
- Keep provenance for every lead — the
query,urlandfoundAtfields exist for exactly this. - Give a clear sender identity, a stated purpose and a working opt-out in every message.
- Include a valid physical postal address in commercial email, as CAN-SPAM requires.
- Honour opt-outs immediately and check suppression lists before each follow-up.
- Delete data you are not actively using; posts expire, and stale personal data is a liability.
This is operational guidance, not legal advice.
Related Actors
The Craigslist Email Scraper sits in a Travel, Hospitality and Food family of 35 Actors that all share this engine, even though its own subject matter is broader. If your target is genuinely restaurants or travel businesses, the OpenRice Email Scraper, Resy Email Scraper and Booking.com Email Scraper will serve you far better.
| Actor | What it collects |
|---|---|
| Craigslist Email and Phone Number Scraper | Emails and phone numbers from Craigslist |
| Craigslist Phone Number Scraper | Public phone numbers from Craigslist |
| Airbnb Email Scraper | Public contact emails from Airbnb |
| Booking.com Email Scraper | Public contact emails from Booking.com |
| Caviar Email Scraper | Public contact emails from Caviar |
| ChowNow Email Scraper | Public contact emails from ChowNow |
| Contiki Email Scraper | Public contact emails from Contiki |
| Delivery.com Email Scraper | Public contact emails from Delivery.com |
| DoorDash Email Scraper | Public contact emails from DoorDash |
| EatStreet Email Scraper | Public contact emails from EatStreet |
| G Adventures Email Scraper | Public contact emails from G Adventures |
| GetYourGuide Email Scraper | Public contact emails from GetYourGuide |
| Grubhub Email Scraper | Public contact emails from Grubhub |
| Hostelbookers Email Scraper | Public contact emails from Hostelworld |
| HotelsCombined Email Scraper | Public contact emails from HotelsCombined |
| Intrepid Travel Email Scraper | Public contact emails from Intrepid Travel |
| Just Eat Email Scraper | Public contact emails from Just Eat |
| Klook Email Scraper | Public contact emails from Klook |
| OpenTable Email Scraper | Public contact emails from OpenTable |
| Resy Email Scraper | Public contact emails from Resy |
| TheFork Email Scraper | Public contact emails from TheFork |
| Toast Restaurant Email Scraper | Public contact emails from Toast |
| TourRadar Email Scraper | Public contact emails from TourRadar |
| Traveloka Email Scraper | Public contact emails from Traveloka |
| Tripadvisor Attractions Email Scraper | Public contact emails from Tripadvisor |
| Tripadvisor Hotels Email Scraper | Public contact emails from Tripadvisor |
| Tripadvisor Restaurants Email Scraper | Public contact emails from Tripadvisor |
| Uber Eats Email Scraper | Public contact emails from Uber Eats |
| Viator Email Scraper | Public contact emails from Viator |
| Wanderlog Email Scraper | Public contact emails from Wanderlog |
| Wego Email Scraper | Public contact emails from Wego |
| Zomato Email Scraper | Public contact emails from Zomato |
| Airbnb Email and Phone Number Scraper | Emails and phone numbers from Airbnb |
| Booking.com Email and Phone Number Scraper | Emails and phone numbers from Booking.com |
| Caviar Email and Phone Number Scraper | Emails and phone numbers from Caviar |
| ChowNow Email and Phone Number Scraper | Emails and phone numbers from ChowNow |
| Contiki Email and Phone Number Scraper | Emails and phone numbers from Contiki |
| Delivery.com Email and Phone Number Scraper | Emails and phone numbers from Delivery.com |
| DoorDash Email and Phone Number Scraper | Emails and phone numbers from DoorDash |
| EatStreet Email and Phone Number Scraper | Emails and phone numbers from EatStreet |
| G Adventures Email and Phone Number Scraper | Emails and phone numbers from G Adventures |
| Grubhub Email and Phone Number Scraper | Emails and phone numbers from Grubhub |
Craigslist Email Scraper limitations
Read these before planning anything around Craigslist Email Scraper output.
- Craigslist posts are anonymised and expire quickly, and its subdomains are cities rather than accounts, so rows identify a city board rather than a person. This is the defining limitation of the Craigslist Email Scraper.
- Low yield. In a live test, roughly 10 parsed results produced 3 unique emails, 2 usable labels and 2 profile URLs.
- Publicly indexed emails only. The Craigslist Email Scraper finds addresses already visible in Google's index. Masked relay addresses and expired posts are unreachable.
- Google's ~300-result cap. A single query returns roughly 300 results at most, which is why
expandQueriesdefaults totrue. possiblyTruncated. Whentrue, Google's snippet ellipsis touched the email and it may be cut off. Verify before sending.usernameandprofileUrlidentify a city, not an account. Where populated,usernameis a city code andprofileUrlishttps://{city}.craigslist.org/. Where nothing resolves,usernameisnull. That is a Google and platform limitation, not a bug.- Personal rather than business addresses. Many posters are private individuals, which raises the compliance bar on any outreach.
- Apify GOOGLE_SERP proxy required. The Craigslist Email Scraper cannot run without Apify proxy credentials.
- Free-plan cap. Free Apify plans stop at 100 emails per run. Paid plans are uncapped.
- No guaranteed volume. Results vary with keywords, domains, location and Google's index on the day.
- Not affiliated with Craigslist. This is an independent tool, not supported, endorsed by or connected to craigslist, Inc.
Craigslist Email Scraper FAQ
Common questions about the Craigslist Email Scraper, its inputs and its output.
How many results should I expect from the Craigslist Email Scraper?
Few. In a live test, roughly 10 parsed results produced 3 unique emails, 2 usable labels and 2 profile URLs, and those URLs were city boards. Craigslist posts are anonymised and expire quickly, so treat this as a supplementary source rather than a primary lead engine.
Why does profileUrl point at a city instead of a seller?
Because Craigslist's subdomains are cities rather than accounts, so rows identify a city board rather than a person. The Actor builds https://{city}.craigslist.org/ when a city code resolves, and leaves the field empty otherwise.
Is this a restaurant scraper like the rest of the family?
No. It shares the engine and the category, but Craigslist is broad local classified prospecting — services, gigs and for-sale traders. For restaurants, use a hospitality-specific Actor instead.
Does the Craigslist Email Scraper log into Craigslist?
No. It never logs in, never calls a Craigslist API and never opens craigslist.org in a browser. It reads Google results through the Apify GOOGLE_SERP proxy.
Which keywords work best?
Trade and category nouns: handyman, landscaping, moving, catering, photographer, commercial equipment, wholesale, event staffing. Keep the call or text modifier — it matches how classified posters write contact lines.
How do I use location for city-level prospecting?
Put a metro in it — Austin, Seattle, San Francisco — and run one job per market. It is the only geographic signal you can rely on, since profileUrl resolves only to a city board.
Which email domains should I add?
Widen aggressively: @aol.com, @hotmail.com, @outlook.com and @icloud.com alongside the defaults. Classified posters use whatever personal mailbox they already have.
Does it handle obfuscated addresses like name (at) gmail (dot) com?
Yes. The normaliser handles bracketed at/dot, spaced @, zero-width characters and the full-width @ before matching — all common in classified posts.
Does the Craigslist Email Scraper verify deliverability?
No. It extracts and normalises what Google indexed. Check rows flagged possiblyTruncated before using them, and expect some addresses on expired posts to be dead.
Can I resume an interrupted run?
Yes. State lives in the key-value store keyed by a hash of your input, with saves on Apify's PERSIST_STATE, MIGRATING and ABORTING events.
What happens when Google blocks a request?
Block, CAPTCHA and consent pages are detected rather than treated as empty. Pages get up to three attempts with exponential backoff, and failed queries are re-queued once at the end of the run.
Is scraping Craigslist contact emails legal?
The Craigslist Email Scraper only reads publicly indexed Google results. Craigslist's own terms restrict automated collection and unsolicited contact, and many posters are private individuals, so CAN-SPAM and GDPR obligations bite harder here. Read the responsible use section and take your own legal advice.
Leave a review
If the Craigslist Email Scraper saved you time, please leave a star rating and a short review on the Actor page.
Reviews are how other buyers judge whether a tool works, and they tell us which features to build next.
If something did not work, email neurodata.apify@gmail.com instead - bugs get fixed faster than they get complained about.
Support
Questions, a bug, or you need a custom build of the Craigslist Email Scraper? Contact neurodata.apify@gmail.com.