Bulk Billing Rose After November 2025. Did GP Access Improve?

medicare
bulk-billing
health-policy
australia
Billing changed sharply after the November 2025 GP incentives, especially for working-age adults. The evidence for more care is much weaker.
Author

Aydin

Published

May 28, 2026

Modified

October 20, 2026

NoteExecutive summary
  • Australia’s GP bulk-billing rate rose from 78.8% to 83.6% in the year to June 2026.
  • For 16–64-year-olds it rose from 70.3% to 78.3%, while reconstructed visit volumes were 0.1% higher across January–June.
  • Across all ages, 3.5 million more GP services were bulk billed and recorded patient contributions were $92.5m lower across the first six months of 2026 than a year earlier.

The policy period produced a clear change in how GP care was billed. The evidence for a matching change in how much care people received is much weaker.

The comparisons below start in 2023, after the acute COVID-era disruption. January–June 2026 provides the consistent six-month post-policy window used for the year-on-year access and cost comparisons; December 2025 is excluded from the quarterly area model as a transition quarter. Methods, caveats, detailed tables and the source audit are in the expandable appendix.

1. National bulk-billing rates rose from 78.8% to 83.6%

The national service-level rate rose 4.8 percentage points in the year to June 2026. The break is visible immediately after the 1 November 2025 incentive changes.

Code
ggplot(national_monthly, aes(month, bulk_billing_rate)) +
  annotate("rect", xmin = as.Date("2026-04-01"), xmax = as.Date("2026-07-01"), ymin = -Inf, ymax = Inf, fill = "grey80", alpha = 0.35) +
  geom_vline(xintercept = policy_date, colour = "#B8472D", linewidth = 0.8) +
  geom_line(colour = "#245A73", linewidth = 1) +
  geom_point(data = filter(national_monthly, month == latest_expected_month), colour = "#245A73", size = 2.8) +
  annotate("text", x = policy_date, y = 0.765, label = "1 Nov 2025\nchanges begin", hjust = 1.05, vjust = 0, colour = "#8F3522", size = 3.4) +
  annotate("text", x = latest_expected_month, y = latest_rate, label = percent(latest_rate, accuracy = 0.1), hjust = -0.15, vjust = -0.5, colour = "#245A73", fontface = "bold") +
  scale_x_date(date_breaks = "6 months", date_labels = "%b\n%Y", expand = expansion(mult = c(0.01, 0.08))) +
  scale_y_continuous(labels = percent_format(accuracy = 1), limits = c(0.74, 0.86)) +
  labs(
    title = paste0(
      "National bulk-billing rate rose from ", percent(june_2025_rate, accuracy = 0.1),
      " to ", percent(latest_rate, accuracy = 0.1)
    ),
    subtitle = "Monthly share of claimed GP attendances bulk billed, Australia",
    x = NULL, y = NULL
  )
Line chart of Australia's monthly GP bulk-billing rate from January 2023 to June 2026. The rate rises sharply after the November 2025 policy line, from 78.8 per cent in June 2025 to 83.6 per cent in June 2026. April to June 2026 are shaded as preliminary.
Figure 1: Source: AIHW monthly GP bulk-billing data. The final three months are preliminary.

A descriptive interrupted time-series model, controlling for the 2023–26 trend and calendar month, estimates an immediate 3.6-percentage-point step (HAC 95% interval 2.9 to 4.3). There are only eight post-policy monthly observations. The estimate marks a break in timing; it is not proof that the policy was the only cause.

2. Bulk billing for ages 16–64 rose from 70.3% to 78.3%

The age pattern is the cleanest sign that the expansion reached its target group. The rate for 16–64-year-olds rose 8.0 percentage points; the changes for children and people aged 65 and over were much smaller.

