Craigslist Email Scraper avatar

Craigslist Email Scraper

Pricing

from $2.49 / 1,000 results

Go to Apify Store
Craigslist Email Scraper

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

Leads Scraper

Maintained by Community

Actor 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.

  1. It reads your input: keywords, location, email domains and limits.
  2. It builds Google queries with the site: operator, for example site:craigslist.org services "@gmail.com" "call or text" "Austin".
  3. It fetches result pages through the Apify GOOGLE_SERP proxy using async aiohttp requests.
  4. It parses each result block structurally — locating the <h3> and the smallest surrounding block — rather than by CSS class name.
  5. It extracts emails with a domain-filtered regex and normalises obfuscated forms.
  6. 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.

CategoryWho you findTypical buyer
ServicesContractors, movers, cleaners, tutors, photographersAgencies, insurers, tool and supply vendors
GigsFreelancers, event crews, temporary labourRecruiters, staffing platforms
For sale by dealerSmall resellers, equipment traders, dealersWholesalers, marketplaces, B2B distributors
Community and eventsOrganisers, venues, class providersEvent suppliers, local sponsors
Housing (commercial)Landlords, property managers, sublet brokersProptech, 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.

KeywordWhy it works on Craigslist
handymanHigh-volume services category with direct contact details
landscapingSeasonal trades that post repeatedly
movingSmall operators who publish an email for quotes
cateringIndependent food businesses advertising locally
photographerFreelancers who list a working inbox
commercial equipmentDealers and liquidators in for-sale categories
wholesaleTraders and resellers moving stock
event staffingGig 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.

FeatureWhat it means in practice
Query expansionBase, quoted, intitle: and one variant per modifier; base queries run first
Global deduplicationAn email found by several queries is stored exactly once
Email normalisationUnderstands 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 filterRejects 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 repairDrops a hit that is only the tail of another email in the same block
Structural parsingIndependent of Google's obfuscated CSS class names
Whole-page fallbackA markup change degrades to "emails without account details" rather than "no emails"
Block detectionCAPTCHA, "unusual traffic" and consent pages are detected and retried, not counted as empty
RetriesUp to 3 attempts per page with exponential backoff and a fresh proxy session per request
Failed-query requeueBlocked or failed queries are re-queued once at the end of the run
ConcurrencyAn asyncio worker pool with a shared stop signal on maxEmails
Resumable stateKey-value store state keyed by an input hash; saves on PERSIST_STATE, MIGRATING and ABORTING
Run summaryLogs 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.

FieldTypeDefaultMeaning
keywordsarray (required)["for sale","services"]Search terms describing the posts you want
locationstring""Optional location phrase added to every query
customDomainsarray["@gmail.com","@yahoo.com"]Only emails on these domains are kept; @ optional
maxEmailsinteger 1-1000020Stop after this many unique emails
countryCodestring""Two-letter country for the search proxy — US covers most boards
expandQueriesbooleantrueSearch each keyword x domain in several phrasings
queryModifiersarray["email","contact","call or text","inquiries","owner"]Extra words combined with each keyword when expansion is on
maxPagesPerQueryinteger 1-5030Page cap per query
maxConcurrencyinteger 1-205Parallel 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.

FieldMeaning
networkPlatform name
keywordThe keyword that produced the lead
queryThe exact Google query used
titleRaw result title
accountNameAccount label Google prints
fullNameDisplay name parsed from a profile-style title; empty for post captions
usernameURL-safe handle when the platform exposes one; otherwise null
profileUrlCanonical account URL when a handle is known; otherwise empty
urlDirect platform link when exposed, else the profile URL
descriptionBio or snippet text, cleaned of labels and engagement counters
emailLower-cased email address
emailDomainThe matched domain
possiblyTruncatedtrue when Google's snippet ellipsis touched the email
foundAtISO 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 caseHow to configure it
Local trades and services prospectingkeywords: ["handyman","landscaping","moving"], one metro per run
Recruiting and staffing sourcingkeywords: ["event staffing","gigs"] with an inquiries modifier
Wholesale and liquidation sourcingkeywords: ["commercial equipment","wholesale"]
Small-business software salesServices categories, where owner-operators post their own inbox
Insurance and finance for tradespeoplekeywords: ["contractor","handyman"] per city
Local agency client acquisitionOne metro per run; pitch web, ads or booking-system work
Marketplace supply acquisitionRecruit dealers and resellers off for sale by dealer categories
Event and venue supplier prospectingkeywords: ["catering","photographer"] per market
Local market researchCompare row counts per trade keyword across cities
CRM enrichmentMatch 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, url and foundAt fields 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.

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.

