HAR.com Texas Real Estate Agent Scraper — Realtor Leads avatar

HAR.com Texas Real Estate Agent Scraper — Realtor Leads

Pricing

$3.00 / 1,000 per agent returneds

Go to Apify Store
HAR.com Texas Real Estate Agent Scraper — Realtor Leads

HAR.com Texas Real Estate Agent Scraper — Realtor Leads

76,042 Texas real-estate agents from HAR.com: name, brokerage, office address, phone (100% fill), city/ZIP, star rating, recent listing activity, languages, Platinum status, bio and photo. Filter by city, ZIP, brokerage, rating or Platinum. No email/license — read the honest limits.

Pricing

$3.00 / 1,000 per agent returneds

Rating

0.0

(0)

Developer

Scrapers Delight

Scrapers Delight

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

2

Monthly active users

17 days ago

Last modified

Share

One row per agent from HAR.com, the Houston Association of REALTORS® board site — the deepest public agent directory in Texas. Each row carries fullName, phone, brokerageName with its stable brokerageKey and officeAddress, city / state / zip, the HAR rating and ratingSurveyCount, recent listing activity (listingsForSale, listingsForRent, listingsSold, listingsRented), languages spoken, isPlatinum membership, designations where shown, the agent bio and photoUrl. Filter by city, ZIP, brokerage, rating or Platinum status — or paste agent profile URLs and scrape those directly. No login. No CAPTCHA solving from you.

HAR is the board-level file, not a Google-Maps skim. It gives you the brokerage's HAR office key, the survey-backed rating, the agent's recent sold/rented counts and the languages they work in — fields a maps scraper cannot see. It is Texas-only by nature. There is no email and no license number in this dataset — read Honest limits before you buy.

Scope

Measured on HAR's live sitemap on 2026-08-15: 76,042 distinct agent profile URLs across the profiles_1, profiles_2 and profiles_4 chunks (39,200 + 13,655 + 23,187; profiles_3 is served empty by HAR right now), plus 1,405 affiliate members. Those are counts read off the files, not quoted from a marketing page.

Filters: which ones are free, and which ones cost you

HAR's agent sitemap gives 76,042 profile URLs that carry no city, ZIP, brokerage or rating — but har.com also publishes its own agent index by ZIP and by city, and this Actor enumerates from those. That is what decides the cost of every filter here.

FilterHow it worksCost
CitiesEnumerated from har.com's own per-city agent listing (/{City}/real_estate_agents). The Actor ships har.com's index of 1,752 Texas city names, so the name resolves offline — no lookup requestPre-filter — ~4.2 KB per candidate found
ZIP codesEnumerated from har.com's own per-ZIP agent listing (/zipcode_<zip>/real_estate_agents)Pre-filter — ~4.2 KB per candidate found
Profile URLsYou supply the exact profilesFree to apply
Brokerage keys, phone / Platinum / rated, min rating, min listings soldApplied after the profile is fetched, because neither the URL nor the listing reveals themCosts one profile fetch per candidate examined, match or not

Measured on the live Actor through Apify RESIDENTIAL-US, cities: ["Katy"] with maxItems 25 — the identical input, before and after this became a pre-filter:

Before (build 0.1.15)After (build 0.1.16)
Rows delivered2 of 2525 of 25
Profiles downloaded30429
Residential proxy billed28.5 MiB, $0.21212.59 MiB, $0.0202
Wall clock292 s58 s
Cost per delivered row$0.119$0.0010

zipCodes: ["77450"], maxItems 15, same comparison: 8 of 15 rows (the run tripped its own cost breaker) reading 47 listing pages → 15 of 15 rows reading 1 listing page, 1.76 MiB billed.

Listing pages are now read lazily — one page at a time, only when the crawler has actually run out of candidates — so asking for 25 agents in a 3,208-agent city reads 2 listing pages, not 161.