Code
age_change |>
  mutate(group = factor(group, levels = c("65+", "0-15", "16-64")), emphasis = group == "16-64") |>
  ggplot(aes(change_pp, group)) +
  geom_segment(aes(x = 0, xend = change_pp, yend = group), colour = "grey75", linewidth = 1.2) +
  geom_point(aes(colour = emphasis), size = 4, show.legend = FALSE) +
  geom_text(aes(label = paste0(number(change_pp, accuracy = 0.1), " pp")), hjust = -0.2, fontface = "bold", size = 3.8) +
  scale_colour_manual(values = c(`FALSE` = "#77838D", `TRUE` = "#B8472D")) +
  scale_x_continuous(limits = c(0, 9), breaks = seq(0, 8, 2), expand = expansion(mult = c(0, 0.03))) +
  labs(
    title = paste0(
      "Bulk billing for ages 16-64 rose from ",
      percent(working_age_rates$rate_2025_06_01, accuracy = 0.1), " to ",
      percent(working_age_rates$rate_2026_06_01, accuracy = 0.1)
    ),
    subtitle = "Change in GP bulk-billing rate, June 2025 to June 2026",
    x = "Percentage-point change", y = NULL
  )
Horizontal dot plot of the June 2025 to June 2026 change in GP bulk-billing rates by age. Ages 16 to 64 increased by 8.0 percentage points, compared with 1.0 point for ages 0 to 15 and 1.4 points for ages 65 and over.
Figure 2: Source: AIHW monthly GP bulk-billing data. June 2026 is preliminary. Changes are percentage points.

From here, the age-specific analysis focuses on 16–64-year-olds. Children and older Australians were already covered by earlier bulk-billing incentives. The 16–64 band is still broader than the newly eligible population because it includes concession-card holders who were already eligible.

3. The rise was nationwide and smallest in the most advantaged areas

Among 16–64-year-olds, the bulk-billing rate rose in every state and territory. The increase ranged from 3.6 percentage points in the ACT to 17.9 points in the Northern Territory.

Code
state_working_age_rates |>
  mutate(state = reorder(state, change_pp)) |>
  ggplot(aes(y = state)) +
  geom_segment(aes(x = rate_2025_06_01, xend = rate_2026_06_01, yend = state), colour = "grey72", linewidth = 1.5) +
  geom_point(aes(x = rate_2025_06_01), colour = "#77838D", size = 3) +
  geom_point(aes(x = rate_2026_06_01), colour = "#B8472D", size = 3.5) +
  geom_text(aes(x = rate_2026_06_01, label = paste0("+", number(change_pp, accuracy = 0.1), " pp")), hjust = -0.15, size = 3.2) +
  scale_x_continuous(labels = percent_format(accuracy = 1), limits = c(0.4, 0.93), expand = expansion(mult = c(0, 0.04))) +
  labs(
    title = "Working-age bulk billing rose in every state and territory",
    subtitle = "June 2025 (grey) to June 2026 (orange)",
    x = NULL, y = NULL
  )
Dumbbell chart comparing June 2025 and June 2026 working-age bulk-billing rates in each state and territory. Every jurisdiction increased, with the largest increase in the Northern Territory and the smallest in the Australian Capital Territory.
Figure 3: Source: AIHW monthly GP bulk-billing data. Ages 16–64; June 2026 is preliminary.

All-age rates were highest in the most disadvantaged areas before the change and rose across every SEIFA quintile. The changes were not monotonic by disadvantage: quintiles 2 and 3 rose most, while the most advantaged quintile recorded the smallest increase, at 3.5 points.

Code
seifa_change |>
  mutate(group = factor(group, levels = rev(group))) |>
  ggplot(aes(y = group)) +
  geom_segment(aes(x = june_2025, xend = june_2026, yend = group), colour = "grey72", linewidth = 1.5) +
  geom_point(aes(x = june_2025), colour = "#77838D", size = 3) +
  geom_point(aes(x = june_2026), colour = "#245A73", size = 3.5) +
  geom_text(aes(x = june_2026, label = paste0("+", number(change_pp, accuracy = 0.1), " pp")), hjust = -0.15, size = 3.2) +
  scale_x_continuous(labels = percent_format(accuracy = 1), limits = c(0.65, 0.96), expand = expansion(mult = c(0, 0.05))) +
  labs(
    title = "Bulk billing rose across every socioeconomic-area quintile",
    subtitle = "All ages; June 2025 (grey) to June 2026 (blue)",
    x = NULL, y = NULL
  )