ActorWhat it collects
Craigslist Email and Phone Number ScraperEmails and phone numbers from Craigslist
Craigslist Phone Number ScraperPublic phone numbers from Craigslist
Airbnb Email ScraperPublic contact emails from Airbnb
Booking.com Email ScraperPublic contact emails from Booking.com
Caviar Email ScraperPublic contact emails from Caviar
ChowNow Email ScraperPublic contact emails from ChowNow
Contiki Email ScraperPublic contact emails from Contiki
Delivery.com Email ScraperPublic contact emails from Delivery.com
DoorDash Email ScraperPublic contact emails from DoorDash
EatStreet Email ScraperPublic contact emails from EatStreet
G Adventures Email ScraperPublic contact emails from G Adventures
GetYourGuide Email ScraperPublic contact emails from GetYourGuide
Grubhub Email ScraperPublic contact emails from Grubhub
Hostelbookers Email ScraperPublic contact emails from Hostelworld
HotelsCombined Email ScraperPublic contact emails from HotelsCombined
Intrepid Travel Email ScraperPublic contact emails from Intrepid Travel
Just Eat Email ScraperPublic contact emails from Just Eat
Klook Email ScraperPublic contact emails from Klook
OpenTable Email ScraperPublic contact emails from OpenTable
Resy Email ScraperPublic contact emails from Resy
TheFork Email ScraperPublic contact emails from TheFork
Toast Restaurant Email ScraperPublic contact emails from Toast
TourRadar Email ScraperPublic contact emails from TourRadar
Traveloka Email ScraperPublic contact emails from Traveloka
Tripadvisor Attractions Email ScraperPublic contact emails from Tripadvisor
Tripadvisor Hotels Email ScraperPublic contact emails from Tripadvisor
Tripadvisor Restaurants Email ScraperPublic contact emails from Tripadvisor
Uber Eats Email ScraperPublic contact emails from Uber Eats
Viator Email ScraperPublic contact emails from Viator
Wanderlog Email ScraperPublic contact emails from Wanderlog
Wego Email ScraperPublic contact emails from Wego
Zomato Email ScraperPublic contact emails from Zomato
Airbnb Email and Phone Number ScraperEmails and phone numbers from Airbnb
Booking.com Email and Phone Number ScraperEmails and phone numbers from Booking.com
Caviar Email and Phone Number ScraperEmails and phone numbers from Caviar
ChowNow Email and Phone Number ScraperEmails and phone numbers from ChowNow
Contiki Email and Phone Number ScraperEmails and phone numbers from Contiki
Delivery.com Email and Phone Number ScraperEmails and phone numbers from Delivery.com
DoorDash Email and Phone Number ScraperEmails and phone numbers from DoorDash
EatStreet Email and Phone Number ScraperEmails and phone numbers from EatStreet
G Adventures Email and Phone Number ScraperEmails and phone numbers from G Adventures
Grubhub Email and Phone Number ScraperEmails 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 expandQueries defaults to true.
  • possiblyTruncated. When true, Google's snippet ellipsis touched the email and it may be cut off. Verify before sending.
  • username and profileUrl identify a city, not an account. Where populated, username is a city code and profileUrl is https://{city}.craigslist.org/. Where nothing resolves, username is null. 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.

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.