Is There a Trulia API? How to Get Listing Data

Al Amin/ Author14 min read
Is There a Trulia API? How to Get Listing Data

Search for "Trulia API" and the first thing Google hands you is a Trulia press release announcing an open API for all developers. Encouraging. Click through and you land on a newsroom page; look for the developer portal it points at and you find nothing, because developer.trulia.com no longer resolves. Not a 404. The hostname is simply gone.

Meanwhile the AI summaries stitched together from that same press release will tell you, confidently, that the Trulia API gives you "sale listing data." That claim has been wrong for a decade, and it was never quite right even when the API was live.

Here is the accurate version, with receipts, followed by the part nobody writes down: what you can actually run today.

The short answer

No. Trulia has no public API in 2026. There is no developer portal, no key to request, no sandbox, and no Trulia product anywhere in parent company Zillow Group's developer catalog.

The twist that makes this question worth more than one paragraph: Trulia genuinely did run an official public API for roughly a decade. And if you had it today, it still would not solve your problem, because it never returned a single listing.

Trulia did have an API. Here is exactly what it returned

The Internet Archive has the developer portal captured from February 2007 onward, running on Mashery, the API-management platform of that era. The homepage is unambiguous about the scope. The Trulia API consisted of exactly two libraries:

  • LocationInfo: neighborhoods in a city, cities in a state, counties in a state, a list of all 50 states, and ZIP codes in a state, with longitude and latitude for most locations.
  • TruliaStats: average and median listing price of homes on Trulia, the same figures broken out by bedroom count, the number of listed homes on Trulia, that number by bedroom count, and the percent of total Trulia traffic going to a location.

Read that list again with a builder's eye. There is no endpoint that returns a property. No address, no photos, no beds and baths for a specific home, no listing ID you could follow anywhere. An API that returns the median listing price of a ZIP code is a market-research tool, not a listings API, and the difference is the entire ballgame if you are building a search product, a lead engine, or an investor dashboard.

The confusion is easy to trace. Trulia's own copy described TruliaStats as statistics pertaining to "Trulia traffic and for sale listing data." Skim that sentence and you hear "for sale listing data." Read it properly and it says statistics about for-sale listings. Every downstream summary since has repeated the skim.

If you want independent corroboration rather than an archived web page, the surviving open-source clients tell the same story. A Python wrapper for the Trulia REST API on GitHub exposes precisely two groups of calls: location hierarchies, and traffic and listing statistics by city, county, neighborhood, state, or ZIP. That is the whole surface anyone ever had.

The terms were tighter than the data

Even that modest dataset came fenced. The portal capped usage at 5,000 calls per day and 2 queries per second per key, granted the API for non-commercial use only, and required every site or app using it to display a "Powered by Trulia.com" logo under the attribution guidelines. So the API that did not return listings also could not legally be used in a commercial product. Worth knowing before you go hunting for a way to resurrect it.

When the door actually closed

You can date this precisely from the archive rather than guessing. The last successful capture of developer.trulia.com is from 15 July 2016. By 19 November 2016 the same URL was answering with a 301 redirect to trulia.com/tools/, and it kept redirecting through 2021. Today, as of this writing, the hostname does not resolve at all.

Timeline: Trulia launches in 2005, opens an API in 2007 covering location and stats data only, Zillow buys Trulia in 2015, the developer portal starts redirecting in 2016, and today there is no public API

The timing is not a coincidence. Zillow announced its acquisition of Trulia on 28 July 2014 in a deal valued at $3.5 billion, and the transaction closed on 17 February 2015. The developer portal went dark the following year. Portals do not retire APIs because nobody used them; they retire APIs because the data became the business. Once Trulia was inside Zillow Group, a free public feed of anything adjacent to listings stopped making sense on the org chart.

What Zillow Group offers instead

This is where most articles wave vaguely at "the Zillow API" and stop. The specifics matter, so here they are.

Zillow Group's developer site publishes a catalog of roughly seventeen APIs. They cover mortgage rates, mortgage leads and loan-origination plumbing, rentals feeds and rental leads, agent and lender reviews, public records, neighborhood data, real estate metrics, transaction management, Zestimates, and MLS listings through Bridge. Not one of them is a Trulia product. Trulia is not mentioned in the catalog at all, and the performance-reporting URL that still surfaces in search results for this question returns a 404.

The closest thing to a listings feed is the Bridge MLS Listings API, which serves RESO-normalized MLS data to brokers and developers. Read its access requirements before you get excited: the platform is, in its own words, "currently invite only." It is built for licensed participants with an MLS relationship, not for a developer who wants Trulia's search results in JSON by Friday. We walked the same road in more detail in how to get property data from Zillow using an API, and the shape of the answer is identical on the Trulia side of the group.

Your four real options in 2026

Every route to Trulia data is a trade between money, engineering time, and how often something wakes you up. The honest comparison:

