# Fast Realtor Agents API Scraper (`memo23/apify-realtor-scraper`) Actor

Empower your marketing and research efforts with precise Realtor.com agent data. Extract valuable insights seamlessly!

- **URL**: https://apify.com/memo23/apify-realtor-scraper.md
- **Developed by:** [Muhamed Didovic](https://apify.com/memo23) (community)
- **Categories:** Real estate, Lead generation, Automation
- **Stats:** 137 total users, 4 monthly users, 93.9% runs succeeded, 5 bookmarks
- **User rating**: 5.00 out of 5 stars

## Pricing

$21.00/month + usage

To use this Actor, you pay a monthly rental fee to the developer. The rent is subtracted from your prepaid usage every month after the free trial period.You also pay for the Apify platform usage, which gets cheaper the higher Apify subscription plan you have.

Learn more: https://docs.apify.com/platform/actors/running/actors-in-store#rental-actors

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

## Realtor.com Agents Scraper

### Overview

This actor allows you to scrape detailed information about real estate agents from Realtor.com. You can use this tool to gather valuable data about agents, such as their name, contact information, location, and other metadata. This information is useful for building marketing lists, performing research, or conducting competitor analysis.

### Features

- Extract detailed information about real estate agents, including name, contact details, and office information.
- Supports scraping multiple Realtor.com agent pages, either by specifying locations or URLs.
- Scrape individual agent profiles directly using their specific URL (e.g., "https://www.realtor.com/realestateagents/56ba6c45bb954c01006b5030").
- Customize the scraping settings, such as maximum agents to scrape and request retries.
- Built-in proxy configuration for anonymous and reliable scraping.

### How to Use

1. **Set Up**: Ensure you have an Apify account and access to the Apify platform.
2. **Provide Start URLs**: Copy and paste the desired agent directory link, specify the location you want to scrape from Realtor.com (e.g., "https://www.realtor.com/realestateagents/los-angeles\_ca"), or use a direct agent profile URL (e.g., "https://www.realtor.com/realestateagents/56ba6c45bb954c01006b5030").
3. **Adjust Scraper Settings**: Modify settings like `maxItems`, `maxConcurrency`, and `minConcurrency` to suit your requirements.
4. **Configure Proxy Settings**: (Optional) Configure proxy settings for better reliability and to avoid IP blocks.
5. **Run the Scraper**: Execute the scraper on the Apify platform. The output will be available in various formats like JSON, CSV, or Excel, depending on your preference.

### Input Configuration

Here's an example of how to set up the input for the Realtor.com Agents Scraper:

```json
{
    "startUrls": [
        "https://www.realtor.com/realestateagents/los-angeles_ca"
        "https://www.realtor.com/realestateagents/56ba6c45bb954c01006b5030"
        "New York, NY"
    ],
    "maxItems": 100,
    "maxConcurrency": 10,
    "minConcurrency": 1,
    "maxRequestRetries": 3,
    "proxyConfiguration": {
        "useApifyProxy": true
    }
}
```

#### Input Fields Explanation

- **Start URLs** (`startUrls`): URLs of Realtor.com agent search pages to scrape from. This can also include specific city or state search URLs (e.g., "https://www.realtor.com/realestateagents/los-angeles\_ca") or direct agent profile URLs (e.g., "https://www.realtor.com/realestateagents/56ba6c45bb954c01006b5030").
- **Max Agents to Scrape per Crawl** (`maxItems`): Maximum number of agents that will be scraped in a single run. Default is `100`.
- **Max Concurrency** (`maxConcurrency`): Maximum number of pages that can be processed at the same time. Default is `10`.
- **Min Concurrency** (`minConcurrency`): Minimum number of pages that will be processed at the same time. Default is `1`.
- **Max Request Retries** (`maxRequestRetries`): Number of times the scraper will retry a failed request before giving up. Default is `3`.
- **Proxy Configuration** (`proxy`): Specifies proxy servers that will be used by the scraper to ensure anonymity and bypass rate limits. For more details, refer to the [Proxy configuration](https://apify.com/apify/web-scraper#proxy-configuration).

### Output Structure

The scraper produces a list of agents, with each agent's information containing fields like:

```json
{
    "fulfillment_id": "2278521",
    "id": "5732a184a4623c01005318d9",
    "is_paid": false,
    "is_realtor": true,
    "designations": [
        "GRI",
        "ABR",
        "CIPS",
        "CRS",
        "AHWD",
        "EPRO",
        "SFR",
        "SRS",
        "PSA",
        "C2EX"
    ],
    "avatar": {
        "initials": "BP",
        "url": "https://ap.rdcpix.com/288aabba24995520c493310cceed0012a-e3475402970rd-w144_h144.jpg",
        "__typename": "AgentAvatar"
    },
    "bio": "CRS | CIPS | C2EX | NYRS | AHWD | ABR  | SRS | SFR | PSA | e-PRO | CBR | CNE | GRI\n\nBrian Phillips is the only person I turn to on any real estate transaction. I have worked with Brian on several projects including several sales of property and the leasing of multiple dwellings. In each sale, Brian presented me with highly qualified buyers. In each and every rental, the tenants were well screened and were in place for long terms with no incidents. Brian is the ultimate professional. He is discreet, always well informed and punctual for all appointments, and always prepared to take care of business. I would recommend him highly - Shannon Ayers Holden.\n\n\nWe met Brian through the local community board and were impressed with his knowledge and professionalism from that very first meeting. This is the second time that we hired him to lease our condo unit and have enjoyed working with him tremendously both times. He is very responsive to questions and handled viewings personally. Brian is a very hard worker who used his intelligence, patience and diligence to match our unit with appropriate renters. In an extremely challenging time for both owners and renters, Brian was an invaluable bridge that allowed both sides to be satisfied with the outcome. We recommend him highly and would happily work with him again - Michelle Morazan\n\n\nBrian Phillips is the 2025 New York State President of the Residential Real Estate Council (RRC) and a highly respected real estate professional with nearly 30 years of experience as a licensed broker. He was named the 2025 Real Estate Board of New York (REBNY) Agent of the Year, an honor recognizing exceptional professionalism, leadership, and community impact. With 18 years at Douglas Elliman, a renowned luxury brand, Brian delivers exceptional service backed by extensive expertise, market knowledge, and a proven track record. Licensed in two Manhattan offices as well as the Riverdale Bronx office, he offers broad coverage across New York City’s most competitive markets.\n\n\nAs a dues-paying member of both the REBNY Residential Listing Service (RLS) and the Hudson Gateway Association of Realtors (HGAR) OneKey MLS, Brian has unparalleled access to market data that provides his clients with a significant advantage. His RLS membership offers deep insights into Manhattan and downtown Brooklyn, which are dominated by RLS, while OneKey MLS—the largest and most powerful MLS in New York—expands his reach to Long Island, the Bronx, Manhattan, Queens, Brooklyn, and the Hudson Valley, including Westchester, Putnam, Rockland, Orange, Sullivan, and Ulster counties. Brian and his team have successfully closed transactions in these areas, as reflected on his Zillow profile. This dual membership ensures comprehensive market analysis and strategic decision-making for buyers, sellers, renters, and investors.\n\n\nKnown as The Mobile Broker®, a registered trademark, Brian is recognized for his accessibility and ability to meet clients wherever their real estate needs take them.\n\n\nBrian’s success is built not only on data but also on relationships—because real estate is a relationship-driven business. With two decades of leadership in the industry, Brian has built an extensive network of agents and REALTORS® through his service on and leadership of numerous REBNY committees, including Education, Membership, and Upper Manhattan Residential Brokerage. His active participation in HGAR includes committees such as Fair Housing, Professional Standards, Commercial Investment Division (CID), Legislative, Global Business Council, Diversity, Equity, and Inclusion (DEI), and the Realtor Political Action Committee (RPAC). His strong connections across Manhattan, Brooklyn, the Bronx, and the Hudson Valley make him a trusted resource for referrals and collaboration.\n\n\nAt the New York State Association of Realtors (NYSAR), Brian serves as a Board Director and has led as 2024 Chair of NYSAR’s NYC Issues Working Group and NYS Finance Leader for the RRC. He has also played a pivotal role on NYSAR’s Legislative Steering Committee, advocating for policies that protect property rights and empower agents and REALTORS®.\n\n\nBrian’s dedication to professional growth is reflected in his more than 10 National Association of REALTORS® (NAR) designations and certifications, including Certified Residential Specialist (CRS)—the highest credential in residential sales—Certified International Property Specialist (CIPS), Accredited Buyer Representative (ABR), and Commitment to Excellence (C2EX).\n\n\nBeyond his brokerage expertise, Brian is a Major Investor in the REALTORS® Political Action Committee (RPAC) and a committed advocate for legislative reform. He is a member of professional organizations such as the Women’s Council of REALTORS® (WCR), the National Association of Real Estate Brokers (NAREB), the National Association of Hispanic Real Estate Professionals (NAHREP), the Asian Real Estate Association of America (AREAA), the International Real Estate Federation-USA (FIABCI-USA), the LGBTQ+ Real Estate Alliance (NAGLREP), and the Canadian Real Estate Association (CREA), further strengthening his ability to provide global insights and opportunities for his clients.\n\n\nBrian’s commitment to community leadership is equally impressive. He serves on the YMCA’s Black Achievers In Industry (BAI) steering committee and is a proud Freemason, reflecting his passion for service and mentorship.\n\n\nOutside of real estate, Brian enjoys spending time with family, exercising, biking, tennis, and engaging with his community, balancing personal passions with professional dedication.\n\n\nBrian maintains a robust online presence across various platforms. He has a significant social media presence, with a large following on Facebook, Instagram, LinkedIn, and X. These platforms enable him to amplify market insights, promote listings, and share industry updates with a wide audience.\n\n\nWhether you’re looking to buy, sell, rent, or invest, Brian’s extensive market data, unmatched industry connections, and proven leadership make him an invaluable resource. If you’re an agent or REALTOR® looking to collaborate or refer clients, Brian’s reputation, expertise, and relationships ensure success for everyone involved. Reach out today to see how Brian can help you achieve your goals.",
    "fullname": "Brian Phillips",
    "website": "https://www.themobilebroker.net/",
    "intent_type": [
        "SELLER",
        "BUYER"
    ],
    "broker": {
        "name": "Douglas Elliman Real Estate",
        "website": null,
        "fulfillment_id": "2277842",
        "__typename": "AgentBrokerage"
    },
    "languages": [
        "English",
        "Chinese",
        "Spanish"
    ],
    "specializations": [
        {
            "name": "Coops",
            "__typename": "AgentSpecialization"
        },
        {
            "name": "Condos",
            "__typename": "AgentSpecialization"
        },
        {
            "name": "New Development",
            "__typename": "AgentSpecialization"
        },
        {
            "name": "Houses",
            "__typename": "AgentSpecialization"
        },
        {
            "name": "Townhouses",
            "__typename": "AgentSpecialization"
        },
        {
            "name": "Investment",
            "__typename": "AgentSpecialization"
        },
        {
            "name": "Multi-Family",
            "__typename": "AgentSpecialization"
        },
        {
            "name": "International",
            "__typename": "AgentSpecialization"
        },
        {
            "name": "Relocation",
            "__typename": "AgentSpecialization"
        },
        {
            "name": "Affordable",
            "__typename": "AgentSpecialization"
        },
        {
            "name": "Market Rate",
            "__typename": "AgentSpecialization"
        },
        {
            "name": "Re-Sales",
            "__typename": "AgentSpecialization"
        },
        {
            "name": "Buyer's agent",
            "__typename": "AgentSpecialization"
        },
        {
            "name": "Seller's agent",
            "__typename": "AgentSpecialization"
        }
    ],
    "experience": {
        "first_year": "1997",
        "first_month": "November",
        "label": "27 years 10 months of experience",
        "__typename": "AgentYearsOfExperience"
    },
    "ratings_reviews": {
        "average_rating": 5,
        "reviews_count": 22,
        "recommendations_count": 7,
        "__typename": "AgentRatingsReviews"
    },
    "served_areas": [
        {
            "name": "Bayside",
            "state_code": "NY",
            "__typename": "AgentBrandingAreasServed"
        },
        {
            "name": "Bronx",
            "state_code": "NY",
            "__typename": "AgentBrandingAreasServed"
        },
        {
            "name": "Brooklyn",
            "state_code": "NY",
            "__typename": "AgentBrandingAreasServed"
        },
        {
            "name": "East Elmhurst",
            "state_code": "NY",
            "__typename": "AgentBrandingAreasServed"
        },
        {
            "name": "Elmhurst",
            "state_code": "NY",
            "__typename": "AgentBrandingAreasServed"
        },
        {
            "name": "Elmont",
            "state_code": "NY",
            "__typename": "AgentBrandingAreasServed"
        },
        {
            "name": "Floral Park",
            "state_code": "NY",
            "__typename": "AgentBrandingAreasServed"
        },
        {
            "name": "Flushing",
            "state_code": "NY",
            "__typename": "AgentBrandingAreasServed"
        },
        {
            "name": "Forest Hills",
            "state_code": "NY",
            "__typename": "AgentBrandingAreasServed"
        },
        {
            "name": "Franklin Square",
            "state_code": "NY",
            "__typename": "AgentBrandingAreasServed"
        },
        {
            "name": "Fresh Meadows",
            "state_code": "NY",
            "__typename": "AgentBrandingAreasServed"
        },
        {
            "name": "Hollis",
            "state_code": "NY",
            "__typename": "AgentBrandingAreasServed"
        },
        {
            "name": "Jamaica",
            "state_code": "NY",
            "__typename": "AgentBrandingAreasServed"
        },
        {
            "name": "Kew Gardens",
            "state_code": "NY",
            "__typename": "AgentBrandingAreasServed"
        },
        {
            "name": "Manhattan",
            "state_code": "NA",
            "__typename": "AgentBrandingAreasServed"
        },
        {
            "name": "New Rochelle",
            "state_code": "NY",
            "__typename": "AgentBrandingAreasServed"
        },
        {
            "name": "New York",
            "state_code": "NY",
            "__typename": "AgentBrandingAreasServed"
        },
        {
            "name": "Queens",
            "state_code": "NA",
            "__typename": "AgentBrandingAreasServed"
        },
        {
            "name": "Queens Village",
            "state_code": "NY",
            "__typename": "AgentBrandingAreasServed"
        },
        {
            "name": "Rego Park",
            "state_code": "NY",
            "__typename": "AgentBrandingAreasServed"
        },
        {
            "name": "Ridgewood",
            "state_code": "NY",
            "__typename": "AgentBrandingAreasServed"
        },
        {
            "name": "Rosedale",
            "state_code": "NY",
            "__typename": "AgentBrandingAreasServed"
        },
        {
            "name": "Saint Albans",
            "state_code": "NY",
            "__typename": "AgentBrandingAreasServed"
        },
        {
            "name": "Springfield Gardens",
            "state_code": "NY",
            "__typename": "AgentBrandingAreasServed"
        },
        {
            "name": "Upper Manhattan",
            "state_code": "NA",
            "__typename": "AgentBrandingAreasServed"
        },
        {
            "name": "Valley Stream",
            "state_code": "NY",
            "__typename": "AgentBrandingAreasServed"
        },
        {
            "name": "West Hempstead",
            "state_code": "NY",
            "__typename": "AgentBrandingAreasServed"
        },
        {
            "name": "Westchester",
            "state_code": "NA",
            "__typename": "AgentBrandingAreasServed"
        },
        {
            "name": "White Plains",
            "state_code": "NY",
            "__typename": "AgentBrandingAreasServed"
        },
        {
            "name": "Yonkers",
            "state_code": "NY",
            "__typename": "AgentBrandingAreasServed"
        }
    ],
    "listing_stats": {
        "combined_annual": {
            "max": 3600000,
            "min": 235000,
            "__typename": "AgentListingStatisticsCombined"
        },
        "for_sale": {
            "count": 16,
            "last_listing_date": "2025-08-22T08:02:40Z",
            "min": 225000,
            "max": 3600000,
            "__typename": "AgentListingStatisticsForSale"
        },
        "recently_sold": {
            "count": 20,
            "last_sold_date": "2025-04-29",
            "min": 235000,
            "max": 999000,
            "__typename": "AgentListingStatisticsSold"
        },
        "recently_sold_annual": {
            "count": 14,
            "__typename": "AgentListingStatisticsSold"
        },
        "recently_sold_listing_details": {
            "listings": [
                {
                    "baths": 3,
                    "beds": 7,
                    "city": "Bronx",
                    "photo": "https://ap.rdcpix.com/5452f2f00a1f4ccb5b3baf73beca01a1l-m4164525769rd-w100_h67.jpg",
                    "state_code": "NY",
                    "__typename": "AgentListingRecentlySoldDetails"
                },
                {
                    "baths": null,
                    "beds": 2,
                    "city": "Bronx",
                    "photo": "https://ap.rdcpix.com/f9d0b91cb26880cc6f3ab94ebab5c068l-m3823346490rd-w100_h67.jpg",
                    "state_code": "NY",
                    "__typename": "AgentListingRecentlySoldDetails"
                },
                {
                    "baths": 2,
                    "beds": 2,
                    "city": "Bronx",
                    "photo": "https://ap.rdcpix.com/d3f56b649ad1e6e42f5b3c0bdf853a9al-m3619024485rd-w100_h67.jpg",
                    "state_code": "NY",
                    "__typename": "AgentListingRecentlySoldDetails"
                }
            ],
            "show_additional": true,
            "__typename": "AgentListingsRecentlySold"
        },
        "__typename": "AgentListingStatistics"
    },
    "mls": [
        {
            "mls_set": "A-DENY-BPHI",
            "agent_id": "BPHI",
            "id": "DENY",
            "primary": false,
            "license_number": "",
            "inactivation_date": null,
            "status": "A",
            "__typename": "AgentMLS"
        },
        {
            "mls_set": "A-DENY-BRNP",
            "agent_id": "BRNP",
            "id": "DENY",
            "primary": false,
            "license_number": "",
            "inactivation_date": null,
            "status": "A",
            "__typename": "AgentMLS"
        },
        {
            "mls_set": "A-DENY-BRP",
            "agent_id": "BRP",
            "id": "DENY",
            "primary": false,
            "license_number": "",
            "inactivation_date": null,
            "status": "A",
            "__typename": "AgentMLS"
        },
        {
            "mls_set": "A-LINY-29317",
            "agent_id": "29317",
            "id": "LINY",
            "primary": true,
            "license_number": "10301208041",
            "inactivation_date": null,
            "status": "A",
            "__typename": "AgentMLS"
        },
        {
            "mls_set": "A-LINY-H29317",
            "agent_id": "H29317",
            "id": "LINY",
            "primary": false,
            "license_number": "10301208041",
            "inactivation_date": "2024-12-19T09:12:48.000Z",
            "status": "I",
            "__typename": "AgentMLS"
        }
    ],
    "office": {
        "name": "Douglas Elliman - 3544 Johnson Ave",
        "phones": [
            {
                "type": "office",
                "value": "(718) 884-5815",
                "__typename": "AgentBrandingPhone"
            }
        ],
        "website": "http://www.elliman.com",
        "address": {
            "address_formatted_line_1": "3544 Johnson Ave",
            "address_formatted_line_2": "Bronx, NY 10463",
            "city": "Bronx",
            "postal_code": "10463",
            "state_code": "NY",
            "__typename": "AgentBrandingAddress"
        },
        "__typename": "AgentOffice"
    },
    "phones": [
        {
            "type": "mobile",
            "value": "(347) 891-4334",
            "__typename": "AgentBrandingPhone"
        },
        {
            "type": "office",
            "value": "(718) 601-6100",
            "__typename": "AgentBrandingPhone"
        }
    ],
    "license_number": "10301208041",
    "license_state": "NY",
    "is_empty_profile": false,
    "social_media": {
        "facebook": null,
        "instagram": null,
        "linkedin": null,
        "tiktok": null,
        "x": {
            "href": "https://twitter.com/TheMobileBroker",
            "__typename": "AgentBrandingProfileSocialMediaLink"
        },
        "youtube": null,
        "__typename": "AgentBrandingProfileSocialMedia"
    },
    "about_video": null,
    "services": null,
    "questions_and_answers": null,
    "__typename": "AgentBranding",
    "basicInfo": {
        "id": "5732a184a4623c01005318d9",
        "is_paid": false,
        "is_realtor": true,
        "fulfillment_id": "2278521",
        "avatar": {
            "url": "https://ap.rdcpix.com/288aabba24995520c493310cceed0012a-e3475402970rd-w144_h144.jpg",
            "initials": "BP",
            "__typename": "AgentAvatar"
        },
        "broker": {
            "name": "Douglas Elliman Real Estate",
            "fulfillment_id": "2277842",
            "__typename": "AgentBrokerage"
        },
        "fullname": "Brian Phillips",
        "ratings_reviews": {
            "average_rating": 5,
            "recommendations_count": 7,
            "reviews_count": 22,
            "__typename": "AgentRatingsReviews"
        },
        "listing_stats": {
            "combined_annual": {
                "min": 235000,
                "max": 3600000,
                "__typename": "AgentListingStatisticsCombined"
            },
            "for_sale": {
                "count": 16,
                "last_listing_date": "2025-08-22T08:02:40Z",
                "max": 3600000,
                "min": 225000,
                "__typename": "AgentListingStatisticsForSale"
            },
            "recently_sold_annual": {
                "count": 14,
                "__typename": "AgentListingStatisticsSold"
            },
            "recently_sold_listing_details": {
                "listings": [
                    {
                        "baths": 3,
                        "beds": 7,
                        "city": "Bronx",
                        "photo": "https://ap.rdcpix.com/5452f2f00a1f4ccb5b3baf73beca01a1l-m4164525769rd-w100_h67.jpg",
                        "state_code": "NY",
                        "__typename": "AgentListingRecentlySoldDetails"
                    },
                    {
                        "baths": null,
                        "beds": 2,
                        "city": "Bronx",
                        "photo": "https://ap.rdcpix.com/f9d0b91cb26880cc6f3ab94ebab5c068l-m3823346490rd-w100_h67.jpg",
                        "state_code": "NY",
                        "__typename": "AgentListingRecentlySoldDetails"
                    },
                    {
                        "baths": 2,
                        "beds": 2,
                        "city": "Bronx",
                        "photo": "https://ap.rdcpix.com/d3f56b649ad1e6e42f5b3c0bdf853a9al-m3619024485rd-w100_h67.jpg",
                        "state_code": "NY",
                        "__typename": "AgentListingRecentlySoldDetails"
                    }
                ],
                "show_additional": true,
                "__typename": "AgentListingsRecentlySold"
            },
            "__typename": "AgentListingStatistics"
        },
        "services": null,
        "sorting_weight": 70,
        "__typename": "AgentBranding"
    }
}
```

##### Key Agent Data Fields:

- **`fulfillment_id`**: Internal Realtor.com identifier for the agent
- **`id`**: Unique agent ID (MongoDB ObjectId format)
- **`is_paid`**: Whether the agent has a paid/premium Realtor.com account
- **`is_realtor`**: Indicates if the agent is a licensed REALTOR® member
- **`designations`**: Professional certifications and designations (GRI, ABR, CIPS, etc.)
- **`avatar`**: Agent's profile photo information
  - `initials`: Agent's initials for fallback display
  - `url`: Direct link to agent's profile photo
- **`bio`**: Complete agent biography and description text
- **`fullname`**: Agent's complete name
- **`website`**: Agent's personal or business website URL
- **`intent_type`**: Services offered (`SELLER`, `BUYER`, or both)
- **`broker`**: Brokerage information
  - `name`: Name of the real estate brokerage
  - `website`: Brokerage website (if available)
  - `fulfillment_id`: Internal brokerage identifier
- **`languages`**: Languages spoken by the agent
- **`specializations`**: Property types and services the agent specializes in
  - Examples: Coops, Condos, New Development, Houses, Investment properties
- **`experience`**: Agent's career timeline
  - `first_year`: Year the agent started in real estate
  - `first_month`: Month they started
  - `label`: Human-readable experience summary
- **`ratings_reviews`**: Client feedback metrics
  - `average_rating`: Average star rating from client reviews
  - `reviews_count`: Total number of written reviews
  - `recommendations_count`: Number of client recommendations
- **`served_areas`**: Geographic areas where the agent works
  - `name`: City or neighborhood name
  - `state_code`: State abbreviation
- **`listing_stats`**: Agent's sales performance data
  - `combined_annual`: Price range of properties handled annually
  - `for_sale`: Current active listings count and recent activity
  - `recently_sold_annual`: Number of properties sold in the past year
- **`services`**: Detailed service offerings and specializations
- **`office`**: Agent's office location and contact information
- **`branding`**: Marketing and branding information for the agent

### Property Detail URLs

In addition to agent pages, the actor also accepts **property detail URLs** (Realtor.com listing pages). When a `startUrls` entry matches one of these patterns the actor scrapes the full listing payload via Realtor's mobile GraphQL API:

- `https://www.realtor.com/realestateandhomes-detail/<address-or-id>`
- `https://www.realtor.com/property/<id>`
- `https://www.realtor.com/realestateandhomes-detail/<slug>/details/<id>`

Example input:

```json
{
    "startUrls": [
        "https://www.realtor.com/realestateandhomes-detail/724-Sparrow-Hawk-Dr_Highlands-Ranch_CO_80129_M21589-85064"
    ]
}
```

#### MLS Enrichment Fields

Every property record is post-processed and enriched with the following top-level fields so the MLS number — and, when it is missing, the **reason why** — is always explicit:

| Field | Description |
|---|---|
| `mls_id` | The live MLS number from `home.source.id`. `null` if Realtor.com does not currently expose one. |
| `mls_listing_id` | The live MLS listing id, or — as a fallback — the most recent MLS-sourced `listing_id` from `property_history`. |
| `mls_source_name` | The MLS provider name (e.g. `"REcolorado"`, `"Bright MLS"`). Falls back to the most recent MLS-sourced row in `property_history`. |
| `mls_source_type` | The Realtor.com `source.type` value (e.g. `"mls"`). |
| `historic_listing_id` | The Realtor-internal listing id of the most recent MLS-sourced listing (useful when the live MLS id has been scrubbed). |
| `historic_listing_date` | Date of that historic listing event. |
| `mls_status` | One of `present`, `scrubbed_after_sale`, `public_record_only`, `not_listed`. See below. |
| `mls_status_detail` | Human-readable explanation of `mls_status` — safe to surface directly to end-users. |

##### `mls_status` values

- **`present`** — Realtor.com exposes a live MLS id (active or recent listing). `mls_id` is populated.
- **`scrubbed_after_sale`** — Property is `sold` and Realtor.com has stripped the live MLS number, but historic MLS activity exists. `mls_source_name` and `historic_listing_id` are populated so you can look the property up directly with the originating MLS.
- **`public_record_only`** — Property has only public-record events on Realtor.com (no MLS feed has ever tracked it here, e.g. FSBO / off-MLS sales). The MLS number cannot be recovered from Realtor.com.
- **`not_listed`** — Realtor.com returned no source data and no property history at all.

> **Why this matters:** Realtor.com nulls `home.source.id` once a listing transitions to `sold`, so a blank MLS column in your CSV is not necessarily a scraping bug — it can mean the data simply isn't published anymore. Use `mls_status` to filter or branch your post-processing accordingly. A warning is also logged in the actor run log for every row where `mls_status !== "present"`.

### Explore More Scrapers

If you found this Apify Smartbuyglasses Scraper useful, be sure to check out our other powerful scrapers and actors at [memo23's Apify profile](https://apify.com/memo23). We offer a wide range of tools to enhance your web scraping and automation needs across various platforms and use cases.

### Support

- For issues or feature requests, please use the [Issues](https://console.apify.com/actors/a2HOBr55E3T4TZBcJ/issues) section of this actor.
- If you need customization or have questions, feel free to contact the author:
  - Author's website: <https://muhamed-didovic.github.io/>
  - Email: <muhamed.didovic@gmail.com>

### Additional Services

- Request customization or whole dataset: <muhamed.didovic@gmail.com>
- If you need anything else scraped, or this actor customized, email: <muhamed.didovic@gmail.com>
- For API services of this scraper (no Apify fee, just usage fee for the API), contact: <muhamed.didovic@gmail.com>
- Email: muhamed.didovic@gmail.com

# Actor input Schema

## `startUrls` (type: `array`):

URLs to start with.

## `maxItems` (type: `integer`):

Maximum number of agents to scrape.

## `maxConcurrency` (type: `integer`):

Maximum number of pages that can be processed at the same time.

## `minConcurrency` (type: `integer`):

Minimum number of pages that will be processed at the same time.

## `maxRequestRetries` (type: `integer`):

Number of times the crawler will retry a failed request before giving up.

## `fetchAgentListings` (type: `boolean`):

Whether to fetch active listings for each agent. Enabling this will significantly increase scraping time and data usage.

## `minDeals` (type: `integer`):

Only return agents with at least this many deals in the last 12 months. Set to 0 to include all agents.

## `enrichEmails` (type: `boolean`):

Finds a contact email for each agent from their own website (or by discovering it from the name), and harvests phone numbers from the same pages. Adds contactEmail + contactWebsite columns plus a detailed emailEnrichment object. Best-effort. On by default.

## `proxy` (type: `object`):

Specifies proxy servers that will be used by the scraper in order to hide its origin.<br><br>For details, see <a href='https://apify.com/apify/web-scraper#proxy-configuration' target='_blank' rel='noopener'>Proxy configuration</a> in README.

## Actor input object example

```json
{
  "startUrls": [
    {
      "url": "https://www.realtor.com/realestateagents/56ba6c45bb954c01006b5030"
    }
  ],
  "maxItems": 10000,
  "maxConcurrency": 100,
  "minConcurrency": 1,
  "maxRequestRetries": 20,
  "fetchAgentListings": false,
  "minDeals": 0,
  "enrichEmails": true,
  "proxy": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}
```

# Actor output Schema

## `results` (type: `string`):

No description

## `crm` (type: `string`):

No description

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "startUrls": [
        {
            "url": "https://www.realtor.com/realestateagents/56ba6c45bb954c01006b5030"
        }
    ],
    "proxy": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ]
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("memo23/apify-realtor-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "startUrls": [{ "url": "https://www.realtor.com/realestateagents/56ba6c45bb954c01006b5030" }],
    "proxy": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
    },
}

# Run the Actor and wait for it to finish
run = client.actor("memo23/apify-realtor-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "startUrls": [
    {
      "url": "https://www.realtor.com/realestateagents/56ba6c45bb954c01006b5030"
    }
  ],
  "proxy": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}' |
apify call memo23/apify-realtor-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=memo23/apify-realtor-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/QhlgM9rF3JXTHkWxn/builds/29F8BfLr6f3FLFsgy/openapi.json
