# Serve filterable property listings from a Google Sheet

Property listings are a table your agents already maintain: address, price, beds, baths, status, photos. PasteSheet publishes that Google Sheet as a live JSON API with filtering and search built in, so your listings site lets buyers narrow by price, beds, or location without you standing up a backend.

*Last updated: 2026-07-11 · Source: <https://pastesheet.com/use-cases/google-sheets-real-estate-listings>*

## Key facts

- A Google Sheet is capped at **10 million cells** (or 18,278 columns), which is the real ceiling on using one as a database. ([source](https://support.google.com/drive/answer/37603))
- The feed is capped by plan: **500 listings on Free**, **5,000 on Starter ($9/mo)**, and no row cap on **Pro ($19/mo)**.
- Full-text `search=` and aggregation (`avg` price by city with `group_by`) are **Pro ($19/mo)** features. Exact-match filters on beds, status and type, plus `contains`, sorting and pagination, work on every plan.
- The endpoint is **read-only**, so a public listings site can filter and sort the feed but a visitor can never flip a home to sold.

## Why keep listings in a Sheet

A listings feed is inherently tabular — one row per property, columns for price, beds, baths, city, and status. Agents already track this in a spreadsheet, updating a price or flipping a home to "sold" as deals move. Building a bespoke CMS to hold the same table, then a search backend on top, is a lot of work for data that fits in cells.

PasteSheet serves the Sheet as clean, typed JSON with filtering, search, and pagination in the URL — the querying a listings page needs, with no database or backend to run. Your site — a [directory-style front end](https://pastesheet.com/use-cases/google-sheets-directory-website) or a [live dashboard](https://pastesheet.com/use-cases/google-sheets-live-dashboard) — reads the endpoint and renders the results.

## The filters a listings page needs

Buyers slice the same feed different ways, all from URL parameters:

- Exact-match on discrete fields — `?beds=3`, `?status=active`, `?type=condo`.
- Partial match on place names with `contains[city]=Austin`, or full-text `search=` across the row (Pro).
- Sort by price with `sort=price` or `sort=-price`, and page long feeds with `page` / `per_page`.
- Aggregate for market stats — `avg` price by city with `group_by` — on Pro.

## Fetch listings as JSON

Point your listings page at the endpoint and combine a location filter, a sort, and pagination in one request:

```bash
curl "https://pastesheet.com/your-endpoint/Listings?contains[city]=Austin&sort=price&per_page=20"

{
  "data": [
    {
      "address": "1204 Oak Ridge Dr",
      "city": "Austin",
      "price": 525000,
      "beds": 3,
      "baths": 2,
      "status": "active"
    }
  ]
}
```

## Safe to publish, nothing to wire up

Because the endpoint is **read-only by design**, it is safe to expose publicly or hand to a teammate: consumers can read and query the data but can never change the sheet. And there is **no Google Cloud project, OAuth screen, or service account** to set up — you paste a share URL and get a live API.

## What it costs

**Starter — $9/month.** For indie makers shipping a real app.

- Endpoints: 10
- Requests: 50,000 / month
- Rows per endpoint: 5,000
- Tabs per endpoint: 5
- Rate limit: 300 / minute

**Full-text search and market stats are Pro.** Start free to serve and filter listings on 3 endpoints; move to a paid plan for full-text `search=` across the row and aggregation (`avg` price by city with `group_by`), plus private endpoints when a feed should stay behind a key.

## Frequently asked questions

### Can buyers filter by price and beds at once?

Yes. Combine parameters in a single URL — ?beds=3&status=active&sort=price — and PasteSheet returns just the matching rows in order. Partial-match and full-text search let you add location and keyword filters too.

### How do I keep listings current?

Agents edit the Google Sheet as normal — change a price, flip a home to sold — and the API reflects it after the cache refreshes. Paid plans set a custom TTL so a status change goes live in seconds.

### Can I compute average prices by area?

Yes, on Pro. Aggregation with group_by, avg, count, and sum lets you return market stats — like the average price per city — straight from the endpoint without pulling every row into your own code.

### Can anyone edit listings through the API?

No. The endpoint is read-only by design — there is no write path — so a public listings site is safe to publish, and you can lock a private feed behind a key when you need to.

## Sources

- [Files you can store in Google Drive (size limits)](https://support.google.com/drive/answer/37603) — Google

## Related use cases

- [Build a Directory Website From a Sheet](https://pastesheet.com/use-cases/google-sheets-directory-website) — Turn a Google Sheet into a searchable directory. PasteSheet serves your listings as a filterable, read-only JSON API — no database, no admin panel, no code.
- [Run a Job Board From a Google Sheet](https://pastesheet.com/use-cases/google-sheets-job-board) — Post jobs from a spreadsheet. PasteSheet publishes your listings as a live, read-only JSON API, filterable by role, location, and remote — no backend needed.
- [Serve a Product Catalog from Google Sheets](https://pastesheet.com/use-cases/google-sheets-product-catalog) — Power a product catalog from a Google Sheet. PasteSheet serves products, prices, and stock as a live, read-only JSON API — no backend, no Google Cloud setup.
- [Feed a Live Dashboard From Google Sheets](https://pastesheet.com/use-cases/google-sheets-live-dashboard) — Power a live dashboard from a Google Sheet: PasteSheet serves rows and count/sum/avg rollups as cached JSON your charts read — no backend, no database.

---

[PasteSheet](https://pastesheet.com) turns any Google Sheet into a live REST API and MCP server for AI agents — no backend, no code. Canonical HTML version of this page: <https://pastesheet.com/use-cases/google-sheets-real-estate-listings>
