This module makes for simple retrieval of search results from Craigslist!
npm install node-craigslist
Methods optionally accept a callback argument - when supplied, the function will execute the callback with two arguments (err
and results
). When omitted, the method call will return a Promise.
When constructing the craigslist client, options specified are used for all subsequent requests (i.e. #list and #search).
Usage: new craigslist.Client(options)
options
- (optional) - can be used to supply additional options - see Options for detailscity
- (optional) - defines the city for the search (NOTE: this field is required by #list and #search when not specified in the constructor)baseHost
- (optional) - allows for specification of the base domain (defaults tocraiglist.org
) to support other countries (i.e. for Canada,craigslist.ca
)maxPrice
- (optional) - maximum priceminPrice
- (optional) - minimum pricecategory
- (optional) - allows for specification of the category (defaults tosss
) to search in other categoriesnocache
- (optional) - applies appropriate headers on request to attampt to bypass any caches
const craigslist = require('node-craigslist');
let client = new craigslist.Client({
baseHost : 'craigslist.ca',
city : 'Toronto'
});
This method can be used to grab a listing of Craigslist postings.
Usage: client.list(options, callback)
options
- (optional) - can be used to supply additional options - see Options for detailscity
- (optional) - defines the city for the search (NOTE: this field is required when city is not specified in the constructor)baseHost
- (optional) - allows for specification of the base domain (defaults tocraiglist.org
) to support other countries (i.e. for Canada,craigslist.ca
)maxPrice
- (optional) - maximum priceminPrice
- (optional) - minimum priceoffset
- (optional) - offset number of listings returnedcategory
- (optional) - allows for specification of the category (defaults tosss
) to search in other categoriesnocache
- (optional) - applies appropriate headers on request to attampt to bypass any caches
callback
- (optional) - a function callback that accepts two arguments - if omitted, the function will return a Promiseerr
- populated with details in the event of an errorresult
- result set details
To use it, it's as simple as the following example:
var
craigslist = require('node-craigslist'),
client = new craigslist.Client({
city : 'seattle'
});
client
.list()
.then((listings) => {
// play with listings here...
listings.forEach((listing) => console.log(listing));
})
.catch((err) => {
console.error(err);
});
Example response:
[
{
pid: '1234567890',
category: 'video gaming - by owner',
date: 'Mar 1',
hasPic: true,
price: '250',
title: 'NEW & UNSEALED XBOX 360 - 250 GB BLACK FRIDAY BUNDLE',
url: 'https://seattle.craigslist.org/see/vgm/4355583965.html'
},
/* results abbreviated */
]
This method can be used to search Craigslist for specific postings.
Usage: client.search(options, query, callback)
options
- (optional) - can be used to supply additional options - see Options for detailsbaseHost
- (optional) - allows for specification of the base domain (defaults tocraiglist.org
) to support other countries (i.e. for Canada,craigslist.ca
)bundleDuplicates
- (optional) - when specified, duplicate listings are collapsed on search per Craigslist functionalitycategory
- (optional) - allows for specification of the category (defaults tosss
) to search in other categoriescity
- (optional) - defines the city for the search (NOTE: this field is required when city is not specified in the constructor)hasPic
- (optional) - when specified, only postings with images are returnedmaxPrice
- (optional) - maximum priceminPrice
- (optional) - minimum priceoffset
- (optional) - offset number of listings returnedpostal
- (optional) - when specified in conjunction withsearchDistance
, the postal code can be used to find posting within a certain rangesearchDistance
- (optional) - when specified in conjunction withpostal
, this is the distance rangesearchNearby
- (optional) - allows for a search to be performed against nearby locations as wellsearchTitlesOnly
- (optional) - performs search against posting titles only and not the posting bodynocache
- (optional) - applies appropriate headers on request to attampt to bypass any cachesminYear
- (optional) - minimum year (cars+trucks related search)maxYear
- (optional) - maximum year (cars+trucks related search)minMiles
- (optional) - minimum miles (cars+trucks related search)maxMiles
- (optional) - maximum miles (cars+trucks related search)autoMakeModel
- (optional) - auto make model (cars+trucks related search)minBedrooms
- (optional) - minimum bedrooms (housing related search)maxBedrooms
- (optional) - maximum bedrooms (housing related search)minBathrooms
- (optional) - minimum bathrooms (housing related search)maxBathrooms
- (optional) - maximum bathrooms (housing related search)minSqft
- (optional) - minimum square ft (housing related search)maxSqft
- (optional) - maximum square ft (housing related search)dogsOk
- (optional) - when specified, only postings where dogs are ok (housing related search)
query
- (required) - a string query to search withcallback
- (optional) - a function callback that accepts two arguments - if omitted, the function will return a Promiseerr
- populated with details in the event of an errorresult
- result set details
To use it, it's as simple as the following example:
var
craigslist = require('node-craigslist'),
client = new craigslist.Client({
city : 'seattle'
});
client
.search('xbox one')
.then((listings) => {
// play with listings here...
listings.forEach((listing) => console.log(listing));
})
.catch((err) => {
console.error(err);
});
In order to search and filter by category and by price, check out the following example:
var
craigslist = require('node-craigslist'),
client = new craigslist.Client({
city : 'seattle'
}),
options = {
category : 'ppa',
maxPrice : '200',
minPrice : '100'
};
client
.search(options, 'xbox one')
.then((listings) => {
// filtered listings (by price)
listings.forEach((listing) => console.log(listing));
})
.catch((err) => {
console.error(err);
});
Example response:
[
{
pid: '1234567890',
category: 'video gaming - by owner',
date: 'Mar 1',
hasPic: true,
price: '250',
title: 'NEW & UNSEALED XBOX 360 - 250 GB BLACK FRIDAY BUNDLE',
url: 'https://seattle.craigslist.org/see/vgm/4355583965.html'
},
/* results abbreviated */
]
This method can be used to grab additional information for a specified listing.
Usage: client.details(listing, callback)
listing
- (required) - may be a listing object from a previous #search or #list call or astring
URL to the specified postingcallback
- (optional) - a function callback that accepts two arguments - if omitted, the function will return a Promiseerr
- populated with details in the event of an errorresult
- result set details
To grab details for a listing, see the following example:
var
craigslist = require('node-craigslist'),
client = new craigslist.Client({
city : 'seattle'
});
client
.list()
.then((listings) => client.details(listings[0]))
.then((details) => {
console.log(details);
})
.catch((err) => {
console.error(err);
});
Example response (NOTE: not all fields are populated if additional information is not found, including phone, contact name, email, images, postedAt and updatedAt):
{
"description": "My setup that taught me everything from mixing to scratching. A pair of DJ Consoles by DENON, a 2 channel mixer by Numark, all power supplies and RCA cables included, + ROAD CASE with wheels. I spent just over $1600 on this setup almost 5 years ago. Would love to see the whole thing go as a package, you can have it for $400. Come play around with it before you buy and see how awesome the scratching aspect is! Feels like real 7\'\' records!\n\nIncluded:\nPair of DENON DN-S3000\'s\nNumark DM1050 2 channel Mixer (+ Power Supply)\nRoad Read case with wheels\nRCA Cables for hook up\n\nHoller at me, email, call, or text.\nCheers,\nBro",
"mapUrl": "https://maps.google.com/maps/preview/@47.690237,-122.344437,16z",
"pid": "XXXXXXXXXX",
"replyUrl": "http://seattle.craigslist.org/reply/sea/msg/XXXXXXXXXX",
"title": "DJ Setup (DENONS + Mixer + Case)",
"url": "https://seattle.craigslist.org/see/msg/XXXXXXXXXX.html",
"postedAt": "2016-08-01T21:39:57.000Z",
"updatedAt": "2016-08-11T16:44:29.000Z",
"images":
[ "http://images.craigslist.org/XX404_ggud0ZU38XX_600x450.jpg",
"http://images.craigslist.org/XXP0P_h2cCxOdjCXX_600x450.jpg,"
"http://images.craigslist.org/XXm0m_khEDbKM7fXX_600x450.jpg",
"http://images.craigslist.org/XXZ0Z_c7xXA2eiCXX_600x450.jpg",
"http://images.craigslist.org/XXp0p_1jB0EqCaqXX_600x450.jpg" ],
"contactName": "Bro",
"phoneNumber": "(XXX) XXX-XXXX",
"email": "XXX-XXXX@XXXX.com"
}
Per request, options can be modified to specify the following:
- a different city than whatever is specified during initialization (
city
option) - a different country than whatever is specified during initialization (
baseHost
option) - min and max price ranges (
maxPrice
andminPrice
options) - category (
category
option)
var
craigslist = require('node-craigslist'),
client = new craigslist.Client({
city : 'seattle'
}),
options = {
baseHost : '', // defaults to craigslist.org
category : '', // defaults to sss (all)
city : '',
maxPrice : '200',
minPrice : '100'
};
client
.search(options, 'xbox one')
.then((listings) => {
// listings (from Boston instead of Seattle)
listings.forEach((listing) => console.log(listing));
})
.catch((err) => {
console.error(err);
});
This list may change based on Craigslist updates, but at the time of v1.9, this is the current list:
- sss = all
- ata = antiques
- ppa = appliances
- ara = arts+crafts
- sna = atvs/utvs/snow
- pta = auto parts
- baa = baby+kids
- bar = barter
- haa = beauty+hlth
- bip = bike parts
- bia = bikes
- bpa = boat parts
- boo = boats
- bka = books
- bfa = business
- cta = cars+trucks
- ema = cds/dvd/vhs
- moa = cell phones
- cla = clothes+acc
- cba = collectibles
- syp = computer parts
- sya = computers
- ela = electronics
- gra = farm+garden
- zip = free stuff
- fua = furniture
- gms = garage sales
- foa = general
- hva = heavy equipment
- hsa = household
- jwa = jewelry
- maa = materials
- mpa = motorcycle parts
- mca = motorcycles
- msa = music instr
- pha = photo+video
- rva = RVs
- sga = sporting
- tia = tickets
- tla = tools
- taa = toys+games
- vga = video gaming
- waa = wanted
Each listing returned has several properties... see the example below:
{ pid: '1234567890',
category: 'video gaming - by owner',
date: 'Mar 1',
hasPic: true,
price: '250',
title: 'NEW & UNSEALED XBOX 360 - 250 GB BLACK FRIDAY BUNDLE',
url: 'https://seattle.craigslist.org/see/vgm/4355583965.html' }