Dumbbell chart comparing all-age bulk-billing rates across five socioeconomic-area quintiles in June 2025 and June 2026. Rates rose in every quintile, with the most disadvantaged areas remaining highest and the most advantaged areas recording the smallest increase.
Figure 4: Source: AIHW monthly GP bulk-billing data. These SEIFA aggregates cover all ages because the published workbook does not cross age with SEIFA. June 2026 is preliminary.

SEIFA describes the area where a service was delivered, not the circumstances of each patient. It is useful distributional context, not a causal test.

4. Working-age visits were 0.1% higher across January–June

The working-age billing shift did not translate into a clear, sustained rise in claimed visits. Across January–June 2026, reconstructed 16–64 visit volumes were 0.1% above the same months in 2025. The monthly pattern moved between increases and declines.

Code
working_age_visit_comparison |>
  ggplot(aes(calendar_month, change)) +
  geom_hline(yintercept = 0, colour = "grey55", linewidth = 0.7) +
  geom_col(aes(fill = change >= 0), width = 0.62, show.legend = FALSE) +
  geom_text(
    aes(y = if_else(change >= 0, change + 0.004, change - 0.004), label = percent(change, accuracy = 0.1)),
    vjust = if_else(working_age_visit_comparison$change >= 0, 0, 1), fontface = "bold", size = 3.6
  ) +
  scale_fill_manual(values = c(`FALSE` = "#77838D", `TRUE` = "#245A73")) +
  scale_y_continuous(labels = percent_format(accuracy = 1), limits = c(-0.065, 0.07)) +
  labs(
    title = paste0("Working-age visits were ", percent(working_age_visit_change, accuracy = 0.1), " higher across January-June"),
    subtitle = "Change from the same month in 2025, ages 16-64",
    x = NULL, y = NULL
  )
Bar chart of year-on-year changes in reconstructed working-age GP visits for January to June 2026. The six months together were approximately flat.
Figure 5: Source: AIHW monthly GP bulk-billing data. Total visits for ages 16–64 are reconstructed as bulk-billed services divided by the published bulk-billing rate. The final three months are preliminary.

The post-COVID time-series check is similarly inconclusive. The primary specification estimates an immediate -0.5% shift in working-age visits, with a 95% interval from -3.4% to 2.5%. A simpler step-only specification reaches the same broad conclusion, and the area-level check finds no clear relative visit gain in places with more scope to switch billing methods. With only eight post-policy months, these models are supporting checks rather than the headline evidence.

This does not mean access did not improve. Claims cannot show whether waiting times shortened, unmet need fell or continuity improved. It means the available volume evidence does not yet show a decisive access response.

5. Recorded patient contributions were lower—but the pattern was uneven

Important3.5 million more GP services were bulk billed

Across January–June 2026, 3.5 million more GP services were bulk billed than in the same six months of 2025. Recorded patient contributions were $92.5m lower.

These are observed all-age changes, not estimates of the policy’s causal effect. The total number and mix of claimed services also changed.

Across the March and June quarters, recorded patient contributions were $92.5m lower than in the same quarters in 2025. Average recorded contributions across all claimed GP services fell from $11.30 to $10.28.

The pattern was not evenly distributed. When SA3s are grouped by their pre-policy bulk-billing rate, the average fell in four of five groups and rose slightly in the group that began with the lowest bulk-billing rates and highest patient costs.