If a city name is not in har.com's index (a typo, or somewhere outside Texas) the Actor says so in the run log and status, and falls back to the old scan-and-discard behaviour for that name, bounded by the "Max profiles examined" budget. You are only ever charged for rows you actually receive — examined-and-discarded profiles are free to you.

Setting both cities and zipCodes means the intersection: the ZIP list sources the crawl and the city name is then checked on each profile, which makes the city half a post-fetch filter again. Use one or the other for the cheapest run.

🚀 Quick start

The Actor ships prefilled with a working demo. Click Try for free, press Start, change nothing.

{
"maxItems": 50,
"proxyConfiguration": { "useApifyProxy": true, "apifyProxyGroups": ["RESIDENTIAL"], "apifyProxyCountry": "US" }
}

That pulls 50 Texas agents. Measured on the platform, that exact input: 50 agents, 50 distinct agentKeys, 0 duplicates, phone 92%, brokerage 100%, and it charged exactly 50 rows. Every field in the sample row below came out of a run like that one.

The wedge: board-level Texas depth a maps scraper can't give you

HAR is the MLS board's own site, so each profile carries things a phone-book or Google-Maps agent scraper never has:

  • The brokerage as a stable key. brokerageKey (e.g. RMXD01 for RE/MAX Space Center) is HAR's own office id — join every agent at a brokerage without fuzzy-matching brokerage name strings.
  • A survey-backed rating. rating + ratingSurveyCount come from HAR's completed-client-survey system, not a scraped star average.
  • Recent production. listingsSold / listingsRented / listingsForSale are the agent's current activity counters — a live proxy for who is actually working, not just licensed.
  • Languages. languages is HAR's declared multi-lingual list (Spanish, Mandarin, Vietnamese …), the field relocation and immigrant-market services sort on.
  • Platinum status. isPlatinum flags HAR's paid membership tier — the agents who invest in their business and answer their phone.

Read this before you buy rows

  1. This directory is Texas. HAR is the Houston-area MLS board; its agent file is Texas agents. There is no state picker. Use the city / ZIP / brokerage filters to narrow inside Texas.
  2. Filters run AFTER the page is fetched. The profile URL carries no city, ZIP or brokerage, so cities, zipCodes, brokerageKeys, platinumOnly, ratedOnly, minRating and minListingsSold are all applied once a profile has loaded. An unfiltered pull is 1.0 fetches per row; a narrow city or a Platinum-only cut costs several fetches per row. You are billed only for agents returned, never for a page a filter discarded — so a narrow ask costs time and proxy budget, not your money.
  3. There is no email address in this dataset. HAR keeps the agent's email behind a "Send email" lead form; it is not on the page, so there is no email field and nothing here invents one.
  4. There is no TREC license number in this dataset. HAR does not print it on the agent overview page (it lives in a separate TREC directory), so there is no licenseNumber field rather than an always-null one.
  5. A missing rating is a fact about HAR, not a scraping failure. Most Texas agents have no completed surveys, so rating is null for them. listingsSold: null likewise means HAR showed no counter, not zero sales.

What you get — one row per agent

GroupFields
IdentityprofileUrl, agentKey, memberNumber, fullName, photoUrl, scrapedAt
Contact & locationphone, city, state, zip
BrokeragebrokerageName, brokerageKey, brokerageUrl, officeAddress
Status & ratingisPlatinum, rating, ratingSurveyCount
Recent activitylistingsForSale, listingsForRent, listingsSold, listingsRented
Profilelanguages[], designations[], bio

Conventions, stated once: scrapedAt is ISO-8601 UTC. rating is on a 0–5 scale and is only set when ratingSurveyCount > 0. agentKey (from the profile URL) is present on 100% of rows and is the right de-duplication key; memberNumber is HAR's numeric agent id. The dataset ships a Texas agents table view so you can eyeball the slice you bought without writing a transformation.

