Zillow Detail Scraper avatar
Zillow Detail Scraper

Pricing

$3.00 / 1,000 results

Go to Store
Zillow Detail Scraper

Zillow Detail Scraper

maxcopell/zillow-detail-scraper

Developed by

Maximillian Copelli

Maintained by Apify

Get details of Zillow properties from URLs. This Actor can be easily integrated with other Zillow Scrapers.

4.3 (10)

Pricing

$3.00 / 1,000 results

67

Monthly users

275

Runs succeeded

99%

Response time

6 days

Last modified

a month ago

BL

Does not scrape Property Owner

Closed
ablinc opened this issue
4 months ago

It scrapes the listing if it's a Listing Agent, along with the Agent's name and number, but it Does Not scrape the info it's it's listed by a Property Owner.

lhotanok avatar

Hi, thank you for reporting the issue!

However, I'm having troubles reproducing it. Could you please provide us with more details such as links and screenshots from Zillow's website of the data you're missing?

I did a test run with a couple of properties listed for sale directly by their owners and contact numbers were scraped for all of them:

Relevant part of the dataset:

1{
2  "listedBy": [
3    {
4      "id": "PROPERTY_OWNER",
5      "elements": [
6        {
7          "id": "NAME",
8          "text": "Property Owner",
9          "action": {
10            "variant": "OWNER_CONTACT",
11            "url": "/contact/NativeAppContactForm.htm?zpid=3704966&preferredVariant=owner_contact"
12          }
13        },
14        {
15          "id": "PHONE",
16          "text": "(312) 671-4574",
17          "action": null
18        }
19      ],
20      "textStyle": null
21    }
22  ]
23}

Property owners' names are not scraped but I couldn't find them anywhere on the Zillow's website (see the attached screenshots for 15935 School St, South Holland, IL 60473). If you found any properties with owner name displayed, could you please send us their links?

Thanks

SC

scottdiaz123

a month ago

Hello, i am having the same problem/challenge with owner names. This is super critical for me. I have attached a short video to explain my filters and the details for the home owner phone number that I need to extract. I am targeting "For Sale By Owner" homes only. https://www.loom.com/share/b624144eff494151ac858e7c5eb846e2?sid=2b601716-f25a-46f9-9bc0-ee22fde95ed1

SC

scottdiaz123

a month ago

Perhaps I am not providing a good enough input but here is an example URL that i would input to the Zillow Details Scraper https://www.zillow.com/homedetails/817-Kalpati-Cir-UNIT-212-Carlsbad-CA-92008/54902743_zpid/

SC

scottdiaz123

a month ago

OK i see the problem. The phone number is extracted in the JSON file but does not import with a CSV. Perhaps the CSV export needs to be adjusted to account for the owner phone number column? I assume that the CSV file cannot export this number of columns and it is best to extract a JSON. For the less technical people it would be very helpful to have a short video tutorial which shows how to omit fields and unwind fields to include the exact columns desired. I will look for your instruction :) . In the menatime I rely on ChatGPT to create a CSV for me from the JSON but this is a bit annoying.

lukas.prusa avatar

Hi Scott, thanks for joining this issue!

Yes, that's right, the problem is in the output format of the scraper, which is not very CSV/Excel friendly. Basically the format is exactly the same as what Zillow is using, and ideally we would like to parse it into a more readable format. It would be a lot of work and a big breaking change for the current format, so we are keeping it on hold for now.

Anyway, to flatten the fields I would recommend using the Merge, Dedup & Transform Datasets utility Actor. I know, yes, it's another technical solution, but I think that it's the most flexible, automatic and clean one possible. You can use a dataset transformation function like this one to get the phone numbers of just the home owners for example:

1async (items, { Apify }) => {
2    items.forEach((item) => {
3        item.listedBy?.forEach((listedBy) => {
4            const isByPropertyOwner = listedBy.id === 'PROPERTY_OWNER';
5            if (isByPropertyOwner) {
6                item.ownerPhoneNumber = listedBy.elements?.[1]?.text;
7            }
8        });
9    });
10
11    return items;
12};

This will store the phone numbers under the ownerPhoneNumber field if they are available. You can then connect the utility Actor to this one via Actor to Actor integrations to automate the whole process.

I hope this helps, thanks and happy scraping!

SC

scottdiaz123

a month ago

Thanks for the help Lukas. I found that if i simply choose the "listedby" column for download and then choose to unwind this field in advanced settings it will supply me the phone number as a column in ithe CSV. This works for a single URL search. I have just completed a large, multi URL search and when i try to choose "listedby" for download it is no longer an option. Super frustrating! It seems the data is not able to be downloaded. I have attempted to unwind many other fields with JSON format and it will not extract the phone numbers. What is available in the preview does not appear in the final file. Now i have 7500 contact scrape where the only purpose is to get these numbers but i cant seem to download a file that contains them. I am not sure how to use your suggestion above. Do i copy/paste the code into the pre transformation option? Thanks again

lukas.prusa avatar

Oh, I mean, I wouldn't recommend using the CSV format in the format in the first place, because it's just not very flexible specifically for data like this.

You can still use the field though, you just have to manually type it in instead of just selecting it. That is probably a limitation of the platform for outputs where there are this many fields.

I'm not really sure how the unwind mechanic works, but I was able to achieve some results by simply settings Selected fields to listedBy/0/elements/1/text and listedBy. Not sure if that targets the correct phone numbers.

Thanks!

SC

scottdiaz123

a month ago

You're the man! Thank you so much. I didnt even think to just type it in. It worked!!

Pricing

Pricing model

Pay per result 

This Actor is paid per result. You are not charged for the Apify platform usage, but only a fixed price for each dataset of 1,000 items in the Actor outputs.

Price per 1,000 items

$3.00