Code
patient_cost_by_area_group |>
  ggplot(aes(y = group)) +
  geom_segment(aes(x = average_per_service_Before, xend = average_per_service_After, yend = group), colour = "grey72", linewidth = 1.5) +
  geom_point(aes(x = average_per_service_Before), colour = "#77838D", size = 3) +
  geom_point(aes(x = average_per_service_After), colour = "#B8472D", size = 3.5) +
  geom_text(
    aes(
      x = pmax(average_per_service_Before, average_per_service_After),
      label = paste0(if_else(average_change > 0, "+$", "-$"), number(abs(average_change), accuracy = 0.01))
    ),
    hjust = -0.15, size = 3.2
  ) +
  scale_x_continuous(labels = dollar_format(accuracy = 1), limits = c(0, 25), expand = expansion(mult = c(0, 0.04))) +
  labs(
    title = "Average recorded contributions fell in four of five area groups",
    subtitle = "Average contribution per GP service; before (grey) and after (orange)",
    x = NULL, y = NULL
  )
Dumbbell chart comparing average patient contributions per GP service before and after the policy across five groups of SA3 areas. Costs fell in four groups but rose slightly in the group with the lowest baseline bulk-billing rate.
Figure 6: Source: Department of Health, Disability and Ageing quarterly Medicare statistics. All ages; classified SA3s; combined March and June quarters. Average patient contribution is total patient-billed fees less Medicare benefits, divided by all claimed services.

There is another important split: among the visits that were still patient billed, the average contribution rose from $51.94 to $60.57. In other words, many services moved out of patient billing, lowering the average across all care; patients who still paid faced a higher average bill.

Three-line takeaway

  • Billing: the policy period coincided with a large, nationwide rise in bulk billing, concentrated among 16–64-year-olds.
  • Access: working-age visit volumes were only modestly higher and inconsistent month to month; the models do not show a decisive increase.
  • Cost: 3.5 million more services were bulk billed and recorded patient contributions were $92.5m lower, but remaining patient-billed visits became more expensive on average.

Appendix

  • Bulk billing is measured per service, not per patient. It does not tell us how many people had every visit bulk billed.
  • The 16–64 band includes some concession-card holders who were already eligible before November 2025. It is a useful target-age proxy, not a treatment group.
  • The published AIHW workbook crosses age with state and LGA, but not with SEIFA. The SEIFA results are therefore all ages.
  • The Department’s SA3 patient-cost data are also all ages. Patient contributions are patient-billed fees less Medicare benefits; they do not include every cost of obtaining care.
  • AIHW marks April–June 2026 as preliminary. Results may be revised.
  • Claims measure delivered services. They cannot identify waiting time, unmet need, clinical need, provider supply or continuity of care.
  • The policy began on 1 November 2025. December 2025 mixes pre- and post-policy months, so the quarterly model excludes it.
  • Working-age visits are approximate. The public monthly workbook does not expose the age-specific denominator directly, so visits are reconstructed as bulk-billed services divided by a published rate rounded to three decimal places.
  • These are descriptive and associational comparisons. Other events at the same time may contribute to the observed changes.
Code
age_rate_summary |>
  transmute(
    `Age group` = group,
    `June 2025` = percent(rate_2025_06_01, accuracy = 0.1),
    `June 2026` = percent(rate_2026_06_01, accuracy = 0.1),
    `Change (pp)` = number(change_pp, accuracy = 0.1)
  ) |>
  kable(align = c("l", "r", "r", "r"))
Table 1
Age group June 2025 June 2026 Change (pp)
0-15 90.7% 91.7% 1.0
16-64 70.3% 78.3% 8.0
65+ 88.1% 89.5% 1.4
Code
state_working_age_rates |>
  arrange(desc(change_pp)) |>
  transmute(
    Jurisdiction = state,
    `June 2025` = percent(rate_2025_06_01, accuracy = 0.1),
    `June 2026` = percent(rate_2026_06_01, accuracy = 0.1),
    `Change (pp)` = number(change_pp, accuracy = 0.1)
  ) |>
  kable(align = c("l", "r", "r", "r"))
