# StreetEasy Scraper - NYC Rentals & Sales (`solidcode/streeteasy-scraper`) Actor

\[💰 $1.0 / 1K] Extract NYC rental and sale listings from StreetEasy across all five boroughs and any neighborhood. Get prices, beds, baths, square footage, GPS coordinates, amenities, building records, full price history and agent contacts. Export to JSON, CSV or Excel.

- **URL**: https://apify.com/solidcode/streeteasy-scraper.md
- **Developed by:** [SolidCode](https://apify.com/solidcode) (community)
- **Categories:** Real estate, Lead generation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.00 / 1,000 listings

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

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

## 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

## StreetEasy Scraper - NYC Rentals & Sales

Pull New York City rental and sale listings from StreetEasy at scale — 75 fields per listing, GPS coordinates, full price history, building records, and named agent contacts, across all five boroughs and down to individual neighborhoods. Built for brokerages, proptech teams, and housing-market analysts who need current New York inventory in a spreadsheet or a database without building and maintaining a scraper of their own.

### Why This Scraper?

- **Rentals and sales in one run** — one `listingType` setting collects both from the same location, and every row is stamped `rental` or `sale`. Sale rows add maintenance, monthly taxes, estimated monthly payment, max financing and land-lease status; rental rows add no-fee status, availability date, free months, lease term and itemised rental fees.
- **75 fields per listing** in six groups — 25 core, 14 price and value, 13 location, 10 dates and identifiers, 7 contact, 6 media. No second record type to join: everything lands on one flat row.
- **All five boroughs, plus neighborhood-level searches** — Manhattan, Brooklyn, Queens, the Bronx and Staten Island, or a named neighborhood like Astoria, Williamsburg, Park Slope or the Upper East Side, each resolved against StreetEasy's own area list rather than guessed from a keyword.
- **GPS coordinates on 554 of the 555 rows checked** across five boroughs, at full published precision (`40.62323583`, `-74.00115634`) — ready for mapping, distance joins and territory analysis without geocoding a single address.
- **Named agent contacts** — agent name, email, direct phone, alternate phone, brokerage and profile link. Across a 600-listing sample spanning three boroughs and both categories, name and email came back on 100% of listings and a phone number on at least 92%.
- **Complete price history, not just today's ask** — every listing, delisting, re-pricing and recorded sale with its date and amount, on 100% of enriched rows. The sale example below carries 12 of them, reaching back to a $125,000 purchase in 1996 (four shown).
- **Building records attached to every unit** — year built, pre-war flag, floor count, unit count, new-development flag, building name and building page link, plus every named amenity and outdoor space. The Battery Park condo below resolves to a 27-floor, 238-unit 1985 building without a second lookup.
- **Nearby subway stations and zoned schools** with walking distance in miles, line names and route letters — subways on 83–86% and schools on 92–94% of enriched rows, measured on live runs in Queens and the Bronx.
- **A withheld number never arrives as `0`** — StreetEasy publishes a literal zero for undisclosed square footage (47% of a 600-listing sample), maintenance, monthly taxes, max financing and price change. Those become `null` here, so a 0 sq ft apartment never drags down your averages.

### Use Cases

**Market Research & Analytics**

- Track asking rents and sale prices by neighborhood, bedroom count and property type over time
- Measure days on market and price-cut frequency from `daysOnMarket` and `priceHistory`
- Compare pre-war and new-development inventory using the building flags on every row
- Build no-fee rental indices from `isNoFee`, `freeMonths` and `rentalFees`

**Brokerage & Agent Operations**

- Monitor competing listings in your farm area and catch every re-pricing
- Pull comps for a CMA — each enriched row already carries five StreetEasy comparables
- Audit your own firm's live inventory for missing photos, floor plans or descriptions
- Collect open-house schedules across a whole neighborhood in one export

**Lead Generation**

- Build agent and brokerage lists with email addresses and direct phone numbers
- Segment agents by borough, price band or property type before outreach
- Reach management companies and new-development sponsors through the building record

**Investment & Underwriting**

- Screen sales by `pricePerSqft`, `maintenance`, `taxes` and `estimatedMonthlyPayment`
- Flag land-lease buildings with `isLandLease` before they reach diligence
- Filter on `maxFinancing` to find co-ops that permit the leverage your model assumes

**Product & Data Integration**

- Power a rental search product with fresh NYC inventory, photos and floor plans
- Feed a valuation or rent-estimate model with coordinates, size, amenities and history
- Sync new listings into Google Sheets, a warehouse or an internal API on a schedule

### Getting Started

#### Simplest run — one borough

```json
{
  "searchUrls": ["Brooklyn"],
  "maxItems": 100
}
```

#### Several neighborhoods, with full details

Type the neighborhood the way StreetEasy names it, or paste the address of a public
StreetEasy search page — the location is read out of it either way.

```json
{
  "searchUrls": ["Williamsburg", "Astoria", "https://streeteasy.com/for-rent/park-slope-brooklyn"],
  "listingType": "both",
  "enrichDetails": true,
  "maxItems": 1000
}
```

### Input Reference

#### What to Scrape

| Parameter | Type | Default | Description |
|-----------|------|---------|-------------|
| `searchUrls` | array | `[]` | Neighborhoods or boroughs to search. Type a borough name, a neighborhood name, or paste a public streeteasy.com search address. Empty means Brooklyn. Add as many as you like — results are de-duplicated across them. |
| `listingType` | string | `both` | `both`, `rentals` or `sales`. Each location is searched once per category you pick. |

#### Result Limits & Detail

| Parameter | Type | Default | Description |
|-----------|------|---------|-------------|
| `maxItems` | integer | `100` | Maximum listings per location searched (`0` = everything the search returns). StreetEasy pages through at most 4,270 listings for any one location and category. |
| `enrichDetails` | boolean | `false` | Adds 37 fields to every listing: building record, price history, amenities, nearby subways and schools, every photo and floor plan, video and 3D tour links, open houses, comparable listings, and every listing contact. Billed at the higher rate. |

#### Advanced

| Parameter | Type | Default | Description |
|-----------|------|---------|-------------|
| `concurrency` | integer | `8` | How many requests to run at once. Lower it if results start failing. |
| `proxyConfiguration` | object | Apify Proxy | Proxy settings for the run. |

### Output

Every listing is one dataset row. Rows carry 38 fields by default; `enrichDetails` widens
the same row to all 75. Rentals and sales share one schema — `listingType` tells them apart.
Both examples are real listings: the agent's name and contact details are replaced with
placeholders, and long text and arrays are shortened here for readability.

#### Rental row

```json
{
  "id": "5112748",
  "listingType": "rental",
  "url": "https://streeteasy.com/building/the-frederick/615",
  "title": "564 Saint John's Place #615",
  "propertyType": "Rental Unit",
  "status": "Active",
  "bedrooms": 1,
  "bathrooms": 1,
  "sizeSqft": 652,
  "daysOnMarket": 5,
  "address": "564 Saint John's Place",
  "unit": "#615",
  "zipCode": "11238",
  "latitude": 40.6725,
  "longitude": -73.9591,
  "neighborhood": "Crown Heights",
  "borough": "Brooklyn",
  "price": 4696,
  "isNoFee": false,
  "freeMonths": 1,
  "leaseTerm": 12,
  "petPolicy": "Cats and dogs allowed",
  "amenities": ["Balcony", "Central Air", "Dishwasher", "Doorman", "Elevator", "Gym", "Hardwood Floors", "Roof Deck", "Washer / Dryer in Unit"],
  "buildingName": "The Frederick",
  "buildingYearBuilt": 2022,
  "buildingFloorCount": 8,
  "buildingUnitCount": 193,
  "buildingUrl": "https://streeteasy.com/building/the-frederick",
  "nearbySubways": [{"station_name": "Botanic Garden", "line": "Franklin Shuttle", "routes": ["S", "2", "3", "4", "5"], "distance": 0.13}],
  "nearbySchools": [{"name": "P.S. 316 Elijah Stroud", "district": "17", "grades": ["PK", "0K", "01", "02", "03", "04", "05", "SE"]}],
  "brokerageName": "Premier One Realty LLC",
  "agentName": "Agent Name",
  "agentEmail": "agent@example.com",
  "agentPhone": "(555) 010-0000",
  "heroPhotoUrl": "https://photos.zillowstatic.com/fp/e907da35de71638f355719606b2aac62-se_large_800_400.webp",
  "photos": ["https://photos.zillowstatic.com/fp/e907da35de71638f355719606b2aac62-full.jpg", "https://photos.zillowstatic.com/fp/3158dcca5c8455f00d160e9e10a016f2-full.jpg"],
  "floorplans": ["https://photos.zillowstatic.com/fp/bce62791bff76be7b8b91d682c81e83d-full.jpg"],
  "priceHistory": [
    {"date": "2026-07-23", "price": 4696, "description": "Listed by Premier One Realty LLC"},
    {"date": "2020-03-20", "price": 3675, "description": "Delisted by Mishkan Group. Last priced at $3,675."}
  ],
  "comparableListings": [{"id": "5028364", "listed_price": 4450}, {"id": "5059843", "listed_price": 4550}],
  "listedAt": "2026-07-23T18:29:35-04:00",
  "updatedAt": "2026-07-23T18:29:35-04:00"
}
```

#### Sale row

A sale row carries every field above — id, address, coordinates, building record, agent,
photos, comps — and swaps the tenancy fields for ownership economics. This is a real
Battery Park City condo, showing only what a rental row does not have:

```json
{
  "id": "1835854",
  "listingType": "sale",
  "title": "377 Rector Place #1D",
  "propertyType": "Condo",
  "saleType": "Resale",
  "price": 670000,
  "sizeSqft": 654,
  "pricePerSqft": 1024,
  "lastPriceChangeAmount": -20000,
  "lastPriceChangeDate": "2026-07-16T00:00:00-04:00",
  "maintenance": 1048,
  "taxes": 842,
  "estimatedMonthlyPayment": 5288,
  "maxFinancing": 80,
  "isLandLease": true,
  "buildingName": "Liberty House",
  "buildingYearBuilt": 1985,
  "buildingFloorCount": 27,
  "buildingUnitCount": 238,
  "priceHistory": [
    {"date": "2026-07-16", "price": 670000, "description": "Price decreased by 3%"},
    {"date": "2026-06-27", "price": 690000, "description": "Listed by Compass"},
    {"date": "2012-01-12", "price": 475000, "description": "Nest Seekers International Listing sold"},
    {"date": "1996-08-23", "price": 125000, "description": "Previous Sale recorded"}
  ],
  "openHouses": [{"starts_at": "2026-07-29T12:00:00-04:00", "ends_at": "2026-07-29T13:00:00-04:00", "is_by_appointment_only": true}],
  "comparableListings": [{"id": "1788958", "listed_price": 575000}, {"id": "1792304", "listed_price": 680000}]
}
```

#### Core Fields

| Field | Type | Description |
|-------|------|-------------|
| `id` | string | Listing ID |
| `listingType` | string | `rental` or `sale` |
| `url` | string | Listing URL |
| `title` | string | Listing title |
| `propertyType` | string | Condo, Co-op, House, Rental Unit, Townhouse, Multi-family |
| `status` | string | Active, In contract, Sold, Closed, Delisted, and 7 more |
| `bedrooms` | number | Bedrooms (`0` = studio) |
| `bedroomsDescription` | string | Bedrooms (text) |
| `bathrooms` | number | Bathrooms |
| `halfBathrooms` | number | Half bathrooms |
| `bathroomsDescription` | string | Bathrooms (text) |
| `sizeSqft` | number | Interior size (sq ft) |
| `daysOnMarket` | number | Days on market |
| `description` | string | Full listing description |
| `isFurnished` | boolean | Furnished |
| `petPolicy` | string | Pet policy |
| `amenities` | array | Unit and building amenities |
| `buildingAmenities` | array | Building amenities |
| `outdoorSpace` | array | Balcony, patio, terrace, roof deck |
| `buildingType` | string | Building type |
| `buildingYearBuilt` | number | Year built |
| `buildingIsPreWar` | boolean | Pre-war |
| `buildingFloorCount` | number | Floors in building |
| `buildingUnitCount` | number | Units in building |
| `buildingIsNewDevelopment` | boolean | New development |

#### Price & Value

| Field | Type | Description |
|-------|------|-------------|
| `price` | number | Asking price or monthly rent |
| `pricePerSqft` | number | Price per sq ft (sales) |
| `isNoFee` | boolean | No broker fee (rentals) |
| `saleType` | string | Resale, new development, sponsor unit |
| `lastPriceChangeAmount` | number | Last price change ($) |
| `lastPriceChangeDate` | string | Last price change date |
| `priceHistory` | array | Every price event with date and description |
| `maintenance` | number | Monthly maintenance / common charges |
| `taxes` | number | Monthly taxes |
| `estimatedMonthlyPayment` | number | Estimated monthly payment |
| `maxFinancing` | number | Max financing (%) |
| `rentalFees` | array | Itemised rental fees |
| `freeMonths` | number | Free months |
| `leaseTerm` | number | Lease term (months) |

#### Location

| Field | Type | Description |
|-------|------|-------------|
| `address` | string | Street address |
| `unit` | string | Unit number |
| `city` | string | City |
| `state` | string | State |
| `zipCode` | string | ZIP code |
| `latitude` | number | Latitude |
| `longitude` | number | Longitude |
| `neighborhood` | string | Neighborhood |
| `neighborhoodSlug` | string | Neighborhood slug |
| `borough` | string | Borough |
| `buildingName` | string | Building name |
| `nearbySubways` | array | Stations with line, routes and distance |
| `nearbySchools` | array | Zoned schools with district and grades |

#### Contacts & Media

| Field | Type | Description |
|-------|------|-------------|
| `brokerageName` | string | Brokerage |
| `contacts` | array | Every listing contact |
| `agentName` | string | Agent |
| `agentEmail` | string | Agent email |
| `agentPhone` | string | Agent phone |
| `agentPhoneAlt` | string | Agent phone (alt) |
| `agentProfileUrl` | string | Agent profile URL |
| `heroPhotoUrl` | string | Main photo |
| `thumbnailUrl` | string | Thumbnail |
| `photos` | array | Up to 30 photo URLs |
| `floorplans` | array | Floor plan URLs |
| `videoUrls` | array | Video URLs |
| `tour3dUrl` | string | 3D tour URL |

#### Dates & Identifiers

| Field | Type | Description |
|-------|------|-------------|
| `listedAt` | string | Listed at |
| `availableAt` | string | Available from |
| `updatedAt` | string | Last updated |
| `areaId` | string | StreetEasy area ID |
| `openHouses` | array | Open house times |
| `comparableListings` | array | Five StreetEasy comps |
| `buildingUrl` | string | Building page URL |
| `buildingId` | string | Building ID |
| `managementCompanyProfileUrl` | string | Management company profile URL |
| `isLandLease` | boolean | Land lease |

### Tips for Best Results

- **Plan around the 4,270-per-search ceiling** — StreetEasy pages through at most 43 pages of 100 listings for any single location and category, however many match. Brooklyn rentals sit right on that line and Manhattan is well past it. Split a big borough into neighborhoods (`Williamsburg`, `Park Slope`, `Bed-Stuy`, …), list each one separately, and let the run de-duplicate across them.
- **Give it a place, not a filtered search** — the location is what carries across; price, bedroom and amenity filters set on the website are not read back out of a pasted address. Collect the neighborhood in full and filter the dataset afterwards — every value you would have filtered on is its own field.
- **Turn on `enrichDetails` for anything contact-, photo- or history-related** — agent email and direct phone, all 30 photos, floor plans, full price history, amenities, nearby subways and schools, open houses and comparable listings only arrive with it on. It adds 37 fields to the same row rather than creating a second record you have to join.
- **`both` doubles the searches, not the ceiling** — each location runs one rental search and one sale search, and `maxItems` applies to each. Two neighborhoods with `listingType: "both"` is four searches and up to `2 × 2 × maxItems` rows.
- **Read a missing `sizeSqft` as a market fact, not a gap** — NYC rental listings mostly do not publish square footage while sale listings usually do, so how often the field is filled tracks the rental/sale mix you asked for. The same is true of `unit` (a house or townhouse has no unit number) and `floorplans` (a brokerage habit that varies sharply between boroughs and between rentals and sales).
- **A published `0` means "not disclosed", and you get `null` instead** — square footage, maintenance, monthly taxes, max financing and last price change all arrive as a literal zero when the figure was withheld. Nearly half of a 600-listing sample had a zero square footage; averaging the raw numbers would put a 0 sq ft apartment on half your rows.
- **Diff on `updatedAt` to watch a market** — schedule a run, compare against yesterday's dataset, and you surface new and re-priced inventory instead of reprocessing a whole borough every time.

### Pricing

**From $1.00 per 1,000 results** (search only) or **from $2.50 per 1,000 results** (with full
details).

| Results | Search Only | With Full Details |
|---------|-------------|-------------------|
| 100 | $0.10 | $0.25 |
| 1,000 | $1.00 | $2.50 |
| 10,000 | $10.00 | $25.00 |
| 100,000 | $100.00 | $250.00 |

Those are the rates on Gold and above. Higher-volume plans pay less per result:

| Your Apify plan | Search Only | With Full Details |
|-----------------|-------------|-------------------|
| No discount | $1.20 | $3.00 |
| Bronze | $1.15 | $2.85 |
| Silver | $1.05 | $2.65 |
| **Gold and above** | **$1.00** | **$2.50** |

Per 1,000 results.

A "result" is any listing row in the output dataset. The full-details rate applies to every row on a run with `enrichDetails` turned on. When you search several locations at once, a listing matching more than one of them is de-duplicated before it reaches the dataset, so you are never charged twice for the same listing. Platform fees (compute, storage) are additional and depend on your Apify plan.

### Integrations

Export data in JSON, CSV, Excel, XML, or RSS. Connect to 1,500+ apps via:

- **Zapier** / **Make** / **n8n** — Workflow automation
- **Google Sheets** — Direct spreadsheet export
- **Slack** / **Email** — Notifications when new listings match
- **Webhooks** — Trigger custom APIs on run completion
- **Apify API** — Full programmatic access

### Legal & Ethical Use

**This is an unofficial scraper. It is not affiliated with, endorsed by, or connected to StreetEasy, Zillow Group, or their operators in any way.** All trademarks belong to their respective owners.

This actor is intended for legitimate market research, real-estate analytics, and brokerage intelligence. You are responsible for complying with applicable laws and with StreetEasy's Terms of Service.

Listings include agent and brokerage contact details. Treat them as personal data: do not use names, email addresses or phone numbers for spam, harassment, or any unlawful purpose, and follow applicable privacy rules when storing or processing them. Housing listings are also subject to fair-housing rules — do not use this data to discriminate in the sale, rental, or financing of housing.

# Actor input Schema

## `searchUrls` (type: `array`):

Neighborhoods or boroughs to search. Type a borough name (Brooklyn, Manhattan, Queens), paste a streeteasy.com search link, or leave this empty to search Brooklyn. Add more than one to cover several areas in one run.

## `listingType` (type: `string`):

Which kind of listings to collect for each location above.

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

Maximum listings per location searched (0 = collect everything each search returns). StreetEasy pages through at most 4,270 listings per search, so use several narrower locations to collect more.

## `enrichDetails` (type: `boolean`):

Add 37 extra fields to every listing: building info, price history, amenities, nearby subways and schools, every listing photo and floor plan, video and 3D tour links, open houses, comparable listings, and every listing contact. This widens the same request rather than adding a second one, and is billed at the higher rate.

## `concurrency` (type: `integer`):

How many requests to run in parallel. Lower this if you see failures.

## `proxyConfiguration` (type: `object`):

Proxy settings for the run.

## Actor input object example

```json
{
  "searchUrls": [
    "Brooklyn"
  ],
  "listingType": "both",
  "maxItems": 100,
  "enrichDetails": false,
  "concurrency": 8,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

## `core` (type: `string`):

Core Fields for each listing.

## `financial` (type: `string`):

Price & Value for each listing.

## `location` (type: `string`):

Location for each listing.

## `contact` (type: `string`):

Contacts for each listing.

## `media` (type: `string`):

Media for each listing.

## `meta` (type: `string`):

Details & Timestamps for each listing.

# 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 = {
    "searchUrls": [
        "Brooklyn"
    ],
    "listingType": "both",
    "enrichDetails": false
};

// Run the Actor and wait for it to finish
const run = await client.actor("solidcode/streeteasy-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 = {
    "searchUrls": ["Brooklyn"],
    "listingType": "both",
    "enrichDetails": False,
}

# Run the Actor and wait for it to finish
run = client.actor("solidcode/streeteasy-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 '{
  "searchUrls": [
    "Brooklyn"
  ],
  "listingType": "both",
  "enrichDetails": false
}' |
apify call solidcode/streeteasy-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/acts/TTv8E8ckMxpRO9Fbe/builds/JJFD2MStdixerAyQi/openapi.json