Field fill — re-measured 2026-08-19 on 291 live records

Fill is quoted on two real slices, because one number would either flatter or slander this dataset. Directory = 231 distinct agents pulled unfiltered from three places in the sitemap (offsets 0, 30 000 and 60 000). Platinum = 60 agents from a platinumOnly: true run — the slice most lead buyers actually want. Every run also prints its own measured fill in the log.

FieldDirectory (n=231)Platinum (n=60)
fullName, agentKey, state, zip, profileUrl100%100%every row
brokerageName, brokerageKey, brokerageUrl, officeAddress100%100%HAR office id + address
photoUrl100%100%
city99.7%100%null on the rare row where HAR's own meta tag is malformed — see the limits
phone97.8%100%HAR's contact-widget phone
memberNumber72.3%100%167/171 on HAR-native agents, 0/60 on ABoR — see the limits
bio26.4%78.3%the agent's own write-up. HAR's canned placeholder is never shipped — see the limits
listingsSold39.0%80.0%recent sold counter
listingsForSale38.1%65.0%agents with active listings
listingsRented30.3%71.7%recent rented counter
isPlatinum22.5% true100% truea boolean on every row; % true swings 0–42% by slice
listingsForRent16.0%33.3%
designations9.1%61.7%ABR, CRS, GRI, CLHMS, SIOR, CIPS, SRES … 25 distinct codes seen
languages7.4%36.7%multi-lingual agents
ratingSurveyCount4.3%25.0%most agents have no completed surveys
rating4.3%25.0%exactly tracks ratingSurveyCount — a rated agent always gets a number

Re-measured independently on build 0.1.8 over 271 fresh distinct agents (sitemap offsets 0 and 30 000, no filters — 90 of them Platinum, 181 not). The numbers move by slice, so treat the table as a range, not a promise: bio 23.2% non-Platinum / 78.9% Platinum · phone 96.7% / 100% · memberNumber 97.8% / 100% · listingsSold 45.9% / 91.1% · designations 7.2% / 27.8% · languages 7.2% / 24.4% · rating 0% / 20.0%. Zero duplicate agentKeys in 271 rows, all 24 columns present on all 271, and zero rows carrying HAR's canned placeholder bio.

The headline that could mislead you: this is a brokerage-and-contact product, not a ratings product. HAR ratings are survey-gated and sparse; buy this for the brokerage key, the phone and the recent-production counters, not for star ratings.

How to run it

A. A plain Texas pull (the cheapest mode) — 1.0 fetches per row

{ "maxItems": 2000 }

B. One city — a pre-filter, so cost scales with matches

The name is resolved against har.com's own city index (1,752 Texas cities, shipped with the Actor) and the crawl is enumerated from /{City}/real_estate_agents. Spelling is forgiving: Katy, katy, Katy, TX and Sugar Land all resolve.

{ "cities": ["Katy", "Sugar Land"], "maxItems": 500 }

