When I was searching for a flat in Berlin I wrote a bot that would continuously crawl EBay small ads and look for suitable apartments (based on surface, neighborhood, price, ...). When finding a compatible one, it would write to the poster and if a phone number was given send it to me via Slack. I would then always be the first person to call or write, and this helped me to find a really nice flat within just three weeks. The hardest part was pretending to have read the ad when people called me back after my bot wrote them, or explain how I could already call them when their ad was online only for a few seconds :D
On the other hand a rule quite frequent among my peers is when you list an add, ignore those that call in the first 8 working hours. Most of those calls are professional dealers (vehicles, properties, hardware) using bots that will only waste your time by trying to lower the price substantially in order to make a quick buck.
That's quite an unusual selection of districts! From Charlottenburg to Tegel to Friedrichshain and Neukölln? I can't even guess what they have in common.
I didn't know that many people used eBay Kleinanzeigen for apartments. Good to know.
Who are these landlords that are selecting tenants based on how fast they replied to an ad!?!
What happened to background checks, credit checks, and general tenant due diligence?
"Well Mr. Applicant, it says here on your application, you're a heroin addict with a history of extreme violence and a credit score of zero, you don't have the income or the deposit, and quite frankly, I'm not sure how you'll pay the rent. But you did respond to my ad in 6 milliseconds thanks to a python script, so I guess the apt is yours! Welcome home!"
I like this post not for its technical merit but for its pedagogy. Scraping Craigslist and posting the results to Slack is not rocket science, but the project is described in enough detail to make it accessible to -- and potentially reproducible by -- someone who didn't already know how to do it. IMHO that has a lot of value.
I think this is exactly where programming should be headed in all but the most engineered and rarified of situations. It's just a thing like reading and writing that anyone can use to make their lives better.
I also like how it showed a practical example of how to use SQLAlchemy, which is a wonderfully powerful sql toolkit, but can be hard to get your head around without some context like this example gives.
Yep - usually these types of posts lose my interest after a few sentences. This one I couldn't stop reading even though I could easily build the same without the post. Very well composed.
Even with tools to automate the search through listings and get you ahead of other buyers, one of the tricky parts of apartment hunting is its “optimal stopping” structure: you have to decide when to commit without knowing whether an even better apartment might be out there.
This is a famous math problem (the “secretary problem”) with the lovely solution that you should define a time interval over which to search and not commit to anything until you’ve spent 1/e of that time -- 37% -- noncommittally exploring your options.
I went hunting for a flat a while ago here in New Zealand, I gave up pretty quickly and just ended up staying with relatives. I've now moved cities and I live in a backpackers because I can't be bothered finding a flat (plus interesting people here!).
It's just so draining to have to contact all these people, and view their places. I guess it's like job hunting, except you're paying money. It doesn't help that I'm not very good with strangers.
To find our current apartment in NYC, I just used IFTTT, plugging in the URL of a custom search (neighborhood, price, bedrooms, etc) on craigslist. Worked a treat
First thing I did was search for IFTTT references in this thread. :) I did the same thing in the Bay Area, and it worked pretty well. I should have made the filtering a little more restrictive though because I ended up with something like 5k emails/listings in 4 weeks.
Those real-time notifications definitely make a difference.
When I was searching for apartments in the NYCish area, I asked Zillow to ping my phone when a good listing came in.
One day, I got a ping during class and called the broker as fast as I could. "Yeah," he said, "I posted that listing 20 minutes ago but you're like the 6th caller. You almost certainly won't get it, sorry."
While this is technically fine, the process strikes me as unnecessary. I suppose that's not too surprising for somebody new to the area and mostly experiencing it from scary anecdotes.
The list of "San Francisco" neighborhoods being searched are almost all more than 1.2 miles from BART. I'm sure it's hard to find an apartment if you have a robot excluding nearly all listings.
FWIW, there's been an apartment vacant in my building for 2+ weeks, with very few open house attendees. Other nearby buildings are much the same. If you're willing to look slightly outside the most desirable neighborhoods, it isn't that hard to find an apartment. Affordable? Well that's another story; this is SF after all.
> The list of "San Francisco" neighborhoods being searched are almost all more than 1.2 miles from BART. I'm sure it's hard to find an apartment if you have a robot excluding nearly all listings.
They only filtered by BART distance for the listings outside San Francisco: "Priya and I knew we’d both be traveling to San Francisco a lot, so we wanted to live near public transit if we weren’t going to be [in] SF."
> If you're willing to look slightly outside the most desirable neighborhoods, it isn't that hard to find an apartment.
This is true for anything with less than 2 bedrooms. If you are looking for anything with 2 bedrooms or more (not a studio, one bedroom, or roommate situation) then finding an apartment within the northern Bay Area, including East Bay, downtown, or the peninsula, is quite difficult regardless of price.
Edit: from the post it does look like they were looking for a one bedroom place. They're using python-craigslist[1]. From the readme it doesn't look like it exposes the bedrooms under "CraigslistHousing" but the code tells a different story in __init__.py[2] and does seem to snag "bedrooms" and "bathrooms" as well as additional properties. Just in case anyone was looking to fork this and add some handling for the number of bedrooms or bathrooms.
> If you're willing to look slightly outside the most desirable neighborhoods, it isn't that hard to find an apartment.
Not trying to be pedantic but "willing to look slightly outside" is pretty ambiguous for a city like SF. The Tenderloin is slightly outside of Nob Hill, a very upscale and posh/safe neighborhood, whereas the Tenderloin greets you with used heroin needles on the street, homeless crackheads running around, and the noise of constant sirens.
I agree with you on affordability, though. Number one reason why I'm glad I'm back in the South Bay. Also, I'd rather enjoy the laid back nightlife of Los Gatos or Campbell over the Marina or Polk Street (20 year old sorority girls puking all over the place) any day.
What neighborhood? I remember looking at quite a few studio(-plus) apartments in ... let's call it "difficult" areas about a year ago. None of them were under $2800/month. The bit in the article about timing resonated most with me. We ended up finding a place because I responded to a listing ~4min after it went up.
Well I also built a program[1] to help me find an apartment in Vienna, in 2011. We actually needed two apartments, and we wanted them close to one another. We quickly found out how bad real estate websites are with moderatly complex queries even when wanting only a single apartment. With the additional constraint of needed two apartments close to each other... yeah, they were mostly useless.
So I built some shell scripts that scrapped all the websites, and generated some tables of pairs of houses sorted by the distance between them that can be easily read by awk. Then I could run queries on them.
All the scrapping was done with regular expressions, no fancy HTML parsing here.
For the distance calculation, I got the geographic coordinates by piping the address of the residence to Google Maps. I then calculated the geodesic distace between them in my scripts. Initially I wanted to let Google Maps calculate the more useful walking distance between residences, but that made the algorithm O(n²), and I ran into Google API free quota issues even with O(n). Geodesic distace was a good enough proxy though.
Being able to use awk, I could use any kind of arbitrary query I could think of. I filtered all residences that were not direct sales (used an agency), they were unfurnished, that were in a place where I didn't want to live (few such places in Vienna though), that were outside my price range, etc. basic stuff.
However, I could create arbitrary utility functions. For example it was really important for me that apartments were close together. So I was willing to sacrifice location, or the total area, or the numbers of rooms if they were really close, but if they were further away, I required more rooms or better location. No real estate agent or website will be able to do this for you.
In the end, it was too much trouble to rent two apartments, so we only rented one. However, the software was still very useful as it presensed all data in a much useful format, multiplexing data from all websites, and the data coming already filtered.
Plus being all text-based, and this being Unix and all that, I could easily manually input the 100 or so metro stations as "houses", so we could sort apartments based on the distance to the nearest metro station. And again I could create arbitrary utility functions. For example the U3 line is much more important for us than the U6 line, and we really don't care about U2 at all.
I have a feeling, from the title alone, that some people are going to find some way to mock the OP. "You built some thing to do some task? I do it differently. Loser!"
To be honest, I was hoping for something more impressive, like making a slack bot which did some heavy lifting (scraping conversations about real estate?). The moment I saw "scraping craigslist" the magic was gone.
The title sounds like "How I used a cherry to make a birthday cake". Intriguing, yet disappointing when you learn he only placed the cherry on the top of the finished cake for pretty decoration.
It is against their terms, but they aren't going to come after you for personal use. There have been some high profile takedowns of commercial use cases however.
I doubt they'd stop one person from doing it for a few weeks till they found an apartment. But if they sold the service commercially I'd bet sooner or later they'd be told to stop.
I wish CL sold API calls. I have an idea for helping people find lost pets. CL is probably the best source of data, but I don't want to expend a bunch of energy and then get a C&D.
I'm currently trying the same approach to get an apartment in the Hague area, Netherlands. I find it very unreliable, but that's probably due to the poor state of house listings here.
The whole experience of searching a suitable house is just aweful, all listing sites are basically full of spam and scams:
- most houses are already taken, but they leave them on the site because free exposure/advertising for the realtor/landlord.
- pictures that are not taken in the actual apartment (they just reuse pictures of a different apartment that kinda looks like it).
- ads that look like normal list items (dark ui).
- super good looking houses for low prices, that turn out to be fake, just to promote the realtor/landlord name.
- loads of hidden costs (service, administration, VAT, parking etc).
- all sorts of requirements (based on sex, income, ethnicity, type of work and what not).
I had similar problems finding a place in Budapest. Craigslist proved particularly unreliable: the usual process was to find a great looking apartment, do a reverse Google search on the image, and find the same place advertised in Paris, Berlin, and numerous other places. And those we did contact were scams: "I'm in Portugal at the moment but I'm happy to travel to Budapest to show you the place if you send me the deposit in advance."
Recently moved to SF and wanted to be able pick prospective apartments from Craigslist based on how close they were to BART/Muni stops...so I hacked together a little bookmarklet to help with this. Check it out if you are in the same boat:
Honestly suprised that Craigslist doesn't embrace people interfacing with them via an official API; yes, I know lots about CL, but the after bring on (forgot his name) they changed their back an a lot and a bit on the front too.
I built something like this a couple of years ago for my own apartment hunt, but my IP got blacklisted. Has Craigslist changed their policy on scraping?
In my experience, Craigslist's email alerts are terrible, for a few reasons:
1. Craigslist combines listings that come in at once into a single email. That's fine, but they truncate the results (... SNIP...) if a lot of listings come in. Why? Are they worried about exceeding your incoming email size limit with an all-text email?
2. Sometimes they send emails with zero results. Again, why?
3. Maybe not an issue in NY or SF where good apartments rent minutes after listing, but even in Seattle's hot housing market duplicate listings are a big problem. I've seen the same listing posted multiple times per day for days on end. All of these listings appear in Craigslist's email alerts, so you have to wade through them all. While the author didn't address this in his bot's code, I see filtering out duplicate or "already seen, not interested" listings as the biggest benefit to a home-made solution like this.
[+] [-] ThePhysicist|9 years ago|reply
Here's the code btw:
https://gist.github.com/adewes/c9b2a71457c6c6f01f2f
[+] [-] pingec|9 years ago|reply
On the other hand a rule quite frequent among my peers is when you list an add, ignore those that call in the first 8 working hours. Most of those calls are professional dealers (vehicles, properties, hardware) using bots that will only waste your time by trying to lower the price substantially in order to make a quick buck.
[+] [-] TillE|9 years ago|reply
I didn't know that many people used eBay Kleinanzeigen for apartments. Good to know.
[+] [-] spaceflunky|9 years ago|reply
What happened to background checks, credit checks, and general tenant due diligence?
"Well Mr. Applicant, it says here on your application, you're a heroin addict with a history of extreme violence and a credit score of zero, you don't have the income or the deposit, and quite frankly, I'm not sure how you'll pay the rent. But you did respond to my ad in 6 milliseconds thanks to a python script, so I guess the apt is yours! Welcome home!"
[+] [-] lisper|9 years ago|reply
[+] [-] HiroshiSan|9 years ago|reply
As a beginner to programming, not knowing how to build anything, and seeing someones thought process. It's very valuable and enjoyable to read.
[+] [-] petercooper|9 years ago|reply
[+] [-] DonHopkins|9 years ago|reply
[+] [-] notyourwork|9 years ago|reply
[+] [-] mxuribe|9 years ago|reply
[+] [-] brchr|9 years ago|reply
This is a famous math problem (the “secretary problem”) with the lovely solution that you should define a time interval over which to search and not commit to anything until you’ve spent 1/e of that time -- 37% -- noncommittally exploring your options.
https://medium.com/galleys/optimal-stopping-45c54da6d8d0#.lj...
[+] [-] toomanybeersies|9 years ago|reply
It's just so draining to have to contact all these people, and view their places. I guess it's like job hunting, except you're paying money. It doesn't help that I'm not very good with strangers.
[+] [-] osxrand|9 years ago|reply
[+] [-] subspaceman|9 years ago|reply
[+] [-] jhalstead|9 years ago|reply
[+] [-] lighttower|9 years ago|reply
[+] [-] gcr|9 years ago|reply
When I was searching for apartments in the NYCish area, I asked Zillow to ping my phone when a good listing came in.
One day, I got a ping during class and called the broker as fast as I could. "Yeah," he said, "I posted that listing 20 minutes ago but you're like the 6th caller. You almost certainly won't get it, sorry."
[+] [-] Nilzor|9 years ago|reply
[+] [-] mcpherrinm|9 years ago|reply
The list of "San Francisco" neighborhoods being searched are almost all more than 1.2 miles from BART. I'm sure it's hard to find an apartment if you have a robot excluding nearly all listings.
FWIW, there's been an apartment vacant in my building for 2+ weeks, with very few open house attendees. Other nearby buildings are much the same. If you're willing to look slightly outside the most desirable neighborhoods, it isn't that hard to find an apartment. Affordable? Well that's another story; this is SF after all.
[+] [-] kelnos|9 years ago|reply
They only filtered by BART distance for the listings outside San Francisco: "Priya and I knew we’d both be traveling to San Francisco a lot, so we wanted to live near public transit if we weren’t going to be [in] SF."
[+] [-] randomdrake|9 years ago|reply
This is true for anything with less than 2 bedrooms. If you are looking for anything with 2 bedrooms or more (not a studio, one bedroom, or roommate situation) then finding an apartment within the northern Bay Area, including East Bay, downtown, or the peninsula, is quite difficult regardless of price.
Edit: from the post it does look like they were looking for a one bedroom place. They're using python-craigslist[1]. From the readme it doesn't look like it exposes the bedrooms under "CraigslistHousing" but the code tells a different story in __init__.py[2] and does seem to snag "bedrooms" and "bathrooms" as well as additional properties. Just in case anyone was looking to fork this and add some handling for the number of bedrooms or bathrooms.
[1] - https://github.com/juliomalegria/python-craigslist
[2] - https://github.com/juliomalegria/python-craigslist/blob/mast...
[+] [-] yarou|9 years ago|reply
Not trying to be pedantic but "willing to look slightly outside" is pretty ambiguous for a city like SF. The Tenderloin is slightly outside of Nob Hill, a very upscale and posh/safe neighborhood, whereas the Tenderloin greets you with used heroin needles on the street, homeless crackheads running around, and the noise of constant sirens.
I agree with you on affordability, though. Number one reason why I'm glad I'm back in the South Bay. Also, I'd rather enjoy the laid back nightlife of Los Gatos or Campbell over the Marina or Polk Street (20 year old sorority girls puking all over the place) any day.
[+] [-] amazingman|9 years ago|reply
[+] [-] encoderer|9 years ago|reply
[+] [-] bayonetz|9 years ago|reply
[deleted]
[+] [-] 4ad|9 years ago|reply
So I built some shell scripts that scrapped all the websites, and generated some tables of pairs of houses sorted by the distance between them that can be easily read by awk. Then I could run queries on them.
All the scrapping was done with regular expressions, no fancy HTML parsing here.
For the distance calculation, I got the geographic coordinates by piping the address of the residence to Google Maps. I then calculated the geodesic distace between them in my scripts. Initially I wanted to let Google Maps calculate the more useful walking distance between residences, but that made the algorithm O(n²), and I ran into Google API free quota issues even with O(n). Geodesic distace was a good enough proxy though.
Being able to use awk, I could use any kind of arbitrary query I could think of. I filtered all residences that were not direct sales (used an agency), they were unfurnished, that were in a place where I didn't want to live (few such places in Vienna though), that were outside my price range, etc. basic stuff.
However, I could create arbitrary utility functions. For example it was really important for me that apartments were close together. So I was willing to sacrifice location, or the total area, or the numbers of rooms if they were really close, but if they were further away, I required more rooms or better location. No real estate agent or website will be able to do this for you.
In the end, it was too much trouble to rent two apartments, so we only rented one. However, the software was still very useful as it presensed all data in a much useful format, multiplexing data from all websites, and the data coming already filtered.
Plus being all text-based, and this being Unix and all that, I could easily manually input the 100 or so metro stations as "houses", so we could sort apartments based on the distance to the nearest metro station. And again I could create arbitrary utility functions. For example the U3 line is much more important for us than the U6 line, and we really don't care about U2 at all.
[1] https://code.google.com/archive/p/operation-housefinder/
[+] [-] visakanv|9 years ago|reply
[+] [-] rootlocus|9 years ago|reply
The title sounds like "How I used a cherry to make a birthday cake". Intriguing, yet disappointing when you learn he only placed the cherry on the top of the finished cake for pretty decoration.
[+] [-] draw_down|9 years ago|reply
[+] [-] viach|9 years ago|reply
[+] [-] andrewguenther|9 years ago|reply
https://www.eff.org/deeplinks/2015/06/padmapper-and-3taps-se...
[+] [-] rmason|9 years ago|reply
[+] [-] lowglow|9 years ago|reply
[+] [-] coredog64|9 years ago|reply
[+] [-] lamby|9 years ago|reply
[+] [-] unknown|9 years ago|reply
[deleted]
[+] [-] LeonM|9 years ago|reply
The whole experience of searching a suitable house is just aweful, all listing sites are basically full of spam and scams:
- most houses are already taken, but they leave them on the site because free exposure/advertising for the realtor/landlord.
- pictures that are not taken in the actual apartment (they just reuse pictures of a different apartment that kinda looks like it).
- ads that look like normal list items (dark ui).
- super good looking houses for low prices, that turn out to be fake, just to promote the realtor/landlord name.
- loads of hidden costs (service, administration, VAT, parking etc).
- all sorts of requirements (based on sex, income, ethnicity, type of work and what not).
[+] [-] Veen|9 years ago|reply
[+] [-] bayonetz|9 years ago|reply
https://github.com/christopher-skeels/add-walking-times-to-t...
[+] [-] danielmorozoff|9 years ago|reply
[+] [-] nxzero|9 years ago|reply
[+] [-] punnerud|9 years ago|reply
[+] [-] ambicapter|9 years ago|reply
160 p_text = row.find('span', {'class': 'p'}).text
'Nonetype' object has no attribute 'text'
[+] [-] ambicapter|9 years ago|reply
[+] [-] fudged71|9 years ago|reply
Might be worth trying this code for other cities though :)
[+] [-] davidhariri|9 years ago|reply
[+] [-] nommm-nommm|9 years ago|reply
[+] [-] savrajsingh|9 years ago|reply
[+] [-] lh7777|9 years ago|reply
1. Craigslist combines listings that come in at once into a single email. That's fine, but they truncate the results (... SNIP...) if a lot of listings come in. Why? Are they worried about exceeding your incoming email size limit with an all-text email?
2. Sometimes they send emails with zero results. Again, why?
3. Maybe not an issue in NY or SF where good apartments rent minutes after listing, but even in Seattle's hot housing market duplicate listings are a big problem. I've seen the same listing posted multiple times per day for days on end. All of these listings appear in Craigslist's email alerts, so you have to wade through them all. While the author didn't address this in his bot's code, I see filtering out duplicate or "already seen, not interested" listings as the biggest benefit to a home-made solution like this.