planningalerts-scrapers / melbourne

City of Melbourne Planning Applications


This is a scraper that runs on Morph. To get started see the documentation

Add any issues to https://github.com/planningalerts-scrapers/issues/issues

To run the scraper

bundle exec ruby scraper.rb

The planning permit register sits behind AWS WAF, which challenges requests that don't look like they came from a browser and challenges morph.io's US datacentre address even when they do. The scraper sends a browser User-Agent, and on morph.io MORPH_AUSTRALIAN_PROXY must be set to the url of an Australian proxy (http://morph:password@au.proxy.oaf.org.au:8888). Without it the run fails with Blocked by AWS WAF.

Expected output

Using Australian proxy... Fetching page 1: https://www.melbourne.vic.gov.au/planning-permit-register-search-results?std=20/08/2026&end=03/09/2026&page=1 found 10 applications on page 1 Fetching page 2: https://www.melbourne.vic.gov.au/planning-permit-register-search-results?std=20/08/2026&end=03/09/2026&page=2 found 2 applications on page 2 Fetching page 3: https://www.melbourne.vic.gov.au/planning-permit-register-search-results?std=20/08/2026&end=03/09/2026&page=3 found 0 applications on page 3 Finished - added 12 records

Execution time ~ 10 seconds.

Debugging

Set DEBUG (or MORPH_DEBUG in the morph.io scraper settings) to turn on debug output. Levels are cumulative:

| Level | Output | | --- | --- | | 1 | Proxy host and User-Agent in use, a line per request, the response status and size, and the response headers that matter when the register blocks us (x-amzn-waf-action, x-cache, age, via, x-amz-cf-pop). Every application saved, and every row skipped as malformed. | | 2 | All request and response headers, values over 200 characters truncated, and each record as it is saved. | | 3 | The first 2kB of each page body, and headers in full. |

A value that is not a number, such as DEBUG=true, means level 1.

DEBUG=1 bundle exec ruby scraper.rb

Level 1 is the useful one when the register returns nothing:

``` Fetching page 1: https://www.melbourne.vic.gov.au/planning-permit-register-search-results?std=20/08/2026&end=03/09/2026&page=1

GET /planning-permit-register-search-results?std=20/08/2026&end=03/09/2026&page=1 < 202 0 bytes < content-type: text/html; charset=UTF-8 < content-length: 0 < x-amzn-waf-action: challenge < x-cache: Error from cloudfront < via: 1.1 f3a04c27f130696f2f529b1a181d2d46.cloudfront.net (CloudFront) < x-amz-cf-pop: PER50-P3 ```

Requests are logged from Mechanize hooks, so redirects and the error responses that make agent.get raise are logged too. The proxy password is never printed.

To run style and coding checks

bundle exec rubocop

Contributors mlandauer henare andrewasfa AndreM101 simonzippy benrfairless

Last run completed successfully .

Console output of last run

Injecting configuration and compiling... Injecting scraper and running... Using Australian proxy... Fetching page 1: https://www.melbourne.vic.gov.au/planning-permit-register-search-results?std=21/09/2026&end=05/10/2026&page=1 found 10 applications on page 1 Fetching page 2: https://www.melbourne.vic.gov.au/planning-permit-register-search-results?std=21/09/2026&end=05/10/2026&page=2 found 5 applications on page 2 Fetching page 3: https://www.melbourne.vic.gov.au/planning-permit-register-search-results?std=21/09/2026&end=05/10/2026&page=3 found 0 applications on page 3 Finished - added 15 records

Data

Downloaded 8123 times by openaustralia LoveMyData mlandauer dcalde DevAppProject jesse-a-reilly tkrikke jimmyt650 repose-lecture TheZepto Manasaanand kouzi-sys equivalentideas AthleticoPrawn 538digital qs4v8thvrq-boop Shawnyu0217 GitHubMLee planometric-vic Leon-Carto tcassell94 davidyu37 PuZZleDucK mustafa0 Simsoi TornMarketing Jedwards157 cankei Stephen-bmrk eduardomontero jbjl krynens codemonkeyau Joel-Tan_valocity odnagroup MikeRalphson jonochang n1k0p0l

To download data sign in with GitHub

Download table (as CSV) Download SQLite database (1.56 MB) Use the API

rows 10 / 2569

info_url comment_url date_scraped council_reference date_received address description status
mailto:planning@melbourne.vic.gov.au
2021-12-08
TP-2021-796
2021-12-02
115 Millswyn Street South Yarra 3141
Alteration and addition to existing carport
mailto:planning@melbourne.vic.gov.au
2021-12-08
TP-2021-788
2021-12-01
2B Harris Street North Melbourne 3051
Demolition, buildings and works to construct one dwelling on a lot and on common property, and waive the car parking requirement of Clause 52.06
mailto:planning@melbourne.vic.gov.au
2021-12-08
TP-2021-789
2021-12-01
Basement 3 Scott Alley Melbourne 3000
Alteration to five dwelling windows, works, repairs and routine maintenance which changes the appearance of a heritage place
mailto:planning@melbourne.vic.gov.au
2021-12-08
TP-2021-790
2021-12-01
578-606 Bourke Street Melbourne 3000
Building and works to new mezzanine level
mailto:planning@melbourne.vic.gov.au
2021-12-08
TP-2021-793
2021-12-01
52-60 Villiers Street North Melbourne 3051
Construction and display of business identification signage
mailto:planning@melbourne.vic.gov.au
2021-12-08
TP-2021-783
2021-11-30
28-30 Cook Street Port Melbourne 3207
Rooftop garden area for Warehouse and Office staff
mailto:planning@melbourne.vic.gov.au
2021-12-08
TP-2021-784
2021-11-30
Proposed upgrade to an existing Telstra Small Cell on existing CitiPower Pole number 86054 Cnr St. Kilda Road and Linthingow Ave
mailto:planning@melbourne.vic.gov.au
2021-12-08
TP-2021-785
2021-11-30
Unit 1, 101 Hotham Street East Melbourne 3002
Partial demolition and external alterations associated with the replacement of a roof in a Heritage Overlay
mailto:planning@melbourne.vic.gov.au
2021-12-09
TP-2021-801
2021-12-06
River Esplanade Rear 50-102 Lorimer Street Docklands 3008
To construct a building or construct or carry out works associated with a vehicle and pedestrian access gate structure at the car park entry of an existing tower development
mailto:planning@melbourne.vic.gov.au
2021-12-09
TP-2021-802
2021-12-06
24 Lambeth Street Kensington 3031
Proposed alteration and extension to existing dwelling

Statistics

Average successful run time: 2 minutes

Total run time: 2 months

Total cpu time used: about 18 hours

Total disk space used: 1.67 MB

History

  • Auto ran revision 30a25e59 and completed successfully .
    15 records added, 11 records removed in the database
  • Auto ran revision 30a25e59 and completed successfully .
    11 records added, 11 records removed in the database
  • Auto ran revision 30a25e59 and completed successfully .
    12 records added, 12 records removed in the database
  • Auto ran revision 30a25e59 and completed successfully .
    12 records added, 11 records removed in the database
  • Auto ran revision 30a25e59 and completed successfully .
    15 records added, 10 records removed in the database
  • ...
  • Created on morph.io

Show complete history

Scraper code

Ruby

melbourne / scraper.rb