Microburbs Suburb - Street Forecasts API

Street-level price forecasts.

Operations 1

GET /v1/suburbs/{suburb_name}/street-forecasts Street-level price forecasts #

Documentation

Specifications

Other Resources

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/microburbs-suburb-street-forecasts-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

microburbs-suburb-street-forecasts-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: Microburbs Property Data Suburb - Street Forecasts API
  summary: Suburb and property data for every Australian locality.
  description: '**One REST API for demographics, market indicators, risk scores, AVM and

    ranking — backed by 25+ years of Australian transactions and census data.**


    ```bash

    curl ''https://api.microburbs.com.au/v1/properties/GANSW704074813/profile'' \

    -H ''Authorization: Bearer test''

    ```


    ## Why Microburbs


    - **Data depth** — Demographics, lifestyle, risk, market, AVM and growth forecasts — all keyed to the same national suburb and property graph.'
  version: 1.0.0
servers:
- url: https://api.microburbs.com.au
  description: Production
security:
- BearerAuth: []
tags:
- name: Suburb - Street Forecasts
  description: Street-level price forecasts.
paths:
  /v1/suburbs/{suburb_name}/street-forecasts:
    get:
      tags:
      - Suburb - Street Forecasts
      summary: Street-level price forecasts
      description: '2/4/8-year price forecasts for every street in the suburb, anchored to the real sold median.


        Unpaged by default. Large suburbs are large — Point Cook has 943 streets

        (~1.4 MB) — so pass `limit`/`offset` when you don''t need the lot. `total`

        reports how many exist. Flat price per call regardless of page size.


        **Exact suburb identifier required.** Exact ABS Suburb and Locality (SAL) name, e.g. `Burwood (NSW)` — many suburbs carry a state suffix. If starting from free text or an unverified bare name, first call `GET /v1/geocode/suburb?q=`, then use the exact `data[].area_name` it returns. Suburb data endpoints do not guess a state or typo-correct names.


        **Price: 60¢ per call.**'
      operationId: get_suburb_street_forecasts_v1_suburbs__suburb_name__street_forecasts_get
      parameters:
      - name: suburb_name
        in: path
        required: true
        schema:
          type: string
          title: Suburb Name
          example: Belmont North
        description: Exact ABS Suburb and Locality (SAL) name, e.g. `Burwood (NSW)` — many suburbs carry a state suffix. If starting from free text or an unverified bare name, first call `GET /v1/geocode/suburb?q=<text>`, then use the exact `data[].area_name` it returns. Suburb data endpoints do not guess a state or typo-correct names.
        example: Belmont North
      - name: limit
        in: query
        required: false
        schema:
          anyOf:
          - type: integer
            minimum: 1
          - type: 'null'
          description: 'Streets to return (default: all).'
          title: Limit
        description: 'Streets to return (default: all).'
      - name: offset
        in: query
        required: false
        schema:
          type: integer
          minimum: 0
          description: Street offset — page with `limit`.
          default: 0
          title: Offset
        description: Street offset — page with `limit`.
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiResponse_StreetForecasts_'
              example:
                data:
                  area_level: suburb
                  area_name: Belmont North
                  metric: street_price_forecasts
                  streets:
                  - annual_2y: 8.0
                    annual_4y: 6.3
                    annual_8y: 5.0
                    current_price: 1159000.0
                    history:
                    - price: 1038603.34
                      suburb_med: 866399
                      year: 2024
                    - price: 1083975.34
                      suburb_med: 948908
                      year: 2025
                    - price: 1159000.0
                      suburb_med: 1040068
                      year: 2026
                    houses_on_street: 146
                    median_house_rent_week: 791.2
                    n_sales: 289
                    rental_turnover: Every 5.9 years (quite tightly held)
                    renters_pct: 18%
                    sale_turnover: Every 12.0 years (average turnover)
                    street: Wommara Ave
                    target_2y: 1352652.97
                    target_4y: 1480849.45
                    target_8y: 1718217.61
                    units_on_street: 4
          headers:
            X-Cost-Cents:
              description: Exact cents billed for this call.
              required: true
              schema:
                type: integer
                minimum: 0
            X-Spent-Cents:
              description: Cumulative cents Autumn reports used for this prepaid wallet.
              required: true
              schema:
                type: integer
                minimum: 0
            X-Remaining-Cents:
              description: Spendable prepaid credit left after this call.
              required: true
              schema:
                type: integer
                minimum: 0
            X-Period-End:
              description: Start of the next UTC calendar month. Prepaid credit does not expire at this timestamp.
              required: true
              schema:
                type: string
                format: date-time
            X-Balance-Cents:
              description: Compatibility alias of X-Remaining-Cents.
              required: true
              schema:
                type: integer
                minimum: 0
            X-Rate-Card-Version:
              description: Version of the endpoint rate card used for this call.
              required: true
              schema:
                type: integer
                minimum: 1
            X-Request-Id:
              description: Request identifier to quote in support requests.
              required: true
              schema:
                type: string
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
              example:
                detail:
                - type: missing
                  loc:
                  - query
                  - address
                  msg: Field required
                  input: null
      x-price-cents: 60