OptionPricingSetup effortWhere it hurts
Official Trulia API Doesn't exist n/a Portal offline since 2016; the hostname no longer resolves. Nothing to sign up for.
Zillow Group Bridge MLS Listings Not publicly listed Weeks, if you qualify Invite only, MLS-participant oriented, and it is MLS data rather than Trulia's own search surface.
DIY scraper (headless browser plus proxies) "Free," plus proxies and your time Days to build, forever to maintain Trulia answers unadorned scripted requests with a 403 before you parse a single byte. Then come the layout changes.
Scraper marketplaces and per-call scrapers Roughly $30 per 1,000 results on one Apify actor; 10 credits per call on ScrapeHero's Trulia search API Hours You still own schemas, dedup, and monitoring. Actors break when the site shifts, and per-result pricing gets expensive at survey scale.
Hosted REST endpoints (RealtyAPI) On the subscription plans, currently from $20/month for 20,000 requests Minutes Covers what Trulia itself shows, so US only, and it sits on the paid plans rather than the free tier.

That 403 in the third row is not a rhetorical flourish. Fetching trulia.com/legal/terms/ with a plain command-line client returns 403 Forbidden. You cannot read Trulia's terms of use with a script, which tells you what a script trying to read ten thousand listings is in for. If you want the general version of this argument, we laid it out in web scraping vs API. Short version: scraping wins when the data has no API at any price and your volume is tiny. It loses the day uptime matters.

Here is what the scraping route looks like when a vendor demos it, which is a fair way to judge how much machinery sits between you and the data:

Video walkthrough showing a browser-automation approach to extracting Trulia real estate data

The question everyone asks quietly. Scraping publicly visible data is not automatically illegal in the United States, and courts have gone back and forth on the point for years. None of that ambiguity makes your Tuesday deploy more reliable when the bot wall tightens.

What you can check yourself is Trulia's robots.txt, which is public and specific. It fully disallows several named crawlers by user agent, and for everyone else it blocks a long list of paths including /api/, /account/, /signup, /login, /_next, and the internal property-estimate JSON endpoints. That is a site telling automated clients where it does not want them, in writing, before any terms-of-use argument starts. We cover the wider landscape in is website scraping legal? and explain how we handle sourcing in is RealtyAPI legal?

The practical read has not changed in years: the legal risk is real but ambiguous, while the engineering pain is certain. Most teams do not quit scraping because a lawyer called. They quit because of maintenance.

What RealtyAPI's Trulia endpoints cover

RealtyAPI runs hosted Trulia endpoints as part of its real estate data platform. You call a normal REST endpoint with a key, and proxies, browser fingerprints, and anti-bot plumbing stop being your problem. Ten endpoints cover the surface:

EndpointWhat it does
GET /search/bylocationSearch by city, neighborhood, ZIP, or free text, with the full filter set below. The only search endpoint that paginates.
GET /search/byzipSearch a single ZIP code directly
GET /search/bycoordinatesSearch around a lat/long within a radius in miles
GET /search/byurlPaste a Trulia search URL, get the results behind it as JSON
GET /details/byaddressFull property details from a free-text address
GET /details/byidFull property details from a Trulia listing ID
GET /details/byurlFull property details from a Trulia property URL or path
GET /autocompleteResolve a typed string into cities, neighborhoods, schools, and addresses
GET /similarComparable homes for a given property
GET /amenitiesNearby restaurants, groceries, nightlife, cafes, shopping, arts, and fitness

Infographic: one API key connects to ten hosted Trulia endpoints grouped into search, details, and extras

Auth is a single x-realtyapi-key header and responses are JSON. Search results carry price, beds and baths, photos, coordinates, and listing status; the details endpoints add features, taxes, and price history for a single property. Every request costs one credit, so a paginated sweep costs one credit per page rather than one per listing, which is the pricing difference that matters when you compare it to per-result scraper billing.

The filters that make it feel like Trulia

A generic national listings API gives you a bounding box and wishes you luck. These are the parameters on /search/bylocation that let you ask a real question:

  • searchType: FOR_SALE, FOR_RENT, or SOLD. The sold side is the one people forget, and it is where comps live.
  • propertyType: comma-separated from house, condo, townhouse, apartment, multi_family, land, and mobile.
  • minPrice and maxPrice, plus minBedrooms/maxBedrooms and minBathrooms/maxBathrooms.
  • minSquareFeet/maxSquareFeet and minYearBuilt/maxYearBuilt for anything that turns on building age or size.
  • sort: relevance, price_low, price_high, newest, lot_size, sqft, or price_per_sqft. Use newest if you are building alerts.
  • resultCount up to 200 per page, and page to walk past the first one.

Quick start: Trulia listings in three requests

Base URL: https://trulia.realtyapi.io. Auth: your key in the x-realtyapi-key header. One note before you start. Trulia sits in RealtyAPI's premium set, so it is available on the subscription plans rather than the free tier; the pricing page has the current numbers and the free tier is still the right place to feel out request and response shapes on the standard APIs first. The docs cover key setup in about two minutes.

1. Resolve the place

Autocomplete turns whatever a human typed into something the search understands, and it returns cities, neighborhoods, schools, and addresses with the details attached to each suggestion.

curl "https://trulia.realtyapi.io/autocomplete?query=Wicker%20Park&searchType=FOR_SALE" \
  -H "x-realtyapi-key: YOUR_KEY"