Table 2
Jurisdiction June 2025 June 2026 Change (pp)
NT 70.7% 88.6% 17.9
SA 64.1% 74.9% 10.8
Tas 63.5% 73.1% 9.6
Vic 72.0% 81.2% 9.2
Qld 67.3% 75.0% 7.7
WA 58.1% 65.7% 7.6
NSW 77.2% 83.5% 6.3
ACT 45.5% 49.1% 3.6
Code
seifa_change |>
  transmute(
    Quintile = group,
    `June 2025` = percent(june_2025, accuracy = 0.1),
    `June 2026` = percent(june_2026, accuracy = 0.1),
    `Change (pp)` = number(change_pp, accuracy = 0.1)
  ) |>
  kable(align = c("l", "r", "r", "r"))
Table 3
Quintile June 2025 June 2026 Change (pp)
Quintile 1 (most disadvantaged) 88.7% 93.3% 4.6
Quintile 2 81.9% 87.4% 5.5
Quintile 3 81.2% 86.4% 5.2
Quintile 4 75.4% 80.3% 4.9
Quintile 5 (most advantaged) 68.7% 72.2% 3.5
Code
working_age_visit_comparison |>
  transmute(
    Month = calendar_month,
    `Visits 2025` = comma(visits_2025, accuracy = 1),
    `Visits 2026` = comma(visits_2026, accuracy = 1),
    Change = percent(change, accuracy = 0.1)
  ) |>
  kable(align = c("l", "r", "r", "r"))
Table 4
Month Visits 2025 Visits 2026 Change
Jan 7,130,532 6,830,488 -4.2%
Feb 7,436,051 7,391,695 -0.6%
Mar 7,672,779 8,068,009 5.2%
Apr 7,226,067 7,429,022 2.8%
May 8,398,085 7,999,321 -4.7%
Jun 7,638,337 7,844,004 2.7%
Code
patient_cost_by_area_group |>
  transmute(
    `Baseline area group` = group,
    `Before: average per service` = dollar(average_per_service_Before, accuracy = 0.01),
    `After: average per service` = dollar(average_per_service_After, accuracy = 0.01),
    `Change per service` = dollar(average_change, accuracy = 0.01),
    `Change among patient-billed services` = dollar(patient_billed_average_change, accuracy = 0.01)
  ) |>
  kable(align = c("l", "r", "r", "r", "r"))
Table 5
Baseline area group Before: average per service After: average per service Change per service Change among patient-billed services
Q1 - lowest bulk billing $21.87 $22.48 $0.61 $6.54
Q2 $14.40 $13.59 -$0.81 $7.04
Q3 $11.16 $9.66 -$1.50 $8.59
Q4 $8.43 $6.75 -$1.68 $10.29
Q5 - highest bulk billing $4.24 $3.11 -$1.13 $12.63
Code
state_patient_costs |>
  arrange(average_change) |>
  transmute(
    Jurisdiction = state,
    `Before: average per service` = dollar(average_per_service_Before, accuracy = 0.01),
    `After: average per service` = dollar(average_per_service_After, accuracy = 0.01),
    `Change per service` = dollar(average_change, accuracy = 0.01),
    `Change in total contributions` = dollar(contribution_change / 1e6, suffix = "m", accuracy = 0.1)
  ) |>
  kable(align = c("l", "r", "r", "r", "r"))
Table 6
Jurisdiction Before: average per service After: average per service Change per service Change in total contributions
NT $11.35 $7.28 -$4.07 -$2.0m
Tas $15.97 $14.49 -$1.48 -$3.0m
Vic $10.74 $9.27 -$1.47 -$33.7m
SA $11.53 $10.47 -$1.05 -$7.1m
NSW $8.98 $8.09 -$0.89 -$28.7m
WA $14.99 $14.22 -$0.77 -$7.3m
Qld $12.45 $11.73 -$0.73 -$11.6m
ACT $27.74 $29.06 $1.32 $0.7m