components:
  schemas:
    HTTPValidationError:
      properties:
        detail:
          items:
            $ref: '#/components/schemas/ValidationError'
          type: array
          title: Detail
      type: object
      title: HTTPValidationError
    StreetForecasts:
      properties:
        area_name:
          type: string
          title: Area Name
          description: Suburb these streets belong to, as the canonical ABS SAL name — the resolved form of whatever suburb was requested, so echo this back rather than the caller's input.
        area_level:
          type: string
          title: Area Level
          description: Geographic level of `area_name`. Always 'suburb' here; present so responses across the area endpoints share one shape.
        metric:
          type: string
          title: Metric
          description: Identifies which dataset this payload is, for callers routing several area responses through common code. Always 'street_price_forecasts'.
        total:
          type: integer
          title: Total
          description: How many forecastable streets the suburb has in all — counted before `limit`/`offset` are applied, so it is the figure to page against and will exceed `len(streets)` on a paged request. Streets with no sold median are already excluded, so this is usually fewer than the suburb's true street count.
        streets:
          items:
            $ref: '#/components/schemas/StreetForecastRow'
          type: array
          title: Streets
          description: One entry per forecastable street. Order is the stored order — stable between calls (so `offset` paging is safe) but not sorted by price, growth or name; sort client-side if you need a ranking.
      additionalProperties: true
      type: object
      required:
      - area_name
      - area_level
      - metric
      - total
      - streets
      title: StreetForecasts
      description: 'Projected house-price paths for the streets of one suburb, 2, 4 and

        8 years out.


        Two suburbs can share a median and still be made of streets that behave

        very differently; this endpoint is the street-by-street breakdown behind

        the suburb-level number. Each row gives a street''s current median, where

        the model expects it in 2/4/8 years (in dollars and as a per-year growth

        rate), the year-by-year path it took to get here, and a little context

        about the street itself — size, rent, how often it turns over.


        Coverage is deliberately partial: a street only appears if there is a

        real sold median to anchor it to, so `streets` is a subset of the

        suburb''s streets, and `total` counts only those.'
      example:
        area_level: suburb
        area_name: Belmont North
        metric: street_price_forecasts
        streets:
        - annual_2y: 8.0
          annual_4y: 6.3
          annual_8y: 5.0
          current_price: 1159000.0
          history:
          - price: 1038603.34
            suburb_med: 866399
            year: 2024
          - price: 1083975.34
            suburb_med: 948908
            year: 2025
          - price: 1159000.0
            suburb_med: 1040068
            year: 2026
          houses_on_street: 146
          median_house_rent_week: 791.2
          n_sales: 289
          rental_turnover: Every 5.9 years (quite tightly held)
          renters_pct: 18%
          sale_turnover: Every 12.0 years (average turnover)
          street: Wommara Ave
          target_2y: 1352652.97
          target_4y: 1480849.45
          target_8y: 1718217.61
          units_on_street: 4
    ApiResponse_StreetForecasts_:
      properties:
        data:
          anyOf:
          - $ref: '#/components/schemas/StreetForecasts'
          - type: 'null'
          description: The endpoint's payload, or `null` when Microburbs has no value.
        available:
          anyOf:
          - type: boolean
          - type: 'null'
          title: Available
          description: '`false` on no-data responses. Omitted on success — branch on `data !== null` if you want a single discriminator.'
        reason:
          anyOf:
          - type: string
          - type: 'null'
          title: Reason
          description: Machine-readable slug naming the no-data condition (e.g. `no_avm_for_GANSW704074813`). Stable per endpoint. Omitted on success.
        message:
          anyOf:
          - type: string
          - type: 'null'
          title: Message
          description: Human-readable explanation. Omitted on success.
      type: object
      title: ApiResponse[StreetForecasts]
    ValidationError:
      properties:
        loc:
          items:
            anyOf:
            - type: string
            - type: integer
          type: array
          title: Location
        msg:
          type: string
          title: Message
        type:
          type: string
          title: Error Type
        input:
          title: Input
        ctx:
          type: object
          title: Context
      type: object
      required:
      - loc
      - msg
      - type
      title: ValidationError
    app__schemas__suburb_street_forecasts__StreetHistoryPoint:
      properties:
        year:
          type: integer
          title: Year
          description: Calendar year the two prices below refer to.
        price:
          anyOf:
          - type: number
          - type: 'null'
          title: Price
          description: Modelled median house price for this street in `year`, in AUD. Not an observed median — the street model's yearly level, rescaled by the same `current_price / model_estimate` factor applied to the targets, so the final year of `history` equals `current_price` and the chart line lands on the headline figure. Null when the model has no level for that year.
        suburb_med:
          anyOf:
          - type: number
          - type: 'null'
          title: Suburb Med
          description: 'Median house price for the whole suburb in `year`, in AUD. A context baseline only: it is the suburb''s own observed median and is NOT rescaled, so it is on a different footing from `price`. Use it to judge relative direction (street outpacing the suburb or not), not to compute a precise street-vs-suburb premium.'
      additionalProperties: true
      type: object
      required:
      - year
      title: StreetHistoryPoint
      description: 'One year of the street''s modelled price history, with the suburb

        median alongside it as a baseline.


        Two series, two different things. `price` is *this street* — a

        modelled house-price level, because most streets do not sell enough

        houses in a year to have a real median of their own. `suburb_med` is

        the whole suburb''s median for the same year, included so you can see

        whether the street ran ahead of or behind its suburb. Compare the two

        as a *shape* over time, not as a like-for-like pair of medians.'
      example:
        price: 970000.0
        suburb_med: 1040068
        year: 2026
    StreetForecastRow:
      properties:
        street:
          type: string
          title: Street
          description: Street name as stored, e.g. 'Wommara Ave'. May be a shortened form of the full name (leading words only), so match it loosely rather than as an exact address component.
        current_price:
          type: number
          title: Current Price
          description: The street's current median house price in AUD, and the base every `target_*` and `annual_*` figure below is measured from. This is an observed sold median — what houses on the street actually sold for — not the forecast model's own estimate of present value. Streets with no sold-median on record are dropped from `streets` entirely rather than falling back to a model estimate, so this field is never a guess and never null.
        n_sales:
          type: integer
          title: N Sales
          description: Count of sales the street's price model was fitted on. Read it as a confidence weight — a street with a handful of sales behind it has a much softer forecast than one with hundreds — rather than as sales in any particular period.
        target_2y:
          anyOf:
          - type: number
          - type: 'null'
          title: Target 2Y
          description: 'Projected median house price for this street two years from now, in AUD. A price level, not a change and not a multiplier: compare it directly against `current_price` to see the implied gain. Two years runs from the latest year in `history` (which equals today''s `current_price`). Null when the model produced no 2-year figure.'
        annual_2y:
          anyOf:
          - type: number
          - type: 'null'
          title: Annual 2Y
          description: The `target_2y` projection expressed as a compound annual growth rate, in percent per year — `8.0` means 8% a year (a decimal fraction like 0.08 is not what this field carries), compounding to roughly 16.6% in total over the two years. Same growth as `target_2y`, stated per-annum.
        target_4y:
          anyOf:
          - type: number
          - type: 'null'
          title: Target 4Y
          description: Projected median house price for this street four years from now, in AUD — same basis as `target_2y`, longer horizon. Cumulative from today, so it includes the two years `target_2y` covers.
        annual_4y:
          anyOf:
          - type: number
          - type: 'null'
          title: Annual 4Y
          description: 'The `target_4y` projection as a compound annual growth rate, in percent per year, averaged across all four years (not the growth in years 3–4 alone). Typically lower than `annual_2y`: near-term momentum is assumed to fade toward a long-run rate.'
        target_8y:
          anyOf:
          - type: number
          - type: 'null'
          title: Target 8Y
          description: Projected median house price for this street eight years from now, in AUD — same basis as `target_2y`. The longest horizon offered and correspondingly the least certain.
        annual_8y:
          anyOf:
          - type: number
          - type: 'null'
          title: Annual 8Y
          description: The `target_8y` projection as a compound annual growth rate, in percent per year, averaged across all eight years. This is the closest thing here to the street's long-run trend rate.
        history:
          items:
            $ref: '#/components/schemas/app__schemas__suburb_street_forecasts__StreetHistoryPoint'
          type: array
          title: History
          description: 'Where the street has come from: one entry per year, oldest first, each pairing the street''s modelled price with the suburb median for that year. The final entry is the present and its `price` equals `current_price`, so `history` and the `target_*` fields join into one continuous line through today.'
        houses_on_street:
          anyOf:
          - type: integer
          - type: 'null'
          title: Houses On Street
          description: Number of separate houses on the street — the size of the pool the median and turnover figures describe. A street with a dozen houses will have noisier numbers than one with two hundred.
        units_on_street:
          anyOf:
          - type: integer
          - type: 'null'
          title: Units On Street
          description: Number of units/apartments on the street. Note that the price fields in this row are house prices; a high unit count tells you the street's character but does not feed the forecast.
        median_house_rent_week:
          anyOf:
          - type: number
          - type: 'null'
          title: Median House Rent Week
          description: Median advertised rent for a house on this street in AUD per week (Australian convention) — multiply by 52 for an annual figure. Houses only, and independent of the price forecast.
        sale_turnover:
          anyOf:
          - type: string
          - type: 'null'
          title: Sale Turnover
          description: 'How often a typical house on the street changes hands, already written out for display — e.g. ''Every 12.0 years (average turnover)''. A sentence, not a number: the interval and its plain-language reading (tightly held vs. average vs. frequently traded) are baked into the one string. Parse it only if you must; the wording is not a stable enum.'
        rental_turnover:
          anyOf:
          - type: string
          - type: 'null'
          title: Rental Turnover
          description: The same idea for tenancies rather than sales — how often rentals on the street turn over, as display text, e.g. 'Every 5.9 years (quite tightly held)'. A long interval suggests tenants who stay.
        renters_pct:
          anyOf:
          - type: string
          - type: 'null'
          title: Renters Pct
          description: Share of dwellings on the street occupied by renters rather than owners, as a preformatted string including the '%' sign (e.g. '18%') — not a number, and not a fraction. Strip the sign before doing arithmetic with it.
      additionalProperties: true
      type: object
      required:
      - street
      - current_price
      - n_sales
      - history
      title: StreetForecastRow
      description: 'Projected house-price path for one street in the suburb.


        **How to read a row.** `current_price` is where the street is today

        (an observed sold median). The three `target_*` fields are that same

        quantity projected 2, 4 and 8 years out, in dollars. The three

        `annual_*` fields are the same three projections expressed as a

        compound annual growth rate in percent — they are a restatement of

        the targets, not extra information, so

        `target_2y ≈ current_price × (1 + annual_2y/100) ** 2` (8.0 in

        `annual_2y` means 8% a year, not 0.08 and not 8% in total). The

        horizons are cumulative from today, so `annual_4y` covers years 1–4

        including the years `annual_2y` already covered; they are three views

        of one path, not three consecutive segments.


        **Everything in dollars is anchored to the real sold median.** The

        forecast model carries its own estimate of what a street is worth

        today, and on tightly-held high-end streets that estimate can sit far

        below the price houses actually change hands at. So every dollar

        figure in this row — `current_price`, the targets, and

        `history[].price` — is rescaled by one factor per street

        (`sold median ÷ model estimate`), which leaves the growth *shape*

        exactly as the model produced it while putting the levels on the real

        price scale. The percentages are untouched by that rescale, because

        a ratio cancels it out.'
      example:
        annual_2y: 8.0
        annual_4y: 6.3
        annual_8y: 5.0
        current_price: 1159000.0
        history:
        - price: 1038603.34
          suburb_med: 866399
          year: 2024
        - price: 1083975.34
          suburb_med: 948908
          year: 2025
        - price: 1159000.0
          suburb_med: 1040068
          year: 2026
        houses_on_street: 146
        median_house_rent_week: 791.2
        n_sales: 289
        rental_turnover: Every 5.9 years (quite tightly held)
        renters_pct: 18%
        sale_turnover: Every 12.0 years (average turnover)
        street: Wommara Ave
        target_2y: 1352652.97
        target_4y: 1480849.45
        target_8y: 1718217.61
        units_on_street: 4
  securitySchemes:
    BearerAuth:
      type: http
      scheme: bearer
      description: API key as Bearer token. Use `test` for the public sandbox (works only for GNAFs GANSW704074813, GAACT714845944, GAVIC419929404, GAQLD162849753, GAWA_146662014, GASA_422266490, GATAS702292990, GANT_703835649 and SALs 'Belmont North', 'Bondi', 'St Kilda (Vic.)', 'Fortitude Valley', 'Subiaco', 'Unley', 'Sandy Bay', 'Kambah', 'Nightcliff', always 0¢). Mint your own at /developers/keys for full access.
x-tagGroups:
- name: Suburb
  tags:
  - Suburb - Hero
  - Suburb - Profile
  - Suburb - Market
  - Suburb - Forecast
  - Suburb - Listings
  - Suburb - Sales
  - Suburb - Street Forecasts
  - Suburb - Demographics
  - Suburb - Ethnicity
  - Suburb - Development
  - Suburb - Schools
  - Suburb - Risks
  - Suburb - Crime
  - Suburb - Lifestyle
  - Suburb - Similar
  - Suburb - Shapes
- name: Finders
  tags:
  - Suburb - Finder
- name: Property
  tags:
  - Property - Profile
  - Property - Basics
  - Property - Valuation
  - Property - History
  - Property - Title
  - Property - Comparables
  - Property - Development
  - Property - Schools
  - Property - Amenities
  - Property - Risks
  - Property - Surroundings
  - Property - Context
- name: Area Statistics
  tags:
  - Area Statistics
- name: Mesh Block
  tags:
  - Mesh Block - Profile
- name: LGA
  tags:
  - LGA - Profile
- name: SA4
  tags:
  - SA4 - Profile
- name: Geocode
  tags:
  - Geocode
- name: Account
  tags:
  - Account