Broadband Plans API

A free, open JSON feed of every active NBN and broadband plan we track in Australia , provider, technology, typical evening speed, price, intro offers, data, contract and setup. No sign-up, no key. Use it in your own apps, comparisons or research.

All we ask: show a visible, do-follow link back to Oz Broadband Review wherever the data appears. Grab the snippet below.

Attribution (required)

Paste this somewhere visible near the data. It must stay do-follow (don’t add rel="nofollow"):

Renders as: Broadband plan data by Oz Broadband Review  —  a normal do-follow link.

Endpoint

GET
https://www.ozbroadbandreview.com/api/plans.php

Returns JSON: a meta object (source, attribution, disclaimer, count) and a plans array. CORS is open, so you can call it straight from the browser.

Parameters (all optional)

ParameterTypeExampleDescription
technologystringNBNAccess technology: NBN, ADSL2, Wireless, Cable, Satellite, Fibre
providerslugaussiebroadbandSingle provider (slug as shown in review_url)
typestringResidentialResidential or Business
max_pricenumber70Maximum monthly cost (AUD)
min_speednumber50Minimum typical evening speed (Mbps)
limitinteger500Max rows returned (default & cap: 1000)

Sample queries

Code samples

cURL
curl "https://www.ozbroadbandreview.com/api/plans.php?technology=NBN&max_price=70"
JavaScript
const res = await fetch(
  'https://www.ozbroadbandreview.com/api/plans.php?min_speed=100'
);
const data = await res.json();
console.log(data.meta.count + ' plans');
data.plans.forEach(p =>
  console.log(p.provider, p.plan_name, p.monthly_cost_aud)
);
Python
import requests

r = requests.get(
    "https://www.ozbroadbandreview.com/api/plans.php",
    params={"technology": "NBN", "max_price": 70},
)
data = r.json()
for p in data["plans"]:
    print(p["provider"], p["plan_name"], p["monthly_cost_aud"])
PHP
<?php
$json = file_get_contents(
    'https://www.ozbroadbandreview.com/api/plans.php?provider=superloop'
);
$data = json_decode($json, true);
foreach ($data['plans'] as $p) {
    echo $p['provider'].' '.$p['plan_name'].' $'.$p['monthly_cost_aud']."\n";
}

Example response

JSON (trimmed)
{
  "meta": {
    "source": "Oz Broadband Review",
    "source_url": "https://www.ozbroadbandreview.com/",
    "attribution": {
      "required": true,
      "text": "Plan data provided by Oz Broadband Review",
      "link_html": "<a href=\"https://www.ozbroadbandreview.com/\" rel=\"dofollow\">Oz Broadband Review</a>",
      "terms": "Free to use. In exchange, you must display a visible, do-follow link back..."
    },
    "disclaimer": "Plan data is checked roughly weekly but may be out of date...",
    "license": "Free for any use with attribution (do-follow link back). No warranty.",
    "generated_at": "2026-06-01T09:00:00+00:00",
    "count": 236,
    "docs": "https://www.ozbroadbandreview.com/all-plans.php"
  },
  "plans": [
    {
      "provider": "Superloop",
      "provider_slug": "superloop",
      "plan_name": "Superloop NBN 100/20",
      "technology": "NBN",
      "sub_technology": "Fixed Line",
      "speed_mbps": 100,
      "monthly_cost_aud": 79,
      "intro_cost_aud": 69,
      "intro_months": 6,
      "data": "Unlimited",
      "contract_months": 0,
      "setup_fee_aud": 0,
      "type": "Residential",
      "last_updated": "2026-05-28",
      "review_url": "https://www.ozbroadbandreview.com/company/superloop"
    }
  ]
}

Rate limits & fair use

Light limit of 300 requests per hour per IP (returns 429 with X-RateLimit-* headers when exceeded). The full dataset is ~236 plans in one call, so cache it your end rather than polling, refreshing daily is plenty.

Accuracy: we check and update plan data roughly weekly, but prices and plans change constantly and errors happen. Always confirm details with the provider before relying on them. Data is supplied as-is, with no warranty.

← Browse all plans in a table  ·  See our top NBN picks