The national billing-rate and working-age visit models cover January 2023 to June 2026, leaving eight post-policy months. The primary specifications include linear time, a November 2025 level indicator, a post-policy slope and calendar-month fixed effects. The visit sensitivity removes the post-policy slope. Confidence intervals use a Bartlett-kernel heteroskedasticity-and-autocorrelation-consistent covariance matrix with the automatic Newey–West lag rule. The short post window and number of estimated terms make these supporting checks only; they do not identify a causal effect.

Code
working_age_visit_models |>
  transmute(
    Specification = specification,
    `Immediate change` = percent(change_percent / 100, accuracy = 0.1),
    `HAC 95% interval` = paste0(
      percent(lower_percent / 100, accuracy = 0.1), " to ",
      percent(upper_percent / 100, accuracy = 0.1)
    )
  ) |>
  kable(align = c("l", "r", "r"))
Table 7
Specification Immediate change HAC 95% interval
Step and post-policy slope (primary) -0.5% -3.4% to 2.5%
Step only (sensitivity) 0.2% -1.6% to 2.1%

The area-level model is:

\[ \log(services_{it}) = \alpha_i + \lambda_t + \beta(Post_t \times Exposure_i) + \varepsilon_{it} \]

Exposure is an SA3’s non-bulk-billed share over the four clean quarters from December 2024 to September 2025, scaled so \(\beta\) represents a 10-percentage-point difference. The balanced panel contains 332 classified SA3s and two clean post-policy quarters. Standard errors are clustered by SA3.

Code
sa3_models |>
  transmute(
    Specification = specification,
    `Change per 10 pp higher exposure` = percent(change_percent / 100, accuracy = 0.1),
    `Clustered 95% interval` = paste0(
      percent(lower_percent / 100, accuracy = 0.1), " to ",
      percent(upper_percent / 100, accuracy = 0.1)
    )
  ) |>
  kable(align = c("l", "r", "r"))
Table 8
Specification Change per 10 pp higher exposure Clustered 95% interval
Unweighted (primary) -0.4% -0.9% to 0.0%
Baseline-service weighted -0.4% -0.9% to 0.2%

The monthly series is from the AIHW Medicare bulk-billing dashboard, with definitions in its technical notes. AIHW corrected the downloadable workbook on 31 August 2026 after rates had been rounded to whole percentages. The quarterly service and patient-cost data are from the Department’s June-quarter SA3 publication.

The Department’s commencement notice documents the 1 November 2025 expansion. The Department also publishes a separate per-patient bulk-billing dashboard.

The code validates coverage dates, panel completeness, rate ranges, numerator-denominator identities and SA3-to-national coverage before drawing charts or fitting models. Downloads are pinned to exact official files and SHA-256 checksums in sources.csv. Rendering with BLOG_REFRESH_DATA=true deliberately fetches the registered files again; a changed upstream file fails checksum validation before replacing the cache.

Code
source_registry |>
  transmute(
    Publisher = publisher,
    Dataset = paste0("[", dataset, "](", landing_url, ")"),
    `Source/revision date` = release_date,
    `Coverage end` = coverage_end,
    `SHA-256 prefix` = substr(sha256, 1, 12)
  ) |>
  kable(escape = FALSE, align = c("l", "l", "l", "l", "l"))
Table 9
Publisher Dataset Source/revision date Coverage end SHA-256 prefix
Australian Institute of Health and Welfare Medicare bulk-billing of GP attendances monthly data 2026-08-27 2026-06-30 1550dfc7e3a9
Australian Government Department of Health Disability and Ageing Medicare quarterly statistics statistical area SA3 summary June quarter 2025-26 2026-08-10 2026-06-30 9ab8c4260915

One source oddity is recorded rather than hidden: the Department’s June-quarter publication currently links to a file whose URL still says “March quarter”. The workbook itself contains 20 quarters through June 2026, and the parser stops if that coverage changes.