You can skip this step when you already trust your input. /search/bylocation resolves the location itself, so "Austin, TX" or "78704" works directly. Autocomplete earns its credit when the string came from a search box and might be a school name, a misspelling, or a neighborhood that three cities share.

curl "https://trulia.realtyapi.io/search/bylocation?location=Austin,%20TX&searchType=FOR_SALE&propertyType=house,townhouse&minBedrooms=3&maxPrice=650000&sort=newest&resultCount=100" \
  -H "x-realtyapi-key: YOUR_KEY"

Each result carries the price, beds and baths, photos, coordinates, and listing status, along with the identifier you will use next. Ask for up to 200 per page and add &page=2 to continue. If you are searching by ZIP, coordinates, or a pasted Trulia URL instead, note the asymmetry: those three endpoints take resultCount but not page, so pull the count you need in one call rather than planning to paginate.

3. Pull the detail

curl "https://trulia.realtyapi.io/details/byid?id=83157434" \
  -H "x-realtyapi-key: YOUR_KEY"

Details come back with price, beds and baths, photos, location, features, taxes, and price history. Two variants save you a lookup: /details/byaddress takes free text like 8390 SW 72nd Ave, Miami, FL 33143, and /details/byurl takes a Trulia property URL or just the path, which is handy when your input is a link somebody pasted into Slack.

Diagram of the three-request flow: resolve the place, search listings, then pull full details for one listing

A production-ish Python loop

The version with pagination and the error handling you actually want, because any API fronting live web data will occasionally have a bad minute upstream:

import time
import requests

BASE = "https://trulia.realtyapi.io"
HEADERS = {"x-realtyapi-key": "YOUR_KEY"}

def get(path, **params):
    for attempt in range(3):
        r = requests.get(BASE + path, params=params, headers=HEADERS, timeout=60)
        if r.status_code in (429, 502, 503, 504):
            time.sleep(2 ** attempt)
            continue
        r.raise_for_status()
        return r.json()
    raise RuntimeError(f"{path} failed after 3 attempts")

def search(location, pages=5, **filters):
    seen = set()
    for page in range(1, pages + 1):
        data = get("/search/bylocation", location=location,
                   page=page, resultCount=100, **filters)
        # Be liberal about where the array lives; normalize once, here.
        items = data if isinstance(data, list) else (
            data.get("results") or data.get("listings") or data.get("data") or []
        )
        if not items:
            break
        for item in items:
            key = item.get("id") or item.get("url")
            if key and key not in seen:
                seen.add(key)
                yield item

for home in search("Austin, TX", searchType="FOR_SALE",
                   propertyType="house", minBedrooms=3,
                   maxPrice=650000, sort="newest"):
    print(home.get("id"), home.get("price"))

Two habits worth stealing from that snippet. Retry on the transient status codes only, so a genuine 400 fails loudly instead of being retried three times into the same wall. And keep the shape-normalizing in one function, so when a field moves you change four lines rather than auditing your whole codebase. That principle is the real lesson of the dead Trulia API: every integration you own should be one layer thick.

From there it is your product. Diff sort=newest results against yesterday's for a new-listing alert, sweep searchType=SOLD by ZIP to build comps, or chain /details/byid into /similar and /amenities for a property page that has something to say about the neighborhood.

What you still can't get

Honesty section, because a comparison that only lists strengths is an advertisement.

These endpoints return what Trulia shows now: active listings, sold records it exposes, details, and the current filter set. They are not a time machine. The /details responses include price history for a property, but if you want your own longitudinal record across a whole market you capture snapshots on a schedule; the loop above plus cron and a database gets you further than you would think. Coverage follows Trulia, so this is a United States answer, not a global one. And it lives on the subscription plans, which is the honest trade for data that costs real money to keep flowing.

If your app needs more than one market or more than one source, pair it the way we approached the StreetEasy API question, whether Redfin has an API, what counts as a Realtor.com API, and the wider listing API comparison.

Key takeaways

  • Trulia has no public API, and the answers you find are describing a dead one. The developer portal's last good capture is July 2016; today the hostname does not resolve.
  • Even the original API never returned listings. LocationInfo gave you geography, TruliaStats gave you averages and traffic percentages. Non-commercial use only, with a mandatory "Powered by Trulia.com" logo.
  • Zillow Group's catalog has no Trulia product. The nearest listings feed is Bridge MLS, which is invite only and aimed at MLS participants, not app developers.
  • Scraper marketplaces price per result; hosted endpoints price per request. At roughly $30 per 1,000 results, a market-wide sweep costs real money before you have written a line of product code.
  • Whatever route you pick, keep the integration one layer thick. The Trulia API disappeared with no migration path. Assume every upstream will, and make swapping it a one-file change.

If you are building something that needs US listing data, the fastest way to find out whether this fits is to run the three requests above against your own market and look at what comes back. Pick a ZIP you know well, sort by newest, and see whether the results match what you would see on the site. That comparison takes ten minutes and settles the question better than any article can, including this one. Start at the pricing page for a key.