har.com files an agent under every city they work, so an agent's own office address may be in a neighbouring town. Measured on a 30-row ["Katy", "Sugar Land"] pull: 28 rows self-report Katy, 2 report Houston — agents who work Katy from a Houston office. That is the source's own definition of "agents in Katy", and the Actor does not second-guess it (re-testing the profile's address would throw away profiles you already paid to fetch).

Cities are consumed in the order you list them, so if maxItems is filled by the first city the later ones are never reached — that 30-row pull above returned Katy agents only. Give a larger maxItems, or run one city per run, if you want each city represented.

C. One brokerage

Run once unfiltered, read the brokerageKey off the rows you want, then re-run with them.

{ "brokerageKeys": ["RMXD01", "EXPD12"], "maxItems": 1000 }

D. Active, contactable agents

{ "withPhoneOnly": true, "minListingsSold": 3, "maxItems": 1000 }

E. Known profiles — paste the URLs

Sitemap enumeration is skipped entirely. Only /{name}/agent_{key} URLs are accepted.

{ "profileUrls": ["https://www.har.com/james-chen/agent_ypchen"] }

F. Resuming a big pull across runs

Enumeration order is stable, so a maxItems=1000 run followed by skip=1000 continues where the first stopped. All 76,042 agent URLs are unique.

{ "skip": 1000, "maxItems": 1000 }

Sample row

One real row, from a real run:

{
"profileUrl": "https://www.har.com/james-chen/agent_ypchen",
"agentKey": "ypchen",
"memberNumber": "685420",
"fullName": "James Chen",
"phone": "(281) 849-6888",
"city": "Missouri City",
"state": "TX",
"zip": "77459",
"brokerageName": "NX Realty",
"brokerageKey": "NXRA01",
"brokerageUrl": "https://www.har.com/nx-realty/broker_nxra01",
"officeAddress": "6110 Sienna Ranch Rd #201, Missouri City, TX 77459",
"isPlatinum": true,
"rating": 4.97,
"ratingSurveyCount": 252,
"listingsForSale": 5,
"listingsForRent": 3,
"listingsSold": null,
"listingsRented": 79,
"languages": ["Mandarin", "Min Nan/Taiwanese", "English"],
"designations": ["ABR", "CRS", "GRI", "ALHS"],
"bio": "James Chen is a licensed broker in the Greater Houston Area with over 10 years of real estate experience …",
"photoUrl": "https://www.har.com/ogimage/v3/agent-profile-overview--ypchen--61ef46073bb7640a3ef4281c7b3e86a7.jpg",
"scrapedAt": "2026-08-15T04:38:39.177Z"
}

Two fields people misread, so they are named to prevent it:

  • rating is set only when ratingSurveyCount > 0. HAR renders an empty "0 / 5" placeholder on unrated agents; this Actor never turns that into a false 0.0 — an unrated agent is rating: null.
  • listingsSold: null means "HAR showed no sold counter", not "0 sales". The counters reflect what HAR chose to display on the overview.

Input

Grouped in the Console as What to scrape · Lead-quality filters · Depth, limits & cost · Advanced. Nothing is required; everything that matters is prefilled.

FieldTypeDefaultWhat it does
maxItemsint50Agents to return, and your hard cost cap.
citieslist—Pull agents har.com lists in these cities. Pre-filter, forgiving spelling.
zipCodeslist—Pull agents har.com lists in these ZIPs. Pre-filter.
brokerageKeyslist—Keep only these HAR office keys. Post-fetch.
profileUrlslist—Paste /{name}/agent_{key} URLs to skip enumeration.
withPhoneOnlyboolfalseKeep only agents with a phone. Cheap (~93% fill).
platinumOnlyboolfalseKeep only Platinum agents. ~8 fetches per row.
ratedOnlyboolfalseKeep only agents with a completed survey. Expensive — sparse.
minRatingselect0Keep agents rated at least this. Implies a rating exists.
minListingsSoldint0Keep agents with at least this many recent sold listings.
includeBiobooltrueInclude the profile bio.
includeLanguagesbooltrueInclude languages spoken.
includeDesignationsbooltrueInclude designations where shown.
skipint0Resume where a previous run stopped.
maxConcurrencyint5Warmed residential sessions in flight (1–10).
proxyConfigurationproxyApify RESIDENTIAL-USLeave it. See the transport ladder.

Pricing

$0.003 per agent returned — $3 per 1,000 — charged on the agent-scraped event. No monthly platform fee from this Actor.

RunAgentsCost
The prefilled demo, no edits50$0.15
A city sample500$1.50
A brokerage list1,000$3.00
A serious pass5,000$15.00
Every agent HAR publishes76,042$228.13

You are charged for rows delivered, never for a profile that was fetched and then filtered out, and never twice for the same agent — duplicate agentKeys are dropped at enumeration, before anything is fetched. Rows are charged as they are pushed, so if you hit a budget cap you get whole rows and stop, not a half-billed dataset. maxItems is your hard cost cap.

Honest limits

  • No email addresses. HAR keeps the agent email behind a "Send email" lead form. Anyone selling you "HAR emails" generated them somewhere else. Pair this Actor with an email-enrichment step on brokerageName + fullName if you need them.
  • No TREC license number. HAR does not print it on the agent overview page. If you need the license, cross-reference the free TREC public license search.
  • Texas only. HAR is the Houston-area board; the directory is Texas agents.
  • Ratings are sparse, and that is a fact about HAR, not about this Actor. Only agents with at least one completed client survey get a score: measured 4.3% of the open directory and 25.0% of Platinum agents. When a rating exists you get the exact two-decimal CER value HAR prints (4.97, 4.94, 4.85 …) — rating and ratingSurveyCount have identical fill (10/231 and 10/231), so a rated agent never comes back with a blank score.
  • Designations are a Platinum-weighted field. HAR renders them as badge images on the overview: 61.7% of Platinum agents carry at least one, versus 9.1% of the open directory. Empty means HAR showed no Designations section for that agent.
  • memberNumber is blank on ABoR-syndicated agents. One sitemap chunk is Austin Board of REALTORS® profiles (agentKey starts ABORTX-); HAR ships those with an empty member_number input, so the field is honestly null there (0/60 measured) and 167/171 on HAR-native agents. Use agentKey as the join key — it is 100% on every row.
  • bio counts only the agent's OWN words. When an agent leaves the bio blank, HAR fills the block with its own canned CTA ("Contact {name} if you are in the process of buying, selling or renting a property…"). That is a fact about HAR's template, not a biography, so it is dropped rather than shipped as content: it was 112 of the 173 non-null bios in the audited directory slice and 1 of 48 in the Platinum slice. The percentages above are agent-written bios only, which is why the directory figure (26.4%) is far below the Platinum one (78.3%) — Platinum agents write bios. HAR also lets agents paste from Word and from markdown editors, and those variants are read too (they were previously being dropped).
  • HAR's own og:keywords is occasionally malformed, and city is read from it. On 1 of 291 audited rows HAR printed the ZIP where the city belongs. city is null on that row rather than wrong — a bare ZIP or an echo of the agent's name is refused, because cities is a filter input and a wrong city is worse than a blank one. The same HAR defect is visible in its rendered office address. 290/291 rows had a city that appears verbatim inside officeAddress.
  • Brokerage, rating, Platinum and phone filtering happens after the fetch, because neither the profile URL nor the listing reveals them. Narrow asks on those are slower. City and ZIP are not in this group — they are enumerated from har.com's own indexes before anything is downloaded.
  • The PerimeterX wall is real. This Actor beats it with a warmed residential session (see below), and across every validation run 100% of profiles came through — but if the wall is unusually hot, a run may leave a few profiles blocked and log it. The rows you get are always real.

How it works (technical)

  1. Work out where candidates come from:

    • cities → resolve each name against the bundled city index (built from sitemap.har.com/cities_sitemap.xml.gz) and page /{City}/real_estate_agents?sort=name.
    • zipCodes → page /zipcode_<zip>/real_estate_agents?sort=name.
    • neither → read https://sitemap.har.com/sitemap.xml (an open host — no PerimeterX, no proxy needed), pull the gzipped profiles_N.xml.gz chunks, decompress in-process and stream the /{name}/agent_{key} <loc> values, deduplicating on agentKey.

    ?sort=name is what makes listing paging safe: HAR's own pagination links use sort=rnd, and pages of a randomised list overlap. With sort=name, page 1 and page 2 share 0 of 20 agents on /Katy/, /Sugar_Land/ and /zipcode_77450/. Listing pages are pulled lazily — one at a time, only when the crawlers have run out of work — so a 25-row pull reads 2 pages, not 161. Candidates are deduplicated before anything is fetched, then skip is applied.

  2. Fetch each profile page through Apify RESIDENTIAL, country US, on a warmed session: each worker mints a PerimeterX cookie by requesting har.com/ on a fresh pinned session and hanging up as soon as the response headers arrive (the cookie is in Set-Cookie; the ~310 KB body is not needed). It then fetches profiles on that session, re-warming on any block.

  3. Parse each page — the record is merged from HAR's hidden lead-form inputs (member number, phone), the <meta og:*> tags (photo, and keywords = "{Name},…,{City},{ST},{ZIP}"), the /{slug}/broker_{key} link (brokerage name from the anchor/title, key + URL from the href) and the rendered body (rating + survey count, activity counters, languages, Platinum badge, bio).

  4. Apply your filters, push in batches, charge on push.

Which HAR pages are reachable. Measured through Apify proxy:

PageResult
www.har.com/findapro/agentsearch (agent search)HTTP 403, PerimeterX px-captcha
www.har.com/{City}/real_estate_agents (city listing, warmed residential)HTTP 200, 20 agents per page, 84.8 KB on the wire
www.har.com/zipcode_<zip>/real_estate_agents (warmed residential)HTTP 200, 20 agents per page, 84.5 KB on the wire
www.har.com/{name}/agent_{key} (profile, warmed residential)HTTP 200, full profile
sitemap.har.com/*HTTP 200, open

An earlier version of this README recorded the city listing as HTTP 403, PerimeterX and built the whole design around that. That reading was taken on an unwarmed session: the listing pages sit behind exactly the same PX rule as the profile pages, and clear it the same way. Re-measured 2026-09-08, and correcting it is what turned cities from a scan-and-discard filter into a pre-filter. ?page_size= is not honoured — the server pins 20 per page regardless.

The transport ladder. Everything below was measured through Apify Proxy, not from a laptop. A home broadband line reaches har.com without a proxy; an Apify container does not, so the home result is reported and then ignored.

RungResult
Direct / Apify datacenter, fresh or pinned0/5 — HTTP 403 px-captcha
Apify RESIDENTIAL-US, fresh session per request0/5 — HTTP 403 px-captcha
Apify RESIDENTIAL-US, pinned session, no warmup1/5 — roulette
Apify RESIDENTIAL-US, pinned session + homepage warmup + Chrome client-hints + retry-on-new-session24/24, then 40/40 = 100% (3 warmups for 40 profiles), 0 failures

Findings worth keeping:

  1. The homepage warmup is the whole trick. PerimeterX serves har.com/ through and sets a valid cookie for that residential exit IP; the profile page then passes. Without the warmup, a residential session cleared roughly 1 in 5.

  2. The warmup only needs the response headers. The PX cookie arrives in Set-Cookie, so the Actor hangs up the moment the headers land. A/B over 12 fresh sessions each, two profiles attempted per session, through Apify RESIDENTIAL-US:

    Warm-upWire bytes per warm-upProfiles passedWire per good profile
    Full body34.6 KB9/17 (53%)111.7 KB
    Headers only9.4 KB8/16 (50%)78.4 KB

    Same pass rate inside the noise of n≈16, a quarter of the bytes. (robots.txt does not mint a PX cookie, and there is no lighter PX-guarded HTML page on the host.)

  3. Session longevity is set by PX heat, not by a counter. Three warmed sessions walked 20, 2 and 3 profiles before their first block. A block costs only ~4.8 KB, so the Actor re-warms reactively on a block instead of throwing a good session away on a fixed profile count.

  4. HAR gzips ~6x, and that is what you are billed on. Apify bills residential proxy on the bytes that actually cross the wire: a profile is 63.5 KB compressed against 390 KB decompressed, the homepage 49.6 KB against 310 KB. The Actor therefore requests gzip, meters the raw buffer and inflates in-process, so its cost log is comparable to the invoice. Response bodies are not the whole bill either — headers, TLS handshakes and a proxy CONNECT per session cross the same metered link — so the log applies a 1.30x overhead factor, measured by dividing Apify's own billed PROXY_RESIDENTIAL_TRANSFER_GBYTES by the body bytes counted on four runs (1.27, 1.36, 1.33, 1.24). The "KB per delivered row" the run prints is therefore what you are actually charged for.

Uniqueness — measured, not asserted

  • The three live profile chunks hold 76,042 agent URLs with 0 duplicate agentKeys across them.
  • A 30-agent contiguous slice returned 29 active agents, 1 inactive, 0 duplicates.
  • Two slices joined with skip share 0 rows. agentKeys are deduplicated at enumeration, before anything is fetched, so a duplicate can reach neither your dataset nor your bill.

When a run stops early

This Actor never hands you a silently empty dataset: every early stop is spelled out in the run status message, and nothing you did not receive is ever billed.

  • 0 rows ends the run with a status message, naming the fetch count, how many were PX-blocked, inactive, unparseable and how many your filters removed — plus the likely cause. Nothing is billed.
  • A sitemap that HAR serves empty or partial (no profiles_N chunks, or chunks with no agent URLs) stops the run with that message rather than pretending it collected something. HAR serves those chunks unevenly — re-run, or paste URLs into profileUrls.
  • More than 20% of HTTP-200 pages failing to parse warns loudly in the log and the run status — the rows you did get are real, but check them: HAR may have changed the template. If nothing parsed at all, the run fails — a broken parser is the one thing worth failing on.
  • A high residual PX-block rate warns — the rows you got are real; re-run to pick up the misses.
  • A proxy-cost breaker stops a run that is spending far more bandwidth than its rows are worth (over 1.6x the ~315 KB/row break-even, judged on delivered rows once there are at least 8 of them). The status names it, with the KB per delivered row and the warm-up count, and every row you received was charged — nothing else was. It can only ever cut a run short of your maxItems: a run that delivered everything you asked for is never labelled a cost stop, however hot PX was. Measured 2026-09-09, one input run at two sizes: maxItems 8 delivered 8 of 8 at 969 KB/row with no stop message (run XDSabJgSFMK5Ed9O1); the same filters at maxItems 25 delivered 8 of 25 at 1,033 KB/row and said so (run s90CoQCoRiBpDfzBJ).
  • A run whose "Max total charge" runs out stops on a whole row, never a half-billed one, and the charge cap is the message you get — it outranks every other early-stop reason, because it is the one you can act on. Measured: cities:["Katy"], maxItems 25, cap $0.03 → 10 rows delivered, 10 charged, status "Stopped at this run's maximum total charge, not at maxItems."
  • A non-HAR-agent URL in profileUrls is skipped with a warning naming the first bad one; if none of them are usable the Actor falls back to sitemap enumeration instead of failing.
  • The run-time limit is respected. The Actor reads its own remaining wall-clock time, stops starting new fetches before the platform would kill it, and still emits everything already collected, with a status message telling you to raise the timeout or use skip to continue.
  • Running out of candidates before maxItems is a warning, not a failure.
  • No input at all is fine. Press Start with an empty input and you get the documented 50-agent sample ($0.15) — it is never an error, and never a surprise bill.

Who buys this

You are…You use it to…
Title companies & escrowBuild a Texas agent call list with phone + brokerageName + recent listingsSold, prioritising active closers.
Mortgage lenders & LOsSource referral-partner agents by city and production, filtered to withPhoneOnly + minListingsSold.
Real-estate coaching & CRM SaaSTarget Platinum agents (isPlatinum) and high-production teams as buyers who invest in their business.
Relocation & language-market servicesSegment by languages and city to find agents who serve a specific community.
Recruiting / brokerage growth desksRank agents at a competitor brokerage (brokerageKey) by recent activity for lateral recruiting.

How this differs from the sibling agent Actors

ActorWhat it isWhy you would use it instead
This ActorHAR.com, the Texas MLS board directoryYou want Texas board-level depth — brokerage key, survey-backed rating, recent sold/rented counts and languages — at the deepest coverage in the state.
zillow-agent-leads-scraperZillow's national agent directoryYou want national coverage and Zillow's review counts.
realtor-agent-leads-scraperRealtor.com's national directoryYou want national coverage and Realtor.com's recent-sales history.
fastexpert-agent-scraperFastExpert's curated national listYou want FastExpert's email and sold-transaction history nationwide.
homelight-scraperHomeLight's agent matchesYou want HomeLight's performance-ranked matches.

The honest summary: the national portals are wider; HAR is deeper in Texas and carries the board's own brokerage key and activity counters. The usual play is to pull HAR for a Texas market and enrich contact details elsewhere.

FAQ

Can I get agent emails? No — and nobody honestly can, from this source. HAR keeps the email behind a "Send email" lead form, so there is no email field. You do get phone (~93%), brokerageName and brokerageUrl. If email is the point, enrich on fullName + brokerageName elsewhere.

Can I get the TREC license number? No — HAR does not print it on the agent overview. Cross-reference the free TREC public license search using fullName + city.

Does this cover the whole US? No. HAR is the Houston Association of REALTORS® board; its agent directory is Texas.

Does it need a proxy? Yes — Apify Proxy, RESIDENTIAL, country US, which is the default and cannot be turned off for the crawl. HAR's profile pages are behind PerimeterX; datacenter and non-US residential measured 0/5.

How do I filter to one city? Set cities. The name is resolved against har.com's own index of 1,752 Texas cities and the crawl is enumerated from that city's agent listing, so only agents har.com already files under that city are ever downloaded — cost scales with matches, not with the 76,042-agent register. Spelling is forgiving (Katy, katy, Katy, TX). If a name is not in the index the run says so and falls back to scanning profiles, bounded by "Max profiles examined".

Do I get charged for rows a filter removed? No. You are charged per agent returned, on push. A narrow filter costs time and proxy budget, not money.

Two runs, will I get duplicates? Not if you use skip with the number the previous run logged. agentKeys are unique across the directory.

Will a run ever succeed with zero rows? No. A run that emits nothing throws, and the error says how many pages were fetched, blocked, inactive or filtered out.

Can I schedule it? Yes — Apify Schedules. Pair it with skip to walk the directory a slice at a time.

This Actor reads public agent directory pages that HAR.com publishes and enumerates from HAR's own sitemap (sitemap.har.com). HAR's robots.txt disallows /social/, /track, /tx/*, /dlreceipt/ and a handful of API endpoints; this Actor touches none of them — it reads the sitemap.har.com chunks and the public /{name}/agent_{key} profile pages. It does not log in and collects no data behind authentication.

Rows describe named individuals, so they are personal data. You are responsible for complying with HAR's terms and with how you use the data. Real-estate solicitation and anti-spam rules may apply to your outreach — including TCPA, CAN-SPAM, Texas DNC and TREC advertising rules.

HAR.com®, HAR® and REALTOR® are trademarks of their owners; this Actor is not affiliated with, endorsed by or sponsored by the Houston Association of REALTORS®.

Feedback

Found a missing field or want a new filter? Open an issue on the Issues tab.

SEO keywords

har.com scraper, har agent scraper, houston association of realtors scraper, texas real estate agent scraper, houston realtor leads, texas realtor list, real estate agent leads texas, har.com data export, houston real estate agents database, texas agent directory scraper, realtor phone list texas, brokerage agent list, platinum agent list har, texas real estate agent csv, houston agent leads, real estate agent lead generation texas, har realtor scraper, texas mls agent scraper, agent brokerage data, real estate recruiting list texas